Fixed some bugs in register stack pass.
[llvm/zpu.git] / test / CodeGen / X86 / test-shrink.ll
blob1d636930641f8aed372e655cd96c92b09963221f
1 ; RUN: llc < %s -march=x86-64 | FileCheck %s --check-prefix=CHECK-64
2 ; RUN: llc < %s -march=x86 | FileCheck %s --check-prefix=CHECK-32
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
10 define 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
15 yes:
16   call void @bar()
17   ret void
18 no:
19   ret void
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
27 define 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
32 yes:
33   call void @bar()
34   ret void
35 no:
36   ret void
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
44 define 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
49 yes:
50   call void @bar()
51   ret void
52 no:
53   ret void
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
61 define 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
66 yes:
67   call void @bar()
68   ret void
69 no:
70   ret void
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
78 define 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
83 yes:
84   call void @bar()
85   ret void
86 no:
87   ret void
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
95 define 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
100 yes:
101   call void @bar()
102   ret void
104   ret void
106 ; CHECK-64: g64x16:
107 ; CHECK-64:   testw $-32640, %di
108 ; CHECK-64:   ret
109 ; CHECK-32: g64x16:
110 ; CHECK-32:   testw $-32640, %ax
111 ; CHECK-32:   ret
112 define 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
117 yes:
118   call void @bar()
119   ret void
121   ret void
123 ; CHECK-64: g32x16:
124 ; CHECK-64:   testw $-32640, %di
125 ; CHECK-64:   ret
126 ; CHECK-32: g32x16:
127 ; CHECK-32:   testw $-32640, %ax
128 ; CHECK-32:   ret
129 define 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
134 yes:
135   call void @bar()
136   ret void
138   ret void
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
146 define 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
151 yes:
152   call void @bar()
153   ret void
155   ret void
158 declare void @bar()