[x86/asm] Let EmitMSInlineAsmStr() handle variants too
authorNico Weber <thakis@chromium.org>
Mon, 15 Nov 2021 20:27:42 +0000 (15:27 -0500)
committerNico Weber <thakis@chromium.org>
Wed, 17 Nov 2021 18:31:59 +0000 (13:31 -0500)
commitbf834b26292e58d86bc289a3eb0c736c400e600a
tree4e5bc0107f2a14c7bb6ea32da5e99284356b396b
parent0274be28d7f8266e441a45adc1a208fc0ca04dd4
[x86/asm] Let EmitMSInlineAsmStr() handle variants too

This is preparation for D113707, where I want to make `-masm=intel`
emit `asm inteldialect` instructions.

`{movq %rbx, %rax|mov rax, rbx}` is supposed to evaluate to the bit
between { and | for att and to the bit between | and } for intel.
Since intel will become `asm inteldialect`, which alls EmitMSInlineAsmStr(),
EmitMSInlineAsmStr() has to support variants as well.

(clang translates `{...|...}` to `$(...$|...$)`. I'm not sure why
it doesn't just send along only the first `...` or the second `...`
to LLVM, but given the notes in PR23933 let's not do a big
reorganization in this codepath.)

Differential Revision: https://reviews.llvm.org/D113932
llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
llvm/test/CodeGen/X86/asm-dialect.ll