@@ -121,7 +121,6 @@ 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.
125
124
define void @pr63602_2 (ptr %arr ) {
126
125
; CHECK-LABEL: define void @pr63602_2
127
126
; CHECK-SAME: (ptr [[ARR:%.*]]) {
@@ -140,40 +139,64 @@ define void @pr63602_2(ptr %arr) {
140
139
; CHECK-NEXT: [[TMP5:%.*]] = mul i64 [[INDEX]], 3
141
140
; CHECK-NEXT: [[OFFSET_IDX2:%.*]] = add i64 1, [[TMP5]]
142
141
; CHECK-NEXT: [[TMP6:%.*]] = add i64 [[OFFSET_IDX2]], 0
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
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
147
149
; 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>
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
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
161
155
; CHECK-NEXT: store i32 [[TMP17]], ptr [[TMP13]], 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
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
171
195
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
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]+]]
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]+]]
174
198
; CHECK: middle.block:
175
- ; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i64 17, 16
176
- ; CHECK-NEXT: br i1 [[CMP_N]], label [[EXIT:%.*]], label [[SCALAR_PH]]
199
+ ; CHECK-NEXT: br label [[SCALAR_PH]]
177
200
; CHECK: scalar.ph:
178
201
; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 49, [[MIDDLE_BLOCK]] ], [ 1, [[ENTRY:%.*]] ]
179
202
; CHECK-NEXT: [[BC_RESUME_VAL1:%.*]] = phi i64 [ 52, [[MIDDLE_BLOCK]] ], [ 4, [[ENTRY]] ]
@@ -195,7 +218,7 @@ define void @pr63602_2(ptr %arr) {
195
218
; CHECK-NEXT: store i32 [[ADD]], ptr [[GEP_IV_2]], align 4
196
219
; CHECK-NEXT: [[IV_2_NEXT]] = add nuw nsw i64 [[IV_2]], 3
197
220
; CHECK-NEXT: [[ICMP:%.*]] = icmp ugt i64 [[IV_2]], 50
198
- ; CHECK-NEXT: br i1 [[ICMP]], label [[EXIT]], label [[LOOP]], !llvm.loop [[LOOP5:![0-9]+]]
221
+ ; CHECK-NEXT: br i1 [[ICMP]], label [[EXIT:%.* ]], label [[LOOP]], !llvm.loop [[LOOP5:![0-9]+]]
199
222
; CHECK: exit:
200
223
; CHECK-NEXT: ret void
201
224
;
0 commit comments