c-rhodes added inline comments.

================
Comment at: clang/lib/Basic/Targets/AArch64.cpp:476-484
+  assert(LangOpts.VScaleMin && "vscale min must be greater than 0!");
+
+  if (LangOpts.VScaleMax)
     return std::pair<unsigned, unsigned>(LangOpts.VScaleMin,
                                          LangOpts.VScaleMax);
+
   if (hasFeature("sve"))
----------------
paulwalker-arm wrote:
> c-rhodes wrote:
> > paulwalker-arm wrote:
> > > This looks like a change of behaviour to me.  Previously the command line 
> > > flags would override the "sve" default but now that only happens when the 
> > > user specifies a maximum value.  That means the interface can no longer 
> > > be used to force truly width agnostic values.
> > > This looks like a change of behaviour to me.  Previously the command line 
> > > flags would override the "sve" default but now that only happens when the 
> > > user specifies a maximum value.  That means the interface can no longer 
> > > be used to force truly width agnostic values.
> > 
> > I think the issue here is the default of 1 for min would always trigger `if 
> > (LangOpts.VScaleMin || LangOpts.VScaleMax)` overriding the SVE default. 
> > Perhaps the default can be removed from the driver option and handled here, 
> > i.e.
> > 
> > ```
> > if (LangOpts.VScaleMin || LangOpts.VScaleMax)
> >     return std::pair<unsigned, unsigned>(LangOpts.VScaleMin ? 
> > LangOpts.VScaleMin : 1,
> >                                          LangOpts.VScaleMax);
> > ```
> > 
> > 
> Is this enough?  I'm not sure it'll work because `LangOpts.VScaleMin` 
> defaults to 1 and thus you'll always end up passing the first check, unless 
> the user specifically uses `-mvscale-min=0` which they cannot because that'll 
> result in `diag::err_cc1_unbounded_vscale_min`.
> 
> Do we need to link the LangOpt defaults to the attribute defaults?  I'm think 
> that having the LangOpts default to zero is a good way to represent "value is 
> unspecified" with regards to the `LangOpts.VScaleMin`.
> Is this enough?  I'm not sure it'll work because `LangOpts.VScaleMin` 
> defaults to 1 and thus you'll always end up passing the first check, unless 
> the user specifically uses `-mvscale-min=0` which they cannot because that'll 
> result in `diag::err_cc1_unbounded_vscale_min`.

It works, I removed the default from the driver option:

```diff --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 3b85b15739d4..3ec90d42d6ab 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -3338,7 +3338,7 @@ def msve_vector_bits_EQ : Joined<["-"], 
"msve-vector-bits=">, Group<m_aarch64_Fe
 def mvscale_min_EQ : Joined<["-"], "mvscale-min=">,
   Group<m_aarch64_Features_Group>, Flags<[NoXarchOption,CC1Option]>,
   HelpText<"Specify the vscale minimum. Defaults to \"1\". (AArch64 only)">,
-  MarshallingInfoInt<LangOpts<"VScaleMin">, "1">;
+  MarshallingInfoInt<LangOpts<"VScaleMin">>;```

and updated `clang/test/CodeGen/arm-sve-vector-bits-vscale-range.c`.

> Do we need to link the LangOpt defaults to the attribute defaults?  I'm think 
> that having the LangOpts default to zero is a good way to represent "value is 
> unspecified" with regards to the `LangOpts.VScaleMin`.

I'm not sure the LangOpt.VScaleMin default is having any affect, if it were the 
last CHECK-NONE test in `clang/test/CodeGen/arm-sve-vector-bits-vscale-range.c` 
wouldn't pass. I'll revert it back to zero anyway.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D113294/new/

https://reviews.llvm.org/D113294

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to