|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
2 | 2 | ; RUN: opt -scoped-noalias-aa -slp-vectorizer -mtriple=x86_64-apple-darwin -enable-new-pm=false -S %s | FileCheck %s
|
| 3 | +; RUN: opt -aa-pipeline='basic-aa,scoped-noalias-aa' -passes=slp-vectorizer -mtriple=x86_64-apple-darwin -S %s | FileCheck %s |
3 | 4 |
|
4 | 5 | define void @version_multiple(i32* nocapture %out_block, i32* nocapture readonly %counter) {
|
5 | 6 | ; CHECK-LABEL: @version_multiple(
|
@@ -185,4 +186,158 @@ bb14: ; preds = %bb13
|
185 | 186 | ret double undef
|
186 | 187 | }
|
187 | 188 |
|
| 189 | +define void @gather_sequence_crash(<2 x float> %arg, float* %arg1, float %arg2, float* %arg3, float* %arg4, float* %arg5, i1 %c.1, i1 %c.2) { |
| 190 | +; CHECK-LABEL: @gather_sequence_crash( |
| 191 | +; CHECK-NEXT: bb: |
| 192 | +; CHECK-NEXT: br i1 [[C_1:%.*]], label [[BB16:%.*]], label [[BB6:%.*]] |
| 193 | +; CHECK: bb6: |
| 194 | +; CHECK-NEXT: [[TMP:%.*]] = getelementptr inbounds float, float* [[ARG1:%.*]], i32 4 |
| 195 | +; CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds float, float* [[ARG1]], i32 5 |
| 196 | +; CHECK-NEXT: [[TMP8:%.*]] = getelementptr inbounds float, float* [[ARG1]], i32 3 |
| 197 | +; CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds float, float* [[ARG1]], i32 6 |
| 198 | +; CHECK-NEXT: [[TMP0:%.*]] = insertelement <4 x float> <float poison, float poison, float poison, float 0.000000e+00>, float [[ARG2:%.*]], i32 0 |
| 199 | +; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <2 x float> [[ARG:%.*]], <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef> |
| 200 | +; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <4 x float> [[TMP0]], <4 x float> [[TMP1]], <4 x i32> <i32 0, i32 4, i32 5, i32 3> |
| 201 | +; CHECK-NEXT: [[TMP3:%.*]] = fmul <4 x float> [[TMP2]], zeroinitializer |
| 202 | +; CHECK-NEXT: [[TMP4:%.*]] = bitcast float* [[TMP8]] to <4 x float>* |
| 203 | +; CHECK-NEXT: store <4 x float> [[TMP3]], <4 x float>* [[TMP4]], align 4 |
| 204 | +; CHECK-NEXT: ret void |
| 205 | +; CHECK: bb16: |
| 206 | +; CHECK-NEXT: br label [[BB17:%.*]] |
| 207 | +; CHECK: bb17: |
| 208 | +; CHECK-NEXT: br label [[BB18:%.*]] |
| 209 | +; CHECK: bb18: |
| 210 | +; CHECK-NEXT: br label [[BB19:%.*]] |
| 211 | +; CHECK: bb19: |
| 212 | +; CHECK-NEXT: br label [[BB20:%.*]] |
| 213 | +; CHECK: bb20: |
| 214 | +; CHECK-NEXT: br label [[BB21:%.*]] |
| 215 | +; CHECK: bb21: |
| 216 | +; CHECK-NEXT: br label [[BB22:%.*]] |
| 217 | +; CHECK: bb22: |
| 218 | +; CHECK-NEXT: [[TMP23:%.*]] = getelementptr inbounds float, float* [[ARG4:%.*]], i32 0 |
| 219 | +; CHECK-NEXT: [[TMP24:%.*]] = getelementptr float, float* [[TMP23]], i64 7 |
| 220 | +; CHECK-NEXT: br i1 [[C_2:%.*]], label [[BB25:%.*]], label [[BB22]] |
| 221 | +; CHECK: bb25: |
| 222 | +; CHECK-NEXT: [[TMP26:%.*]] = getelementptr float, float* [[TMP23]], i64 6 |
| 223 | +; CHECK-NEXT: store float 0.000000e+00, float* [[TMP24]], align 4 |
| 224 | +; CHECK-NEXT: [[TMP27:%.*]] = load float, float* [[ARG5:%.*]], align 4 |
| 225 | +; CHECK-NEXT: [[TMP28:%.*]] = getelementptr float, float* [[TMP23]], i64 5 |
| 226 | +; CHECK-NEXT: [[TMP29:%.*]] = fadd float 0.000000e+00, 0.000000e+00 |
| 227 | +; CHECK-NEXT: store float 0.000000e+00, float* [[TMP26]], align 4 |
| 228 | +; CHECK-NEXT: [[TMP30:%.*]] = getelementptr float, float* [[TMP23]], i64 4 |
| 229 | +; CHECK-NEXT: store float 0.000000e+00, float* [[TMP28]], align 4 |
| 230 | +; CHECK-NEXT: [[TMP31:%.*]] = fadd float 0.000000e+00, 0.000000e+00 |
| 231 | +; CHECK-NEXT: store float 0.000000e+00, float* [[TMP30]], align 4 |
| 232 | +; CHECK-NEXT: [[TMP32:%.*]] = getelementptr inbounds float, float* [[ARG4]], i32 0 |
| 233 | +; CHECK-NEXT: br label [[BB33:%.*]] |
| 234 | +; CHECK: bb33: |
| 235 | +; CHECK-NEXT: br label [[BB34:%.*]] |
| 236 | +; CHECK: bb34: |
| 237 | +; CHECK-NEXT: [[TMP35:%.*]] = getelementptr float, float* [[TMP32]], i64 3 |
| 238 | +; CHECK-NEXT: [[TMP36:%.*]] = getelementptr float, float* [[TMP32]], i64 2 |
| 239 | +; CHECK-NEXT: [[TMP37:%.*]] = load float, float* [[TMP35]], align 4 |
| 240 | +; CHECK-NEXT: [[TMP38:%.*]] = fadd float 0.000000e+00, [[TMP37]] |
| 241 | +; CHECK-NEXT: store float [[TMP38]], float* [[TMP35]], align 4 |
| 242 | +; CHECK-NEXT: [[TMP39:%.*]] = getelementptr float, float* [[TMP32]], i64 1 |
| 243 | +; CHECK-NEXT: [[TMP40:%.*]] = load float, float* [[TMP36]], align 4 |
| 244 | +; CHECK-NEXT: [[TMP41:%.*]] = fadd float 0.000000e+00, [[TMP40]] |
| 245 | +; CHECK-NEXT: store float [[TMP41]], float* [[TMP36]], align 4 |
| 246 | +; CHECK-NEXT: [[TMP42:%.*]] = load float, float* [[TMP39]], align 4 |
| 247 | +; CHECK-NEXT: [[TMP43:%.*]] = fadd float 0.000000e+00, [[TMP42]] |
| 248 | +; CHECK-NEXT: store float [[TMP43]], float* [[TMP39]], align 4 |
| 249 | +; CHECK-NEXT: [[TMP44:%.*]] = load float, float* [[ARG3:%.*]], align 4 |
| 250 | +; CHECK-NEXT: [[TMP45:%.*]] = load float, float* [[TMP32]], align 4 |
| 251 | +; CHECK-NEXT: [[TMP46:%.*]] = fadd float 0.000000e+00, [[TMP45]] |
| 252 | +; CHECK-NEXT: store float [[TMP46]], float* [[TMP32]], align 4 |
| 253 | +; CHECK-NEXT: call void @quux() |
| 254 | +; CHECK-NEXT: br label [[BB47:%.*]] |
| 255 | +; CHECK: bb47: |
| 256 | +; CHECK-NEXT: br label [[BB17]] |
| 257 | +; |
| 258 | +bb: |
| 259 | + br i1 %c.1, label %bb16, label %bb6 |
| 260 | + |
| 261 | +bb6: ; preds = %bb |
| 262 | + %tmp = getelementptr inbounds float, float* %arg1, i32 4 |
| 263 | + %tmp7 = getelementptr inbounds float, float* %arg1, i32 5 |
| 264 | + %tmp8 = getelementptr inbounds float, float* %arg1, i32 3 |
| 265 | + %tmp9 = getelementptr inbounds float, float* %arg1, i32 6 |
| 266 | + %tmp10 = extractelement <2 x float> %arg, i32 0 |
| 267 | + %tmp11 = fmul float %tmp10, 0.000000e+00 |
| 268 | + store float %tmp11, float* %tmp, align 4 |
| 269 | + %tmp12 = extractelement <2 x float> %arg, i32 1 |
| 270 | + %tmp13 = fmul float %tmp12, 0.000000e+00 |
| 271 | + store float %tmp13, float* %tmp7, align 4 |
| 272 | + %tmp14 = fmul float %arg2, 0.000000e+00 |
| 273 | + store float %tmp14, float* %tmp8, align 4 |
| 274 | + %tmp15 = fmul float 0.000000e+00, 0.000000e+00 |
| 275 | + store float %tmp15, float* %tmp9, align 4 |
| 276 | + ret void |
| 277 | + |
| 278 | +bb16: ; preds = %bb |
| 279 | + br label %bb17 |
| 280 | + |
| 281 | +bb17: ; preds = %bb47, %bb16 |
| 282 | + br label %bb18 |
| 283 | + |
| 284 | +bb18: ; preds = %bb17 |
| 285 | + br label %bb19 |
| 286 | + |
| 287 | +bb19: ; preds = %bb18 |
| 288 | + br label %bb20 |
| 289 | + |
| 290 | +bb20: ; preds = %bb19 |
| 291 | + br label %bb21 |
| 292 | + |
| 293 | +bb21: ; preds = %bb20 |
| 294 | + br label %bb22 |
| 295 | + |
| 296 | +bb22: ; preds = %bb22, %bb21 |
| 297 | + %tmp23 = getelementptr inbounds float, float* %arg4, i32 0 |
| 298 | + %tmp24 = getelementptr float, float* %tmp23, i64 7 |
| 299 | + br i1 %c.2, label %bb25, label %bb22 |
| 300 | + |
| 301 | +bb25: ; preds = %bb22 |
| 302 | + %tmp26 = getelementptr float, float* %tmp23, i64 6 |
| 303 | + store float 0.000000e+00, float* %tmp24, align 4 |
| 304 | + %tmp27 = load float, float* %arg5, align 4 |
| 305 | + %tmp28 = getelementptr float, float* %tmp23, i64 5 |
| 306 | + %tmp29 = fadd float 0.000000e+00, 0.000000e+00 |
| 307 | + store float 0.000000e+00, float* %tmp26, align 4 |
| 308 | + %tmp30 = getelementptr float, float* %tmp23, i64 4 |
| 309 | + store float 0.000000e+00, float* %tmp28, align 4 |
| 310 | + %tmp31 = fadd float 0.000000e+00, 0.000000e+00 |
| 311 | + store float 0.000000e+00, float* %tmp30, align 4 |
| 312 | + %tmp32 = getelementptr inbounds float, float* %arg4, i32 0 |
| 313 | + br label %bb33 |
| 314 | + |
| 315 | +bb33: ; preds = %bb25 |
| 316 | + br label %bb34 |
| 317 | + |
| 318 | +bb34: ; preds = %bb33 |
| 319 | + %tmp35 = getelementptr float, float* %tmp32, i64 3 |
| 320 | + %tmp36 = getelementptr float, float* %tmp32, i64 2 |
| 321 | + %tmp37 = load float, float* %tmp35, align 4 |
| 322 | + %tmp38 = fadd float 0.000000e+00, %tmp37 |
| 323 | + store float %tmp38, float* %tmp35, align 4 |
| 324 | + %tmp39 = getelementptr float, float* %tmp32, i64 1 |
| 325 | + %tmp40 = load float, float* %tmp36, align 4 |
| 326 | + %tmp41 = fadd float 0.000000e+00, %tmp40 |
| 327 | + store float %tmp41, float* %tmp36, align 4 |
| 328 | + %tmp42 = load float, float* %tmp39, align 4 |
| 329 | + %tmp43 = fadd float 0.000000e+00, %tmp42 |
| 330 | + store float %tmp43, float* %tmp39, align 4 |
| 331 | + %tmp44 = load float, float* %arg3, align 4 |
| 332 | + %tmp45 = load float, float* %tmp32, align 4 |
| 333 | + %tmp46 = fadd float 0.000000e+00, %tmp45 |
| 334 | + store float %tmp46, float* %tmp32, align 4 |
| 335 | + call void @quux() |
| 336 | + br label %bb47 |
| 337 | + |
| 338 | +bb47: ; preds = %bb34 |
| 339 | + br label %bb17 |
| 340 | +} |
| 341 | + |
| 342 | +declare void @quux() |
188 | 343 | attributes #0 = { "target-features"="+avx2" }
|
0 commit comments