HomePhabricator

clang support gnu asm goto. Syntax: asm [volatile] goto ( AssemblerTemplate…

Authored by jyu2 on May 29 2019, 6:05 PM.

Description

clang support gnu asm goto. Syntax: asm [volatile] goto ( AssemblerTemplate : : InputOperands : Clobbers : GotoLabels)

https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html

New llvm IR is "callbr" for inline asm goto instead "call" for inline asm
For:
asm goto("testl %0, %0; jne %l1;" :: "r"(cond)::label_true, loop);
IR:
callbr void asm sideeffect "testl $0, $0; jne ${1:l};", "r,X,X,~{dirflag},~{fpsr},~{flags}"(i32 %0, i8* blockaddress(@foo, %label_true), i8* blockaddress(@foo, %loop)) #1

to label %asm.fallthrough [label %label_true, label %loop], !srcloc !3

asm.fallthrough:

Compiler need to generate:
1> a dummy constarint 'X' for each label.
2> an unique fallthrough label for each asm goto stmt " asm.fallthrough%number".

Diagnostic
1> duplicate asm operand name are used in output, input and label.
2> goto out of scope.

llvm-svn: 362045

Details

Committed
jyu2May 29 2019, 6:05 PM
Parents
rG192dd7df2f31: [crashlog] Add a missing call to decode.
Branches
Unknown
Tags
Unknown
Reverted By
rGd0f34fd19850: Revert "clang support gnu asm goto."