[RISCV] Add shrinkwrap test cases showing gaps in current impl
[llvm-project.git] / llvm / test / CodeGen / X86 / bittest-intrin.ll
blob09613889d9d4bee9ab713011c3323e9abb6c3fc4
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-windows-msvc19.11.0 | FileCheck %s
4 ; This matches the code produced by clang/lib/CodeGen/bittest-intrin.c
6 @sink = global i8 0, align 1
8 define void @test32(ptr %base, i32 %idx) {
9 ; CHECK-LABEL: test32:
10 ; CHECK:       # %bb.0: # %entry
11 ; CHECK-NEXT:    #APP
12 ; CHECK-NEXT:    btl %edx, (%rcx)
13 ; CHECK-NEXT:    #NO_APP
14 ; CHECK-NEXT:    setb sink(%rip)
15 ; CHECK-NEXT:    #APP
16 ; CHECK-NEXT:    btcl %edx, (%rcx)
17 ; CHECK-NEXT:    #NO_APP
18 ; CHECK-NEXT:    setb sink(%rip)
19 ; CHECK-NEXT:    #APP
20 ; CHECK-NEXT:    btrl %edx, (%rcx)
21 ; CHECK-NEXT:    #NO_APP
22 ; CHECK-NEXT:    setb sink(%rip)
23 ; CHECK-NEXT:    #APP
24 ; CHECK-NEXT:    btsl %edx, (%rcx)
25 ; CHECK-NEXT:    #NO_APP
26 ; CHECK-NEXT:    setb sink(%rip)
27 ; CHECK-NEXT:    #APP
28 ; CHECK-NEXT:    lock btrl %edx, (%rcx)
29 ; CHECK-NEXT:    #NO_APP
30 ; CHECK-NEXT:    setb sink(%rip)
31 ; CHECK-NEXT:    #APP
32 ; CHECK-NEXT:    lock btsl %edx, (%rcx)
33 ; CHECK-NEXT:    #NO_APP
34 ; CHECK-NEXT:    setb sink(%rip)
35 ; CHECK-NEXT:    #APP
36 ; CHECK-NEXT:    lock btsl %edx, (%rcx)
37 ; CHECK-NEXT:    #NO_APP
38 ; CHECK-NEXT:    setb sink(%rip)
39 ; CHECK-NEXT:    retq
40 entry:
41   %0 = tail call i8 asm sideeffect "btl $2, ($1)", "={@ccc},r,r,~{cc},~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %base, i32 %idx)
42   store volatile i8 %0, ptr @sink, align 1
43   %1 = tail call i8 asm sideeffect "btcl $2, ($1)", "={@ccc},r,r,~{cc},~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %base, i32 %idx)
44   store volatile i8 %1, ptr @sink, align 1
45   %2 = tail call i8 asm sideeffect "btrl $2, ($1)", "={@ccc},r,r,~{cc},~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %base, i32 %idx)
46   store volatile i8 %2, ptr @sink, align 1
47   %3 = tail call i8 asm sideeffect "btsl $2, ($1)", "={@ccc},r,r,~{cc},~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %base, i32 %idx)
48   store volatile i8 %3, ptr @sink, align 1
49   %4 = tail call i8 asm sideeffect "lock btrl $2, ($1)", "={@ccc},r,r,~{cc},~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %base, i32 %idx)
50   store volatile i8 %4, ptr @sink, align 1
51   %5 = tail call i8 asm sideeffect "lock btsl $2, ($1)", "={@ccc},r,r,~{cc},~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %base, i32 %idx)
52   store volatile i8 %5, ptr @sink, align 1
53   %6 = tail call i8 asm sideeffect "lock btsl $2, ($1)", "={@ccc},r,r,~{cc},~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %base, i32 %idx)
54   store volatile i8 %6, ptr @sink, align 1
55   ret void
58 ; Function Attrs: nounwind uwtable
59 define void @test64(ptr %base, i64 %idx) {
60 ; CHECK-LABEL: test64:
61 ; CHECK:       # %bb.0: # %entry
62 ; CHECK-NEXT:    #APP
63 ; CHECK-NEXT:    btq %rdx, (%rcx)
64 ; CHECK-NEXT:    #NO_APP
65 ; CHECK-NEXT:    setb sink(%rip)
66 ; CHECK-NEXT:    #APP
67 ; CHECK-NEXT:    btcq %rdx, (%rcx)
68 ; CHECK-NEXT:    #NO_APP
69 ; CHECK-NEXT:    setb sink(%rip)
70 ; CHECK-NEXT:    #APP
71 ; CHECK-NEXT:    btrq %rdx, (%rcx)
72 ; CHECK-NEXT:    #NO_APP
73 ; CHECK-NEXT:    setb sink(%rip)
74 ; CHECK-NEXT:    #APP
75 ; CHECK-NEXT:    btsq %rdx, (%rcx)
76 ; CHECK-NEXT:    #NO_APP
77 ; CHECK-NEXT:    setb sink(%rip)
78 ; CHECK-NEXT:    #APP
79 ; CHECK-NEXT:    lock btrq %rdx, (%rcx)
80 ; CHECK-NEXT:    #NO_APP
81 ; CHECK-NEXT:    setb sink(%rip)
82 ; CHECK-NEXT:    #APP
83 ; CHECK-NEXT:    lock btsq %rdx, (%rcx)
84 ; CHECK-NEXT:    #NO_APP
85 ; CHECK-NEXT:    setb sink(%rip)
86 ; CHECK-NEXT:    retq
87 entry:
88   %0 = tail call i8 asm sideeffect "btq $2, ($1)", "={@ccc},r,r,~{cc},~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %base, i64 %idx)
89   store volatile i8 %0, ptr @sink, align 1
90   %1 = tail call i8 asm sideeffect "btcq $2, ($1)", "={@ccc},r,r,~{cc},~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %base, i64 %idx)
91   store volatile i8 %1, ptr @sink, align 1
92   %2 = tail call i8 asm sideeffect "btrq $2, ($1)", "={@ccc},r,r,~{cc},~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %base, i64 %idx)
93   store volatile i8 %2, ptr @sink, align 1
94   %3 = tail call i8 asm sideeffect "btsq $2, ($1)", "={@ccc},r,r,~{cc},~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %base, i64 %idx)
95   store volatile i8 %3, ptr @sink, align 1
96   %4 = tail call i8 asm sideeffect "lock btrq $2, ($1)", "={@ccc},r,r,~{cc},~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %base, i64 %idx)
97   store volatile i8 %4, ptr @sink, align 1
98   %5 = tail call i8 asm sideeffect "lock btsq $2, ($1)", "={@ccc},r,r,~{cc},~{memory},~{dirflag},~{fpsr},~{flags}"(ptr %base, i64 %idx)
99   store volatile i8 %5, ptr @sink, align 1
100   ret void