Florian Hahn 29b8b72117
[LV] Move check if any vector insts will be generated to VPlan. (#96622)
This patch moves the check if any vector instructions will be generated
from getInstructionCost to be based on VPlan. This simplifies
getInstructionCost, is more accurate as we check the final result and
also allows us to exit early once we visit a recipe that generates
vector instructions.

The helper can then be re-used by the VPlan-based cost model to match
the legacy selectVectorizationFactor behavior, this fixing a crash and
paving the way to recommit
https://github.com/llvm/llvm-project/pull/92555.

PR: https://github.com/llvm/llvm-project/pull/96622
2024-07-07 20:08:01 +01:00

31 lines
1.2 KiB
LLVM

; RUN: opt < %s -passes=loop-vectorize -force-vector-width=4 -S | FileCheck %s
; Out of the LCSSA form we could have 'phi i32 [ loop-invariant, %for.inc.2.i ]'
; but the IR Verifier requires for PHI one entry for each predecessor of
; it's parent basic block. The original PR14725 solution for the issue just
; added 'undef' for an predecessor BB and which is not correct. We copy the real
; value for another predecessor instead of bringing 'undef'.
; CHECK-LABEL: for.cond.preheader:
; CHECK: %e.0.ph = phi i32 [ 0, %if.end.2.i ], [ 0, %middle.block ]
; Function Attrs: nounwind uwtable
define void @main() #0 {
entry:
br label %for.cond1.preheader.i
for.cond1.preheader.i: ; preds = %if.end.2.i, %entry
%c.06.i = phi i32 [ 0, %entry ], [ %inc5.i, %if.end.2.i ]
%tobool.i = icmp ne i32 undef, 0
br label %if.end.2.i
if.end.2.i: ; preds = %for.cond1.preheader.i
%inc5.i = add nsw i32 %c.06.i, 1
%cmp.i = icmp slt i32 %inc5.i, 16
br i1 %cmp.i, label %for.cond1.preheader.i, label %for.cond.preheader
for.cond.preheader: ; preds = %if.end.2.i
%e.0.ph = phi i32 [ 0, %if.end.2.i ]
unreachable
}