|
1 |
| -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --filter-out-after "^for.body:" |
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
2 | 2 | ; RUN: opt < %s -passes=loop-vectorize -mtriple aarch64-unknown-linux-gnu -mattr=+sve -epilogue-vectorization-force-VF=2 -prefer-inloop-reductions -S | FileCheck %s
|
3 | 3 |
|
4 | 4 | ;
|
@@ -73,6 +73,17 @@ define i64 @int_reduction_and(ptr noalias nocapture %a, i64 %N) {
|
73 | 73 | ; CHECK-NEXT: [[BC_MERGE_RDX11:%.*]] = phi i64 [ [[TMP27]], [[VEC_EPILOG_MIDDLE_BLOCK]] ], [ [[BIN_RDX]], [[VEC_EPILOG_ITER_CHECK]] ], [ 1, [[ITER_CHECK]] ]
|
74 | 74 | ; CHECK-NEXT: br label [[FOR_BODY:%.*]]
|
75 | 75 | ; CHECK: for.body:
|
| 76 | +; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], [[FOR_BODY]] ], [ [[BC_RESUME_VAL]], [[VEC_EPILOG_SCALAR_PH]] ] |
| 77 | +; CHECK-NEXT: [[RDX:%.*]] = phi i64 [ [[AND:%.*]], [[FOR_BODY]] ], [ [[BC_MERGE_RDX11]], [[VEC_EPILOG_SCALAR_PH]] ] |
| 78 | +; CHECK-NEXT: [[L2:%.*]] = getelementptr inbounds i64, ptr [[A]], i64 [[IV]] |
| 79 | +; CHECK-NEXT: [[L3:%.*]] = load i64, ptr [[L2]], align 8 |
| 80 | +; CHECK-NEXT: [[AND]] = and i64 [[RDX]], [[L3]] |
| 81 | +; CHECK-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1 |
| 82 | +; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i64 [[IV_NEXT]], [[N]] |
| 83 | +; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_END]], label [[FOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]] |
| 84 | +; CHECK: for.end: |
| 85 | +; CHECK-NEXT: [[AND_LCSSA:%.*]] = phi i64 [ [[AND]], [[FOR_BODY]] ], [ [[BIN_RDX]], [[MIDDLE_BLOCK]] ], [ [[TMP27]], [[VEC_EPILOG_MIDDLE_BLOCK]] ] |
| 86 | +; CHECK-NEXT: ret i64 [[AND_LCSSA]] |
76 | 87 | ;
|
77 | 88 | entry:
|
78 | 89 | br label %for.body
|
|
0 commit comments