diff options
| author | Florian Hahn <flo@fhahn.com> | 2025-11-01 17:28:42 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-01 17:28:42 -0700 |
| commit | b7e922a3da9f122eed1298965bb46a25ed3376bc (patch) | |
| tree | b189d1db711bb07f460f712c0ce322705e23bea1 /llvm/lib/Transforms | |
| parent | 4c21d0cb14806fe1f5f42abd9d7e772013f625cb (diff) | |
| download | llvm-b7e922a3da9f122eed1298965bb46a25ed3376bc.zip llvm-b7e922a3da9f122eed1298965bb46a25ed3376bc.tar.gz llvm-b7e922a3da9f122eed1298965bb46a25ed3376bc.tar.bz2 | |
[VPlan] Convert BuildVector with all-equal values to Broadcast. (#165826)
Fold BuildVector where all operands are equal to Broadcast of the first
operand. This will subsequently make it easier to remove additional
buildvectors/broadcasts, e.g. via
https://github.com/llvm/llvm-project/pull/165506.
PR: https://github.com/llvm/llvm-project/pull/165826
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp index 6a8231b..f50bf29 100644 --- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp +++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp @@ -1281,6 +1281,12 @@ static void simplifyRecipe(VPRecipeBase &R, VPTypeAnalysis &TypeInfo) { return; } + if (match(Def, m_BuildVector()) && all_equal(R.operands())) { + Def->replaceAllUsesWith( + Builder.createNaryOp(VPInstruction::Broadcast, Def->getOperand(0))); + return; + } + if (auto *Phi = dyn_cast<VPPhi>(Def)) { if (Phi->getNumOperands() == 1) Phi->replaceAllUsesWith(Phi->getOperand(0)); |
