Skip to content

Commit 2a7de12

Browse files
committed
DSE/test: improve tests; address review
1 parent 27e7001 commit 2a7de12

File tree

2 files changed

+107
-94
lines changed

2 files changed

+107
-94
lines changed

llvm/test/Transforms/DeadStoreElimination/offsetted-overlapping-stores.ll

Lines changed: 70 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -50,92 +50,92 @@ bb:
5050
define void @ScalableVectorTestFullyOverlapping(ptr %arg, i32 %i) vscale_range(1, 2) {
5151
; CHECK-LABEL: @ScalableVectorTestFullyOverlapping(
5252
; CHECK-NEXT: bb:
53-
; CHECK-NEXT: [[I7:%.*]] = add nuw nsw i32 [[I:%.*]], 1
54-
; CHECK-NEXT: [[I8:%.*]] = zext i32 [[I7]] to i64
55-
; CHECK-NEXT: [[I9:%.*]] = getelementptr inbounds float, ptr [[ARG:%.*]], i64 [[I8]]
56-
; CHECK-NEXT: store float 0.000000e+00, ptr [[I9]], align 4
57-
; CHECK-NEXT: [[I2:%.*]] = zext i32 [[I]] to i64
58-
; CHECK-NEXT: [[I3:%.*]] = getelementptr inbounds float, ptr [[ARG]], i64 [[I2]]
59-
; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[I3]], align 8
53+
; CHECK-NEXT: [[I_1:%.*]] = add nuw nsw i32 [[I:%.*]], 1
54+
; CHECK-NEXT: [[EXT_I_1:%.*]] = zext i32 [[I_1]] to i64
55+
; CHECK-NEXT: [[GEP_ARG_I_1:%.*]] = getelementptr inbounds float, ptr [[ARG:%.*]], i64 [[EXT_I_1]]
56+
; CHECK-NEXT: store float 0.000000e+00, ptr [[GEP_ARG_I_1]], align 4
57+
; CHECK-NEXT: [[EXT_I:%.*]] = zext i32 [[I]] to i64
58+
; CHECK-NEXT: [[GEP_ARG_I:%.*]] = getelementptr inbounds float, ptr [[ARG]], i64 [[EXT_I]]
59+
; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[GEP_ARG_I]], align 8
6060
; CHECK-NEXT: ret void
6161
;
6262
bb:
63-
%i7 = add nuw nsw i32 %i, 1
64-
%i8 = zext i32 %i7 to i64
65-
%i9 = getelementptr inbounds float, ptr %arg, i64 %i8
66-
store float 0.0, ptr %i9
67-
%i2 = zext i32 %i to i64
68-
%i3 = getelementptr inbounds float, ptr %arg, i64 %i2
69-
store <vscale x 2 x float> zeroinitializer, ptr %i3
63+
%i.1 = add nuw nsw i32 %i, 1
64+
%ext.i.1 = zext i32 %i.1 to i64
65+
%gep.arg.i.1 = getelementptr inbounds float, ptr %arg, i64 %ext.i.1
66+
store float 0.0, ptr %gep.arg.i.1
67+
%ext.i = zext i32 %i to i64
68+
%gep.arg.i = getelementptr inbounds float, ptr %arg, i64 %ext.i
69+
store <vscale x 2 x float> zeroinitializer, ptr %gep.arg.i
7070
ret void
7171
}
7272

