[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