================
@@ -3167,3 +3167,29 @@ void tools::handleInterchangeLoopsArgs(const ArgList
&Args,
options::OPT_fno_loop_interchange, EnableInterchange))
CmdArgs.push_back("-floop-interchange");
}
+
+std::optional<StringRef> tools::ParseMPreferVectorWidthOption(
+ clang::DiagnosticsEngine &Diags, const llvm::opt::ArgList &Args,
+ ArgStringList &CmdArgs, bool isCompilerDriver) {
+ // If this was invoked by the Compiler Driver, we pass through the option
+ // as-is. Otherwise, if this is the Frontend Driver, we want just the value.
+ StringRef Out = isCompilerDriver ? "-mprefer-vector-width=" : "";
+
+ Arg *A =
Args.getLastArg(clang::driver::options::OPT_mprefer_vector_width_EQ);
+ if (!A)
+ return std::nullopt;
+
+ StringRef Value = A->getValue();
+ unsigned Width __attribute((uninitialized));
+
+ // Only "none" and Integer values are accepted by
+ // -mprefer-vector-width=<value>.
+ if (Value != "none" && Value.getAsInteger(10, Width)) {
+ Diags.Report(clang::diag::err_drv_invalid_value)
+ << A->getOption().getName() << Value;
+ return std::nullopt;
+ }
+
+ CmdArgs.push_back(Args.MakeArgString(Out + Value));
----------------
tarunprabhu wrote:
It may be better to always return just the value here, instead of `option +
value`. We can still add to `CmdArgs` if `isCompilerDriver=true`. That way, we
don't have to make the change in the caller-side. The caller can just ignore
the return value. In the case where `isCompilerDriver=false`, we can initialize
the options object with the return value as appropriate. Does that sound
reasonable?
https://github.com/llvm/llvm-project/pull/142800
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits