@@ -33,32 +33,12 @@ entry:
3333}
3434
3535define void @add1 (ptr noalias %dst , ptr noalias %src ) {
36- ; NON-POW2-LABEL: @add1(
37- ; NON-POW2-NEXT: entry:
38- ; NON-POW2-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[SRC:%.*]], i64 1
39- ; NON-POW2-NEXT: [[TMP0:%.*]] = load i32, ptr [[SRC]], align 4
40- ; NON-POW2-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds i32, ptr [[DST:%.*]], i64 1
41- ; NON-POW2-NEXT: store i32 [[TMP0]], ptr [[DST]], align 4
42- ; NON-POW2-NEXT: [[TMP1:%.*]] = load <3 x i32>, ptr [[INCDEC_PTR]], align 4
43- ; NON-POW2-NEXT: [[TMP2:%.*]] = add nsw <3 x i32> [[TMP1]], <i32 1, i32 2, i32 3>
44- ; NON-POW2-NEXT: store <3 x i32> [[TMP2]], ptr [[INCDEC_PTR1]], align 4
45- ; NON-POW2-NEXT: ret void
46- ;
47- ; POW2-ONLY-LABEL: @add1(
48- ; POW2-ONLY-NEXT: entry:
49- ; POW2-ONLY-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[SRC:%.*]], i64 1
50- ; POW2-ONLY-NEXT: [[TMP0:%.*]] = load i32, ptr [[SRC]], align 4
51- ; POW2-ONLY-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds i32, ptr [[DST:%.*]], i64 1
52- ; POW2-ONLY-NEXT: store i32 [[TMP0]], ptr [[DST]], align 4
53- ; POW2-ONLY-NEXT: [[INCDEC_PTR5:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i64 3
54- ; POW2-ONLY-NEXT: [[INCDEC_PTR7:%.*]] = getelementptr inbounds i32, ptr [[DST]], i64 3
55- ; POW2-ONLY-NEXT: [[TMP1:%.*]] = load <2 x i32>, ptr [[INCDEC_PTR]], align 4
56- ; POW2-ONLY-NEXT: [[TMP2:%.*]] = add nsw <2 x i32> [[TMP1]], <i32 1, i32 2>
57- ; POW2-ONLY-NEXT: store <2 x i32> [[TMP2]], ptr [[INCDEC_PTR1]], align 4
58- ; POW2-ONLY-NEXT: [[TMP3:%.*]] = load i32, ptr [[INCDEC_PTR5]], align 4
59- ; POW2-ONLY-NEXT: [[ADD9:%.*]] = add nsw i32 [[TMP3]], 3
60- ; POW2-ONLY-NEXT: store i32 [[ADD9]], ptr [[INCDEC_PTR7]], align 4
61- ; POW2-ONLY-NEXT: ret void
36+ ; CHECK-LABEL: @add1(
37+ ; CHECK-NEXT: entry:
38+ ; CHECK-NEXT: [[TMP0:%.*]] = load <4 x i32>, ptr [[SRC:%.*]], align 4
39+ ; CHECK-NEXT: [[TMP1:%.*]] = add <4 x i32> [[TMP0]], <i32 0, i32 1, i32 2, i32 3>
40+ ; CHECK-NEXT: store <4 x i32> [[TMP1]], ptr [[DST:%.*]], align 4
41+ ; CHECK-NEXT: ret void
6242;
6343entry:
6444 %incdec.ptr = getelementptr inbounds i32 , ptr %src , i64 1
@@ -84,18 +64,9 @@ entry:
8464define void @sub0 (ptr noalias %dst , ptr noalias %src ) {
8565; CHECK-LABEL: @sub0(
8666; CHECK-NEXT: entry:
87- ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[SRC:%.*]], i64 1
88- ; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[SRC]], align 4
89- ; CHECK-NEXT: [[SUB:%.*]] = add nsw i32 [[TMP0]], -1
90- ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds i32, ptr [[DST:%.*]], i64 1
91- ; CHECK-NEXT: store i32 [[SUB]], ptr [[DST]], align 4
92- ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i64 2
93- ; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[INCDEC_PTR]], align 4
94- ; CHECK-NEXT: [[INCDEC_PTR3:%.*]] = getelementptr inbounds i32, ptr [[DST]], i64 2
95- ; CHECK-NEXT: store i32 [[TMP1]], ptr [[INCDEC_PTR1]], align 4
96- ; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i32>, ptr [[INCDEC_PTR2]], align 4
97- ; CHECK-NEXT: [[TMP3:%.*]] = add nsw <2 x i32> [[TMP2]], <i32 -2, i32 -3>
98- ; CHECK-NEXT: store <2 x i32> [[TMP3]], ptr [[INCDEC_PTR3]], align 4
67+ ; CHECK-NEXT: [[TMP0:%.*]] = load <4 x i32>, ptr [[SRC:%.*]], align 4
68+ ; CHECK-NEXT: [[TMP1:%.*]] = add nsw <4 x i32> [[TMP0]], <i32 -1, i32 0, i32 -2, i32 -3>
69+ ; CHECK-NEXT: store <4 x i32> [[TMP1]], ptr [[DST:%.*]], align 4
9970; CHECK-NEXT: ret void
10071;
10172entry:
@@ -182,18 +153,9 @@ entry:
182153define void @addsub0 (ptr noalias %dst , ptr noalias %src ) {
183154; CHECK-LABEL: @addsub0(
184155; CHECK-NEXT: entry:
185- ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[SRC:%.*]], i64 1
186- ; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[SRC]], align 4
187- ; CHECK-NEXT: [[SUB:%.*]] = add nsw i32 [[TMP0]], -1
188- ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds i32, ptr [[DST:%.*]], i64 1
189- ; CHECK-NEXT: store i32 [[SUB]], ptr [[DST]], align 4
190- ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i64 2
191- ; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[INCDEC_PTR]], align 4
192- ; CHECK-NEXT: [[INCDEC_PTR3:%.*]] = getelementptr inbounds i32, ptr [[DST]], i64 2
193- ; CHECK-NEXT: store i32 [[TMP1]], ptr [[INCDEC_PTR1]], align 4
194- ; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i32>, ptr [[INCDEC_PTR2]], align 4
195- ; CHECK-NEXT: [[TMP5:%.*]] = add nsw <2 x i32> [[TMP2]], <i32 -2, i32 3>
196- ; CHECK-NEXT: store <2 x i32> [[TMP5]], ptr [[INCDEC_PTR3]], align 4
156+ ; CHECK-NEXT: [[TMP0:%.*]] = load <4 x i32>, ptr [[SRC:%.*]], align 4
157+ ; CHECK-NEXT: [[TMP1:%.*]] = add nsw <4 x i32> [[TMP0]], <i32 -1, i32 0, i32 -2, i32 3>
158+ ; CHECK-NEXT: store <4 x i32> [[TMP1]], ptr [[DST:%.*]], align 4
197159; CHECK-NEXT: ret void
198160;
199161entry:
@@ -220,18 +182,9 @@ entry:
220182define void @addsub1 (ptr noalias %dst , ptr noalias %src ) {
221183; CHECK-LABEL: @addsub1(
222184; CHECK-NEXT: entry:
223- ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds i32, ptr [[SRC:%.*]], i64 2
224- ; CHECK-NEXT: [[INCDEC_PTR3:%.*]] = getelementptr inbounds i32, ptr [[DST:%.*]], i64 2
225- ; CHECK-NEXT: [[TMP0:%.*]] = load <2 x i32>, ptr [[SRC]], align 4
226- ; CHECK-NEXT: [[TMP3:%.*]] = add nsw <2 x i32> [[TMP0]], <i32 -1, i32 1>
227- ; CHECK-NEXT: store <2 x i32> [[TMP3]], ptr [[DST]], align 4
228- ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i64 3
229- ; CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[INCDEC_PTR2]], align 4
230- ; CHECK-NEXT: [[INCDEC_PTR6:%.*]] = getelementptr inbounds i32, ptr [[DST]], i64 3
231- ; CHECK-NEXT: store i32 [[TMP4]], ptr [[INCDEC_PTR3]], align 4
232- ; CHECK-NEXT: [[TMP5:%.*]] = load i32, ptr [[INCDEC_PTR4]], align 4
233- ; CHECK-NEXT: [[SUB8:%.*]] = sub nsw i32 [[TMP5]], -3
234- ; CHECK-NEXT: store i32 [[SUB8]], ptr [[INCDEC_PTR6]], align 4
185+ ; CHECK-NEXT: [[TMP0:%.*]] = load <4 x i32>, ptr [[SRC:%.*]], align 4
186+ ; CHECK-NEXT: [[TMP1:%.*]] = add nsw <4 x i32> [[TMP0]], <i32 -1, i32 1, i32 0, i32 3>
187+ ; CHECK-NEXT: store <4 x i32> [[TMP1]], ptr [[DST:%.*]], align 4
235188; CHECK-NEXT: ret void
236189;
237190entry:
0 commit comments