[clang] [clang] Allow MCTargetOptions to be parseable by -mllvm. (PR #66347)

via cfe-commits cfe-commits at lists.llvm.org
Thu Sep 14 02:23:40 PDT 2023


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang
            
<details>
<summary>Changes</summary>
The cl::opt used by MCTargetOptions are not created until RegisterMCTargetOptionsFlags is instantiated. Due to this deferral the compiler driver -mllvm path is unable to parse flags such as --no-deprecated-warn which work properly in llvm-mc.

Move the instantiation into the frontend and cc1as and propagate the results into MCTargetOptions.
--
Full diff: https://github.com/llvm/llvm-project/pull/66347.diff

4 Files Affected:

- (added) clang/test/Misc/cc1as-mllvm-mc-options.s (+12) 
- (added) clang/test/Misc/compiler-mllvm-mc-options.c (+12) 
- (modified) clang/tools/driver/cc1_main.cpp (+4) 
- (modified) clang/tools/driver/cc1as_main.cpp (+2-1) 


<pre>
diff --git a/clang/test/Misc/cc1as-mllvm-mc-options.s b/clang/test/Misc/cc1as-mllvm-mc-options.s
new file mode 100644
index 000000000000000..189e3c546b8fd94
--- /dev/null
+++ b/clang/test/Misc/cc1as-mllvm-mc-options.s
@@ -0,0 +1,12 @@
+// Ensure MCTargetOptionsCommandFlags are parsable under -mllvm
+// RUN: %clang -cc1as -mllvm --help %s | FileCheck %s
+// CHECK: --asm-show-inst
+// CHECK: --dwarf-version
+// CHECK: --dwarf64
+// CHECK: --emit-dwarf-unwind
+// CHECK: --fatal-warnings
+// CHECK: --incremental-linker-compatible
+// CHECK: --mc-relax-all
+// CHECK: --no-deprecated-warn
+// CHECK: --no-type-check
+// CHECK: --no-warn
diff --git a/clang/test/Misc/compiler-mllvm-mc-options.c b/clang/test/Misc/compiler-mllvm-mc-options.c
new file mode 100644
index 000000000000000..10b2a1172968d66
--- /dev/null
+++ b/clang/test/Misc/compiler-mllvm-mc-options.c
@@ -0,0 +1,12 @@
+// Ensure MCTargetOptionsCommandFlags are parsable under -mllvm
+// RUN: %clang -mllvm --help -c %s -o /dev/null | FileCheck %s
+// CHECK: --asm-show-inst
+// CHECK: --dwarf-version
+// CHECK: --dwarf64
+// CHECK: --emit-dwarf-unwind
+// CHECK: --fatal-warnings
+// CHECK: --incremental-linker-compatible
+// CHECK: --mc-relax-all
+// CHECK: --no-deprecated-warn
+// CHECK: --no-type-check
+// CHECK: --no-warn
diff --git a/clang/tools/driver/cc1_main.cpp b/clang/tools/driver/cc1_main.cpp
index 9e7f8679b4cbdff..cc7089842a60c0d 100644
--- a/clang/tools/driver/cc1_main.cpp
+++ b/clang/tools/driver/cc1_main.cpp
@@ -28,6 +28,7 @@
 #include &quot;llvm/ADT/Statistic.h&quot;
 #include &quot;llvm/Config/llvm-config.h&quot;
 #include &quot;llvm/LinkAllPasses.h&quot;
+#include &quot;llvm/MC/MCTargetOptionsCommandFlags.h&quot;
 #include &quot;llvm/MC/TargetRegistry.h&quot;
 #include &quot;llvm/Option/Arg.h&quot;
 #include &quot;llvm/Option/ArgList.h&quot;
@@ -53,6 +54,9 @@
 using namespace clang;
 using namespace llvm::opt;
 
+// Initialize MC Target option flags (for -mllvm)
+static llvm::mc::RegisterMCTargetOptionsFlags MOF;
+
 //===----------------------------------------------------------------------===//
 // Main driver
 //===----------------------------------------------------------------------===//
diff --git a/clang/tools/driver/cc1as_main.cpp b/clang/tools/driver/cc1as_main.cpp
index 3c5926073f026a6..3eb7c8c555bf186 100644
--- a/clang/tools/driver/cc1as_main.cpp
+++ b/clang/tools/driver/cc1as_main.cpp
@@ -36,6 +36,7 @@
 #include &quot;llvm/MC/MCStreamer.h&quot;
 #include &quot;llvm/MC/MCSubtargetInfo.h&quot;
 #include &quot;llvm/MC/MCTargetOptions.h&quot;
+#include &quot;llvm/MC/MCTargetOptionsCommandFlags.h&quot;
 #include &quot;llvm/MC/TargetRegistry.h&quot;
 #include &quot;llvm/Option/Arg.h&quot;
 #include &quot;llvm/Option/ArgList.h&quot;
@@ -408,7 +409,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &amp;Opts,
   std::unique_ptr&lt;MCRegisterInfo&gt; MRI(TheTarget-&gt;createMCRegInfo(Opts.Triple));
   assert(MRI &amp;&amp; &quot;Unable to create target register info!&quot;);
 
-  MCTargetOptions MCOptions;
+  MCTargetOptions MCOptions = llvm::mc::InitMCTargetOptionsFromFlags();
   MCOptions.EmitDwarfUnwind = Opts.EmitDwarfUnwind;
   MCOptions.EmitCompactUnwindNonCanonical = Opts.EmitCompactUnwindNonCanonical;
   MCOptions.AsSecureLogFile = Opts.AsSecureLogFile;
</pre>
</details>


https://github.com/llvm/llvm-project/pull/66347


More information about the cfe-commits mailing list