@@ -33,32 +33,12 @@ entry:
33
33
}
34
34
35
35
define 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
62
42
;
63
43
entry:
64
44
%incdec.ptr = getelementptr inbounds i32 , ptr %src , i64 1
@@ -84,18 +64,9 @@ entry:
84
64
define void @sub0 (ptr noalias %dst , ptr noalias %src ) {
85
65
; CHECK-LABEL: @sub0(
86
66
; 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
99
70
; CHECK-NEXT: ret void
100
71
;
101
72
entry:
@@ -182,18 +153,9 @@ entry:
182
153
define void @addsub0 (ptr noalias %dst , ptr noalias %src ) {
183
154
; CHECK-LABEL: @addsub0(
184
155
; 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
197
159
; CHECK-NEXT: ret void
198
160
;
199
161
entry:
@@ -220,18 +182,9 @@ entry:
220
182
define void @addsub1 (ptr noalias %dst , ptr noalias %src ) {
221
183
; CHECK-LABEL: @addsub1(
222
184
; 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
235
188
; CHECK-NEXT: ret void
236
189
;
237
190
entry:
0 commit comments