xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/inline-asm-flag-clobber.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=x86-64 -no-integrated-as < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; PR3701
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdefine i64 @t(i64* %arg) nounwind {
5*9880d681SAndroid Build Coastguard Worker        br i1 true, label %1, label %5
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker; <label>:1             ; preds = %0
8*9880d681SAndroid Build Coastguard Worker        %2 = icmp eq i64* null, %arg            ; <i1> [#uses=1]
9*9880d681SAndroid Build Coastguard Worker        %3 = tail call i64* asm sideeffect "movl %fs:0,$0", "=r,~{dirflag},~{fpsr},~{flags}"() nounwind         ; <%struct.thread*> [#uses=0]
10*9880d681SAndroid Build Coastguard Worker; CHECK: test
11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: j
12*9880d681SAndroid Build Coastguard Worker        br i1 %2, label %4, label %5
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker; <label>:4             ; preds = %1
15*9880d681SAndroid Build Coastguard Worker        ret i64 1
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker; <label>:5             ; preds = %1
18*9880d681SAndroid Build Coastguard Worker        ret i64 0
19*9880d681SAndroid Build Coastguard Worker}
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker; Make sure that we translate this to the bswap intrinsic which lowers down without the
22*9880d681SAndroid Build Coastguard Worker; inline assembly.
23*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: #APP
24*9880d681SAndroid Build Coastguard Workerdefine i32 @s(i32 %argc, i8** nocapture %argv) unnamed_addr nounwind {
25*9880d681SAndroid Build Coastguard Workerentry:
26*9880d681SAndroid Build Coastguard Worker  %0 = trunc i32 %argc to i16
27*9880d681SAndroid Build Coastguard Worker  %asmtmp = tail call i16 asm "rorw $$8, ${0:w}", "=r,0,~{fpsr},~{flags},~{cc}"(i16 %0) nounwind, !srcloc !0
28*9880d681SAndroid Build Coastguard Worker  %1 = zext i16 %asmtmp to i32
29*9880d681SAndroid Build Coastguard Worker  ret i32 %1
30*9880d681SAndroid Build Coastguard Worker}
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Worker!0 = !{i64 935930}
33