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