[llvm] [VPlan] Compute scalar cost based on VPlan0 instead of legacy CM. (PR #196845)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 24 05:52:59 PDT 2026
fhahn wrote:
> It looks like branches that never get executed end up losing their scalar cost divisor in this PR. E.g. with `opt -passes=loop-vectorize -mattr=+avx2` the scalar vplan cost goes from 4 -> 30, so the VF goes from VF 1 -> VF 8:
>
> ```llvm
> define void @never_taken(ptr noalias %a, ptr noalias %b, i64 %n) {
> entry:
> br label %loop
>
> loop:
> %iv = phi i64 [ 0, %entry ], [ %iv.next, %latch ]
> %gep.a = getelementptr inbounds i32, ptr %a, i64 %iv
> %l = load i32, ptr %gep.a, align 4
> %c = icmp sgt i32 %l, 0
> br i1 %c, label %then, label %latch, !prof !0
>
> then:
> %d = sdiv i32 1000, %l
> %gep.b = getelementptr inbounds i32, ptr %b, i64 %iv
> store i32 %d, ptr %gep.b, align 4
> br label %latch
>
> latch:
> %iv.next = add nuw nsw i64 %iv, 1
> %ec = icmp eq i64 %iv.next, %n
> br i1 %ec, label %exit, label %loop
>
> exit:
> ret void
> }
>
> !0 = !{!"branch_weights", i32 0, i32 1000}
> ```
>
> I think this is related to the previous PRs that handled setExecutionFrequency?
It looks like we treated explicit weights of 0 as no-info. I put up https://github.com/llvm/llvm-project/pull/226150/ use minimum probability, which should match BFI, thanks!
https://github.com/llvm/llvm-project/pull/196845
More information about the llvm-commits
mailing list