OLD | NEW |
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 --assemble --disassemble -i %s --args -O2 --verbose none \ |
4 ; RUN: | llvm-mc -triple=i686-none-nacl -filetype=obj \ | 4 ; RUN: | FileCheck %s |
5 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s | 5 ; RUN: %p2i --assemble --disassemble -i %s --args -Om1 --verbose none \ |
6 ; RUN: %p2i -i %s --args -Om1 --verbose none \ | 6 ; RUN: | FileCheck %s |
7 ; RUN: | llvm-mc -triple=i686-none-nacl -filetype=obj \ | |
8 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s | |
9 | 7 |
10 define internal i32 @add8Bit(i32 %a, i32 %b) { | 8 define internal i32 @add8Bit(i32 %a, i32 %b) { |
11 entry: | 9 entry: |
12 %a_8 = trunc i32 %a to i8 | 10 %a_8 = trunc i32 %a to i8 |
13 %b_8 = trunc i32 %b to i8 | 11 %b_8 = trunc i32 %b to i8 |
14 %add = add i8 %b_8, %a_8 | 12 %add = add i8 %b_8, %a_8 |
15 %ret = zext i8 %add to i32 | 13 %ret = zext i8 %add to i32 |
16 ret i32 %ret | 14 ret i32 %ret |
17 } | 15 } |
18 ; CHECK-LABEL: add8Bit | 16 ; CHECK-LABEL: add8Bit |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 | 49 |
52 define internal i32 @mul8Bit(i32 %a, i32 %b) { | 50 define internal i32 @mul8Bit(i32 %a, i32 %b) { |
53 entry: | 51 entry: |
54 %a_8 = trunc i32 %a to i8 | 52 %a_8 = trunc i32 %a to i8 |
55 %b_8 = trunc i32 %b to i8 | 53 %b_8 = trunc i32 %b to i8 |
56 %mul = mul i8 %b_8, %a_8 | 54 %mul = mul i8 %b_8, %a_8 |
57 %ret = zext i8 %mul to i32 | 55 %ret = zext i8 %mul to i32 |
58 ret i32 %ret | 56 ret i32 %ret |
59 } | 57 } |
60 ; CHECK-LABEL: mul8Bit | 58 ; CHECK-LABEL: mul8Bit |
61 ; CHECK: mul {{[abcd]l|byte ptr}} | 59 ; CHECK: mul {{[abcd]l|BYTE PTR}} |
62 | 60 |
63 define internal i32 @mul8BitConst(i32 %a) { | 61 define internal i32 @mul8BitConst(i32 %a) { |
64 entry: | 62 entry: |
65 %a_8 = trunc i32 %a to i8 | 63 %a_8 = trunc i32 %a to i8 |
66 %mul = mul i8 %a_8, 56 | 64 %mul = mul i8 %a_8, 56 |
67 %ret = zext i8 %mul to i32 | 65 %ret = zext i8 %mul to i32 |
68 ret i32 %ret | 66 ret i32 %ret |
69 } | 67 } |
70 ; CHECK-LABEL: mul8BitConst | 68 ; CHECK-LABEL: mul8BitConst |
71 ; 8-bit imul only accepts r/m, not imm | 69 ; 8-bit imul only accepts r/m, not imm |
72 ; CHECK: mov {{.*}}, 56 | 70 ; CHECK: mov {{.*}},0x38 |
73 ; CHECK: mul {{[abcd]l|byte ptr}} | 71 ; CHECK: mul {{[abcd]l|BYTE PTR}} |
74 | 72 |
75 define internal i32 @udiv8Bit(i32 %a, i32 %b) { | 73 define internal i32 @udiv8Bit(i32 %a, i32 %b) { |
76 entry: | 74 entry: |
77 %a_8 = trunc i32 %a to i8 | 75 %a_8 = trunc i32 %a to i8 |
78 %b_8 = trunc i32 %b to i8 | 76 %b_8 = trunc i32 %b to i8 |
79 %udiv = udiv i8 %b_8, %a_8 | 77 %udiv = udiv i8 %b_8, %a_8 |
80 %ret = zext i8 %udiv to i32 | 78 %ret = zext i8 %udiv to i32 |
81 ret i32 %ret | 79 ret i32 %ret |
82 } | 80 } |
83 ; CHECK-LABEL: udiv8Bit | 81 ; CHECK-LABEL: udiv8Bit |
84 ; CHECK: div {{[abcd]l|byte ptr}} | 82 ; CHECK: div {{[abcd]l|BYTE PTR}} |
85 | 83 |
86 define internal i32 @udiv8BitConst(i32 %a) { | 84 define internal i32 @udiv8BitConst(i32 %a) { |
87 entry: | 85 entry: |
88 %a_8 = trunc i32 %a to i8 | 86 %a_8 = trunc i32 %a to i8 |
89 %udiv = udiv i8 %a_8, 123 | 87 %udiv = udiv i8 %a_8, 123 |
90 %ret = zext i8 %udiv to i32 | 88 %ret = zext i8 %udiv to i32 |
91 ret i32 %ret | 89 ret i32 %ret |
92 } | 90 } |
93 ; CHECK-LABEL: udiv8BitConst | 91 ; CHECK-LABEL: udiv8BitConst |
94 ; CHECK: div {{[abcd]l|byte ptr}} | 92 ; CHECK: div {{[abcd]l|BYTE PTR}} |
95 | 93 |
96 define internal i32 @urem8Bit(i32 %a, i32 %b) { | 94 define internal i32 @urem8Bit(i32 %a, i32 %b) { |
97 entry: | 95 entry: |
98 %a_8 = trunc i32 %a to i8 | 96 %a_8 = trunc i32 %a to i8 |
99 %b_8 = trunc i32 %b to i8 | 97 %b_8 = trunc i32 %b to i8 |
100 %urem = urem i8 %b_8, %a_8 | 98 %urem = urem i8 %b_8, %a_8 |
101 %ret = zext i8 %urem to i32 | 99 %ret = zext i8 %urem to i32 |
102 ret i32 %ret | 100 ret i32 %ret |
103 } | 101 } |
104 ; CHECK-LABEL: urem8Bit | 102 ; CHECK-LABEL: urem8Bit |
105 ; CHECK: div {{[abcd]l|byte ptr}} | 103 ; CHECK: div {{[abcd]l|BYTE PTR}} |
106 | 104 |
107 define internal i32 @urem8BitConst(i32 %a) { | 105 define internal i32 @urem8BitConst(i32 %a) { |
108 entry: | 106 entry: |
109 %a_8 = trunc i32 %a to i8 | 107 %a_8 = trunc i32 %a to i8 |
110 %urem = urem i8 %a_8, 123 | 108 %urem = urem i8 %a_8, 123 |
111 %ret = zext i8 %urem to i32 | 109 %ret = zext i8 %urem to i32 |
112 ret i32 %ret | 110 ret i32 %ret |
113 } | 111 } |
114 ; CHECK-LABEL: urem8BitConst | 112 ; CHECK-LABEL: urem8BitConst |
115 ; CHECK: div {{[abcd]l|byte ptr}} | 113 ; CHECK: div {{[abcd]l|BYTE PTR}} |
116 | 114 |
117 | 115 |
118 define internal i32 @sdiv8Bit(i32 %a, i32 %b) { | 116 define internal i32 @sdiv8Bit(i32 %a, i32 %b) { |
119 entry: | 117 entry: |
120 %a_8 = trunc i32 %a to i8 | 118 %a_8 = trunc i32 %a to i8 |
121 %b_8 = trunc i32 %b to i8 | 119 %b_8 = trunc i32 %b to i8 |
122 %sdiv = sdiv i8 %b_8, %a_8 | 120 %sdiv = sdiv i8 %b_8, %a_8 |
123 %ret = zext i8 %sdiv to i32 | 121 %ret = zext i8 %sdiv to i32 |
124 ret i32 %ret | 122 ret i32 %ret |
125 } | 123 } |
126 ; CHECK-LABEL: sdiv8Bit | 124 ; CHECK-LABEL: sdiv8Bit |
127 ; CHECK: idiv {{[abcd]l|byte ptr}} | 125 ; CHECK: idiv {{[abcd]l|BYTE PTR}} |
128 | 126 |
129 define internal i32 @sdiv8BitConst(i32 %a) { | 127 define internal i32 @sdiv8BitConst(i32 %a) { |
130 entry: | 128 entry: |
131 %a_8 = trunc i32 %a to i8 | 129 %a_8 = trunc i32 %a to i8 |
132 %sdiv = sdiv i8 %a_8, 123 | 130 %sdiv = sdiv i8 %a_8, 123 |
133 %ret = zext i8 %sdiv to i32 | 131 %ret = zext i8 %sdiv to i32 |
134 ret i32 %ret | 132 ret i32 %ret |
135 } | 133 } |
136 ; CHECK-LABEL: sdiv8BitConst | 134 ; CHECK-LABEL: sdiv8BitConst |
137 ; CHECK: idiv {{[abcd]l|byte ptr}} | 135 ; CHECK: idiv {{[abcd]l|BYTE PTR}} |
138 | 136 |
139 define internal i32 @srem8Bit(i32 %a, i32 %b) { | 137 define internal i32 @srem8Bit(i32 %a, i32 %b) { |
140 entry: | 138 entry: |
141 %a_8 = trunc i32 %a to i8 | 139 %a_8 = trunc i32 %a to i8 |
142 %b_8 = trunc i32 %b to i8 | 140 %b_8 = trunc i32 %b to i8 |
143 %srem = srem i8 %b_8, %a_8 | 141 %srem = srem i8 %b_8, %a_8 |
144 %ret = zext i8 %srem to i32 | 142 %ret = zext i8 %srem to i32 |
145 ret i32 %ret | 143 ret i32 %ret |
146 } | 144 } |
147 ; CHECK-LABEL: srem8Bit | 145 ; CHECK-LABEL: srem8Bit |
148 ; CHECK: idiv {{[abcd]l|byte ptr}} | 146 ; CHECK: idiv {{[abcd]l|BYTE PTR}} |
149 | 147 |
150 define internal i32 @srem8BitConst(i32 %a) { | 148 define internal i32 @srem8BitConst(i32 %a) { |
151 entry: | 149 entry: |
152 %a_8 = trunc i32 %a to i8 | 150 %a_8 = trunc i32 %a to i8 |
153 %srem = srem i8 %a_8, 123 | 151 %srem = srem i8 %a_8, 123 |
154 %ret = zext i8 %srem to i32 | 152 %ret = zext i8 %srem to i32 |
155 ret i32 %ret | 153 ret i32 %ret |
156 } | 154 } |
157 ; CHECK-LABEL: srem8BitConst | 155 ; CHECK-LABEL: srem8BitConst |
158 ; CHECK: idiv {{[abcd]l|byte ptr}} | 156 ; CHECK: idiv {{[abcd]l|BYTE PTR}} |
159 | 157 |
160 define internal i32 @shl8Bit(i32 %a, i32 %b) { | 158 define internal i32 @shl8Bit(i32 %a, i32 %b) { |
161 entry: | 159 entry: |
162 %a_8 = trunc i32 %a to i8 | 160 %a_8 = trunc i32 %a to i8 |
163 %b_8 = trunc i32 %b to i8 | 161 %b_8 = trunc i32 %b to i8 |
164 %shl = shl i8 %b_8, %a_8 | 162 %shl = shl i8 %b_8, %a_8 |
165 %ret = zext i8 %shl to i32 | 163 %ret = zext i8 %shl to i32 |
166 ret i32 %ret | 164 ret i32 %ret |
167 } | 165 } |
168 ; CHECK-LABEL: shl8Bit | 166 ; CHECK-LABEL: shl8Bit |
169 ; CHECK: shl {{[abd]l|byte ptr}}, cl | 167 ; CHECK: shl {{[abd]l|BYTE PTR}},cl |
170 | 168 |
171 define internal i32 @shl8BitConst(i32 %a, i32 %b) { | 169 define internal i32 @shl8BitConst(i32 %a, i32 %b) { |
172 entry: | 170 entry: |
173 %a_8 = trunc i32 %a to i8 | 171 %a_8 = trunc i32 %a to i8 |
174 %shl = shl i8 %a_8, 6 | 172 %shl = shl i8 %a_8, 6 |
175 %ret = zext i8 %shl to i32 | 173 %ret = zext i8 %shl to i32 |
176 ret i32 %ret | 174 ret i32 %ret |
177 } | 175 } |
178 ; CHECK-LABEL: shl8BitConst | 176 ; CHECK-LABEL: shl8BitConst |
179 ; CHECK: shl {{[abcd]l|byte ptr}}, 6 | 177 ; CHECK: shl {{[abcd]l|BYTE PTR}},0x6 |
180 | 178 |
181 define internal i32 @lshr8Bit(i32 %a, i32 %b) { | 179 define internal i32 @lshr8Bit(i32 %a, i32 %b) { |
182 entry: | 180 entry: |
183 %a_8 = trunc i32 %a to i8 | 181 %a_8 = trunc i32 %a to i8 |
184 %b_8 = trunc i32 %b to i8 | 182 %b_8 = trunc i32 %b to i8 |
185 %lshr = lshr i8 %b_8, %a_8 | 183 %lshr = lshr i8 %b_8, %a_8 |
186 %ret = zext i8 %lshr to i32 | 184 %ret = zext i8 %lshr to i32 |
187 ret i32 %ret | 185 ret i32 %ret |
188 } | 186 } |
189 ; CHECK-LABEL: lshr8Bit | 187 ; CHECK-LABEL: lshr8Bit |
190 ; CHECK: shr {{[abd]l|byte ptr}}, cl | 188 ; CHECK: shr {{[abd]l|BYTE PTR}},cl |
191 | 189 |
192 define internal i32 @lshr8BitConst(i32 %a, i32 %b) { | 190 define internal i32 @lshr8BitConst(i32 %a, i32 %b) { |
193 entry: | 191 entry: |
194 %a_8 = trunc i32 %a to i8 | 192 %a_8 = trunc i32 %a to i8 |
195 %lshr = lshr i8 %a_8, 6 | 193 %lshr = lshr i8 %a_8, 6 |
196 %ret = zext i8 %lshr to i32 | 194 %ret = zext i8 %lshr to i32 |
197 ret i32 %ret | 195 ret i32 %ret |
198 } | 196 } |
199 ; CHECK-LABEL: lshr8BitConst | 197 ; CHECK-LABEL: lshr8BitConst |
200 ; CHECK: shr {{[abcd]l|byte ptr}}, 6 | 198 ; CHECK: shr {{[abcd]l|BYTE PTR}},0x6 |
201 | 199 |
202 define internal i32 @ashr8Bit(i32 %a, i32 %b) { | 200 define internal i32 @ashr8Bit(i32 %a, i32 %b) { |
203 entry: | 201 entry: |
204 %a_8 = trunc i32 %a to i8 | 202 %a_8 = trunc i32 %a to i8 |
205 %b_8 = trunc i32 %b to i8 | 203 %b_8 = trunc i32 %b to i8 |
206 %ashr = ashr i8 %b_8, %a_8 | 204 %ashr = ashr i8 %b_8, %a_8 |
207 %ret = zext i8 %ashr to i32 | 205 %ret = zext i8 %ashr to i32 |
208 ret i32 %ret | 206 ret i32 %ret |
209 } | 207 } |
210 ; CHECK-LABEL: ashr8Bit | 208 ; CHECK-LABEL: ashr8Bit |
211 ; CHECK: sar {{[abd]l|byte ptr}}, cl | 209 ; CHECK: sar {{[abd]l|BYTE PTR}},cl |
212 | 210 |
213 define internal i32 @ashr8BitConst(i32 %a, i32 %b) { | 211 define internal i32 @ashr8BitConst(i32 %a, i32 %b) { |
214 entry: | 212 entry: |
215 %a_8 = trunc i32 %a to i8 | 213 %a_8 = trunc i32 %a to i8 |
216 %ashr = ashr i8 %a_8, 6 | 214 %ashr = ashr i8 %a_8, 6 |
217 %ret = zext i8 %ashr to i32 | 215 %ret = zext i8 %ashr to i32 |
218 ret i32 %ret | 216 ret i32 %ret |
219 } | 217 } |
220 ; CHECK-LABEL: ashr8BitConst | 218 ; CHECK-LABEL: ashr8BitConst |
221 ; CHECK: sar {{[abcd]l|byte ptr}}, 6 | 219 ; CHECK: sar {{[abcd]l|BYTE PTR}},0x6 |
222 | 220 |
223 define internal i32 @icmp8Bit(i32 %a, i32 %b) { | 221 define internal i32 @icmp8Bit(i32 %a, i32 %b) { |
224 entry: | 222 entry: |
225 %a_8 = trunc i32 %a to i8 | 223 %a_8 = trunc i32 %a to i8 |
226 %b_8 = trunc i32 %b to i8 | 224 %b_8 = trunc i32 %b to i8 |
227 %icmp = icmp ne i8 %b_8, %a_8 | 225 %icmp = icmp ne i8 %b_8, %a_8 |
228 %ret = zext i1 %icmp to i32 | 226 %ret = zext i1 %icmp to i32 |
229 ret i32 %ret | 227 ret i32 %ret |
230 } | 228 } |
231 ; CHECK-LABEL: icmp8Bit | 229 ; CHECK-LABEL: icmp8Bit |
232 ; CHECK: cmp {{[abcd]l|byte ptr}} | 230 ; CHECK: cmp {{[abcd]l|BYTE PTR}} |
233 | 231 |
234 define internal i32 @icmp8BitConst(i32 %a) { | 232 define internal i32 @icmp8BitConst(i32 %a) { |
235 entry: | 233 entry: |
236 %a_8 = trunc i32 %a to i8 | 234 %a_8 = trunc i32 %a to i8 |
237 %icmp = icmp ne i8 %a_8, 123 | 235 %icmp = icmp ne i8 %a_8, 123 |
238 %ret = zext i1 %icmp to i32 | 236 %ret = zext i1 %icmp to i32 |
239 ret i32 %ret | 237 ret i32 %ret |
240 } | 238 } |
241 ; CHECK-LABEL: icmp8BitConst | 239 ; CHECK-LABEL: icmp8BitConst |
242 ; CHECK: cmp {{[abcd]l|byte ptr}} | 240 ; CHECK: cmp {{[abcd]l|BYTE PTR}} |
243 | 241 |
244 define internal i32 @icmp8BitConstSwapped(i32 %a) { | 242 define internal i32 @icmp8BitConstSwapped(i32 %a) { |
245 entry: | 243 entry: |
246 %a_8 = trunc i32 %a to i8 | 244 %a_8 = trunc i32 %a to i8 |
247 %icmp = icmp ne i8 123, %a_8 | 245 %icmp = icmp ne i8 123, %a_8 |
248 %ret = zext i1 %icmp to i32 | 246 %ret = zext i1 %icmp to i32 |
249 ret i32 %ret | 247 ret i32 %ret |
250 } | 248 } |
251 ; CHECK-LABEL: icmp8BitConstSwapped | 249 ; CHECK-LABEL: icmp8BitConstSwapped |
252 ; CHECK: cmp {{[abcd]l|byte ptr}} | 250 ; CHECK: cmp {{[abcd]l|BYTE PTR}} |
253 | 251 |
254 define internal i32 @icmp8BitMem(i32 %a, i32 %b_iptr) { | 252 define internal i32 @icmp8BitMem(i32 %a, i32 %b_iptr) { |
255 entry: | 253 entry: |
256 %a_8 = trunc i32 %a to i8 | 254 %a_8 = trunc i32 %a to i8 |
257 %bptr = inttoptr i32 %b_iptr to i8* | 255 %bptr = inttoptr i32 %b_iptr to i8* |
258 %b_8 = load i8* %bptr, align 1 | 256 %b_8 = load i8* %bptr, align 1 |
259 %icmp = icmp ne i8 %b_8, %a_8 | 257 %icmp = icmp ne i8 %b_8, %a_8 |
260 %ret = zext i1 %icmp to i32 | 258 %ret = zext i1 %icmp to i32 |
261 ret i32 %ret | 259 ret i32 %ret |
262 } | 260 } |
263 ; CHECK-LABEL: icmp8BitMem | 261 ; CHECK-LABEL: icmp8BitMem |
264 ; CHECK: cmp {{[abcd]l|byte ptr}} | 262 ; CHECK: cmp {{[abcd]l|BYTE PTR}} |
265 | 263 |
266 define internal i32 @icmp8BitMemSwapped(i32 %a, i32 %b_iptr) { | 264 define internal i32 @icmp8BitMemSwapped(i32 %a, i32 %b_iptr) { |
267 entry: | 265 entry: |
268 %a_8 = trunc i32 %a to i8 | 266 %a_8 = trunc i32 %a to i8 |
269 %bptr = inttoptr i32 %b_iptr to i8* | 267 %bptr = inttoptr i32 %b_iptr to i8* |
270 %b_8 = load i8* %bptr, align 1 | 268 %b_8 = load i8* %bptr, align 1 |
271 %icmp = icmp ne i8 %a_8, %b_8 | 269 %icmp = icmp ne i8 %a_8, %b_8 |
272 %ret = zext i1 %icmp to i32 | 270 %ret = zext i1 %icmp to i32 |
273 ret i32 %ret | 271 ret i32 %ret |
274 } | 272 } |
275 ; CHECK-LABEL: icmp8BitMemSwapped | 273 ; CHECK-LABEL: icmp8BitMemSwapped |
276 ; CHECK: cmp {{[abcd]l|byte ptr}} | 274 ; CHECK: cmp {{[abcd]l|BYTE PTR}} |
277 | 275 |
278 define internal i32 @selectI8Var(i32 %a, i32 %b) { | 276 define internal i32 @selectI8Var(i32 %a, i32 %b) { |
279 entry: | 277 entry: |
280 %a_8 = trunc i32 %a to i8 | 278 %a_8 = trunc i32 %a to i8 |
281 %b_8 = trunc i32 %b to i8 | 279 %b_8 = trunc i32 %b to i8 |
282 %cmp = icmp slt i8 %a_8, %b_8 | 280 %cmp = icmp slt i8 %a_8, %b_8 |
283 %ret = select i1 %cmp, i8 %a_8, i8 %b_8 | 281 %ret = select i1 %cmp, i8 %a_8, i8 %b_8 |
284 %ret_ext = zext i8 %ret to i32 | 282 %ret_ext = zext i8 %ret to i32 |
285 ret i32 %ret_ext | 283 ret i32 %ret_ext |
286 } | 284 } |
(...skipping 30 matching lines...) Expand all Loading... |
317 %merge4 = phi i8 [ %trunc3, %entry ], [ %trunc8_8, %next ] | 315 %merge4 = phi i8 [ %trunc3, %entry ], [ %trunc8_8, %next ] |
318 %res1 = select i1 %merge1, i8 %merge2, i8 %merge3 | 316 %res1 = select i1 %merge1, i8 %merge2, i8 %merge3 |
319 %res2 = select i1 %merge1, i8 %merge4, i8 %merge5 | 317 %res2 = select i1 %merge1, i8 %merge4, i8 %merge5 |
320 %res1_2 = select i1 %merge1, i8 %res1, i8 %res2 | 318 %res1_2 = select i1 %merge1, i8 %res1, i8 %res2 |
321 %res123 = select i1 %merge1, i8 %merge6, i8 %res1_2 | 319 %res123 = select i1 %merge1, i8 %merge6, i8 %res1_2 |
322 %result = zext i8 %res123 to i32 | 320 %result = zext i8 %res123 to i32 |
323 ret i32 %result | 321 ret i32 %result |
324 } | 322 } |
325 ; CHECK-LABEL: testPhi8 | 323 ; CHECK-LABEL: testPhi8 |
326 ; This assumes there will be some copy from an 8-bit register / stack slot. | 324 ; This assumes there will be some copy from an 8-bit register / stack slot. |
327 ; CHECK-DAG: mov {{.*}}, {{[a-d]}}l | 325 ; CHECK-DAG: mov {{.*}},{{[a-d]}}l |
328 ; CHECK-DAG: mov {{.*}}, byte ptr | 326 ; CHECK-DAG: mov {{.*}},BYTE PTR |
329 ; CHECK-DAG: mov byte ptr {{.*}} | 327 ; CHECK-DAG: mov BYTE PTR {{.*}} |
330 | 328 |
331 @global8 = internal global [1 x i8] c"\01", align 4 | 329 @global8 = internal global [1 x i8] c"\01", align 4 |
332 | 330 |
333 define i32 @load_i8(i32 %addr_arg) { | 331 define i32 @load_i8(i32 %addr_arg) { |
334 entry: | 332 entry: |
335 %addr = inttoptr i32 %addr_arg to i8* | 333 %addr = inttoptr i32 %addr_arg to i8* |
336 %ret = load i8* %addr, align 1 | 334 %ret = load i8* %addr, align 1 |
337 %ret_ext = zext i8 %ret to i32 | 335 %ret_ext = zext i8 %ret to i32 |
338 ret i32 %ret_ext | 336 ret i32 %ret_ext |
339 } | 337 } |
340 ; CHECK-LABEL: load_i8 | 338 ; CHECK-LABEL: load_i8 |
341 ; CHECK: mov {{[a-d]l}}, byte ptr | 339 ; CHECK: mov {{[a-d]l}},BYTE PTR |
342 | 340 |
343 define i32 @load_i8_global(i32 %addr_arg) { | 341 define i32 @load_i8_global(i32 %addr_arg) { |
344 entry: | 342 entry: |
345 %addr = bitcast [1 x i8]* @global8 to i8* | 343 %addr = bitcast [1 x i8]* @global8 to i8* |
346 %ret = load i8* %addr, align 1 | 344 %ret = load i8* %addr, align 1 |
347 %ret_ext = zext i8 %ret to i32 | 345 %ret_ext = zext i8 %ret to i32 |
348 ret i32 %ret_ext | 346 ret i32 %ret_ext |
349 } | 347 } |
350 ; CHECK-LABEL: load_i8_global | 348 ; CHECK-LABEL: load_i8_global |
351 ; CHECK: mov {{[a-d]l}}, byte ptr | 349 ; CHECK: mov {{[a-d]l}},BYTE PTR |
352 | 350 |
353 define void @store_i8(i32 %addr_arg, i32 %val) { | 351 define void @store_i8(i32 %addr_arg, i32 %val) { |
354 entry: | 352 entry: |
355 %val_trunc = trunc i32 %val to i8 | 353 %val_trunc = trunc i32 %val to i8 |
356 %addr = inttoptr i32 %addr_arg to i8* | 354 %addr = inttoptr i32 %addr_arg to i8* |
357 store i8 %val_trunc, i8* %addr, align 1 | 355 store i8 %val_trunc, i8* %addr, align 1 |
358 ret void | 356 ret void |
359 } | 357 } |
360 ; CHECK-LABEL: store_i8 | 358 ; CHECK-LABEL: store_i8 |
361 ; CHECK: mov byte ptr {{.*}}, {{[a-d]l}} | 359 ; CHECK: mov BYTE PTR {{.*}},{{[a-d]l}} |
362 | 360 |
363 define void @store_i8_const(i32 %addr_arg) { | 361 define void @store_i8_const(i32 %addr_arg) { |
364 entry: | 362 entry: |
365 %addr = inttoptr i32 %addr_arg to i8* | 363 %addr = inttoptr i32 %addr_arg to i8* |
366 store i8 123, i8* %addr, align 1 | 364 store i8 123, i8* %addr, align 1 |
367 ret void | 365 ret void |
368 } | 366 } |
369 ; CHECK-LABEL: store_i8_const | 367 ; CHECK-LABEL: store_i8_const |
370 ; CHECK: mov byte ptr {{.*}}, 123 | 368 ; CHECK: mov BYTE PTR {{.*}},0x7b |
OLD | NEW |