@@ -4274,10 +4274,14 @@ define void @trunciv(ptr nocapture %a, i32 %start, i64 %k) {
42744274; IND-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[K:%.*]], 2
42754275; IND-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[VECTOR_SCEVCHECK:%.*]]
42764276; IND: vector.scevcheck:
4277- ; IND-NEXT: [[DOTNOT:%.*]] = icmp ult i64 [[K]], 2147483649
4278- ; IND-NEXT: br i1 [[DOTNOT]], label [[VECTOR_PH:%.*]], label [[SCALAR_PH]]
4277+ ; IND-NEXT: [[TMP5:%.*]] = and i64 [[K]], 2147483648
4278+ ; IND-NEXT: [[TMP6:%.*]] = icmp ne i64 [[TMP5]], 0
4279+ ; IND-NEXT: [[TMP7:%.*]] = add i64 [[K]], -4294967297
4280+ ; IND-NEXT: [[TMP8:%.*]] = icmp ult i64 [[TMP7]], -4294967296
4281+ ; IND-NEXT: [[TMP4:%.*]] = or i1 [[TMP6]], [[TMP8]]
4282+ ; IND-NEXT: br i1 [[TMP4]], label [[SCALAR_PH]], label [[VECTOR_PH:%.*]]
42794283; IND: vector.ph:
4280- ; IND-NEXT: [[N_VEC:%.*]] = and i64 [[K]], 4294967294
4284+ ; IND-NEXT: [[N_VEC:%.*]] = and i64 [[K]], 6442450942
42814285; IND-NEXT: br label [[VECTOR_BODY:%.*]]
42824286; IND: vector.body:
42834287; IND-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
@@ -4314,10 +4318,14 @@ define void @trunciv(ptr nocapture %a, i32 %start, i64 %k) {
43144318; UNROLL-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[K:%.*]], 4
43154319; UNROLL-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[VECTOR_SCEVCHECK:%.*]]
43164320; UNROLL: vector.scevcheck:
4317- ; UNROLL-NEXT: [[DOTNOT:%.*]] = icmp ult i64 [[K]], 2147483649
4318- ; UNROLL-NEXT: br i1 [[DOTNOT]], label [[VECTOR_PH:%.*]], label [[SCALAR_PH]]
4321+ ; UNROLL-NEXT: [[TMP5:%.*]] = and i64 [[K]], 2147483648
4322+ ; UNROLL-NEXT: [[TMP6:%.*]] = icmp ne i64 [[TMP5]], 0
4323+ ; UNROLL-NEXT: [[TMP7:%.*]] = add i64 [[K]], -4294967297
4324+ ; UNROLL-NEXT: [[TMP8:%.*]] = icmp ult i64 [[TMP7]], -4294967296
4325+ ; UNROLL-NEXT: [[TMP9:%.*]] = or i1 [[TMP6]], [[TMP8]]
4326+ ; UNROLL-NEXT: br i1 [[TMP9]], label [[SCALAR_PH]], label [[VECTOR_PH:%.*]]
43194327; UNROLL: vector.ph:
4320- ; UNROLL-NEXT: [[N_VEC:%.*]] = and i64 [[K]], 4294967292
4328+ ; UNROLL-NEXT: [[N_VEC:%.*]] = and i64 [[K]], 6442450940
43214329; UNROLL-NEXT: br label [[VECTOR_BODY:%.*]]
43224330; UNROLL: vector.body:
43234331; UNROLL-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
@@ -4402,10 +4410,14 @@ define void @trunciv(ptr nocapture %a, i32 %start, i64 %k) {
44024410; INTERLEAVE-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[K:%.*]], 8
44034411; INTERLEAVE-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[VECTOR_SCEVCHECK:%.*]]
44044412; INTERLEAVE: vector.scevcheck:
4405- ; INTERLEAVE-NEXT: [[DOTNOT:%.*]] = icmp ult i64 [[K]], 2147483649
4406- ; INTERLEAVE-NEXT: br i1 [[DOTNOT]], label [[VECTOR_PH:%.*]], label [[SCALAR_PH]]
4413+ ; INTERLEAVE-NEXT: [[TMP5:%.*]] = and i64 [[K]], 2147483648
4414+ ; INTERLEAVE-NEXT: [[TMP6:%.*]] = icmp ne i64 [[TMP5]], 0
4415+ ; INTERLEAVE-NEXT: [[TMP7:%.*]] = add i64 [[K]], -4294967297
4416+ ; INTERLEAVE-NEXT: [[TMP8:%.*]] = icmp ult i64 [[TMP7]], -4294967296
4417+ ; INTERLEAVE-NEXT: [[TMP9:%.*]] = or i1 [[TMP6]], [[TMP8]]
4418+ ; INTERLEAVE-NEXT: br i1 [[TMP9]], label [[SCALAR_PH]], label [[VECTOR_PH:%.*]]
44074419; INTERLEAVE: vector.ph:
4408- ; INTERLEAVE-NEXT: [[N_VEC:%.*]] = and i64 [[K]], 4294967288
4420+ ; INTERLEAVE-NEXT: [[N_VEC:%.*]] = and i64 [[K]], 6442450936
44094421; INTERLEAVE-NEXT: br label [[VECTOR_BODY:%.*]]
44104422; INTERLEAVE: vector.body:
44114423; INTERLEAVE-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
0 commit comments