From 8b126d47d15310c4eb8af5c12927169dc6b78b28 Mon Sep 17 00:00:00 2001 From: John Brawn Date: Wed, 18 Mar 2026 18:58:50 +0000 Subject: [PATCH 1/2] [VPlan] Permit derived IV in isHeaderMask When matching scalar steps of the canonical IV, also match a derived IV of the canonical IV if the derivation is essentially a no-op. Fixes a failure in the mve-reg-pressure-spills.ll test when expensive checks are enabled. --- llvm/lib/Transforms/Vectorize/VPlanUtils.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/llvm/lib/Transforms/Vectorize/VPlanUtils.cpp b/llvm/lib/Transforms/Vectorize/VPlanUtils.cpp index ae6fb8e3e9cf5..7921a6fa0411e 100644 --- a/llvm/lib/Transforms/Vectorize/VPlanUtils.cpp +++ b/llvm/lib/Transforms/Vectorize/VPlanUtils.cpp @@ -62,9 +62,10 @@ bool vputils::isHeaderMask(const VPValue *V, const VPlan &Plan) { VPValue *A, *B; - auto m_CanonicalScalarIVSteps = - m_ScalarIVSteps(m_Specific(Plan.getVectorLoopRegion()->getCanonicalIV()), - m_One(), m_Specific(&Plan.getVF())); + auto m_CanonicalScalarIVSteps = m_ScalarIVSteps( + m_CombineOr(m_CanonicalIV(), + m_DerivedIV(m_ZeroInt(), m_CanonicalIV(), m_One())), + m_One(), m_Specific(&Plan.getVF())); if (match(V, m_ActiveLaneMask(m_VPValue(A), m_VPValue(B), m_One()))) return B == Plan.getTripCount() && From 7892bfe814ed6f09f2e634a5c07fd759ae5ace22 Mon Sep 17 00:00:00 2001 From: John Brawn Date: Thu, 19 Mar 2026 11:10:05 +0000 Subject: [PATCH 2/2] Add -vplan-verify-each to mve-reg-pressure-spills.ll --- .../Transforms/LoopVectorize/ARM/mve-reg-pressure-spills.ll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/llvm/test/Transforms/LoopVectorize/ARM/mve-reg-pressure-spills.ll b/llvm/test/Transforms/LoopVectorize/ARM/mve-reg-pressure-spills.ll index e8bd502d09b0b..211f71da21f24 100644 --- a/llvm/test/Transforms/LoopVectorize/ARM/mve-reg-pressure-spills.ll +++ b/llvm/test/Transforms/LoopVectorize/ARM/mve-reg-pressure-spills.ll @@ -1,6 +1,6 @@ ; REQUIRES: asserts -; RUN: opt -mcpu=cortex-m55 -passes=loop-vectorize -disable-output -debug-only=loop-vectorize,vplan -vectorizer-consider-reg-pressure=false %s 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-NOPRESSURE -; RUN: opt -mcpu=cortex-m55 -passes=loop-vectorize -disable-output -debug-only=loop-vectorize,vplan -vectorizer-consider-reg-pressure=true %s 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-PRESSURE +; RUN: opt -mcpu=cortex-m55 -passes=loop-vectorize -disable-output -debug-only=loop-vectorize,vplan -vplan-verify-each -vectorizer-consider-reg-pressure=false %s 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-NOPRESSURE +; RUN: opt -mcpu=cortex-m55 -passes=loop-vectorize -disable-output -debug-only=loop-vectorize,vplan -vplan-verify-each -vectorizer-consider-reg-pressure=true %s 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-PRESSURE target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64" target triple = "thumbv8.1m.main-unknown-none-eabihf"