[llvm] [LV] Improve cost model for some replicating recipes (PR #192056)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 21 04:26:19 PDT 2026
================
@@ -380,22 +380,70 @@ exit:
define void @sdiv_power_of_2_divisor_in_replicate_region(i32 %x, ptr %dst, i64 %n) {
; CHECK-LABEL: define void @sdiv_power_of_2_divisor_in_replicate_region(
; CHECK-SAME: i32 [[X:%.*]], ptr [[DST:%.*]], i64 [[N:%.*]]) {
-; CHECK-NEXT: [[ENTRY:.*]]:
+; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: [[C_1:%.*]] = icmp sgt i64 [[N]], 0
; CHECK-NEXT: [[C_2:%.*]] = icmp slt i64 [[N]], 9
; CHECK-NEXT: call void @llvm.assume(i1 [[C_1]])
; CHECK-NEXT: call void @llvm.assume(i1 [[C_2]])
; CHECK-NEXT: br label %[[LOOP:.*]]
; CHECK: [[LOOP]]:
-; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]
+; CHECK-NEXT: [[N_RND_UP:%.*]] = add i64 [[N]], 3
+; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[N_RND_UP]], 4
+; CHECK-NEXT: [[N_VEC:%.*]] = sub i64 [[N_RND_UP]], [[N_MOD_VF]]
+; CHECK-NEXT: [[TRIP_COUNT_MINUS_1:%.*]] = sub i64 [[N]], 1
+; CHECK-NEXT: [[BROADCAST_SPLATINSERT:%.*]] = insertelement <4 x i64> poison, i64 [[TRIP_COUNT_MINUS_1]], i64 0
+; CHECK-NEXT: [[BROADCAST_SPLAT:%.*]] = shufflevector <4 x i64> [[BROADCAST_SPLATINSERT]], <4 x i64> poison, <4 x i32> zeroinitializer
+; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
+; CHECK: [[VECTOR_BODY]]:
----------------
fhahn wrote:
> It's possibly not profitable, but then I don't think that's because of this PR.
Yep agreed that this may expose a different underlying issue in some cases. But it would be good to at least have some tests that show positive impact and check it doesn't cause any regressions in practice.
https://github.com/llvm/llvm-project/pull/192056
More information about the llvm-commits
mailing list