diff options
author | Fangrui Song <i@maskray.me> | 2024-09-24 15:59:33 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-24 15:59:33 -0700 |
commit | 4a9da96dc68d878893399210888a03117b39b802 (patch) | |
tree | 55da41c8468f2aadae9d244762379b1484ecb36c /clang/lib/CodeGen/BackendUtil.cpp | |
parent | 4c4fb6ada7a168e5129a22efb4d604bb6fc60b17 (diff) | |
download | llvm-4a9da96dc68d878893399210888a03117b39b802.zip llvm-4a9da96dc68d878893399210888a03117b39b802.tar.gz llvm-4a9da96dc68d878893399210888a03117b39b802.tar.bz2 |
[clang] Add cc1 --output-asm-variant= to set output syntax
2fcaa549a824efeb56e807fcf750a56bf985296b (2010) added cc1as option
`-output-asm-variant` (untested) to set the output syntax.
`clang -cc1as -filetype asm -output-asm-variant 1` allows AT&T input and
Intel output (`AssemblerDialect` is also used by non-x86 targets).
This patch renames the cc1as option (to avoid collision with -o) and
makes it available for cc1 to set output syntax. This allows different
input & output syntax:
```
echo 'asm("mov $1, %eax");' | clang -xc - -S -o - -Xclang --output-asm-variant=1
```
Note: `AsmWriterFlavor` (with a misleading name), used to initialize
MCAsmInfo::AssemblerDialect, is primarily used for assembly input, not
for output.
Therefore,
`echo 'asm("mov $1, %eax");' | clang -x c - -mllvm --x86-asm-syntax=intel -S -o -`,
which achieves a similar goal before Clang 19, was unintended.
Close #109157
Pull Request: https://github.com/llvm/llvm-project/pull/109360
Diffstat (limited to 'clang/lib/CodeGen/BackendUtil.cpp')
-rw-r--r-- | clang/lib/CodeGen/BackendUtil.cpp | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index fa49763..916c92a 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -509,6 +509,8 @@ static bool initTargetOptions(DiagnosticsEngine &Diags, Options.MCOptions.X86RelaxRelocations = CodeGenOpts.X86RelaxRelocations; Options.MCOptions.CompressDebugSections = CodeGenOpts.getCompressDebugSections(); + if (CodeGenOpts.OutputAsmVariant != 3) // 3 (default): not specified + Options.MCOptions.OutputAsmVariant = CodeGenOpts.OutputAsmVariant; Options.MCOptions.ABIName = TargetOpts.ABI; for (const auto &Entry : HSOpts.UserEntries) if (!Entry.IsFramework && |