@@ -1472,55 +1472,29 @@ exit:
1472
1472
ret void
1473
1473
}
1474
1474
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 ) {
1476
1476
; 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:%.*]]) {
1478
1478
; DEFAULT-NEXT: [[ENTRY:.*]]:
1479
1479
; DEFAULT-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]]
1480
1480
; DEFAULT: [[VECTOR_PH]]:
1481
1481
; DEFAULT-NEXT: br label %[[VECTOR_BODY:.*]]
1482
1482
; 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]+]]
1520
1494
; DEFAULT: [[MIDDLE_BLOCK]]:
1521
- ; DEFAULT-NEXT: br label %[[EXIT:.*]]
1495
+ ; DEFAULT-NEXT: br i1 false, label %[[EXIT:.*]], label %[[SCALAR_PH ]]
1522
1496
; 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]] ]
1524
1498
; DEFAULT-NEXT: br label %[[LOOP_HEADER:.*]]
1525
1499
; DEFAULT: [[LOOP_HEADER]]:
1526
1500
; 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 {
1537
1511
; DEFAULT-NEXT: ret void
1538
1512
;
1539
1513
; 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:%.*]]) {
1541
1515
; PRED-NEXT: [[ENTRY:.*]]:
1542
1516
; PRED-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]]
1543
1517
; PRED: [[VECTOR_PH]]:
0 commit comments