@@ -611,63 +611,18 @@ exit:
611
611
define void @low_trip_count_fold_tail_scalarized_store (ptr %dst ) {
612
612
; COMMON-LABEL: define void @low_trip_count_fold_tail_scalarized_store(
613
613
; COMMON-SAME: ptr [[DST:%.*]]) {
614
- ; COMMON-NEXT: [[ENTRY:.*:]]
615
- ; COMMON-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]]
616
- ; COMMON: [[VECTOR_PH]]:
617
- ; COMMON-NEXT: br label %[[VECTOR_BODY:.*]]
618
- ; COMMON: [[VECTOR_BODY]]:
619
- ; COMMON-NEXT: br i1 true, label %[[PRED_STORE_IF:.*]], label %[[PRED_STORE_CONTINUE:.*]]
620
- ; COMMON: [[PRED_STORE_IF]]:
621
- ; COMMON-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[DST]], i64 0
622
- ; COMMON-NEXT: store i8 0, ptr [[TMP0]], align 1
623
- ; COMMON-NEXT: br label %[[PRED_STORE_CONTINUE]]
624
- ; COMMON: [[PRED_STORE_CONTINUE]]:
625
- ; COMMON-NEXT: br i1 true, label %[[PRED_STORE_IF1:.*]], label %[[PRED_STORE_CONTINUE2:.*]]
626
- ; COMMON: [[PRED_STORE_IF1]]:
627
- ; COMMON-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[DST]], i64 1
628
- ; COMMON-NEXT: store i8 1, ptr [[TMP1]], align 1
629
- ; COMMON-NEXT: br label %[[PRED_STORE_CONTINUE2]]
630
- ; COMMON: [[PRED_STORE_CONTINUE2]]:
631
- ; COMMON-NEXT: br i1 true, label %[[PRED_STORE_IF3:.*]], label %[[PRED_STORE_CONTINUE4:.*]]
632
- ; COMMON: [[PRED_STORE_IF3]]:
633
- ; COMMON-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[DST]], i64 2
634
- ; COMMON-NEXT: store i8 2, ptr [[TMP2]], align 1
635
- ; COMMON-NEXT: br label %[[PRED_STORE_CONTINUE4]]
636
- ; COMMON: [[PRED_STORE_CONTINUE4]]:
637
- ; COMMON-NEXT: br i1 true, label %[[PRED_STORE_IF5:.*]], label %[[PRED_STORE_CONTINUE6:.*]]
638
- ; COMMON: [[PRED_STORE_IF5]]:
639
- ; COMMON-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[DST]], i64 3
640
- ; COMMON-NEXT: store i8 3, ptr [[TMP3]], align 1
641
- ; COMMON-NEXT: br label %[[PRED_STORE_CONTINUE6]]
642
- ; COMMON: [[PRED_STORE_CONTINUE6]]:
643
- ; COMMON-NEXT: br i1 true, label %[[PRED_STORE_IF7:.*]], label %[[PRED_STORE_CONTINUE8:.*]]
644
- ; COMMON: [[PRED_STORE_IF7]]:
645
- ; COMMON-NEXT: [[TMP4:%.*]] = getelementptr i8, ptr [[DST]], i64 4
646
- ; COMMON-NEXT: store i8 4, ptr [[TMP4]], align 1
647
- ; COMMON-NEXT: br label %[[PRED_STORE_CONTINUE8]]
648
- ; COMMON: [[PRED_STORE_CONTINUE8]]:
649
- ; COMMON-NEXT: br i1 true, label %[[PRED_STORE_IF9:.*]], label %[[PRED_STORE_CONTINUE10:.*]]
650
- ; COMMON: [[PRED_STORE_IF9]]:
651
- ; COMMON-NEXT: [[TMP5:%.*]] = getelementptr i8, ptr [[DST]], i64 5
652
- ; COMMON-NEXT: store i8 5, ptr [[TMP5]], align 1
653
- ; COMMON-NEXT: br label %[[PRED_STORE_CONTINUE10]]
654
- ; COMMON: [[PRED_STORE_CONTINUE10]]:
655
- ; COMMON-NEXT: br i1 true, label %[[PRED_STORE_IF11:.*]], label %[[PRED_STORE_CONTINUE12:.*]]
656
- ; COMMON: [[PRED_STORE_IF11]]:
657
- ; COMMON-NEXT: [[TMP6:%.*]] = getelementptr i8, ptr [[DST]], i64 6
658
- ; COMMON-NEXT: store i8 6, ptr [[TMP6]], align 1
659
- ; COMMON-NEXT: br label %[[PRED_STORE_CONTINUE12]]
660
- ; COMMON: [[PRED_STORE_CONTINUE12]]:
661
- ; COMMON-NEXT: br i1 false, label %[[PRED_STORE_IF13:.*]], label %[[EXIT:.*]]
662
- ; COMMON: [[PRED_STORE_IF13]]:
663
- ; COMMON-NEXT: [[TMP7:%.*]] = getelementptr i8, ptr [[DST]], i64 7
664
- ; COMMON-NEXT: store i8 7, ptr [[TMP7]], align 1
665
- ; COMMON-NEXT: br label %[[EXIT]]
614
+ ; COMMON-NEXT: [[ENTRY:.*]]:
615
+ ; COMMON-NEXT: br label %[[EXIT1:.*]]
616
+ ; COMMON: [[EXIT1]]:
617
+ ; COMMON-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[EXIT1]] ]
618
+ ; COMMON-NEXT: [[IV_TRUNC:%.*]] = trunc i64 [[IV]] to i8
619
+ ; COMMON-NEXT: [[GEP:%.*]] = getelementptr i8, ptr [[DST]], i64 [[IV]]
620
+ ; COMMON-NEXT: store i8 [[IV_TRUNC]], ptr [[GEP]], align 1
621
+ ; COMMON-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1
622
+ ; COMMON-NEXT: [[EC:%.*]] = icmp eq i64 [[IV_NEXT]], 7
623
+ ; COMMON-NEXT: br i1 [[EC]], label %[[EXIT:.*]], label %[[EXIT1]]
666
624
; COMMON: [[EXIT]]:
667
- ; COMMON-NEXT: br label %[[MIDDLE_BLOCK:.*]]
668
- ; COMMON: [[MIDDLE_BLOCK]]:
669
- ; COMMON-NEXT: br [[EXIT1:label %.*]]
670
- ; COMMON: [[SCALAR_PH]]:
625
+ ; COMMON-NEXT: ret void
671
626
;
672
627
entry:
673
628
br label %loop
@@ -863,7 +818,7 @@ define void @test_conditional_interleave_group (ptr noalias %src.1, ptr noalias
863
818
; DEFAULT-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 8
864
819
; DEFAULT-NEXT: [[VEC_IND_NEXT]] = add <8 x i64> [[VEC_IND]], splat (i64 8)
865
820
; DEFAULT-NEXT: [[TMP80:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
866
- ; DEFAULT-NEXT: br i1 [[TMP80]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP26 :![0-9]+]]
821
+ ; DEFAULT-NEXT: br i1 [[TMP80]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP25 :![0-9]+]]
867
822
; DEFAULT: [[MIDDLE_BLOCK]]:
868
823
; DEFAULT-NEXT: [[CMP_N:%.*]] = icmp eq i64 [[TMP0]], [[N_VEC]]
869
824
; DEFAULT-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]]
@@ -1051,7 +1006,7 @@ define void @test_conditional_interleave_group (ptr noalias %src.1, ptr noalias
1051
1006
; PRED-NEXT: [[TMP84:%.*]] = extractelement <8 x i1> [[ACTIVE_LANE_MASK_NEXT]], i32 0
1052
1007
; PRED-NEXT: [[TMP85:%.*]] = xor i1 [[TMP84]], true
1053
1008
; PRED-NEXT: [[VEC_IND_NEXT]] = add <8 x i64> [[VEC_IND]], splat (i64 8)
1054
- ; PRED-NEXT: br i1 [[TMP85]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP7 :![0-9]+]]
1009
+ ; PRED-NEXT: br i1 [[TMP85]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP6 :![0-9]+]]
1055
1010
; PRED: [[MIDDLE_BLOCK]]:
1056
1011
; PRED-NEXT: br [[EXIT:label %.*]]
1057
1012
; PRED: [[SCALAR_PH]]:
@@ -1109,7 +1064,7 @@ define void @redundant_branch_and_tail_folding(ptr %dst, i1 %c) {
1109
1064
; DEFAULT-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 8
1110
1065
; DEFAULT-NEXT: [[VEC_IND_NEXT]] = add <4 x i64> [[STEP_ADD]], splat (i64 4)
1111
1066
; DEFAULT-NEXT: [[TMP3:%.*]] = icmp eq i64 [[INDEX_NEXT]], 16
1112
- ; DEFAULT-NEXT: br i1 [[TMP3]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP28 :![0-9]+]]
1067
+ ; DEFAULT-NEXT: br i1 [[TMP3]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP27 :![0-9]+]]
1113
1068
; DEFAULT: [[MIDDLE_BLOCK]]:
1114
1069
; DEFAULT-NEXT: br label %[[SCALAR_PH]]
1115
1070
; DEFAULT: [[SCALAR_PH]]:
@@ -1157,7 +1112,7 @@ define void @redundant_branch_and_tail_folding(ptr %dst, i1 %c) {
1157
1112
; PRED-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
1158
1113
; PRED-NEXT: [[VEC_IND_NEXT]] = add <4 x i64> [[VEC_IND]], splat (i64 4)
1159
1114
; PRED-NEXT: [[TMP11:%.*]] = icmp eq i64 [[INDEX_NEXT]], 24
1160
- ; PRED-NEXT: br i1 [[TMP11]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP9 :![0-9]+]]
1115
+ ; PRED-NEXT: br i1 [[TMP11]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP8 :![0-9]+]]
1161
1116
; PRED: [[MIDDLE_BLOCK]]:
1162
1117
; PRED-NEXT: br [[EXIT:label %.*]]
1163
1118
; PRED: [[SCALAR_PH]]:
@@ -1240,8 +1195,7 @@ define void @pred_udiv_select_cost(ptr %A, ptr %B, ptr %C, i64 %n, i8 %y) #1 {
1240
1195
; DEFAULT-NEXT: [[TMP0:%.*]] = add i64 [[N]], 1
1241
1196
; DEFAULT-NEXT: [[TMP1:%.*]] = call i64 @llvm.vscale.i64()
1242
1197
; DEFAULT-NEXT: [[TMP2:%.*]] = shl nuw i64 [[TMP1]], 2
1243
- ; DEFAULT-NEXT: [[TMP3:%.*]] = call i64 @llvm.umax.i64(i64 [[TMP2]], i64 8)
1244
- ; DEFAULT-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[TMP0]], [[TMP3]]
1198
+ ; DEFAULT-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[TMP0]], [[TMP2]]
1245
1199
; DEFAULT-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]]
1246
1200
; DEFAULT: [[VECTOR_MEMCHECK]]:
1247
1201
; DEFAULT-NEXT: [[TMP4:%.*]] = call i64 @llvm.vscale.i64()
@@ -1283,7 +1237,7 @@ define void @pred_udiv_select_cost(ptr %A, ptr %B, ptr %C, i64 %n, i8 %y) #1 {
1283
1237
; DEFAULT-NEXT: store <vscale x 4 x i8> [[TMP23]], ptr [[TMP24]], align 1
1284
1238
; DEFAULT-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], [[TMP9]]
1285
1239
; DEFAULT-NEXT: [[TMP25:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
1286
- ; DEFAULT-NEXT: br i1 [[TMP25]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP30 :![0-9]+]]
1240
+ ; DEFAULT-NEXT: br i1 [[TMP25]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP29 :![0-9]+]]
1287
1241
; DEFAULT: [[MIDDLE_BLOCK]]:
1288
1242
; DEFAULT-NEXT: [[CMP_N:%.*]] = icmp eq i64 [[TMP0]], [[N_VEC]]
1289
1243
; DEFAULT-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]]
@@ -1345,7 +1299,7 @@ define void @pred_udiv_select_cost(ptr %A, ptr %B, ptr %C, i64 %n, i8 %y) #1 {
1345
1299
; PRED-NEXT: [[ACTIVE_LANE_MASK_NEXT]] = call <vscale x 16 x i1> @llvm.get.active.lane.mask.nxv16i1.i64(i64 [[INDEX]], i64 [[TMP11]])
1346
1300
; PRED-NEXT: [[TMP28:%.*]] = extractelement <vscale x 16 x i1> [[ACTIVE_LANE_MASK_NEXT]], i32 0
1347
1301
; PRED-NEXT: [[TMP29:%.*]] = xor i1 [[TMP28]], true
1348
- ; PRED-NEXT: br i1 [[TMP29]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP11 :![0-9]+]]
1302
+ ; PRED-NEXT: br i1 [[TMP29]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP10 :![0-9]+]]
1349
1303
; PRED: [[MIDDLE_BLOCK]]:
1350
1304
; PRED-NEXT: br [[EXIT:label %.*]]
1351
1305
; PRED: [[SCALAR_PH]]:
0 commit comments