7373
define void @ScalableVectorTestFullyOverlapping2(ptr %arg, i32 %i) {
7474
; CHECK-LABEL: @ScalableVectorTestFullyOverlapping2(
7575
; CHECK-NEXT: bb:
76-
; CHECK-NEXT: [[I7:%.*]] = add nuw nsw i32 [[I:%.*]], 1
77-
; CHECK-NEXT: [[I8:%.*]] = zext i32 [[I7]] to i64
78-
; CHECK-NEXT: [[I9:%.*]] = getelementptr inbounds float, ptr [[ARG:%.*]], i64 [[I8]]
79-
; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[I9]], align 8
80-
; CHECK-NEXT: [[I2:%.*]] = zext i32 [[I]] to i64
81-
; CHECK-NEXT: [[I3:%.*]] = getelementptr inbounds float, ptr [[ARG]], i64 [[I2]]
82-
; CHECK-NEXT: store <vscale x 4 x float> zeroinitializer, ptr [[I3]], align 16
76+
; CHECK-NEXT: [[I_1:%.*]] = add nuw nsw i32 [[I:%.*]], 1
77+
; CHECK-NEXT: [[EXT_I_1:%.*]] = zext i32 [[I_1]] to i64
78+
; CHECK-NEXT: [[GEP_ARG_I_1:%.*]] = getelementptr inbounds float, ptr [[ARG:%.*]], i64 [[EXT_I_1]]
79+
; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[GEP_ARG_I_1]], align 8
80+
; CHECK-NEXT: [[EXT_I:%.*]] = zext i32 [[I]] to i64
81+
; CHECK-NEXT: [[GEP_ARG_I:%.*]] = getelementptr inbounds float, ptr [[ARG]], i64 [[EXT_I]]
82+
; CHECK-NEXT: store <vscale x 4 x float> zeroinitializer, ptr [[GEP_ARG_I]], align 16
8383
; CHECK-NEXT: ret void
8484
;
8585
bb:
86-
%i7 = add nuw nsw i32 %i, 1
87-
%i8 = zext i32 %i7 to i64
88-
%i9 = getelementptr inbounds float, ptr %arg, i64 %i8
89-
store <vscale x 2 x float> zeroinitializer, ptr %i9
90-
%i2 = zext i32 %i to i64
91-
%i3 = getelementptr inbounds float, ptr %arg, i64 %i2
92-
store <vscale x 4 x float> zeroinitializer, ptr %i3
86+
%i.1 = add nuw nsw i32 %i, 1
87+
%ext.i.1 = zext i32 %i.1 to i64
88+
%gep.arg.i.1 = getelementptr inbounds float, ptr %arg, i64 %ext.i.1
89+
store <vscale x 2 x float> zeroinitializer, ptr %gep.arg.i.1
90+
%ext.i = zext i32 %i to i64
91+
%gep.arg.i = getelementptr inbounds float, ptr %arg, i64 %ext.i
92+
store <vscale x 4 x float> zeroinitializer, ptr %gep.arg.i
9393
ret void
9494
}
9595

9696
define void @ScalableVectorTestNonOverlapping(ptr %arg, i32 %i) vscale_range(1, 2) {
9797
; CHECK-LABEL: @ScalableVectorTestNonOverlapping(
9898
; CHECK-NEXT: bb:
99-
; CHECK-NEXT: [[I7:%.*]] = add nuw nsw i32 [[I:%.*]], 10
100-
; CHECK-NEXT: [[I8:%.*]] = zext i32 [[I7]] to i64
101-
; CHECK-NEXT: [[I9:%.*]] = getelementptr inbounds float, ptr [[ARG:%.*]], i64 [[I8]]
102-
; CHECK-NEXT: store float 0.000000e+00, ptr [[I9]], align 4
103-
; CHECK-NEXT: [[I2:%.*]] = zext i32 [[I]] to i64
104-
; CHECK-NEXT: [[I3:%.*]] = getelementptr inbounds float, ptr [[ARG]], i64 [[I2]]
105-
; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[I3]], align 8
99+
; CHECK-NEXT: [[I_10:%.*]] = add nuw nsw i32 [[I:%.*]], 10
100+
; CHECK-NEXT: [[EXT_I_10:%.*]] = zext i32 [[I_10]] to i64
101+
; CHECK-NEXT: [[GEP_ARG_I_10:%.*]] = getelementptr inbounds float, ptr [[ARG:%.*]], i64 [[EXT_I_10]]
102+
; CHECK-NEXT: store float 0.000000e+00, ptr [[GEP_ARG_I_10]], align 4
103+
; CHECK-NEXT: [[EXT_I:%.*]] = zext i32 [[I]] to i64
104+
; CHECK-NEXT: [[GEP_ARG_I:%.*]] = getelementptr inbounds float, ptr [[ARG]], i64 [[EXT_I]]
105+
; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[GEP_ARG_I]], align 8
106106
; CHECK-NEXT: ret void
107107
;
108108
bb:
109-
%i7 = add nuw nsw i32 %i, 10
110-
%i8 = zext i32 %i7 to i64
111-
%i9 = getelementptr inbounds float, ptr %arg, i64 %i8
112-
store float 0.0, ptr %i9
113-
%i2 = zext i32 %i to i64
114-
%i3 = getelementptr inbounds float, ptr %arg, i64 %i2
115-
store <vscale x 2 x float> zeroinitializer, ptr %i3
109+
%i.10 = add nuw nsw i32 %i, 10
110+
%ext.i.10 = zext i32 %i.10 to i64
111+
%gep.arg.i.10 = getelementptr inbounds float, ptr %arg, i64 %ext.i.10
112+
store float 0.0, ptr %gep.arg.i.10
113+
%ext.i = zext i32 %i to i64
114+
%gep.arg.i = getelementptr inbounds float, ptr %arg, i64 %ext.i
115+
store <vscale x 2 x float> zeroinitializer, ptr %gep.arg.i
116116
ret void
117117
}
118118

