• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s --check-prefix=CHECK-64
2; RUN: llc < %s -mtriple=x86_64-win32 | FileCheck %s --check-prefix=CHECK-64
3; RUN: llc < %s -march=x86 | FileCheck %s --check-prefix=CHECK-32
4
5; CHECK-64: g64xh:
6; CHECK-64:   testb $8, {{%ah|%ch}}
7; CHECK-64:   ret
8; CHECK-32: g64xh:
9; CHECK-32:   testb $8, %ah
10; CHECK-32:   ret
11define void @g64xh(i64 inreg %x) nounwind {
12  %t = and i64 %x, 2048
13  %s = icmp eq i64 %t, 0
14  br i1 %s, label %yes, label %no
15
16yes:
17  call void @bar()
18  ret void
19no:
20  ret void
21}
22; CHECK-64: g64xl:
23; CHECK-64:   testb $8, [[A0L:%dil|%cl]]
24; CHECK-64:   ret
25; CHECK-32: g64xl:
26; CHECK-32:   testb $8, %al
27; CHECK-32:   ret
28define void @g64xl(i64 inreg %x) nounwind {
29  %t = and i64 %x, 8
30  %s = icmp eq i64 %t, 0
31  br i1 %s, label %yes, label %no
32
33yes:
34  call void @bar()
35  ret void
36no:
37  ret void
38}
39; CHECK-64: g32xh:
40; CHECK-64:   testb $8, {{%ah|%ch}}
41; CHECK-64:   ret
42; CHECK-32: g32xh:
43; CHECK-32:   testb $8, %ah
44; CHECK-32:   ret
45define void @g32xh(i32 inreg %x) nounwind {
46  %t = and i32 %x, 2048
47  %s = icmp eq i32 %t, 0
48  br i1 %s, label %yes, label %no
49
50yes:
51  call void @bar()
52  ret void
53no:
54  ret void
55}
56; CHECK-64: g32xl:
57; CHECK-64:   testb $8, [[A0L]]
58; CHECK-64:   ret
59; CHECK-32: g32xl:
60; CHECK-32:   testb $8, %al
61; CHECK-32:   ret
62define void @g32xl(i32 inreg %x) nounwind {
63  %t = and i32 %x, 8
64  %s = icmp eq i32 %t, 0
65  br i1 %s, label %yes, label %no
66
67yes:
68  call void @bar()
69  ret void
70no:
71  ret void
72}
73; CHECK-64: g16xh:
74; CHECK-64:   testb $8, {{%ah|%ch}}
75; CHECK-64:   ret
76; CHECK-32: g16xh:
77; CHECK-32:   testb $8, %ah
78; CHECK-32:   ret
79define void @g16xh(i16 inreg %x) nounwind {
80  %t = and i16 %x, 2048
81  %s = icmp eq i16 %t, 0
82  br i1 %s, label %yes, label %no
83
84yes:
85  call void @bar()
86  ret void
87no:
88  ret void
89}
90; CHECK-64: g16xl:
91; CHECK-64:   testb $8, [[A0L]]
92; CHECK-64:   ret
93; CHECK-32: g16xl:
94; CHECK-32:   testb $8, %al
95; CHECK-32:   ret
96define void @g16xl(i16 inreg %x) nounwind {
97  %t = and i16 %x, 8
98  %s = icmp eq i16 %t, 0
99  br i1 %s, label %yes, label %no
100
101yes:
102  call void @bar()
103  ret void
104no:
105  ret void
106}
107; CHECK-64: g64x16:
108; CHECK-64:   testw $-32640, %[[A0W:di|cx]]
109; CHECK-64:   ret
110; CHECK-32: g64x16:
111; CHECK-32:   testw $-32640, %ax
112; CHECK-32:   ret
113define void @g64x16(i64 inreg %x) nounwind {
114  %t = and i64 %x, 32896
115  %s = icmp eq i64 %t, 0
116  br i1 %s, label %yes, label %no
117
118yes:
119  call void @bar()
120  ret void
121no:
122  ret void
123}
124; CHECK-64: g32x16:
125; CHECK-64:   testw $-32640, %[[A0W]]
126; CHECK-64:   ret
127; CHECK-32: g32x16:
128; CHECK-32:   testw $-32640, %ax
129; CHECK-32:   ret
130define void @g32x16(i32 inreg %x) nounwind {
131  %t = and i32 %x, 32896
132  %s = icmp eq i32 %t, 0
133  br i1 %s, label %yes, label %no
134
135yes:
136  call void @bar()
137  ret void
138no:
139  ret void
140}
141; CHECK-64: g64x32:
142; CHECK-64:   testl $268468352, %e[[A0W]]
143; CHECK-64:   ret
144; CHECK-32: g64x32:
145; CHECK-32:   testl $268468352, %eax
146; CHECK-32:   ret
147define void @g64x32(i64 inreg %x) nounwind {
148  %t = and i64 %x, 268468352
149  %s = icmp eq i64 %t, 0
150  br i1 %s, label %yes, label %no
151
152yes:
153  call void @bar()
154  ret void
155no:
156  ret void
157}
158
159declare void @bar()
160