@@ -121,6 +121,7 @@ exit:
121
121
; compare against the obstructing stores (%l2 versus the store) there is no
122
122
; dependency. However, the other load in %l2's interleave group (%l3) does
123
123
; obstruct with the store.
124
+ ; FIXME: The test case is currently mis-compiled.
124
125
define void @pr63602_2 (ptr %arr ) {
125
126
; CHECK-LABEL: define void @pr63602_2
126
127
; CHECK-SAME: (ptr [[ARR:%.*]]) {
@@ -139,64 +140,40 @@ define void @pr63602_2(ptr %arr) {
139
140
; CHECK-NEXT: [[TMP5:%.*]] = mul i64 [[INDEX]], 3
140
141
; CHECK-NEXT: [[OFFSET_IDX2:%.*]] = add i64 1, [[TMP5]]
141
142
; CHECK-NEXT: [[TMP6:%.*]] = add i64 [[OFFSET_IDX2]], 0
142
- ; CHECK-NEXT: [[TMP7:%.*]] = add i64 [[OFFSET_IDX2]], 3
143
- ; CHECK-NEXT: [[TMP8:%.*]] = add i64 [[OFFSET_IDX2]], 6
144
- ; CHECK-NEXT: [[TMP9:%.*]] = add i64 [[OFFSET_IDX2]], 9
145
- ; CHECK-NEXT: [[TMP10:%.*]] = add nuw nsw i64 [[TMP6]], 4
146
- ; CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds i32, ptr [[ARR]], i64 [[TMP10]]
147
- ; CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds i32, ptr [[TMP11]], i32 0
148
- ; CHECK-NEXT: [[WIDE_VEC:%.*]] = load <12 x i32>, ptr [[TMP12]], align 4
143
+ ; CHECK-NEXT: [[TMP7:%.*]] = add nuw nsw i64 [[TMP6]], 4
144
+ ; CHECK-NEXT: [[TMP8:%.*]] = getelementptr inbounds i32, ptr [[ARR]], i64 [[TMP7]]
145
+ ; CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds i32, ptr [[TMP8]], i32 -2
146
+ ; CHECK-NEXT: [[WIDE_VEC:%.*]] = load <12 x i32>, ptr [[TMP9]], align 4
149
147
; CHECK-NEXT: [[STRIDED_VEC:%.*]] = shufflevector <12 x i32> [[WIDE_VEC]], <12 x i32> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>
150
- ; CHECK-NEXT: [[TMP13:%.*]] = getelementptr inbounds i32, ptr [[ARR]], i64 [[TMP1]]
151
- ; CHECK-NEXT: [[TMP14:%.*]] = getelementptr inbounds i32, ptr [[ARR]], i64 [[TMP2]]
152
- ; CHECK-NEXT: [[TMP15:%.*]] = getelementptr inbounds i32, ptr [[ARR]], i64 [[TMP3]]
153
- ; CHECK-NEXT: [[TMP16:%.*]] = getelementptr inbounds i32, ptr [[ARR]], i64 [[TMP4]]
154
- ; CHECK-NEXT: [[TMP17:%.*]] = extractelement <4 x i32> [[STRIDED_VEC]], i32 0
148
+ ; CHECK-NEXT: [[STRIDED_VEC3:%.*]] = shufflevector <12 x i32> [[WIDE_VEC]], <12 x i32> poison, <4 x i32> <i32 1, i32 4, i32 7, i32 10>
149
+ ; CHECK-NEXT: [[STRIDED_VEC4:%.*]] = shufflevector <12 x i32> [[WIDE_VEC]], <12 x i32> poison, <4 x i32> <i32 2, i32 5, i32 8, i32 11>
150
+ ; CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds i32, ptr [[ARR]], i64 [[TMP1]]
151
+ ; CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds i32, ptr [[ARR]], i64 [[TMP2]]
152
+ ; CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds i32, ptr [[ARR]], i64 [[TMP3]]
153
+ ; CHECK-NEXT: [[TMP13:%.*]] = getelementptr inbounds i32, ptr [[ARR]], i64 [[TMP4]]
154
+ ; CHECK-NEXT: [[TMP14:%.*]] = extractelement <4 x i32> [[STRIDED_VEC4]], i32 0
155
+ ; CHECK-NEXT: store i32 [[TMP14]], ptr [[TMP10]], align 4
156
+ ; CHECK-NEXT: [[TMP15:%.*]] = extractelement <4 x i32> [[STRIDED_VEC4]], i32 1
157
+ ; CHECK-NEXT: store i32 [[TMP15]], ptr [[TMP11]], align 4
158
+ ; CHECK-NEXT: [[TMP16:%.*]] = extractelement <4 x i32> [[STRIDED_VEC4]], i32 2
159
+ ; CHECK-NEXT: store i32 [[TMP16]], ptr [[TMP12]], align 4
160
+ ; CHECK-NEXT: [[TMP17:%.*]] = extractelement <4 x i32> [[STRIDED_VEC4]], i32 3
155
161
; CHECK-NEXT: store i32 [[TMP17]], ptr [[TMP13]], align 4
156
- ; CHECK-NEXT: [[TMP18:%.*]] = extractelement <4 x i32> [[STRIDED_VEC]], i32 1
157
- ; CHECK-NEXT: store i32 [[TMP18]], ptr [[TMP14]], align 4
158
- ; CHECK-NEXT: [[TMP19:%.*]] = extractelement <4 x i32> [[STRIDED_VEC]], i32 2
159
- ; CHECK-NEXT: store i32 [[TMP19]], ptr [[TMP15]], align 4
160
- ; CHECK-NEXT: [[TMP20:%.*]] = extractelement <4 x i32> [[STRIDED_VEC]], i32 3
161
- ; CHECK-NEXT: store i32 [[TMP20]], ptr [[TMP16]], align 4
162
- ; CHECK-NEXT: [[TMP21:%.*]] = add nuw nsw i64 [[TMP6]], 2
163
- ; CHECK-NEXT: [[TMP22:%.*]] = add nuw nsw i64 [[TMP7]], 2
164
- ; CHECK-NEXT: [[TMP23:%.*]] = add nuw nsw i64 [[TMP8]], 2
165
- ; CHECK-NEXT: [[TMP24:%.*]] = add nuw nsw i64 [[TMP9]], 2
166
- ; CHECK-NEXT: [[TMP25:%.*]] = getelementptr inbounds i32, ptr [[ARR]], i64 [[TMP21]]
167
- ; CHECK-NEXT: [[TMP26:%.*]] = getelementptr inbounds i32, ptr [[ARR]], i64 [[TMP22]]
168
- ; CHECK-NEXT: [[TMP27:%.*]] = getelementptr inbounds i32, ptr [[ARR]], i64 [[TMP23]]
169
- ; CHECK-NEXT: [[TMP28:%.*]] = getelementptr inbounds i32, ptr [[ARR]], i64 [[TMP24]]
170
- ; CHECK-NEXT: [[TMP29:%.*]] = load i32, ptr [[TMP13]], align 4
171
- ; CHECK-NEXT: [[TMP30:%.*]] = load i32, ptr [[TMP14]], align 4
172
- ; CHECK-NEXT: [[TMP31:%.*]] = load i32, ptr [[TMP15]], align 4
173
- ; CHECK-NEXT: [[TMP32:%.*]] = load i32, ptr [[TMP16]], align 4
174
- ; CHECK-NEXT: [[TMP33:%.*]] = insertelement <4 x i32> poison, i32 [[TMP29]], i32 0
175
- ; CHECK-NEXT: [[TMP34:%.*]] = insertelement <4 x i32> [[TMP33]], i32 [[TMP30]], i32 1
176
- ; CHECK-NEXT: [[TMP35:%.*]] = insertelement <4 x i32> [[TMP34]], i32 [[TMP31]], i32 2
177
- ; CHECK-NEXT: [[TMP36:%.*]] = insertelement <4 x i32> [[TMP35]], i32 [[TMP32]], i32 3
178
- ; CHECK-NEXT: [[TMP37:%.*]] = load i32, ptr [[TMP25]], align 4
179
- ; CHECK-NEXT: [[TMP38:%.*]] = load i32, ptr [[TMP26]], align 4
180
- ; CHECK-NEXT: [[TMP39:%.*]] = load i32, ptr [[TMP27]], align 4
181
- ; CHECK-NEXT: [[TMP40:%.*]] = load i32, ptr [[TMP28]], align 4
182
- ; CHECK-NEXT: [[TMP41:%.*]] = insertelement <4 x i32> poison, i32 [[TMP37]], i32 0
183
- ; CHECK-NEXT: [[TMP42:%.*]] = insertelement <4 x i32> [[TMP41]], i32 [[TMP38]], i32 1
184
- ; CHECK-NEXT: [[TMP43:%.*]] = insertelement <4 x i32> [[TMP42]], i32 [[TMP39]], i32 2
185
- ; CHECK-NEXT: [[TMP44:%.*]] = insertelement <4 x i32> [[TMP43]], i32 [[TMP40]], i32 3
186
- ; CHECK-NEXT: [[TMP45:%.*]] = add <4 x i32> [[TMP36]], [[TMP44]]
187
- ; CHECK-NEXT: [[TMP46:%.*]] = extractelement <4 x i32> [[TMP45]], i32 0
188
- ; CHECK-NEXT: store i32 [[TMP46]], ptr [[TMP13]], align 4
189
- ; CHECK-NEXT: [[TMP47:%.*]] = extractelement <4 x i32> [[TMP45]], i32 1
190
- ; CHECK-NEXT: store i32 [[TMP47]], ptr [[TMP14]], align 4
191
- ; CHECK-NEXT: [[TMP48:%.*]] = extractelement <4 x i32> [[TMP45]], i32 2
192
- ; CHECK-NEXT: store i32 [[TMP48]], ptr [[TMP15]], align 4
193
- ; CHECK-NEXT: [[TMP49:%.*]] = extractelement <4 x i32> [[TMP45]], i32 3
194
- ; CHECK-NEXT: store i32 [[TMP49]], ptr [[TMP16]], align 4
162
+ ; CHECK-NEXT: [[TMP18:%.*]] = add <4 x i32> [[STRIDED_VEC3]], [[STRIDED_VEC]]
163
+ ; CHECK-NEXT: [[TMP19:%.*]] = extractelement <4 x i32> [[TMP18]], i32 0
164
+ ; CHECK-NEXT: store i32 [[TMP19]], ptr [[TMP10]], align 4
165
+ ; CHECK-NEXT: [[TMP20:%.*]] = extractelement <4 x i32> [[TMP18]], i32 1
166
+ ; CHECK-NEXT: store i32 [[TMP20]], ptr [[TMP11]], align 4
167
+ ; CHECK-NEXT: [[TMP21:%.*]] = extractelement <4 x i32> [[TMP18]], i32 2
168
+ ; CHECK-NEXT: store i32 [[TMP21]], ptr [[TMP12]], align 4
169
+ ; CHECK-NEXT: [[TMP22:%.*]] = extractelement <4 x i32> [[TMP18]], i32 3
170
+ ; CHECK-NEXT: store i32 [[TMP22]], ptr [[TMP13]], align 4
195
171
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
196
- ; CHECK-NEXT: [[TMP50 :%.*]] = icmp eq i64 [[INDEX_NEXT]], 16
197
- ; CHECK-NEXT: br i1 [[TMP50 ]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]
172
+ ; CHECK-NEXT: [[TMP23 :%.*]] = icmp eq i64 [[INDEX_NEXT]], 16
173
+ ; CHECK-NEXT: br i1 [[TMP23 ]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]
198
174
; CHECK: middle.block:
199
- ; CHECK-NEXT: br label [[SCALAR_PH]]
175
+ ; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i64 17, 16
176
+ ; CHECK-NEXT: br i1 [[CMP_N]], label [[EXIT:%.*]], label [[SCALAR_PH]]
200
177
; CHECK: scalar.ph:
201
178
; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 49, [[MIDDLE_BLOCK]] ], [ 1, [[ENTRY:%.*]] ]
202
179
; CHECK-NEXT: [[BC_RESUME_VAL1:%.*]] = phi i64 [ 52, [[MIDDLE_BLOCK]] ], [ 4, [[ENTRY]] ]
@@ -218,7 +195,7 @@ define void @pr63602_2(ptr %arr) {
218
195
; CHECK-NEXT: store i32 [[ADD]], ptr [[GEP_IV_2]], align 4
219
196
; CHECK-NEXT: [[IV_2_NEXT]] = add nuw nsw i64 [[IV_2]], 3
220
197
; CHECK-NEXT: [[ICMP:%.*]] = icmp ugt i64 [[IV_2]], 50
221
- ; CHECK-NEXT: br i1 [[ICMP]], label [[EXIT:%.* ]], label [[LOOP]], !llvm.loop [[LOOP5:![0-9]+]]
198
+ ; CHECK-NEXT: br i1 [[ICMP]], label [[EXIT]], label [[LOOP]], !llvm.loop [[LOOP5:![0-9]+]]
222
199
; CHECK: exit:
223
200
; CHECK-NEXT: ret void
224
201
;
0 commit comments