119119
define void @ScalableVectorTestNonOverlapping2(ptr %arg, i32 %i) vscale_range(1, 2) {
120120
; CHECK-LABEL: @ScalableVectorTestNonOverlapping2(
121121
; CHECK-NEXT: bb:
122-
; CHECK-NEXT: [[I7:%.*]] = add nuw nsw i32 [[I:%.*]], 10
123-
; CHECK-NEXT: [[I8:%.*]] = zext i32 [[I7]] to i64
124-
; CHECK-NEXT: [[I9:%.*]] = getelementptr inbounds float, ptr [[ARG:%.*]], i64 [[I8]]
125-
; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[I9]], align 8
126-
; CHECK-NEXT: [[I2:%.*]] = zext i32 [[I]] to i64
127-
; CHECK-NEXT: [[I3:%.*]] = getelementptr inbounds float, ptr [[ARG]], i64 [[I2]]
128-
; CHECK-NEXT: store <vscale x 4 x float> zeroinitializer, ptr [[I3]], align 16
122+
; CHECK-NEXT: [[I_10:%.*]] = add nuw nsw i32 [[I:%.*]], 10
123+
; CHECK-NEXT: [[EXT_I_10:%.*]] = zext i32 [[I_10]] to i64
124+
; CHECK-NEXT: [[GEP_ARG_I_10:%.*]] = getelementptr inbounds float, ptr [[ARG:%.*]], i64 [[EXT_I_10]]
125+
; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[GEP_ARG_I_10]], align 8
126+
; CHECK-NEXT: [[EXT_I:%.*]] = zext i32 [[I]] to i64
127+
; CHECK-NEXT: [[GEP_ARG_I:%.*]] = getelementptr inbounds float, ptr [[ARG]], i64 [[EXT_I]]
128+
; CHECK-NEXT: store <vscale x 4 x float> zeroinitializer, ptr [[GEP_ARG_I]], align 16
129129
; CHECK-NEXT: ret void
130130
;
131131
bb:
132-
%i7 = add nuw nsw i32 %i, 10
133-
%i8 = zext i32 %i7 to i64
134-
%i9 = getelementptr inbounds float, ptr %arg, i64 %i8
135-
store <vscale x 2 x float> zeroinitializer, ptr %i9
136-
%i2 = zext i32 %i to i64
137-
%i3 = getelementptr inbounds float, ptr %arg, i64 %i2
138-
store <vscale x 4 x float> zeroinitializer, ptr %i3
132+
%i.10 = add nuw nsw i32 %i, 10
133+
%ext.i.10 = zext i32 %i.10 to i64
134+
%gep.arg.i.10 = getelementptr inbounds float, ptr %arg, i64 %ext.i.10
135+
store <vscale x 2 x float> zeroinitializer, ptr %gep.arg.i.10
136+
%ext.i = zext i32 %i to i64
137+
%gep.arg.i = getelementptr inbounds float, ptr %arg, i64 %ext.i
138+
store <vscale x 4 x float> zeroinitializer, ptr %gep.arg.i
139139
ret void
140140
}
141141

