[all-commits] [llvm/llvm-project] 7c2d51: [asm] Allow labels as operands in intel asm syntax
Nico Weber via All-commits
all-commits at lists.llvm.org
Mon Nov 22 08:49:59 PST 2021
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 7c2d51474aae87635de8f9ecbcdf622d376269a9
https://github.com/llvm/llvm-project/commit/7c2d51474aae87635de8f9ecbcdf622d376269a9
Author: Nico Weber <thakis at chromium.org>
Date: 2021-11-22 (Mon, 22 Nov 2021)
Changed paths:
M llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
M llvm/test/CodeGen/X86/asm-block-labels.ll
Log Message:
-----------
[asm] Allow labels as operands in intel asm syntax
This makes a line in llvm/test/CodeGen/X86/asm-block-labels.ll pass
with `asm inteldialect` too.
I don't know if this is something one can hit in practice with inline
asm. The test is from 2007 (4646aa3e337aa) but in 2009 blockaddr was
introduced and e.g. `__asm__ __volatile__("brl %0" :: "X"(&&foo) : "memory");`
compiles to
call void asm sideeffect "brl $0", "X,..."(i8* blockaddress(@func, %1))
nowadays (thanks to jrtc27 for that example!).
(6c4d255bf3d64 switched clang to blockaddress on an opt-in basis,
e4801f7844bb added docs for it, 31b132c0b781 added IR support.)
I half-heartedly tried to build clang 2.8 locally, but it didn't
just build. And 2.8 didn't have a prebuilt clang binary yet.
The motivation is to make EmitGCCInlineAsmStr() and EmitMSInlineAsmStr()
more alike, and maybe we should delete this code form EmitGCCInlineAsmStr()
instead. But since it's just 3 lines and it's reachable from LLVM IR,
let's do the safer thing for now.
Differential Revision: https://reviews.llvm.org/D114329
More information about the All-commits
mailing list