@@ -23,7 +23,7 @@ define void @single_stride(ptr noalias %A, ptr noalias %B, i64 %N, i64 %stride)
23
23
; CHECK-NEXT: Equal predicate: %stride == 1
24
24
; CHECK-EMPTY:
25
25
; CHECK-NEXT: Expressions re-written:
26
- ; CHECK-NEXT: [PSE] %gep.A = getelementptr inbounds i32, ptr %A, i64 %mul:
26
+ ; CHECK-NEXT: [PSE] %gep.A = getelementptr nusw i32, ptr %A, i64 %mul:
27
27
; CHECK-NEXT: {%A,+,(4 * %stride)}<%loop>
28
28
; CHECK-NEXT: --> {%A,+,4}<%loop>
29
29
;
@@ -33,13 +33,13 @@ entry:
33
33
loop:
34
34
%iv = phi i64 [ 0 , %entry ], [ %iv.next , %loop ]
35
35
%mul = mul i64 %iv , %stride
36
- %gep.A = getelementptr inbounds i32 , ptr %A , i64 %mul
36
+ %gep.A = getelementptr nusw i32 , ptr %A , i64 %mul
37
37
%load = load i32 , ptr %gep.A , align 4
38
- %gep.B = getelementptr inbounds i32 , ptr %B , i64 %iv
38
+ %gep.B = getelementptr nusw i32 , ptr %B , i64 %iv
39
39
%load_1 = load i32 , ptr %gep.B , align 4
40
40
%add = add i32 %load_1 , %load
41
41
%iv.next = add nuw nsw i64 %iv , 1
42
- %gep.A.next = getelementptr inbounds i32 , ptr %A , i64 %iv.next
42
+ %gep.A.next = getelementptr nusw i32 , ptr %A , i64 %iv.next
43
43
store i32 %add , ptr %gep.A.next , align 4
44
44
%exitcond = icmp eq i64 %iv.next , %N
45
45
br i1 %exitcond , label %exit , label %loop
@@ -67,7 +67,7 @@ define void @single_stride_struct(ptr noalias %A, ptr noalias %B, i64 %N, i64 %s
67
67
; CHECK-NEXT: Equal predicate: %stride == 1
68
68
; CHECK-EMPTY:
69
69
; CHECK-NEXT: Expressions re-written:
70
- ; CHECK-NEXT: [PSE] %gep.A = getelementptr inbounds { i32, i8 }, ptr %A, i64 %mul:
70
+ ; CHECK-NEXT: [PSE] %gep.A = getelementptr nusw { i32, i8 }, ptr %A, i64 %mul:
71
71
; CHECK-NEXT: {%A,+,(8 * %stride)}<%loop>
72
72
; CHECK-NEXT: --> {%A,+,8}<%loop>
73
73
;
@@ -77,16 +77,16 @@ entry:
77
77
loop:
78
78
%iv = phi i64 [ 0 , %entry ], [ %iv.next , %loop ]
79
79
%mul = mul i64 %iv , %stride
80
- %gep.A = getelementptr inbounds { i32 , i8 }, ptr %A , i64 %mul
80
+ %gep.A = getelementptr nusw { i32 , i8 }, ptr %A , i64 %mul
81
81
%load = load { i32 , i8 }, ptr %gep.A , align 4
82
- %gep.B = getelementptr inbounds { i32 , i8 }, ptr %B , i64 %iv
82
+ %gep.B = getelementptr nusw { i32 , i8 }, ptr %B , i64 %iv
83
83
%load_1 = load { i32 , i8 }, ptr %gep.B , align 4
84
84
%v1 = extractvalue { i32 , i8 } %load , 0
85
85
%v2 = extractvalue { i32 , i8 } %load_1 , 0
86
86
%add = add i32 %v1 , %v2
87
87
%ins = insertvalue { i32 , i8 } undef , i32 %add , 0
88
88
%iv.next = add nuw nsw i64 %iv , 1
89
- %gep.A.next = getelementptr inbounds { i32 , i8 }, ptr %A , i64 %iv.next
89
+ %gep.A.next = getelementptr nusw { i32 , i8 }, ptr %A , i64 %iv.next
90
90
store { i32 , i8 } %ins , ptr %gep.A.next , align 4
91
91
%exitcond = icmp eq i64 %iv.next , %N
92
92
br i1 %exitcond , label %exit , label %loop
@@ -105,7 +105,7 @@ define void @single_stride_castexpr(i32 %offset, ptr %src, ptr %dst, i1 %cond) {
105
105
; CHECK-NEXT: Comparing group ([[GRP1:0x[0-9a-f]+]]):
106
106
; CHECK-NEXT: %gep.dst = getelementptr i32, ptr %dst, i64 %iv.2
107
107
; CHECK-NEXT: Against group ([[GRP2:0x[0-9a-f]+]]):
108
- ; CHECK-NEXT: %gep.src = getelementptr inbounds i32, ptr %src, i32 %iv.3
108
+ ; CHECK-NEXT: %gep.src = getelementptr nusw i32, ptr %src, i32 %iv.3
109
109
; CHECK-NEXT: Grouped accesses:
110
110
; CHECK-NEXT: Group [[GRP1]]:
111
111
; CHECK-NEXT: (Low: ((4 * %iv.1) + %dst) High: (804 + (4 * %iv.1) + %dst))
@@ -144,7 +144,7 @@ outer.header:
144
144
inner.loop:
145
145
%iv.2 = phi i64 [ %iv.1 , %outer.header ], [ %iv.2.next , %inner.loop ]
146
146
%iv.3 = phi i32 [ 0 , %outer.header ], [ %iv.3.next , %inner.loop ]
147
- %gep.src = getelementptr inbounds i32 , ptr %src , i32 %iv.3
147
+ %gep.src = getelementptr nusw i32 , ptr %src , i32 %iv.3
148
148
%load = load i32 , ptr %gep.src , align 8
149
149
%gep.dst = getelementptr i32 , ptr %dst , i64 %iv.2
150
150
store i32 %load , ptr %gep.dst , align 8
@@ -167,7 +167,7 @@ define void @single_stride_castexpr_multiuse(i32 %offset, ptr %src, ptr %dst, i1
167
167
; CHECK-NEXT: Comparing group ([[GRP3:0x[0-9a-f]+]]):
168
168
; CHECK-NEXT: %gep.dst = getelementptr i32, ptr %dst, i64 %iv.2
169
169
; CHECK-NEXT: Against group ([[GRP4:0x[0-9a-f]+]]):
170
- ; CHECK-NEXT: %gep.src = getelementptr inbounds i32, ptr %src, i64 %iv.3
170
+ ; CHECK-NEXT: %gep.src = getelementptr nusw i32, ptr %src, i64 %iv.3
171
171
; CHECK-NEXT: Grouped accesses:
172
172
; CHECK-NEXT: Group [[GRP3]]:
173
173
; CHECK-NEXT: (Low: ((4 * %iv.1) + %dst) High: (804 + (4 * %iv.1) + (-4 * (zext i32 %offset to i64))<nsw> + %dst))
@@ -181,7 +181,7 @@ define void @single_stride_castexpr_multiuse(i32 %offset, ptr %src, ptr %dst, i1
181
181
; CHECK-NEXT: Equal predicate: %offset == 1
182
182
; CHECK-EMPTY:
183
183
; CHECK-NEXT: Expressions re-written:
184
- ; CHECK-NEXT: [PSE] %gep.src = getelementptr inbounds i32, ptr %src, i64 %iv.3:
184
+ ; CHECK-NEXT: [PSE] %gep.src = getelementptr nusw i32, ptr %src, i64 %iv.3:
185
185
; CHECK-NEXT: {((4 * (zext i32 %offset to i64))<nuw><nsw> + %src),+,4}<%inner.loop>
186
186
; CHECK-NEXT: --> {(4 + %src),+,4}<%inner.loop>
187
187
; CHECK-NEXT: [PSE] %gep.dst = getelementptr i32, ptr %dst, i64 %iv.2:
@@ -210,7 +210,7 @@ outer.header:
210
210
inner.loop:
211
211
%iv.2 = phi i64 [ %iv.1 , %outer.header ], [ %iv.2.next , %inner.loop ]
212
212
%iv.3 = phi i64 [ %offset.zext , %outer.header ], [ %iv.3.next , %inner.loop ]
213
- %gep.src = getelementptr inbounds i32 , ptr %src , i64 %iv.3
213
+ %gep.src = getelementptr nusw i32 , ptr %src , i64 %iv.3
214
214
%load = load i32 , ptr %gep.src , align 8
215
215
%gep.dst = getelementptr i32 , ptr %dst , i64 %iv.2
216
216
store i32 %load , ptr %gep.dst , align 8
@@ -291,10 +291,10 @@ define void @two_strides(ptr noalias %A, ptr noalias %B, i64 %N, i64 %stride.1,
291
291
; CHECK-NEXT: Equal predicate: %stride.1 == 1
292
292
; CHECK-EMPTY:
293
293
; CHECK-NEXT: Expressions re-written:
294
- ; CHECK-NEXT: [PSE] %gep.A = getelementptr inbounds i32, ptr %A, i64 %mul:
294
+ ; CHECK-NEXT: [PSE] %gep.A = getelementptr nusw i32, ptr %A, i64 %mul:
295
295
; CHECK-NEXT: {%A,+,(4 * %stride.1)}<%loop>
296
296
; CHECK-NEXT: --> {%A,+,4}<%loop>
297
- ; CHECK-NEXT: [PSE] %gep.A.next = getelementptr inbounds i32, ptr %A, i64 %mul.2:
297
+ ; CHECK-NEXT: [PSE] %gep.A.next = getelementptr nusw i32, ptr %A, i64 %mul.2:
298
298
; CHECK-NEXT: {((4 * %stride.2) + %A),+,(4 * %stride.2)}<%loop>
299
299
; CHECK-NEXT: --> {(4 + %A),+,4}<%loop>
300
300
;
@@ -304,14 +304,14 @@ entry:
304
304
loop:
305
305
%iv = phi i64 [ 0 , %entry ], [ %iv.next , %loop ]
306
306
%mul = mul i64 %iv , %stride.1
307
- %gep.A = getelementptr inbounds i32 , ptr %A , i64 %mul
307
+ %gep.A = getelementptr nusw i32 , ptr %A , i64 %mul
308
308
%load = load i32 , ptr %gep.A , align 4
309
- %gep.B = getelementptr inbounds i32 , ptr %B , i64 %iv
309
+ %gep.B = getelementptr nusw i32 , ptr %B , i64 %iv
310
310
%load_1 = load i32 , ptr %gep.B , align 4
311
311
%add = add i32 %load_1 , %load
312
312
%iv.next = add nuw nsw i64 %iv , 1
313
313
%mul.2 = mul i64 %iv.next , %stride.2
314
- %gep.A.next = getelementptr inbounds i32 , ptr %A , i64 %mul.2
314
+ %gep.A.next = getelementptr nusw i32 , ptr %A , i64 %mul.2
315
315
store i32 %add , ptr %gep.A.next , align 4
316
316
%exitcond = icmp eq i64 %iv.next , %N
317
317
br i1 %exitcond , label %exit , label %loop
@@ -344,13 +344,13 @@ entry:
344
344
loop:
345
345
%iv = phi i64 [ 0 , %entry ], [ %iv.next , %loop ]
346
346
%mul = mul i64 %iv , %stride
347
- %gep.A = getelementptr inbounds i32 , ptr %A , i64 %mul
347
+ %gep.A = getelementptr nusw i32 , ptr %A , i64 %mul
348
348
%load = load i32 , ptr %gep.A , align 4
349
- %gep.B = getelementptr inbounds i32 , ptr %B , i64 %iv
349
+ %gep.B = getelementptr nusw i32 , ptr %B , i64 %iv
350
350
%load_1 = load i32 , ptr %gep.B , align 4
351
351
%add = add i32 %load_1 , %load
352
352
%iv.next = add nuw nsw i64 %iv , 1
353
- %gep.A.next = getelementptr inbounds i32 , ptr %A , i64 %iv.next
353
+ %gep.A.next = getelementptr nusw i32 , ptr %A , i64 %iv.next
354
354
store i32 %add , ptr %gep.A.next , align 4
355
355
%exitcond = icmp eq i64 %iv.next , %stride
356
356
br i1 %exitcond , label %exit , label %loop
@@ -372,7 +372,7 @@ define void @unknown_stride_equalto_tc(i32 %N, ptr %A, ptr %B, i32 %j) {
372
372
; CHECK-NEXT: Comparing group ([[GRP5:0x[0-9a-f]+]]):
373
373
; CHECK-NEXT: ptr %A
374
374
; CHECK-NEXT: Against group ([[GRP6:0x[0-9a-f]+]]):
375
- ; CHECK-NEXT: %arrayidx = getelementptr inbounds i16, ptr %B, i32 %add
375
+ ; CHECK-NEXT: %arrayidx = getelementptr nusw i16, ptr %B, i32 %add
376
376
; CHECK-NEXT: Grouped accesses:
377
377
; CHECK-NEXT: Group [[GRP5]]:
378
378
; CHECK-NEXT: (Low: %A High: (4 + %A))
@@ -386,7 +386,7 @@ define void @unknown_stride_equalto_tc(i32 %N, ptr %A, ptr %B, i32 %j) {
386
386
; CHECK-NEXT: {%j,+,%N}<%loop> Added Flags: <nssw>
387
387
; CHECK-EMPTY:
388
388
; CHECK-NEXT: Expressions re-written:
389
- ; CHECK-NEXT: [PSE] %arrayidx = getelementptr inbounds i16, ptr %B, i32 %add:
389
+ ; CHECK-NEXT: [PSE] %arrayidx = getelementptr nusw i16, ptr %B, i32 %add:
390
390
; CHECK-NEXT: ((2 * (sext i32 {%j,+,%N}<%loop> to i64))<nsw> + %B)
391
391
; CHECK-NEXT: --> {((2 * (sext i32 %j to i64))<nsw> + %B),+,(2 * (sext i32 %N to i64))<nsw>}<%loop>
392
392
;
@@ -398,7 +398,7 @@ loop:
398
398
%iv = phi i32 [ 0 , %entry ], [ %iv.next , %loop ]
399
399
%mul = mul i32 %iv , %N
400
400
%add = add i32 %mul , %j
401
- %arrayidx = getelementptr inbounds i16 , ptr %B , i32 %add
401
+ %arrayidx = getelementptr nusw i16 , ptr %B , i32 %add
402
402
%load = load i16 , ptr %arrayidx
403
403
%sext = sext i16 %load to i32
404
404
store i32 %sext , ptr %A
@@ -423,7 +423,7 @@ define void @unknown_stride_equalto_zext_tc(i16 zeroext %N, ptr %A, ptr %B, i32
423
423
; CHECK-NEXT: Comparing group ([[GRP7:0x[0-9a-f]+]]):
424
424
; CHECK-NEXT: ptr %A
425
425
; CHECK-NEXT: Against group ([[GRP8:0x[0-9a-f]+]]):
426
- ; CHECK-NEXT: %arrayidx = getelementptr inbounds i16, ptr %B, i32 %add
426
+ ; CHECK-NEXT: %arrayidx = getelementptr nusw i16, ptr %B, i32 %add
427
427
; CHECK-NEXT: Grouped accesses:
428
428
; CHECK-NEXT: Group [[GRP7]]:
429
429
; CHECK-NEXT: (Low: %A High: (4 + %A))
@@ -437,7 +437,7 @@ define void @unknown_stride_equalto_zext_tc(i16 zeroext %N, ptr %A, ptr %B, i32
437
437
; CHECK-NEXT: {%j,+,(zext i16 %N to i32)}<nw><%loop> Added Flags: <nssw>
438
438
; CHECK-EMPTY:
439
439
; CHECK-NEXT: Expressions re-written:
440
- ; CHECK-NEXT: [PSE] %arrayidx = getelementptr inbounds i16, ptr %B, i32 %add:
440
+ ; CHECK-NEXT: [PSE] %arrayidx = getelementptr nusw i16, ptr %B, i32 %add:
441
441
; CHECK-NEXT: ((2 * (sext i32 {%j,+,(zext i16 %N to i32)}<nw><%loop> to i64))<nsw> + %B)
442
442
; CHECK-NEXT: --> {((2 * (sext i32 %j to i64))<nsw> + %B),+,(2 * (zext i16 %N to i64))<nuw><nsw>}<%loop>
443
443
;
@@ -450,7 +450,7 @@ loop:
450
450
%iv = phi i32 [ 0 , %entry ], [ %iv.next , %loop ]
451
451
%mul = mul nuw i32 %iv , %N.ext
452
452
%add = add i32 %mul , %j
453
- %arrayidx = getelementptr inbounds i16 , ptr %B , i32 %add
453
+ %arrayidx = getelementptr nusw i16 , ptr %B , i32 %add
454
454
%load = load i16 , ptr %arrayidx
455
455
%sext = sext i16 %load to i32
456
456
store i32 %sext , ptr %A
@@ -474,7 +474,7 @@ define void @unknown_stride_equalto_sext_tc(i16 %N, ptr %A, ptr %B, i32 %j) {
474
474
; CHECK-NEXT: Comparing group ([[GRP9:0x[0-9a-f]+]]):
475
475
; CHECK-NEXT: ptr %A
476
476
; CHECK-NEXT: Against group ([[GRP10:0x[0-9a-f]+]]):
477
- ; CHECK-NEXT: %arrayidx = getelementptr inbounds i16, ptr %B, i32 %add
477
+ ; CHECK-NEXT: %arrayidx = getelementptr nusw i16, ptr %B, i32 %add
478
478
; CHECK-NEXT: Grouped accesses:
479
479
; CHECK-NEXT: Group [[GRP9]]:
480
480
; CHECK-NEXT: (Low: %A High: (4 + %A))
@@ -488,7 +488,7 @@ define void @unknown_stride_equalto_sext_tc(i16 %N, ptr %A, ptr %B, i32 %j) {
488
488
; CHECK-NEXT: {%j,+,(sext i16 %N to i32)}<nw><%loop> Added Flags: <nssw>
489
489
; CHECK-EMPTY:
490
490
; CHECK-NEXT: Expressions re-written:
491
- ; CHECK-NEXT: [PSE] %arrayidx = getelementptr inbounds i16, ptr %B, i32 %add:
491
+ ; CHECK-NEXT: [PSE] %arrayidx = getelementptr nusw i16, ptr %B, i32 %add:
492
492
; CHECK-NEXT: ((2 * (sext i32 {%j,+,(sext i16 %N to i32)}<nw><%loop> to i64))<nsw> + %B)
493
493
; CHECK-NEXT: --> {((2 * (sext i32 %j to i64))<nsw> + %B),+,(2 * (sext i16 %N to i64))<nsw>}<%loop>
494
494
;
@@ -501,7 +501,7 @@ loop:
501
501
%iv = phi i32 [ 0 , %entry ], [ %iv.next , %loop ]
502
502
%mul = mul nuw i32 %iv , %N.ext
503
503
%add = add i32 %mul , %j
504
- %arrayidx = getelementptr inbounds i16 , ptr %B , i32 %add
504
+ %arrayidx = getelementptr nusw i16 , ptr %B , i32 %add
505
505
%load = load i16 , ptr %arrayidx
506
506
%sext = sext i16 %load to i32
507
507
store i32 %sext , ptr %A
@@ -525,7 +525,7 @@ define void @unknown_stride_equalto_trunc_tc(i64 %N, ptr %A, ptr %B, i32 %j) {
525
525
; CHECK-NEXT: Comparing group ([[GRP11:0x[0-9a-f]+]]):
526
526
; CHECK-NEXT: ptr %A
527
527
; CHECK-NEXT: Against group ([[GRP12:0x[0-9a-f]+]]):
528
- ; CHECK-NEXT: %arrayidx = getelementptr inbounds i16, ptr %B, i32 %add
528
+ ; CHECK-NEXT: %arrayidx = getelementptr nusw i16, ptr %B, i32 %add
529
529
; CHECK-NEXT: Grouped accesses:
530
530
; CHECK-NEXT: Group [[GRP11]]:
531
531
; CHECK-NEXT: (Low: %A High: (4 + %A))
@@ -539,7 +539,7 @@ define void @unknown_stride_equalto_trunc_tc(i64 %N, ptr %A, ptr %B, i32 %j) {
539
539
; CHECK-NEXT: {%j,+,(trunc i64 %N to i32)}<nw><%loop> Added Flags: <nssw>
540
540
; CHECK-EMPTY:
541
541
; CHECK-NEXT: Expressions re-written:
542
- ; CHECK-NEXT: [PSE] %arrayidx = getelementptr inbounds i16, ptr %B, i32 %add:
542
+ ; CHECK-NEXT: [PSE] %arrayidx = getelementptr nusw i16, ptr %B, i32 %add:
543
543
; CHECK-NEXT: ((2 * (sext i32 {%j,+,(trunc i64 %N to i32)}<nw><%loop> to i64))<nsw> + %B)
544
544
; CHECK-NEXT: --> {((2 * (sext i32 %j to i64))<nsw> + %B),+,(2 * (sext i32 (trunc i64 %N to i32) to i64))<nsw>}<%loop>
545
545
;
@@ -552,7 +552,7 @@ loop:
552
552
%iv = phi i32 [ 0 , %entry ], [ %iv.next , %loop ]
553
553
%mul = mul nuw i32 %iv , %N.trunc
554
554
%add = add i32 %mul , %j
555
- %arrayidx = getelementptr inbounds i16 , ptr %B , i32 %add
555
+ %arrayidx = getelementptr nusw i16 , ptr %B , i32 %add
556
556
%load = load i16 , ptr %arrayidx
557
557
%sext = sext i16 %load to i32
558
558
store i32 %sext , ptr %A
0 commit comments