Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(425)

Side by Side Diff: tests_lit/llvm2ice_tests/8bit.pnacl.ll

Issue 624263002: emitIAS for icmp, and test, movss-reg, movq, movups, storep, storeq, tighten some of the Xmm ops (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: stuff Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 ; This tries to be a comprehensive test of i8 operations. 1 ; This tries to be a comprehensive test of i8 operations.
2 2
3 ; RUN: %p2i -i %s --args -O2 --verbose none \ 3 ; RUN: %p2i -i %s --args -O2 --verbose none \
4 ; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \ 4 ; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \
5 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s 5 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s
6 ; RUN: %p2i -i %s --args -Om1 --verbose none \ 6 ; RUN: %p2i -i %s --args -Om1 --verbose none \
7 ; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \ 7 ; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \
8 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s 8 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s
9 ; RUN: %p2i -i %s --args --verbose none | FileCheck --check-prefix=ERRORS %s 9 ; RUN: %p2i -i %s --args --verbose none | FileCheck --check-prefix=ERRORS %s
10 ; RUN: %p2i -i %s --insts | %szdiff %s | FileCheck --check-prefix=DUMP %s
11 10
12 define internal i32 @add8Bit(i32 %a, i32 %b) { 11 define internal i32 @add8Bit(i32 %a, i32 %b) {
13 entry: 12 entry:
14 %a_8 = trunc i32 %a to i8 13 %a_8 = trunc i32 %a to i8
15 %b_8 = trunc i32 %b to i8 14 %b_8 = trunc i32 %b to i8
16 %add = add i8 %b_8, %a_8 15 %add = add i8 %b_8, %a_8
17 %ret = zext i8 %add to i32 16 %ret = zext i8 %add to i32
18 ret i32 %ret 17 ret i32 %ret
19 } 18 }
20 ; CHECK-LABEL: add8Bit 19 ; CHECK-LABEL: add8Bit
21 ; CHECK: add {{[abcd]l}} 20 ; CHECK: add {{[abcd]l}}
22 21
23 define internal i32 @add8BitConst(i32 %a, i32 %b) { 22 define internal i32 @add8BitConst(i32 %a) {
24 entry: 23 entry:
25 %a_8 = trunc i32 %a to i8 24 %a_8 = trunc i32 %a to i8
26 %add = add i8 %a_8, 123 25 %add = add i8 %a_8, 123
27 %ret = zext i8 %add to i32 26 %ret = zext i8 %add to i32
28 ret i32 %ret 27 ret i32 %ret
29 } 28 }
30 ; CHECK-LABEL: add8BitConst 29 ; CHECK-LABEL: add8BitConst
31 ; CHECK: add {{[abcd]l}} 30 ; CHECK: add {{[abcd]l}}
32 31
33 define internal i32 @sub8Bit(i32 %a, i32 %b) { 32 define internal i32 @sub8Bit(i32 %a, i32 %b) {
34 entry: 33 entry:
35 %a_8 = trunc i32 %a to i8 34 %a_8 = trunc i32 %a to i8
36 %b_8 = trunc i32 %b to i8 35 %b_8 = trunc i32 %b to i8
37 %sub = sub i8 %b_8, %a_8 36 %sub = sub i8 %b_8, %a_8
38 %ret = zext i8 %sub to i32 37 %ret = zext i8 %sub to i32
39 ret i32 %ret 38 ret i32 %ret
40 } 39 }
41 ; CHECK-LABEL: sub8Bit 40 ; CHECK-LABEL: sub8Bit
42 ; XCHECK: sub {{[abcd]l}} 41 ; XCHECK: sub {{[abcd]l}}
43 42
44 define internal i32 @sub8BitConst(i32 %a, i32 %b) { 43 define internal i32 @sub8BitConst(i32 %a) {
45 entry: 44 entry:
46 %a_8 = trunc i32 %a to i8 45 %a_8 = trunc i32 %a to i8
47 %sub = sub i8 %a_8, 123 46 %sub = sub i8 %a_8, 123
48 %ret = zext i8 %sub to i32 47 %ret = zext i8 %sub to i32
49 ret i32 %ret 48 ret i32 %ret
50 } 49 }
51 ; CHECK-LABEL: sub8BitConst 50 ; CHECK-LABEL: sub8BitConst
52 ; XCHECK: sub {{[abcd]l}} 51 ; XCHECK: sub {{[abcd]l}}
53 52
54 define internal i32 @mul8Bit(i32 %a, i32 %b) { 53 define internal i32 @mul8Bit(i32 %a, i32 %b) {
55 entry: 54 entry:
56 %a_8 = trunc i32 %a to i8 55 %a_8 = trunc i32 %a to i8
57 %b_8 = trunc i32 %b to i8 56 %b_8 = trunc i32 %b to i8
58 %mul = mul i8 %b_8, %a_8 57 %mul = mul i8 %b_8, %a_8
59 %ret = zext i8 %mul to i32 58 %ret = zext i8 %mul to i32
60 ret i32 %ret 59 ret i32 %ret
61 } 60 }
62 ; CHECK-LABEL: mul8Bit 61 ; CHECK-LABEL: mul8Bit
63 ; CHECK: mul {{[abcd]l|byte ptr}} 62 ; CHECK: mul {{[abcd]l|byte ptr}}
64 63
65 define internal i32 @mul8BitConst(i32 %a, i32 %b) { 64 define internal i32 @mul8BitConst(i32 %a) {
66 entry: 65 entry:
67 %a_8 = trunc i32 %a to i8 66 %a_8 = trunc i32 %a to i8
68 %mul = mul i8 %a_8, 56 67 %mul = mul i8 %a_8, 56
69 %ret = zext i8 %mul to i32 68 %ret = zext i8 %mul to i32
70 ret i32 %ret 69 ret i32 %ret
71 } 70 }
72 ; CHECK-LABEL: mul8BitConst 71 ; CHECK-LABEL: mul8BitConst
73 ; 8-bit imul only accepts r/m, not imm 72 ; 8-bit imul only accepts r/m, not imm
74 ; CHECK: mov {{.*}}, 56 73 ; CHECK: mov {{.*}}, 56
75 ; CHECK: mul {{[abcd]l|byte ptr}} 74 ; CHECK: mul {{[abcd]l|byte ptr}}
76 75
77 define internal i32 @udiv8Bit(i32 %a, i32 %b) { 76 define internal i32 @udiv8Bit(i32 %a, i32 %b) {
78 entry: 77 entry:
79 %a_8 = trunc i32 %a to i8 78 %a_8 = trunc i32 %a to i8
80 %b_8 = trunc i32 %b to i8 79 %b_8 = trunc i32 %b to i8
81 %udiv = udiv i8 %b_8, %a_8 80 %udiv = udiv i8 %b_8, %a_8
82 %ret = zext i8 %udiv to i32 81 %ret = zext i8 %udiv to i32
83 ret i32 %ret 82 ret i32 %ret
84 } 83 }
85 ; CHECK-LABEL: udiv8Bit 84 ; CHECK-LABEL: udiv8Bit
86 ; CHECK: div {{[abcd]l|byte ptr}} 85 ; CHECK: div {{[abcd]l|byte ptr}}
87 86
88 define internal i32 @udiv8BitConst(i32 %a, i32 %b) { 87 define internal i32 @udiv8BitConst(i32 %a) {
89 entry: 88 entry:
90 %a_8 = trunc i32 %a to i8 89 %a_8 = trunc i32 %a to i8
91 %udiv = udiv i8 %a_8, 123 90 %udiv = udiv i8 %a_8, 123
92 %ret = zext i8 %udiv to i32 91 %ret = zext i8 %udiv to i32
93 ret i32 %ret 92 ret i32 %ret
94 } 93 }
95 ; CHECK-LABEL: udiv8BitConst 94 ; CHECK-LABEL: udiv8BitConst
96 ; CHECK: div {{[abcd]l|byte ptr}} 95 ; CHECK: div {{[abcd]l|byte ptr}}
97 96
98 define internal i32 @urem8Bit(i32 %a, i32 %b) { 97 define internal i32 @urem8Bit(i32 %a, i32 %b) {
99 entry: 98 entry:
100 %a_8 = trunc i32 %a to i8 99 %a_8 = trunc i32 %a to i8
101 %b_8 = trunc i32 %b to i8 100 %b_8 = trunc i32 %b to i8
102 %urem = urem i8 %b_8, %a_8 101 %urem = urem i8 %b_8, %a_8
103 %ret = zext i8 %urem to i32 102 %ret = zext i8 %urem to i32
104 ret i32 %ret 103 ret i32 %ret
105 } 104 }
106 ; CHECK-LABEL: urem8Bit 105 ; CHECK-LABEL: urem8Bit
107 ; CHECK: div {{[abcd]l|byte ptr}} 106 ; CHECK: div {{[abcd]l|byte ptr}}
108 107
109 define internal i32 @urem8BitConst(i32 %a, i32 %b) { 108 define internal i32 @urem8BitConst(i32 %a) {
110 entry: 109 entry:
111 %a_8 = trunc i32 %a to i8 110 %a_8 = trunc i32 %a to i8
112 %urem = urem i8 %a_8, 123 111 %urem = urem i8 %a_8, 123
113 %ret = zext i8 %urem to i32 112 %ret = zext i8 %urem to i32
114 ret i32 %ret 113 ret i32 %ret
115 } 114 }
116 ; CHECK-LABEL: urem8BitConst 115 ; CHECK-LABEL: urem8BitConst
117 ; CHECK: div {{[abcd]l|byte ptr}} 116 ; CHECK: div {{[abcd]l|byte ptr}}
118 117
119 118
120 define internal i32 @sdiv8Bit(i32 %a, i32 %b) { 119 define internal i32 @sdiv8Bit(i32 %a, i32 %b) {
121 entry: 120 entry:
122 %a_8 = trunc i32 %a to i8 121 %a_8 = trunc i32 %a to i8
123 %b_8 = trunc i32 %b to i8 122 %b_8 = trunc i32 %b to i8
124 %sdiv = sdiv i8 %b_8, %a_8 123 %sdiv = sdiv i8 %b_8, %a_8
125 %ret = zext i8 %sdiv to i32 124 %ret = zext i8 %sdiv to i32
126 ret i32 %ret 125 ret i32 %ret
127 } 126 }
128 ; CHECK-LABEL: sdiv8Bit 127 ; CHECK-LABEL: sdiv8Bit
129 ; CHECK: idiv {{[abcd]l|byte ptr}} 128 ; CHECK: idiv {{[abcd]l|byte ptr}}
130 129
131 define internal i32 @sdiv8BitConst(i32 %a, i32 %b) { 130 define internal i32 @sdiv8BitConst(i32 %a) {
132 entry: 131 entry:
133 %a_8 = trunc i32 %a to i8 132 %a_8 = trunc i32 %a to i8
134 %sdiv = sdiv i8 %a_8, 123 133 %sdiv = sdiv i8 %a_8, 123
135 %ret = zext i8 %sdiv to i32 134 %ret = zext i8 %sdiv to i32
136 ret i32 %ret 135 ret i32 %ret
137 } 136 }
138 ; CHECK-LABEL: sdiv8BitConst 137 ; CHECK-LABEL: sdiv8BitConst
139 ; CHECK: idiv {{[abcd]l|byte ptr}} 138 ; CHECK: idiv {{[abcd]l|byte ptr}}
140 139
141 define internal i32 @srem8Bit(i32 %a, i32 %b) { 140 define internal i32 @srem8Bit(i32 %a, i32 %b) {
142 entry: 141 entry:
143 %a_8 = trunc i32 %a to i8 142 %a_8 = trunc i32 %a to i8
144 %b_8 = trunc i32 %b to i8 143 %b_8 = trunc i32 %b to i8
145 %srem = srem i8 %b_8, %a_8 144 %srem = srem i8 %b_8, %a_8
146 %ret = zext i8 %srem to i32 145 %ret = zext i8 %srem to i32
147 ret i32 %ret 146 ret i32 %ret
148 } 147 }
149 ; CHECK-LABEL: srem8Bit 148 ; CHECK-LABEL: srem8Bit
150 ; CHECK: idiv {{[abcd]l|byte ptr}} 149 ; CHECK: idiv {{[abcd]l|byte ptr}}
151 150
152 define internal i32 @srem8BitConst(i32 %a, i32 %b) { 151 define internal i32 @srem8BitConst(i32 %a) {
153 entry: 152 entry:
154 %a_8 = trunc i32 %a to i8 153 %a_8 = trunc i32 %a to i8
155 %srem = srem i8 %a_8, 123 154 %srem = srem i8 %a_8, 123
156 %ret = zext i8 %srem to i32 155 %ret = zext i8 %srem to i32
157 ret i32 %ret 156 ret i32 %ret
158 } 157 }
159 ; CHECK-LABEL: srem8BitConst 158 ; CHECK-LABEL: srem8BitConst
160 ; CHECK: idiv {{[abcd]l|byte ptr}} 159 ; CHECK: idiv {{[abcd]l|byte ptr}}
161 160
162 define internal i32 @shl8Bit(i32 %a, i32 %b) { 161 define internal i32 @shl8Bit(i32 %a, i32 %b) {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 define internal i32 @ashr8BitConst(i32 %a, i32 %b) { 214 define internal i32 @ashr8BitConst(i32 %a, i32 %b) {
216 entry: 215 entry:
217 %a_8 = trunc i32 %a to i8 216 %a_8 = trunc i32 %a to i8
218 %ashr = ashr i8 %a_8, 6 217 %ashr = ashr i8 %a_8, 6
219 %ret = zext i8 %ashr to i32 218 %ret = zext i8 %ashr to i32
220 ret i32 %ret 219 ret i32 %ret
221 } 220 }
222 ; CHECK-LABEL: ashr8BitConst 221 ; CHECK-LABEL: ashr8BitConst
223 ; CHECK: sar {{[abcd]l|byte ptr}}, 6 222 ; CHECK: sar {{[abcd]l|byte ptr}}, 6
224 223
224 define internal i32 @icmp8Bit(i32 %a, i32 %b) {
225 entry:
226 %a_8 = trunc i32 %a to i8
227 %b_8 = trunc i32 %b to i8
228 %icmp = icmp ne i8 %b_8, %a_8
229 %ret = zext i1 %icmp to i32
230 ret i32 %ret
231 }
232 ; CHECK-LABEL: icmp8Bit
233 ; CHECK: cmp {{[abcd]l|byte ptr}}
234
235 define internal i32 @icmp8BitConst(i32 %a) {
236 entry:
237 %a_8 = trunc i32 %a to i8
238 %icmp = icmp ne i8 %a_8, 123
239 %ret = zext i1 %icmp to i32
240 ret i32 %ret
241 }
242 ; CHECK-LABEL: icmp8BitConst
243 ; CHECK: cmp {{[abcd]l|byte ptr}}
244
245 define internal i32 @icmp8BitConstSwapped(i32 %a) {
246 entry:
247 %a_8 = trunc i32 %a to i8
248 %icmp = icmp ne i8 123, %a_8
249 %ret = zext i1 %icmp to i32
250 ret i32 %ret
251 }
252 ; CHECK-LABEL: icmp8BitConstSwapped
253 ; CHECK: cmp {{[abcd]l|byte ptr}}
254
255 define internal i32 @icmp8BitMem(i32 %a, i32 %b_iptr) {
256 entry:
257 %a_8 = trunc i32 %a to i8
258 %bptr = inttoptr i32 %b_iptr to i8*
259 %b_8 = load i8* %bptr, align 1
260 %icmp = icmp ne i8 %b_8, %a_8
261 %ret = zext i1 %icmp to i32
262 ret i32 %ret
263 }
264 ; CHECK-LABEL: icmp8BitMem
265 ; CHECK: cmp {{[abcd]l|byte ptr}}
266
267 define internal i32 @icmp8BitMemSwapped(i32 %a, i32 %b_iptr) {
268 entry:
269 %a_8 = trunc i32 %a to i8
270 %bptr = inttoptr i32 %b_iptr to i8*
271 %b_8 = load i8* %bptr, align 1
272 %icmp = icmp ne i8 %a_8, %b_8
273 %ret = zext i1 %icmp to i32
274 ret i32 %ret
275 }
276 ; CHECK-LABEL: icmp8BitMemSwapped
277 ; CHECK: cmp {{[abcd]l|byte ptr}}
225 278
226 ; ERRORS-NOT: ICE translation error 279 ; ERRORS-NOT: ICE translation error
227 ; DUMP-NOT: SZ 280 ; DUMP-NOT: SZ
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698