@@ -8,9 +8,7 @@ define ptr @test_zero(ptr %base, i64 %a) {
8
8
; CHECK-LABEL: define ptr @test_zero(
9
9
; CHECK-SAME: ptr [[BASE:%.*]], i64 [[A:%.*]]) {
10
10
; CHECK-NEXT: entry:
11
- ; CHECK-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[BASE]], i64 -4
12
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i32, ptr [[P1]], i64 [[A]]
13
- ; CHECK-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[TMP0]], i64 4
11
+ ; CHECK-NEXT: [[P2:%.*]] = getelementptr i32, ptr [[BASE]], i64 [[A]]
14
12
; CHECK-NEXT: ret ptr [[P2]]
15
13
;
16
14
entry:
@@ -24,10 +22,9 @@ define ptr @test_nonzero(ptr %base, i64 %a) {
24
22
; CHECK-LABEL: define ptr @test_nonzero(
25
23
; CHECK-SAME: ptr [[BASE:%.*]], i64 [[A:%.*]]) {
26
24
; CHECK-NEXT: entry:
27
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[BASE]], i64 - 4
25
+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[BASE]], i64 4
28
26
; CHECK-NEXT: [[P2:%.*]] = getelementptr i32, ptr [[TMP0]], i64 [[A]]
29
- ; CHECK-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P2]], i64 8
30
- ; CHECK-NEXT: ret ptr [[P3]]
27
+ ; CHECK-NEXT: ret ptr [[P2]]
31
28
;
32
29
entry:
33
30
%p1 = getelementptr i8 , ptr %base , i64 -4
@@ -40,9 +37,7 @@ define ptr @test_or_disjoint(ptr %base, i64 %a) {
40
37
; CHECK-LABEL: define ptr @test_or_disjoint(
41
38
; CHECK-SAME: ptr [[BASE:%.*]], i64 [[A:%.*]]) {
42
39
; CHECK-NEXT: entry:
43
- ; CHECK-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[BASE]], i64 -4
44
- ; CHECK-NEXT: [[INDEX:%.*]] = or disjoint i64 [[A]], 1
45
- ; CHECK-NEXT: [[P2:%.*]] = getelementptr i32, ptr [[P1]], i64 [[INDEX]]
40
+ ; CHECK-NEXT: [[P2:%.*]] = getelementptr i32, ptr [[BASE]], i64 [[A]]
46
41
; CHECK-NEXT: ret ptr [[P2]]
47
42
;
48
43
entry:
@@ -56,10 +51,9 @@ define ptr @test_zero_multiuse_index(ptr %base, i64 %a) {
56
51
; CHECK-LABEL: define ptr @test_zero_multiuse_index(
57
52
; CHECK-SAME: ptr [[BASE:%.*]], i64 [[A:%.*]]) {
58
53
; CHECK-NEXT: entry:
59
- ; CHECK-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[BASE]], i64 -4
60
54
; CHECK-NEXT: [[INDEX:%.*]] = add i64 [[A]], 1
61
55
; CHECK-NEXT: call void @use64(i64 [[INDEX]])
62
- ; CHECK-NEXT: [[P2:%.*]] = getelementptr i32, ptr [[P1 ]], i64 [[INDEX ]]
56
+ ; CHECK-NEXT: [[P2:%.*]] = getelementptr i32, ptr [[BASE ]], i64 [[A ]]
63
57
; CHECK-NEXT: ret ptr [[P2]]
64
58
;
65
59
entry:
@@ -76,8 +70,7 @@ define ptr @test_zero_multiuse_ptr(ptr %base, i64 %a) {
76
70
; CHECK-NEXT: entry:
77
71
; CHECK-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[BASE]], i64 -4
78
72
; CHECK-NEXT: call void @useptr(ptr [[P1]])
79
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i32, ptr [[P1]], i64 [[A]]
80
- ; CHECK-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[TMP0]], i64 4
73
+ ; CHECK-NEXT: [[P2:%.*]] = getelementptr i32, ptr [[BASE]], i64 [[A]]
81
74
; CHECK-NEXT: ret ptr [[P2]]
82
75
;
83
76
entry:
@@ -109,10 +102,8 @@ define ptr @test_zero_trunc_add(ptr %base, i128 %a) {
109
102
; CHECK-LABEL: define ptr @test_zero_trunc_add(
110
103
; CHECK-SAME: ptr [[BASE:%.*]], i128 [[A:%.*]]) {
111
104
; CHECK-NEXT: entry:
112
- ; CHECK-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[BASE]], i64 -4
113
105
; CHECK-NEXT: [[TMP0:%.*]] = trunc i128 [[A]] to i64
114
- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i32, ptr [[P1]], i64 [[TMP0]]
115
- ; CHECK-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[TMP1]], i64 4
106
+ ; CHECK-NEXT: [[P2:%.*]] = getelementptr i32, ptr [[BASE]], i64 [[TMP0]]
116
107
; CHECK-NEXT: ret ptr [[P2]]
117
108
;
118
109
entry:
@@ -126,10 +117,9 @@ define ptr @test_non_i8(ptr %base, i64 %a) {
126
117
; CHECK-LABEL: define ptr @test_non_i8(
127
118
; CHECK-SAME: ptr [[BASE:%.*]], i64 [[A:%.*]]) {
128
119
; CHECK-NEXT: entry:
129
- ; CHECK-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[BASE]], i64 -8
120
+ ; CHECK-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[BASE]], i64 -4
130
121
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i32, ptr [[P1]], i64 [[A]]
131
- ; CHECK-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[TMP0]], i64 4
132
- ; CHECK-NEXT: ret ptr [[P2]]
122
+ ; CHECK-NEXT: ret ptr [[TMP0]]
133
123
;
134
124
entry:
135
125
%p1 = getelementptr i16 , ptr %base , i64 -4
@@ -223,10 +213,9 @@ define ptr @test_smul_overflow(ptr %base, i64 %a) {
223
213
; CHECK-LABEL: define ptr @test_smul_overflow(
224
214
; CHECK-SAME: ptr [[BASE:%.*]], i64 [[A:%.*]]) {
225
215
; CHECK-NEXT: entry:
226
- ; CHECK-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[BASE]], i64 -4
216
+ ; CHECK-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[BASE]], i64 -12
227
217
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i32, ptr [[P1]], i64 [[A]]
228
- ; CHECK-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[TMP0]], i64 -8
229
- ; CHECK-NEXT: ret ptr [[P2]]
218
+ ; CHECK-NEXT: ret ptr [[TMP0]]
230
219
;
231
220
entry:
232
221
%p1 = getelementptr i8 , ptr %base , i64 -4
@@ -239,10 +228,9 @@ define ptr @test_sadd_overflow(ptr %base, i64 %a) {
239
228
; CHECK-LABEL: define ptr @test_sadd_overflow(
240
229
; CHECK-SAME: ptr [[BASE:%.*]], i64 [[A:%.*]]) {
241
230
; CHECK-NEXT: entry:
242
- ; CHECK-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[BASE]], i64 9223372036854775804
231
+ ; CHECK-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[BASE]], i64 -9223372036854775808
243
232
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i32, ptr [[P1]], i64 [[A]]
244
- ; CHECK-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[TMP0]], i64 4
245
- ; CHECK-NEXT: ret ptr [[P2]]
233
+ ; CHECK-NEXT: ret ptr [[TMP0]]
246
234
;
247
235
entry:
248
236
%p1 = getelementptr i8 , ptr %base , i64 9223372036854775804
0 commit comments