@@ -196,23 +196,23 @@ define void @ScalableVectorTestPartiallyOverlapping(ptr %arg, i32 %i) {
196196
;
197197
; CHECK-LABEL: @ScalableVectorTestPartiallyOverlapping(
198198
; CHECK-NEXT: bb:
199-
; CHECK-NEXT: [[I2:%.*]] = zext i32 [[I:%.*]] to i64
200-
; CHECK-NEXT: [[I3:%.*]] = getelementptr inbounds float, ptr [[ARG:%.*]], i64 [[I2]]
201-
; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[I3]], align 8
202-
; CHECK-NEXT: [[I5:%.*]] = add nuw nsw i32 [[I]], 1
203-
; CHECK-NEXT: [[I6:%.*]] = zext i32 [[I5]] to i64
204-
; CHECK-NEXT: [[I7:%.*]] = getelementptr inbounds float, ptr [[ARG]], i64 [[I6]]
205-
; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[I7]], align 8
199+
; CHECK-NEXT: [[EXT_I:%.*]] = zext i32 [[I:%.*]] to i64
200+
; CHECK-NEXT: [[GEP_ARG_I:%.*]] = getelementptr inbounds float, ptr [[ARG:%.*]], i64 [[EXT_I]]
201+
; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[GEP_ARG_I]], align 8
202+
; CHECK-NEXT: [[I_1:%.*]] = add nuw nsw i32 [[I]], 1
203+
; CHECK-NEXT: [[EXT_I_1:%.*]] = zext i32 [[I_1]] to i64
204+
; CHECK-NEXT: [[GEP_ARG_I_1:%.*]] = getelementptr inbounds float, ptr [[ARG]], i64 [[EXT_I_1]]
205+
; CHECK-NEXT: store <vscale x 2 x float> zeroinitializer, ptr [[GEP_ARG_I_1]], align 8
206206
; CHECK-NEXT: ret void
207207
;
208208
bb:
209-
%i2 = zext i32 %i to i64
210-
%i3 = getelementptr inbounds float, ptr %arg, i64 %i2
211-
store <vscale x 2 x float> zeroinitializer, ptr %i3
212-
%i5 = add nuw nsw i32 %i, 1
213-
%i6 = zext i32 %i5 to i64
214-
%i7 = getelementptr inbounds float, ptr %arg, i64 %i6
215-
store <vscale x 2 x float> zeroinitializer, ptr %i7
209+
%ext.i = zext i32 %i to i64
210+
%gep.arg.i = getelementptr inbounds float, ptr %arg, i64 %ext.i
211+
store <vscale x 2 x float> zeroinitializer, ptr %gep.arg.i
212+
%i.1 = add nuw nsw i32 %i, 1
213+
%ext.i.1 = zext i32 %i.1 to i64
214+
%gep.arg.i.1 = getelementptr inbounds float, ptr %arg, i64 %ext.i.1
215+
store <vscale x 2 x float> zeroinitializer, ptr %gep.arg.i.1
216216
ret void
217217
}
218218

llvm/test/Transforms/DeadStoreElimination/stores-of-existing-values.ll

Lines changed: 37 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -658,78 +658,91 @@ exit:
658658

