Mercurial > hg > Members > tobaru > cbc > CbC_llvm
comparison test/CodeGen/WebAssembly/address-offsets.ll @ 120:1172e4bd9c6f
update 4.0.0
author | mir3636 |
---|---|
date | Fri, 25 Nov 2016 19:14:25 +0900 |
parents | 7d135dc70f03 |
children | 803732b1fca8 |
comparison
equal
deleted
inserted
replaced
101:34baf5011add | 120:1172e4bd9c6f |
---|---|
1 ; RUN: llc < %s -asm-verbose=false | FileCheck %s | 1 ; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt | FileCheck %s |
2 | 2 |
3 ; Test folding constant offsets and symbols into load and store addresses under | 3 ; Test folding constant offsets and symbols into load and store addresses under |
4 ; a variety of circumstances. | 4 ; a variety of circumstances. |
5 | 5 |
6 target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" | 6 target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" |
26 define i32 @load_test0_noinbounds() { | 26 define i32 @load_test0_noinbounds() { |
27 %t = load i32, i32* getelementptr ([0 x i32], [0 x i32]* @g, i32 0, i32 10), align 4 | 27 %t = load i32, i32* getelementptr ([0 x i32], [0 x i32]* @g, i32 0, i32 10), align 4 |
28 ret i32 %t | 28 ret i32 %t |
29 } | 29 } |
30 | 30 |
31 ; TODO: load_test1 - load_test8 are disabled because folding GA+reg is disabled | |
32 ; (there are cases where the value in the reg can be negative). | |
33 ; Likewise for stores. | |
34 | |
31 ; CHECK-LABEL: load_test1: | 35 ; CHECK-LABEL: load_test1: |
32 ; CHECK-NEXT: param i32{{$}} | 36 ; CHECK-NEXT: param i32{{$}} |
33 ; CHECK-NEXT: result i32{{$}} | 37 ; CHECK-NEXT: result i32{{$}} |
34 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 38 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
35 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} | 39 ; CHECK-NEX T: i32.shl $push1=, $0, $pop0{{$}} |
36 ; CHECK-NEXT: i32.load $push2=, g+40($pop1){{$}} | 40 ; CHECK-NEX T: i32.load $push2=, g+40($pop1){{$}} |
37 ; CHECK-NEXT: return $pop2{{$}} | 41 ; CHECK-NEX T: return $pop2{{$}} |
38 define i32 @load_test1(i32 %n) { | 42 define i32 @load_test1(i32 %n) { |
39 %add = add nsw i32 %n, 10 | 43 %add = add nsw i32 %n, 10 |
40 %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add | 44 %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add |
41 %t = load i32, i32* %arrayidx, align 4 | 45 %t = load i32, i32* %arrayidx, align 4 |
42 ret i32 %t | 46 ret i32 %t |
44 | 48 |
45 ; CHECK-LABEL: load_test2: | 49 ; CHECK-LABEL: load_test2: |
46 ; CHECK-NEXT: param i32{{$}} | 50 ; CHECK-NEXT: param i32{{$}} |
47 ; CHECK-NEXT: result i32{{$}} | 51 ; CHECK-NEXT: result i32{{$}} |
48 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 52 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
49 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} | 53 ; CHECK-NEX T: i32.shl $push1=, $0, $pop0{{$}} |
50 ; CHECK-NEXT: i32.load $push2=, g+40($pop1){{$}} | 54 ; CHECK-NEX T: i32.load $push2=, g+40($pop1){{$}} |
51 ; CHECK-NEXT: return $pop2{{$}} | 55 ; CHECK-NEX T: return $pop2{{$}} |
52 define i32 @load_test2(i32 %n) { | 56 define i32 @load_test2(i32 %n) { |
53 %add = add nsw i32 10, %n | 57 %add = add nsw i32 10, %n |
54 %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add | 58 %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add |
55 %t = load i32, i32* %arrayidx, align 4 | 59 %t = load i32, i32* %arrayidx, align 4 |
56 ret i32 %t | 60 ret i32 %t |
58 | 62 |
59 ; CHECK-LABEL: load_test3: | 63 ; CHECK-LABEL: load_test3: |
60 ; CHECK-NEXT: param i32{{$}} | 64 ; CHECK-NEXT: param i32{{$}} |
61 ; CHECK-NEXT: result i32{{$}} | 65 ; CHECK-NEXT: result i32{{$}} |
62 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 66 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
63 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} | 67 ; CHECK-NEX T: i32.shl $push1=, $0, $pop0{{$}} |
64 ; CHECK-NEXT: i32.load $push2=, g+40($pop1){{$}} | 68 ; CHECK-NEX T: i32.load $push2=, g+40($pop1){{$}} |
65 ; CHECK-NEXT: return $pop2{{$}} | 69 ; CHECK-NEX T: return $pop2{{$}} |
66 define i32 @load_test3(i32 %n) { | 70 define i32 @load_test3(i32 %n) { |
67 %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %n | 71 %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %n |
68 %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10 | 72 %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10 |
69 %t = load i32, i32* %add.ptr1, align 4 | 73 %t = load i32, i32* %add.ptr1, align 4 |
70 ret i32 %t | 74 ret i32 %t |
72 | 76 |
73 ; CHECK-LABEL: load_test4: | 77 ; CHECK-LABEL: load_test4: |
74 ; CHECK-NEXT: param i32{{$}} | 78 ; CHECK-NEXT: param i32{{$}} |
75 ; CHECK-NEXT: result i32{{$}} | 79 ; CHECK-NEXT: result i32{{$}} |
76 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 80 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
77 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} | 81 ; CHECK-NEX T: i32.shl $push1=, $0, $pop0{{$}} |
78 ; CHECK-NEXT: i32.load $push2=, g+40($pop1){{$}} | 82 ; CHECK-NEX T: i32.load $push2=, g+40($pop1){{$}} |
79 ; CHECK-NEXT: return $pop2{{$}} | 83 ; CHECK-NEX T: return $pop2{{$}} |
80 define i32 @load_test4(i32 %n) { | 84 define i32 @load_test4(i32 %n) { |
81 %add.ptr = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), i32 %n | 85 %add.ptr = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), i32 %n |
82 %t = load i32, i32* %add.ptr, align 4 | 86 %t = load i32, i32* %add.ptr, align 4 |
83 ret i32 %t | 87 ret i32 %t |
84 } | 88 } |
85 | 89 |
86 ; CHECK-LABEL: load_test5: | 90 ; CHECK-LABEL: load_test5: |
87 ; CHECK-NEXT: param i32{{$}} | 91 ; CHECK-NEXT: param i32{{$}} |
88 ; CHECK-NEXT: result i32{{$}} | 92 ; CHECK-NEXT: result i32{{$}} |
89 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 93 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
90 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} | 94 ; CHECK-NEX T: i32.shl $push1=, $0, $pop0{{$}} |
91 ; CHECK-NEXT: i32.load $push2=, g+40($pop1){{$}} | 95 ; CHECK-NEX T: i32.load $push2=, g+40($pop1){{$}} |
92 ; CHECK-NEXT: return $pop2{{$}} | 96 ; CHECK-NEX T: return $pop2{{$}} |
93 define i32 @load_test5(i32 %n) { | 97 define i32 @load_test5(i32 %n) { |
94 %add.ptr = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), i32 %n | 98 %add.ptr = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), i32 %n |
95 %t = load i32, i32* %add.ptr, align 4 | 99 %t = load i32, i32* %add.ptr, align 4 |
96 ret i32 %t | 100 ret i32 %t |
97 } | 101 } |
98 | 102 |
99 ; CHECK-LABEL: load_test6: | 103 ; CHECK-LABEL: load_test6: |
100 ; CHECK-NEXT: param i32{{$}} | 104 ; CHECK-NEXT: param i32{{$}} |
101 ; CHECK-NEXT: result i32{{$}} | 105 ; CHECK-NEXT: result i32{{$}} |
102 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 106 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
103 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} | 107 ; CHECK-NEX T: i32.shl $push1=, $0, $pop0{{$}} |
104 ; CHECK-NEXT: i32.load $push2=, g+40($pop1){{$}} | 108 ; CHECK-NEX T: i32.load $push2=, g+40($pop1){{$}} |
105 ; CHECK-NEXT: return $pop2{{$}} | 109 ; CHECK-NEX T: return $pop2{{$}} |
106 define i32 @load_test6(i32 %n) { | 110 define i32 @load_test6(i32 %n) { |
107 %add = add nsw i32 %n, 10 | 111 %add = add nsw i32 %n, 10 |
108 %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add | 112 %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add |
109 %t = load i32, i32* %add.ptr, align 4 | 113 %t = load i32, i32* %add.ptr, align 4 |
110 ret i32 %t | 114 ret i32 %t |
112 | 116 |
113 ; CHECK-LABEL: load_test7: | 117 ; CHECK-LABEL: load_test7: |
114 ; CHECK-NEXT: param i32{{$}} | 118 ; CHECK-NEXT: param i32{{$}} |
115 ; CHECK-NEXT: result i32{{$}} | 119 ; CHECK-NEXT: result i32{{$}} |
116 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 120 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
117 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} | 121 ; CHECK-NEX T: i32.shl $push1=, $0, $pop0{{$}} |
118 ; CHECK-NEXT: i32.load $push2=, g+40($pop1){{$}} | 122 ; CHECK-NEX T: i32.load $push2=, g+40($pop1){{$}} |
119 ; CHECK-NEXT: return $pop2{{$}} | 123 ; CHECK-NEX T: return $pop2{{$}} |
120 define i32 @load_test7(i32 %n) { | 124 define i32 @load_test7(i32 %n) { |
121 %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %n | 125 %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %n |
122 %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10 | 126 %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10 |
123 %t = load i32, i32* %add.ptr1, align 4 | 127 %t = load i32, i32* %add.ptr1, align 4 |
124 ret i32 %t | 128 ret i32 %t |
126 | 130 |
127 ; CHECK-LABEL: load_test8: | 131 ; CHECK-LABEL: load_test8: |
128 ; CHECK-NEXT: param i32{{$}} | 132 ; CHECK-NEXT: param i32{{$}} |
129 ; CHECK-NEXT: result i32{{$}} | 133 ; CHECK-NEXT: result i32{{$}} |
130 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 134 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
131 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} | 135 ; CHECK-NEX T: i32.shl $push1=, $0, $pop0{{$}} |
132 ; CHECK-NEXT: i32.load $push2=, g+40($pop1){{$}} | 136 ; CHECK-NEX T: i32.load $push2=, g+40($pop1){{$}} |
133 ; CHECK-NEXT: return $pop2{{$}} | 137 ; CHECK-NEX T: return $pop2{{$}} |
134 define i32 @load_test8(i32 %n) { | 138 define i32 @load_test8(i32 %n) { |
135 %add = add nsw i32 10, %n | 139 %add = add nsw i32 10, %n |
136 %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add | 140 %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add |
137 %t = load i32, i32* %add.ptr, align 4 | 141 %t = load i32, i32* %add.ptr, align 4 |
138 ret i32 %t | 142 ret i32 %t |
191 ; CHECK-LABEL: load_test12: | 195 ; CHECK-LABEL: load_test12: |
192 ; CHECK-NEXT: param i32, i32{{$}} | 196 ; CHECK-NEXT: param i32, i32{{$}} |
193 ; CHECK-NEXT: result i32{{$}} | 197 ; CHECK-NEXT: result i32{{$}} |
194 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 198 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
195 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} | 199 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} |
196 ; CHECK-NEXT: i32.add $push2=, $pop1, $0{{$}} | 200 ; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} |
197 ; CHECK-NEXT: i32.const $push3=, 40{{$}} | 201 ; CHECK-NEXT: i32.const $push3=, 40{{$}} |
198 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} | 202 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} |
199 ; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} | 203 ; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} |
200 ; CHECK-NEXT: return $pop5{{$}} | 204 ; CHECK-NEXT: return $pop5{{$}} |
201 define i32 @load_test12(i32* %p, i32 %n) { | 205 define i32 @load_test12(i32* %p, i32 %n) { |
208 ; CHECK-LABEL: load_test13: | 212 ; CHECK-LABEL: load_test13: |
209 ; CHECK-NEXT: param i32, i32{{$}} | 213 ; CHECK-NEXT: param i32, i32{{$}} |
210 ; CHECK-NEXT: result i32{{$}} | 214 ; CHECK-NEXT: result i32{{$}} |
211 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 215 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
212 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} | 216 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} |
213 ; CHECK-NEXT: i32.add $push2=, $pop1, $0{{$}} | 217 ; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} |
214 ; CHECK-NEXT: i32.const $push3=, 40{{$}} | 218 ; CHECK-NEXT: i32.const $push3=, 40{{$}} |
215 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} | 219 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} |
216 ; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} | 220 ; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} |
217 ; CHECK-NEXT: return $pop5{{$}} | 221 ; CHECK-NEXT: return $pop5{{$}} |
218 define i32 @load_test13(i32* %p, i32 %n) { | 222 define i32 @load_test13(i32* %p, i32 %n) { |
274 ; CHECK-LABEL: load_test17: | 278 ; CHECK-LABEL: load_test17: |
275 ; CHECK-NEXT: param i32, i32{{$}} | 279 ; CHECK-NEXT: param i32, i32{{$}} |
276 ; CHECK-NEXT: result i32{{$}} | 280 ; CHECK-NEXT: result i32{{$}} |
277 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 281 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
278 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} | 282 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} |
279 ; CHECK-NEXT: i32.add $push2=, $pop1, $0{{$}} | 283 ; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} |
280 ; CHECK-NEXT: i32.const $push3=, 40{{$}} | 284 ; CHECK-NEXT: i32.const $push3=, 40{{$}} |
281 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} | 285 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} |
282 ; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} | 286 ; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} |
283 ; CHECK-NEXT: return $pop5{{$}} | 287 ; CHECK-NEXT: return $pop5{{$}} |
284 define i32 @load_test17(i32* %p, i32 %n) { | 288 define i32 @load_test17(i32* %p, i32 %n) { |
306 ; CHECK-LABEL: load_test19: | 310 ; CHECK-LABEL: load_test19: |
307 ; CHECK-NEXT: param i32, i32{{$}} | 311 ; CHECK-NEXT: param i32, i32{{$}} |
308 ; CHECK-NEXT: result i32{{$}} | 312 ; CHECK-NEXT: result i32{{$}} |
309 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 313 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
310 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} | 314 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} |
311 ; CHECK-NEXT: i32.add $push2=, $pop1, $0{{$}} | 315 ; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} |
312 ; CHECK-NEXT: i32.const $push3=, 40{{$}} | 316 ; CHECK-NEXT: i32.const $push3=, 40{{$}} |
313 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} | 317 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} |
314 ; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} | 318 ; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} |
315 ; CHECK-NEXT: return $pop5{{$}} | 319 ; CHECK-NEXT: return $pop5{{$}} |
316 define i32 @load_test19(i32* %p, i32 %n) { | 320 define i32 @load_test19(i32* %p, i32 %n) { |
336 ; CHECK-LABEL: load_test21: | 340 ; CHECK-LABEL: load_test21: |
337 ; CHECK-NEXT: param i32, i32{{$}} | 341 ; CHECK-NEXT: param i32, i32{{$}} |
338 ; CHECK-NEXT: result i32{{$}} | 342 ; CHECK-NEXT: result i32{{$}} |
339 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 343 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
340 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} | 344 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} |
341 ; CHECK-NEXT: i32.add $push2=, $pop1, $0{{$}} | 345 ; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} |
342 ; CHECK-NEXT: i32.const $push3=, -40{{$}} | 346 ; CHECK-NEXT: i32.const $push3=, -40{{$}} |
343 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} | 347 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} |
344 ; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} | 348 ; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} |
345 ; CHECK-NEXT: return $pop5{{$}} | 349 ; CHECK-NEXT: return $pop5{{$}} |
346 define i32 @load_test21(i32* %p, i32 %n) { | 350 define i32 @load_test21(i32* %p, i32 %n) { |
351 } | 355 } |
352 | 356 |
353 ; CHECK-LABEL: store_test0: | 357 ; CHECK-LABEL: store_test0: |
354 ; CHECK-NEXT: param i32{{$}} | 358 ; CHECK-NEXT: param i32{{$}} |
355 ; CHECK-NEXT: i32.const $push0=, 0{{$}} | 359 ; CHECK-NEXT: i32.const $push0=, 0{{$}} |
356 ; CHECK-NEXT: i32.store $discard=, g+40($pop0), $0{{$}} | 360 ; CHECK-NEXT: i32.store g+40($pop0), $0{{$}} |
357 ; CHECK-NEXT: return{{$}} | 361 ; CHECK-NEXT: return{{$}} |
358 define void @store_test0(i32 %i) { | 362 define void @store_test0(i32 %i) { |
359 store i32 %i, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), align 4 | 363 store i32 %i, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), align 4 |
360 ret void | 364 ret void |
361 } | 365 } |
362 | 366 |
363 ; CHECK-LABEL: store_test0_noinbounds: | 367 ; CHECK-LABEL: store_test0_noinbounds: |
364 ; CHECK-NEXT: param i32{{$}} | 368 ; CHECK-NEXT: param i32{{$}} |
365 ; CHECK-NEXT: i32.const $push0=, 0{{$}} | 369 ; CHECK-NEXT: i32.const $push0=, 0{{$}} |
366 ; CHECK-NEXT: i32.store $discard=, g+40($pop0), $0{{$}} | 370 ; CHECK-NEXT: i32.store g+40($pop0), $0{{$}} |
367 ; CHECK-NEXT: return{{$}} | 371 ; CHECK-NEXT: return{{$}} |
368 define void @store_test0_noinbounds(i32 %i) { | 372 define void @store_test0_noinbounds(i32 %i) { |
369 store i32 %i, i32* getelementptr ([0 x i32], [0 x i32]* @g, i32 0, i32 10), align 4 | 373 store i32 %i, i32* getelementptr ([0 x i32], [0 x i32]* @g, i32 0, i32 10), align 4 |
370 ret void | 374 ret void |
371 } | 375 } |
372 | 376 |
373 ; CHECK-LABEL: store_test1: | 377 ; CHECK-LABEL: store_test1: |
374 ; CHECK-NEXT: param i32, i32{{$}} | 378 ; CHECK-NEXT: param i32, i32{{$}} |
375 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 379 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
376 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} | 380 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} |
377 ; CHECK-NEXT: i32.store $discard=, g+40($pop1), $1{{$}} | 381 ; CHECK-NEX T: i32.store g+40($pop1), $1{{$}} |
378 ; CHECK-NEXT: return{{$}} | 382 ; CHECK-NEX T: return{{$}} |
379 define void @store_test1(i32 %n, i32 %i) { | 383 define void @store_test1(i32 %n, i32 %i) { |
380 %add = add nsw i32 %n, 10 | 384 %add = add nsw i32 %n, 10 |
381 %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add | 385 %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add |
382 store i32 %i, i32* %arrayidx, align 4 | 386 store i32 %i, i32* %arrayidx, align 4 |
383 ret void | 387 ret void |
385 | 389 |
386 ; CHECK-LABEL: store_test2: | 390 ; CHECK-LABEL: store_test2: |
387 ; CHECK-NEXT: param i32, i32{{$}} | 391 ; CHECK-NEXT: param i32, i32{{$}} |
388 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 392 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
389 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} | 393 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} |
390 ; CHECK-NEXT: i32.store $discard=, g+40($pop1), $1{{$}} | 394 ; CHECK-NEX T: i32.store g+40($pop1), $1{{$}} |
391 ; CHECK-NEXT: return{{$}} | 395 ; CHECK-NEX T: return{{$}} |
392 define void @store_test2(i32 %n, i32 %i) { | 396 define void @store_test2(i32 %n, i32 %i) { |
393 %add = add nsw i32 10, %n | 397 %add = add nsw i32 10, %n |
394 %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add | 398 %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add |
395 store i32 %i, i32* %arrayidx, align 4 | 399 store i32 %i, i32* %arrayidx, align 4 |
396 ret void | 400 ret void |
398 | 402 |
399 ; CHECK-LABEL: store_test3: | 403 ; CHECK-LABEL: store_test3: |
400 ; CHECK-NEXT: param i32, i32{{$}} | 404 ; CHECK-NEXT: param i32, i32{{$}} |
401 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 405 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
402 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} | 406 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} |
403 ; CHECK-NEXT: i32.store $discard=, g+40($pop1), $1{{$}} | 407 ; CHECK-NEX T: i32.store g+40($pop1), $1{{$}} |
404 ; CHECK-NEXT: return{{$}} | 408 ; CHECK-NEX T: return{{$}} |
405 define void @store_test3(i32 %n, i32 %i) { | 409 define void @store_test3(i32 %n, i32 %i) { |
406 %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %n | 410 %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %n |
407 %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10 | 411 %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10 |
408 store i32 %i, i32* %add.ptr1, align 4 | 412 store i32 %i, i32* %add.ptr1, align 4 |
409 ret void | 413 ret void |
411 | 415 |
412 ; CHECK-LABEL: store_test4: | 416 ; CHECK-LABEL: store_test4: |
413 ; CHECK-NEXT: param i32, i32{{$}} | 417 ; CHECK-NEXT: param i32, i32{{$}} |
414 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 418 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
415 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} | 419 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} |
416 ; CHECK-NEXT: i32.store $discard=, g+40($pop1), $1{{$}} | 420 ; CHECK-NEX T: i32.store g+40($pop1), $1{{$}} |
417 ; CHECK-NEXT: return{{$}} | 421 ; CHECK-NEX T: return{{$}} |
418 define void @store_test4(i32 %n, i32 %i) { | 422 define void @store_test4(i32 %n, i32 %i) { |
419 %add.ptr = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), i32 %n | 423 %add.ptr = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), i32 %n |
420 store i32 %i, i32* %add.ptr, align 4 | 424 store i32 %i, i32* %add.ptr, align 4 |
421 ret void | 425 ret void |
422 } | 426 } |
423 | 427 |
424 ; CHECK-LABEL: store_test5: | 428 ; CHECK-LABEL: store_test5: |
425 ; CHECK-NEXT: param i32, i32{{$}} | 429 ; CHECK-NEXT: param i32, i32{{$}} |
426 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 430 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
427 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} | 431 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} |
428 ; CHECK-NEXT: i32.store $discard=, g+40($pop1), $1{{$}} | 432 ; CHECK-NEX T: i32.store g+40($pop1), $1{{$}} |
429 ; CHECK-NEXT: return{{$}} | 433 ; CHECK-NEX T: return{{$}} |
430 define void @store_test5(i32 %n, i32 %i) { | 434 define void @store_test5(i32 %n, i32 %i) { |
431 %add.ptr = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), i32 %n | 435 %add.ptr = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), i32 %n |
432 store i32 %i, i32* %add.ptr, align 4 | 436 store i32 %i, i32* %add.ptr, align 4 |
433 ret void | 437 ret void |
434 } | 438 } |
435 | 439 |
436 ; CHECK-LABEL: store_test6: | 440 ; CHECK-LABEL: store_test6: |
437 ; CHECK-NEXT: param i32, i32{{$}} | 441 ; CHECK-NEXT: param i32, i32{{$}} |
438 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 442 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
439 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} | 443 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} |
440 ; CHECK-NEXT: i32.store $discard=, g+40($pop1), $1{{$}} | 444 ; CHECK-NEX T: i32.store g+40($pop1), $1{{$}} |
441 ; CHECK-NEXT: return{{$}} | 445 ; CHECK-NEX T: return{{$}} |
442 define void @store_test6(i32 %n, i32 %i) { | 446 define void @store_test6(i32 %n, i32 %i) { |
443 %add = add nsw i32 %n, 10 | 447 %add = add nsw i32 %n, 10 |
444 %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add | 448 %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add |
445 store i32 %i, i32* %add.ptr, align 4 | 449 store i32 %i, i32* %add.ptr, align 4 |
446 ret void | 450 ret void |
448 | 452 |
449 ; CHECK-LABEL: store_test7: | 453 ; CHECK-LABEL: store_test7: |
450 ; CHECK-NEXT: param i32, i32{{$}} | 454 ; CHECK-NEXT: param i32, i32{{$}} |
451 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 455 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
452 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} | 456 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} |
453 ; CHECK-NEXT: i32.store $discard=, g+40($pop1), $1{{$}} | 457 ; CHECK-NEX T: i32.store g+40($pop1), $1{{$}} |
454 ; CHECK-NEXT: return{{$}} | 458 ; CHECK-NEX T: return{{$}} |
455 define void @store_test7(i32 %n, i32 %i) { | 459 define void @store_test7(i32 %n, i32 %i) { |
456 %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %n | 460 %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %n |
457 %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10 | 461 %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10 |
458 store i32 %i, i32* %add.ptr1, align 4 | 462 store i32 %i, i32* %add.ptr1, align 4 |
459 ret void | 463 ret void |
461 | 465 |
462 ; CHECK-LABEL: store_test8: | 466 ; CHECK-LABEL: store_test8: |
463 ; CHECK-NEXT: param i32, i32{{$}} | 467 ; CHECK-NEXT: param i32, i32{{$}} |
464 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 468 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
465 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} | 469 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} |
466 ; CHECK-NEXT: i32.store $discard=, g+40($pop1), $1{{$}} | 470 ; CHECK-NEX T: i32.store g+40($pop1), $1{{$}} |
467 ; CHECK-NEXT: return{{$}} | 471 ; CHECK-NEX T: return{{$}} |
468 define void @store_test8(i32 %n, i32 %i) { | 472 define void @store_test8(i32 %n, i32 %i) { |
469 %add = add nsw i32 10, %n | 473 %add = add nsw i32 10, %n |
470 %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add | 474 %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add |
471 store i32 %i, i32* %add.ptr, align 4 | 475 store i32 %i, i32* %add.ptr, align 4 |
472 ret void | 476 ret void |
473 } | 477 } |
474 | 478 |
475 ; CHECK-LABEL: store_test9: | 479 ; CHECK-LABEL: store_test9: |
476 ; CHECK-NEXT: param i32{{$}} | 480 ; CHECK-NEXT: param i32{{$}} |
477 ; CHECK-NEXT: i32.const $push0=, 0{{$}} | 481 ; CHECK-NEXT: i32.const $push0=, 0{{$}} |
478 ; CHECK-NEXT: i32.store $discard=, g-40($pop0), $0{{$}} | 482 ; CHECK-NEXT: i32.store g-40($pop0), $0{{$}} |
479 ; CHECK-NEXT: return{{$}} | 483 ; CHECK-NEXT: return{{$}} |
480 define void @store_test9(i32 %i) { | 484 define void @store_test9(i32 %i) { |
481 store i32 %i, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 1073741814), align 4 | 485 store i32 %i, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 1073741814), align 4 |
482 ret void | 486 ret void |
483 } | 487 } |
486 ; CHECK-NEXT: param i32, i32{{$}} | 490 ; CHECK-NEXT: param i32, i32{{$}} |
487 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 491 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
488 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} | 492 ; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} |
489 ; CHECK-NEXT: i32.const $push2=, g-40{{$}} | 493 ; CHECK-NEXT: i32.const $push2=, g-40{{$}} |
490 ; CHECK-NEXT: i32.add $push3=, $pop1, $pop2{{$}} | 494 ; CHECK-NEXT: i32.add $push3=, $pop1, $pop2{{$}} |
491 ; CHECK-NEXT: i32.store $discard=, 0($pop3), $1{{$}} | 495 ; CHECK-NEXT: i32.store 0($pop3), $1{{$}} |
492 ; CHECK-NEXT: return{{$}} | 496 ; CHECK-NEXT: return{{$}} |
493 define void @store_test10(i32 %n, i32 %i) { | 497 define void @store_test10(i32 %n, i32 %i) { |
494 %add = add nsw i32 %n, -10 | 498 %add = add nsw i32 %n, -10 |
495 %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add | 499 %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add |
496 store i32 %i, i32* %arrayidx, align 4 | 500 store i32 %i, i32* %arrayidx, align 4 |
497 ret void | 501 ret void |
498 } | 502 } |
499 | 503 |
500 ; CHECK-LABEL: store_test11: | 504 ; CHECK-LABEL: store_test11: |
501 ; CHECK-NEXT: param i32, i32{{$}} | 505 ; CHECK-NEXT: param i32, i32{{$}} |
502 ; CHECK-NEXT: i32.store $discard=, 40($0), $1{{$}} | 506 ; CHECK-NEXT: i32.store 40($0), $1{{$}} |
503 ; CHECK-NEXT: return{{$}} | 507 ; CHECK-NEXT: return{{$}} |
504 define void @store_test11(i32* %p, i32 %i) { | 508 define void @store_test11(i32* %p, i32 %i) { |
505 %arrayidx = getelementptr inbounds i32, i32* %p, i32 10 | 509 %arrayidx = getelementptr inbounds i32, i32* %p, i32 10 |
506 store i32 %i, i32* %arrayidx, align 4 | 510 store i32 %i, i32* %arrayidx, align 4 |
507 ret void | 511 ret void |
509 | 513 |
510 ; CHECK-LABEL: store_test11_noinbounds: | 514 ; CHECK-LABEL: store_test11_noinbounds: |
511 ; CHECK-NEXT: param i32, i32{{$}} | 515 ; CHECK-NEXT: param i32, i32{{$}} |
512 ; CHECK-NEXT: i32.const $push0=, 40{{$}} | 516 ; CHECK-NEXT: i32.const $push0=, 40{{$}} |
513 ; CHECK-NEXT: i32.add $push1=, $0, $pop0{{$}} | 517 ; CHECK-NEXT: i32.add $push1=, $0, $pop0{{$}} |
514 ; CHECK-NEXT: i32.store $discard=, 0($pop1), $1{{$}} | 518 ; CHECK-NEXT: i32.store 0($pop1), $1{{$}} |
515 ; CHECK-NEXT: return{{$}} | 519 ; CHECK-NEXT: return{{$}} |
516 define void @store_test11_noinbounds(i32* %p, i32 %i) { | 520 define void @store_test11_noinbounds(i32* %p, i32 %i) { |
517 %arrayidx = getelementptr i32, i32* %p, i32 10 | 521 %arrayidx = getelementptr i32, i32* %p, i32 10 |
518 store i32 %i, i32* %arrayidx, align 4 | 522 store i32 %i, i32* %arrayidx, align 4 |
519 ret void | 523 ret void |
521 | 525 |
522 ; CHECK-LABEL: store_test12: | 526 ; CHECK-LABEL: store_test12: |
523 ; CHECK-NEXT: param i32, i32, i32{{$}} | 527 ; CHECK-NEXT: param i32, i32, i32{{$}} |
524 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 528 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
525 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} | 529 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} |
526 ; CHECK-NEXT: i32.add $push2=, $pop1, $0{{$}} | 530 ; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} |
527 ; CHECK-NEXT: i32.const $push3=, 40{{$}} | 531 ; CHECK-NEXT: i32.const $push3=, 40{{$}} |
528 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} | 532 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} |
529 ; CHECK-NEXT: i32.store $discard=, 0($pop4), $2{{$}} | 533 ; CHECK-NEXT: i32.store 0($pop4), $2{{$}} |
530 ; CHECK-NEXT: return{{$}} | 534 ; CHECK-NEXT: return{{$}} |
531 define void @store_test12(i32* %p, i32 %n, i32 %i) { | 535 define void @store_test12(i32* %p, i32 %n, i32 %i) { |
532 %add = add nsw i32 %n, 10 | 536 %add = add nsw i32 %n, 10 |
533 %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add | 537 %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add |
534 store i32 %i, i32* %arrayidx, align 4 | 538 store i32 %i, i32* %arrayidx, align 4 |
537 | 541 |
538 ; CHECK-LABEL: store_test13: | 542 ; CHECK-LABEL: store_test13: |
539 ; CHECK-NEXT: param i32, i32, i32{{$}} | 543 ; CHECK-NEXT: param i32, i32, i32{{$}} |
540 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 544 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
541 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} | 545 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} |
542 ; CHECK-NEXT: i32.add $push2=, $pop1, $0{{$}} | 546 ; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} |
543 ; CHECK-NEXT: i32.const $push3=, 40{{$}} | 547 ; CHECK-NEXT: i32.const $push3=, 40{{$}} |
544 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} | 548 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} |
545 ; CHECK-NEXT: i32.store $discard=, 0($pop4), $2{{$}} | 549 ; CHECK-NEXT: i32.store 0($pop4), $2{{$}} |
546 ; CHECK-NEXT: return{{$}} | 550 ; CHECK-NEXT: return{{$}} |
547 define void @store_test13(i32* %p, i32 %n, i32 %i) { | 551 define void @store_test13(i32* %p, i32 %n, i32 %i) { |
548 %add = add nsw i32 10, %n | 552 %add = add nsw i32 10, %n |
549 %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add | 553 %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add |
550 store i32 %i, i32* %arrayidx, align 4 | 554 store i32 %i, i32* %arrayidx, align 4 |
554 ; CHECK-LABEL: store_test14: | 558 ; CHECK-LABEL: store_test14: |
555 ; CHECK-NEXT: param i32, i32, i32{{$}} | 559 ; CHECK-NEXT: param i32, i32, i32{{$}} |
556 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 560 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
557 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} | 561 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} |
558 ; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} | 562 ; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} |
559 ; CHECK-NEXT: i32.store $discard=, 40($pop2), $2{{$}} | 563 ; CHECK-NEXT: i32.store 40($pop2), $2{{$}} |
560 ; CHECK-NEXT: return{{$}} | 564 ; CHECK-NEXT: return{{$}} |
561 define void @store_test14(i32* %p, i32 %n, i32 %i) { | 565 define void @store_test14(i32* %p, i32 %n, i32 %i) { |
562 %add.ptr = getelementptr inbounds i32, i32* %p, i32 %n | 566 %add.ptr = getelementptr inbounds i32, i32* %p, i32 %n |
563 %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10 | 567 %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10 |
564 store i32 %i, i32* %add.ptr1, align 4 | 568 store i32 %i, i32* %add.ptr1, align 4 |
570 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 574 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
571 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} | 575 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} |
572 ; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} | 576 ; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} |
573 ; CHECK-NEXT: i32.const $push3=, 40{{$}} | 577 ; CHECK-NEXT: i32.const $push3=, 40{{$}} |
574 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} | 578 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} |
575 ; CHECK-NEXT: i32.store $discard=, 0($pop4), $2{{$}} | 579 ; CHECK-NEXT: i32.store 0($pop4), $2{{$}} |
576 ; CHECK-NEXT: return{{$}} | 580 ; CHECK-NEXT: return{{$}} |
577 define void @store_test15(i32* %p, i32 %n, i32 %i) { | 581 define void @store_test15(i32* %p, i32 %n, i32 %i) { |
578 %add.ptr = getelementptr inbounds i32, i32* %p, i32 10 | 582 %add.ptr = getelementptr inbounds i32, i32* %p, i32 10 |
579 %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 %n | 583 %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 %n |
580 store i32 %i, i32* %add.ptr1, align 4 | 584 store i32 %i, i32* %add.ptr1, align 4 |
586 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 590 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
587 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} | 591 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} |
588 ; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} | 592 ; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} |
589 ; CHECK-NEXT: i32.const $push3=, 40{{$}} | 593 ; CHECK-NEXT: i32.const $push3=, 40{{$}} |
590 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} | 594 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} |
591 ; CHECK-NEXT: i32.store $discard=, 0($pop4), $2{{$}} | 595 ; CHECK-NEXT: i32.store 0($pop4), $2{{$}} |
592 ; CHECK-NEXT: return{{$}} | 596 ; CHECK-NEXT: return{{$}} |
593 define void @store_test16(i32* %p, i32 %n, i32 %i) { | 597 define void @store_test16(i32* %p, i32 %n, i32 %i) { |
594 %add.ptr = getelementptr inbounds i32, i32* %p, i32 10 | 598 %add.ptr = getelementptr inbounds i32, i32* %p, i32 10 |
595 %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 %n | 599 %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 %n |
596 store i32 %i, i32* %add.ptr1, align 4 | 600 store i32 %i, i32* %add.ptr1, align 4 |
599 | 603 |
600 ; CHECK-LABEL: store_test17: | 604 ; CHECK-LABEL: store_test17: |
601 ; CHECK-NEXT: param i32, i32, i32{{$}} | 605 ; CHECK-NEXT: param i32, i32, i32{{$}} |
602 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 606 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
603 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} | 607 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} |
604 ; CHECK-NEXT: i32.add $push2=, $pop1, $0{{$}} | 608 ; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} |
605 ; CHECK-NEXT: i32.const $push3=, 40{{$}} | 609 ; CHECK-NEXT: i32.const $push3=, 40{{$}} |
606 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} | 610 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} |
607 ; CHECK-NEXT: i32.store $discard=, 0($pop4), $2{{$}} | 611 ; CHECK-NEXT: i32.store 0($pop4), $2{{$}} |
608 ; CHECK-NEXT: return{{$}} | 612 ; CHECK-NEXT: return{{$}} |
609 define void @store_test17(i32* %p, i32 %n, i32 %i) { | 613 define void @store_test17(i32* %p, i32 %n, i32 %i) { |
610 %add = add nsw i32 %n, 10 | 614 %add = add nsw i32 %n, 10 |
611 %add.ptr = getelementptr inbounds i32, i32* %p, i32 %add | 615 %add.ptr = getelementptr inbounds i32, i32* %p, i32 %add |
612 store i32 %i, i32* %add.ptr, align 4 | 616 store i32 %i, i32* %add.ptr, align 4 |
616 ; CHECK-LABEL: store_test18: | 620 ; CHECK-LABEL: store_test18: |
617 ; CHECK-NEXT: param i32, i32, i32{{$}} | 621 ; CHECK-NEXT: param i32, i32, i32{{$}} |
618 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 622 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
619 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} | 623 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} |
620 ; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} | 624 ; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} |
621 ; CHECK-NEXT: i32.store $discard=, 40($pop2), $2{{$}} | 625 ; CHECK-NEXT: i32.store 40($pop2), $2{{$}} |
622 ; CHECK-NEXT: return{{$}} | 626 ; CHECK-NEXT: return{{$}} |
623 define void @store_test18(i32* %p, i32 %n, i32 %i) { | 627 define void @store_test18(i32* %p, i32 %n, i32 %i) { |
624 %add.ptr = getelementptr inbounds i32, i32* %p, i32 %n | 628 %add.ptr = getelementptr inbounds i32, i32* %p, i32 %n |
625 %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10 | 629 %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10 |
626 store i32 %i, i32* %add.ptr1, align 4 | 630 store i32 %i, i32* %add.ptr1, align 4 |
629 | 633 |
630 ; CHECK-LABEL: store_test19: | 634 ; CHECK-LABEL: store_test19: |
631 ; CHECK-NEXT: param i32, i32, i32{{$}} | 635 ; CHECK-NEXT: param i32, i32, i32{{$}} |
632 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 636 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
633 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} | 637 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} |
634 ; CHECK-NEXT: i32.add $push2=, $pop1, $0{{$}} | 638 ; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} |
635 ; CHECK-NEXT: i32.const $push3=, 40{{$}} | 639 ; CHECK-NEXT: i32.const $push3=, 40{{$}} |
636 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} | 640 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} |
637 ; CHECK-NEXT: i32.store $discard=, 0($pop4), $2{{$}} | 641 ; CHECK-NEXT: i32.store 0($pop4), $2{{$}} |
638 ; CHECK-NEXT: return{{$}} | 642 ; CHECK-NEXT: return{{$}} |
639 define void @store_test19(i32* %p, i32 %n, i32 %i) { | 643 define void @store_test19(i32* %p, i32 %n, i32 %i) { |
640 %add = add nsw i32 10, %n | 644 %add = add nsw i32 10, %n |
641 %add.ptr = getelementptr inbounds i32, i32* %p, i32 %add | 645 %add.ptr = getelementptr inbounds i32, i32* %p, i32 %add |
642 store i32 %i, i32* %add.ptr, align 4 | 646 store i32 %i, i32* %add.ptr, align 4 |
645 | 649 |
646 ; CHECK-LABEL: store_test20: | 650 ; CHECK-LABEL: store_test20: |
647 ; CHECK-NEXT: param i32, i32{{$}} | 651 ; CHECK-NEXT: param i32, i32{{$}} |
648 ; CHECK-NEXT: i32.const $push0=, -40{{$}} | 652 ; CHECK-NEXT: i32.const $push0=, -40{{$}} |
649 ; CHECK-NEXT: i32.add $push1=, $0, $pop0{{$}} | 653 ; CHECK-NEXT: i32.add $push1=, $0, $pop0{{$}} |
650 ; CHECK-NEXT: i32.store $discard=, 0($pop1), $1{{$}} | 654 ; CHECK-NEXT: i32.store 0($pop1), $1{{$}} |
651 ; CHECK-NEXT: return{{$}} | 655 ; CHECK-NEXT: return{{$}} |
652 define void @store_test20(i32* %p, i32 %i) { | 656 define void @store_test20(i32* %p, i32 %i) { |
653 %arrayidx = getelementptr inbounds i32, i32* %p, i32 -10 | 657 %arrayidx = getelementptr inbounds i32, i32* %p, i32 -10 |
654 store i32 %i, i32* %arrayidx, align 4 | 658 store i32 %i, i32* %arrayidx, align 4 |
655 ret void | 659 ret void |
657 | 661 |
658 ; CHECK-LABEL: store_test21: | 662 ; CHECK-LABEL: store_test21: |
659 ; CHECK-NEXT: param i32, i32, i32{{$}} | 663 ; CHECK-NEXT: param i32, i32, i32{{$}} |
660 ; CHECK-NEXT: i32.const $push0=, 2{{$}} | 664 ; CHECK-NEXT: i32.const $push0=, 2{{$}} |
661 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} | 665 ; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} |
662 ; CHECK-NEXT: i32.add $push2=, $pop1, $0{{$}} | 666 ; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} |
663 ; CHECK-NEXT: i32.const $push3=, -40{{$}} | 667 ; CHECK-NEXT: i32.const $push3=, -40{{$}} |
664 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} | 668 ; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} |
665 ; CHECK-NEXT: i32.store $discard=, 0($pop4), $2{{$}} | 669 ; CHECK-NEXT: i32.store 0($pop4), $2{{$}} |
666 ; CHECK-NEXT: return{{$}} | 670 ; CHECK-NEXT: return{{$}} |
667 define void @store_test21(i32* %p, i32 %n, i32 %i) { | 671 define void @store_test21(i32* %p, i32 %n, i32 %i) { |
668 %add = add nsw i32 %n, -10 | 672 %add = add nsw i32 %n, -10 |
669 %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add | 673 %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add |
670 store i32 %i, i32* %arrayidx, align 4 | 674 store i32 %i, i32* %arrayidx, align 4 |