@@ -1472,55 +1472,29 @@ exit:
14721472 ret void
14731473}
14741474
1475- define void @redundant_branch_and_tail_folding (ptr %dst , i1 %c ) optsize {
1475+ define void @redundant_branch_and_tail_folding (ptr %dst , i1 %c ) {
14761476; DEFAULT-LABEL: define void @redundant_branch_and_tail_folding(
1477- ; DEFAULT-SAME: ptr [[DST:%.*]], i1 [[C:%.*]]) #[[ATTR4:[0-9]+]] {
1477+ ; DEFAULT-SAME: ptr [[DST:%.*]], i1 [[C:%.*]]) {
14781478; DEFAULT-NEXT: [[ENTRY:.*]]:
14791479; DEFAULT-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]]
14801480; DEFAULT: [[VECTOR_PH]]:
14811481; DEFAULT-NEXT: br label %[[VECTOR_BODY:.*]]
14821482; DEFAULT: [[VECTOR_BODY]]:
1483- ; DEFAULT-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE6:.*]] ]
1484- ; DEFAULT-NEXT: [[VEC_IND:%.*]] = phi <4 x i64> [ <i64 0, i64 1, i64 2, i64 3>, %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[PRED_STORE_CONTINUE6]] ]
1485- ; DEFAULT-NEXT: [[TMP0:%.*]] = icmp ule <4 x i64> [[VEC_IND]], splat (i64 20)
1486- ; DEFAULT-NEXT: [[TMP1:%.*]] = add nuw nsw <4 x i64> [[VEC_IND]], splat (i64 1)
1487- ; DEFAULT-NEXT: [[TMP2:%.*]] = trunc <4 x i64> [[TMP1]] to <4 x i32>
1488- ; DEFAULT-NEXT: [[TMP3:%.*]] = extractelement <4 x i1> [[TMP0]], i32 0
1489- ; DEFAULT-NEXT: br i1 [[TMP3]], label %[[PRED_STORE_IF:.*]], label %[[PRED_STORE_CONTINUE:.*]]
1490- ; DEFAULT: [[PRED_STORE_IF]]:
1491- ; DEFAULT-NEXT: [[TMP4:%.*]] = extractelement <4 x i32> [[TMP2]], i32 0
1492- ; DEFAULT-NEXT: store i32 [[TMP4]], ptr [[DST]], align 4
1493- ; DEFAULT-NEXT: br label %[[PRED_STORE_CONTINUE]]
1494- ; DEFAULT: [[PRED_STORE_CONTINUE]]:
1495- ; DEFAULT-NEXT: [[TMP5:%.*]] = extractelement <4 x i1> [[TMP0]], i32 1
1496- ; DEFAULT-NEXT: br i1 [[TMP5]], label %[[PRED_STORE_IF1:.*]], label %[[PRED_STORE_CONTINUE2:.*]]
1497- ; DEFAULT: [[PRED_STORE_IF1]]:
1498- ; DEFAULT-NEXT: [[TMP6:%.*]] = extractelement <4 x i32> [[TMP2]], i32 1
1499- ; DEFAULT-NEXT: store i32 [[TMP6]], ptr [[DST]], align 4
1500- ; DEFAULT-NEXT: br label %[[PRED_STORE_CONTINUE2]]
1501- ; DEFAULT: [[PRED_STORE_CONTINUE2]]:
1502- ; DEFAULT-NEXT: [[TMP7:%.*]] = extractelement <4 x i1> [[TMP0]], i32 2
1503- ; DEFAULT-NEXT: br i1 [[TMP7]], label %[[PRED_STORE_IF3:.*]], label %[[PRED_STORE_CONTINUE4:.*]]
1504- ; DEFAULT: [[PRED_STORE_IF3]]:
1505- ; DEFAULT-NEXT: [[TMP8:%.*]] = extractelement <4 x i32> [[TMP2]], i32 2
1506- ; DEFAULT-NEXT: store i32 [[TMP8]], ptr [[DST]], align 4
1507- ; DEFAULT-NEXT: br label %[[PRED_STORE_CONTINUE4]]
1508- ; DEFAULT: [[PRED_STORE_CONTINUE4]]:
1509- ; DEFAULT-NEXT: [[TMP9:%.*]] = extractelement <4 x i1> [[TMP0]], i32 3
1510- ; DEFAULT-NEXT: br i1 [[TMP9]], label %[[PRED_STORE_IF5:.*]], label %[[PRED_STORE_CONTINUE6]]
1511- ; DEFAULT: [[PRED_STORE_IF5]]:
1512- ; DEFAULT-NEXT: [[TMP10:%.*]] = extractelement <4 x i32> [[TMP2]], i32 3
1513- ; DEFAULT-NEXT: store i32 [[TMP10]], ptr [[DST]], align 4
1514- ; DEFAULT-NEXT: br label %[[PRED_STORE_CONTINUE6]]
1515- ; DEFAULT: [[PRED_STORE_CONTINUE6]]:
1516- ; DEFAULT-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
1517- ; DEFAULT-NEXT: [[VEC_IND_NEXT]] = add <4 x i64> [[VEC_IND]], splat (i64 4)
1518- ; DEFAULT-NEXT: [[TMP11:%.*]] = icmp eq i64 [[INDEX_NEXT]], 24
1519- ; DEFAULT-NEXT: br i1 [[TMP11]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP28:![0-9]+]]
1483+ ; DEFAULT-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
1484+ ; DEFAULT-NEXT: [[VEC_IND:%.*]] = phi <4 x i64> [ <i64 0, i64 1, i64 2, i64 3>, %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[VECTOR_BODY]] ]
1485+ ; DEFAULT-NEXT: [[STEP_ADD:%.*]] = add <4 x i64> [[VEC_IND]], splat (i64 4)
1486+ ; DEFAULT-NEXT: [[TMP0:%.*]] = add nuw nsw <4 x i64> [[STEP_ADD]], splat (i64 1)
1487+ ; DEFAULT-NEXT: [[TMP1:%.*]] = trunc <4 x i64> [[TMP0]] to <4 x i32>
1488+ ; DEFAULT-NEXT: [[TMP2:%.*]] = extractelement <4 x i32> [[TMP1]], i32 3
1489+ ; DEFAULT-NEXT: store i32 [[TMP2]], ptr [[DST]], align 4
1490+ ; DEFAULT-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 8
1491+ ; DEFAULT-NEXT: [[VEC_IND_NEXT]] = add <4 x i64> [[STEP_ADD]], splat (i64 4)
1492+ ; DEFAULT-NEXT: [[TMP3:%.*]] = icmp eq i64 [[INDEX_NEXT]], 16
1493+ ; DEFAULT-NEXT: br i1 [[TMP3]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP28:![0-9]+]]
15201494; DEFAULT: [[MIDDLE_BLOCK]]:
1521- ; DEFAULT-NEXT: br label %[[EXIT:.*]]
1495+ ; DEFAULT-NEXT: br i1 false, label %[[EXIT:.*]], label %[[SCALAR_PH ]]
15221496; DEFAULT: [[SCALAR_PH]]:
1523- ; DEFAULT-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 0, %[[ENTRY]] ]
1497+ ; DEFAULT-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 16, %[[MIDDLE_BLOCK]] ], [ 0, %[[ENTRY]] ]
15241498; DEFAULT-NEXT: br label %[[LOOP_HEADER:.*]]
15251499; DEFAULT: [[LOOP_HEADER]]:
15261500; DEFAULT-NEXT: [[IV:%.*]] = phi i64 [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ]
@@ -1537,7 +1511,7 @@ define void @redundant_branch_and_tail_folding(ptr %dst, i1 %c) optsize {
15371511; DEFAULT-NEXT: ret void
15381512;
15391513; PRED-LABEL: define void @redundant_branch_and_tail_folding(
1540- ; PRED-SAME: ptr [[DST:%.*]], i1 [[C:%.*]]) #[[ATTR4:[0-9]+]] {
1514+ ; PRED-SAME: ptr [[DST:%.*]], i1 [[C:%.*]]) {
15411515; PRED-NEXT: [[ENTRY:.*]]:
15421516; PRED-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]]
15431517; PRED: [[VECTOR_PH]]:
0 commit comments