659659
define void @scalable_scalable_redundant_store(ptr %ptr) {
660660
; CHECK-LABEL: @scalable_scalable_redundant_store(
661-
; CHECK-NEXT: [[GEP:%.*]] = getelementptr i64, ptr [[PTR:%.*]], i64 2
662-
; CHECK-NEXT: store <vscale x 2 x i64> zeroinitializer, ptr [[GEP]], align 16
661+
; CHECK-NEXT: [[GEP_PTR_2:%.*]] = getelementptr i64, ptr [[PTR:%.*]], i64 2
662+
; CHECK-NEXT: store <vscale x 2 x i64> zeroinitializer, ptr [[GEP_PTR_2]], align 16
663663
; CHECK-NEXT: store <vscale x 4 x i64> zeroinitializer, ptr [[PTR]], align 32
664664
; CHECK-NEXT: ret void
665665
;
666-
%gep = getelementptr i64, ptr %ptr, i64 2
667-
store <vscale x 2 x i64> zeroinitializer, ptr %gep
666+
%gep.ptr.2 = getelementptr i64, ptr %ptr, i64 2
667+
store <vscale x 2 x i64> zeroinitializer, ptr %gep.ptr.2
668668
store <vscale x 4 x i64> zeroinitializer, ptr %ptr
669669
ret void
670670
}
671671

672672
define void @scalable_scalable_neg(ptr %ptr) {
673673
; CHECK-LABEL: @scalable_scalable_neg(
674-
; CHECK-NEXT: [[GEP:%.*]] = getelementptr i64, ptr [[PTR:%.*]], i64 8
675-
; CHECK-NEXT: store <vscale x 4 x i64> zeroinitializer, ptr [[GEP]], align 32
674+
; CHECK-NEXT: [[GEP_PTR_8:%.*]] = getelementptr i64, ptr [[PTR:%.*]], i64 8
675+
; CHECK-NEXT: store <vscale x 4 x i64> zeroinitializer, ptr [[GEP_PTR_8]], align 32
676676
; CHECK-NEXT: store <vscale x 2 x i64> zeroinitializer, ptr [[PTR]], align 16
677677
; CHECK-NEXT: ret void
678678
;
679-
%gep = getelementptr i64, ptr %ptr, i64 8
680-
store <vscale x 4 x i64> zeroinitializer, ptr %gep
679+
%gep.ptr.8 = getelementptr i64, ptr %ptr, i64 8
680+
store <vscale x 4 x i64> zeroinitializer, ptr %gep.ptr.8
681681
store <vscale x 2 x i64> zeroinitializer, ptr %ptr
682682
ret void
683683
}
684684

685+
define void @scalable_scalable_nonconst_offset_neg(ptr %ptr, i64 %i) {
686+
; CHECK-LABEL: @scalable_scalable_nonconst_offset_neg(
687+
; CHECK-NEXT: [[GEP_PTR_I:%.*]] = getelementptr i64, ptr [[PTR:%.*]], i64 [[I:%.*]]
688+
; CHECK-NEXT: store <vscale x 2 x i64> zeroinitializer, ptr [[GEP_PTR_I]], align 16
689+
; CHECK-NEXT: store <vscale x 4 x i64> zeroinitializer, ptr [[PTR]], align 32
690+
; CHECK-NEXT: ret void
691+
;
692+
%gep.ptr.i = getelementptr i64, ptr %ptr, i64 %i
693+
store <vscale x 2 x i64> zeroinitializer, ptr %gep.ptr.i
694+
store <vscale x 4 x i64> zeroinitializer, ptr %ptr
695+
ret void
696+
}
697+
685698
define void @scalable_fixed_redundant_store(ptr %ptr) vscale_range(1, 2) {
686699
; CHECK-LABEL: @scalable_fixed_redundant_store(
687-
; CHECK-NEXT: [[GEP:%.*]] = getelementptr i64, ptr [[PTR:%.*]], i64 2
688-
; CHECK-NEXT: store <2 x i64> zeroinitializer, ptr [[GEP]], align 16
700+
; CHECK-NEXT: [[GEP_PTR_2:%.*]] = getelementptr i64, ptr [[PTR:%.*]], i64 2
701+
; CHECK-NEXT: store <2 x i64> zeroinitializer, ptr [[GEP_PTR_2]], align 16
689702
; CHECK-NEXT: store <vscale x 4 x i64> zeroinitializer, ptr [[PTR]], align 32
690703
; CHECK-NEXT: ret void
691704
;
692-
%gep = getelementptr i64, ptr %ptr, i64 2
693-
store <2 x i64> zeroinitializer, ptr %gep
705+
%gep.ptr.2 = getelementptr i64, ptr %ptr, i64 2
706+
store <2 x i64> zeroinitializer, ptr %gep.ptr.2
694707
store <vscale x 4 x i64> zeroinitializer, ptr %ptr
695708
ret void
696709
}
697710

698711
define void @scalable_fixed_neg(ptr %ptr) vscale_range(1, 2) {
699712
; CHECK-LABEL: @scalable_fixed_neg(
700-
; CHECK-NEXT: [[GEP:%.*]] = getelementptr i64, ptr [[PTR:%.*]], i64 16
701-
; CHECK-NEXT: store <2 x i64> zeroinitializer, ptr [[GEP]], align 16
713+
; CHECK-NEXT: [[GEP_PTR_16:%.*]] = getelementptr i64, ptr [[PTR:%.*]], i64 16
714+
; CHECK-NEXT: store <2 x i64> zeroinitializer, ptr [[GEP_PTR_16]], align 16
702715
; CHECK-NEXT: store <vscale x 4 x i64> zeroinitializer, ptr [[PTR]], align 32
703716
; CHECK-NEXT: ret void
704717
;
705-
%gep = getelementptr i64, ptr %ptr, i64 16
706-
store <2 x i64> zeroinitializer, ptr %gep
718+
%gep.ptr.16 = getelementptr i64, ptr %ptr, i64 16
719+
store <2 x i64> zeroinitializer, ptr %gep.ptr.16
707720
store <vscale x 4 x i64> zeroinitializer, ptr %ptr
708721
ret void
709722
}
710723

711724
define void @fixed_scalable_redundant_store(ptr %ptr) vscale_range(1, 2) {
712725
; CHECK-LABEL: @fixed_scalable_redundant_store(
713-
; CHECK-NEXT: [[GEP:%.*]] = getelementptr i64, ptr [[PTR:%.*]], i64 2
714-
; CHECK-NEXT: store <vscale x 2 x i64> zeroinitializer, ptr [[GEP]], align 16
726+
; CHECK-NEXT: [[GEP_PTR_2:%.*]] = getelementptr i64, ptr [[PTR:%.*]], i64 2
727+
; CHECK-NEXT: store <vscale x 2 x i64> zeroinitializer, ptr [[GEP_PTR_2]], align 16
715728
; CHECK-NEXT: store <8 x i64> zeroinitializer, ptr [[PTR]], align 64
716729
; CHECK-NEXT: ret void
717730
;
718-
%gep = getelementptr i64, ptr %ptr, i64 2
719-
store <vscale x 2 x i64> zeroinitializer, ptr %gep
731+
%gep.ptr.2 = getelementptr i64, ptr %ptr, i64 2
732+
store <vscale x 2 x i64> zeroinitializer, ptr %gep.ptr.2
720733
store <8 x i64> zeroinitializer, ptr %ptr
721734
ret void
722735
}
723736

724737
define void @fixed_scalable_neg(ptr %ptr) vscale_range(1, 2) {
725738
; CHECK-LABEL: @fixed_scalable_neg(
726-
; CHECK-NEXT: [[GEP:%.*]] = getelementptr i64, ptr [[PTR:%.*]], i64 2
727-
; CHECK-NEXT: store <vscale x 2 x i64> zeroinitializer, ptr [[GEP]], align 16
739+
; CHECK-NEXT: [[GEP_PTR_2:%.*]] = getelementptr i64, ptr [[PTR:%.*]], i64 2
740+
; CHECK-NEXT: store <vscale x 2 x i64> zeroinitializer, ptr [[GEP_PTR_2]], align 16
728741
; CHECK-NEXT: store <4 x i64> zeroinitializer, ptr [[PTR]], align 32
729742
; CHECK-NEXT: ret void
730743
;
731-
%gep = getelementptr i64, ptr %ptr, i64 2
732-
store <vscale x 2 x i64> zeroinitializer, ptr %gep
744+
%gep.ptr.2 = getelementptr i64, ptr %ptr, i64 2
745+
store <vscale x 2 x i64> zeroinitializer, ptr %gep.ptr.2
733746
store <4 x i64> zeroinitializer, ptr %ptr
734747
ret void
735748
}

0 commit comments

Comments
 (0)