[llvm] [NFC][Matrix] Make CreateLoop take ConstantInt for Bound/Step (PR #181291)
Aiden Grossman via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 17 18:48:54 PST 2026
https://github.com/boomanaiden154 updated https://github.com/llvm/llvm-project/pull/181291
>From e595808a80e9fc3a828aeb59bdba9ef400514c08 Mon Sep 17 00:00:00 2001
From: Aiden Grossman <aidengrossman at google.com>
Date: Fri, 13 Feb 2026 01:57:38 +0000
Subject: [PATCH 1/3] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20ch?=
=?UTF-8?q?anges=20to=20main=20this=20commit=20is=20based=20on?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Created using spr 1.3.7
[skip ci]
---
.../Transforms/Scalar/LowerMatrixIntrinsics.cpp | 4 +++-
.../Transforms/LowerMatrixIntrinsics/select.ll | 16 +++++++++++-----
llvm/utils/profcheck-xfail.txt | 1 -
3 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp b/llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp
index ecf295dc75c3a..053f1d99274ae 100644
--- a/llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp
+++ b/llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp
@@ -2459,16 +2459,18 @@ class LowerMatrixIntrinsics {
MatrixTy B = getMatrix(OpB, Shape, Builder);
SmallVector<Value*> CondV;
+ Instruction *MDFrom = nullptr;
if (isa<FixedVectorType>(Cond->getType())) {
MatrixTy C = getMatrix(Cond, Shape, Builder);
llvm::copy(C.vectors(), std::back_inserter(CondV));
} else {
CondV.resize(A.getNumVectors());
llvm::fill(CondV, Cond);
+ MDFrom = Inst;
}
for (auto [CV, AV, BV] : llvm::zip_equal(CondV, A.vectors(), B.vectors()))
- Result.addVector(Builder.CreateSelect(CV, AV, BV));
+ Result.addVector(Builder.CreateSelect(CV, AV, BV, "", MDFrom));
return Result.addNumComputeOps(getNumOps(Result.getVectorTy()) *
Result.getNumVectors());
diff --git a/llvm/test/Transforms/LowerMatrixIntrinsics/select.ll b/llvm/test/Transforms/LowerMatrixIntrinsics/select.ll
index bd97915759aac..73ac5f8b78704 100644
--- a/llvm/test/Transforms/LowerMatrixIntrinsics/select.ll
+++ b/llvm/test/Transforms/LowerMatrixIntrinsics/select.ll
@@ -1,7 +1,7 @@
-; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals smart
; RUN: opt -passes='lower-matrix-intrinsics' -S < %s | FileCheck %s
-define void @select_2x2_bot(i1 %cond, ptr %lhs, ptr %rhs, ptr %out) {
+define void @select_2x2_bot(i1 %cond, ptr %lhs, ptr %rhs, ptr %out) !prof !0 {
; CHECK-LABEL: @select_2x2_bot(
; CHECK-NEXT: [[COL_LOAD:%.*]] = load <2 x float>, ptr [[LHS:%.*]], align 16
; CHECK-NEXT: [[VEC_GEP:%.*]] = getelementptr float, ptr [[LHS]], i64 2
@@ -9,8 +9,8 @@ define void @select_2x2_bot(i1 %cond, ptr %lhs, ptr %rhs, ptr %out) {
; CHECK-NEXT: [[COL_LOAD2:%.*]] = load <2 x float>, ptr [[RHS:%.*]], align 16
; CHECK-NEXT: [[VEC_GEP3:%.*]] = getelementptr float, ptr [[RHS]], i64 2
; CHECK-NEXT: [[COL_LOAD4:%.*]] = load <2 x float>, ptr [[VEC_GEP3]], align 8
-; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[COND:%.*]], <2 x float> [[COL_LOAD]], <2 x float> [[COL_LOAD2]]
-; CHECK-NEXT: [[TMP2:%.*]] = select i1 [[COND]], <2 x float> [[COL_LOAD1]], <2 x float> [[COL_LOAD4]]
+; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[COND:%.*]], <2 x float> [[COL_LOAD]], <2 x float> [[COL_LOAD2]], !prof [[PROF1:![0-9]+]]
+; CHECK-NEXT: [[TMP2:%.*]] = select i1 [[COND]], <2 x float> [[COL_LOAD1]], <2 x float> [[COL_LOAD4]], !prof [[PROF1]]
; CHECK-NEXT: store <2 x float> [[TMP1]], ptr [[OUT:%.*]], align 4
; CHECK-NEXT: [[VEC_GEP5:%.*]] = getelementptr float, ptr [[OUT]], i64 2
; CHECK-NEXT: store <2 x float> [[TMP2]], ptr [[VEC_GEP5]], align 4
@@ -18,7 +18,7 @@ define void @select_2x2_bot(i1 %cond, ptr %lhs, ptr %rhs, ptr %out) {
;
%lhsv = load <4 x float>, ptr %lhs
%rhsv = load <4 x float>, ptr %rhs
- %op = select i1 %cond, <4 x float> %lhsv, <4 x float> %rhsv
+ %op = select i1 %cond, <4 x float> %lhsv, <4 x float> %rhsv, !prof !1
call void @llvm.matrix.column.major.store(<4 x float> %op, ptr %out, i64 2, i1 false, i32 2, i32 2)
ret void
}
@@ -205,3 +205,9 @@ define void @select_2x2_vcond_shape5(ptr %cond, ptr %lhs, ptr %rhs, ptr %out) {
store <4 x float> %op, ptr %out
ret void
}
+
+!0 = !{!"function_entry_count", i64 1000}
+!1 = !{!"branch_weights", i32 2, i32 3}
+;.
+; CHECK: [[PROF1]] = !{!"branch_weights", i32 2, i32 3}
+;.
diff --git a/llvm/utils/profcheck-xfail.txt b/llvm/utils/profcheck-xfail.txt
index 454f3d8f8fe00..63b1cf9696c65 100644
--- a/llvm/utils/profcheck-xfail.txt
+++ b/llvm/utils/profcheck-xfail.txt
@@ -190,7 +190,6 @@ Transforms/LowerMatrixIntrinsics/multiply-fused-loops.ll
Transforms/LowerMatrixIntrinsics/multiply-fused-loops-large-matrixes.ll
Transforms/LowerMatrixIntrinsics/multiply-fused-multiple-blocks.ll
Transforms/LowerMatrixIntrinsics/multiply-fused-volatile.ll
-Transforms/LowerMatrixIntrinsics/select.ll
Transforms/LowerSwitch/2003-05-01-PHIProblem.ll
Transforms/LowerSwitch/2004-03-13-SwitchIsDefaultCrash.ll
Transforms/LowerSwitch/2014-06-10-SwitchContiguousOpt.ll
>From c405df2e7927f661c7c31a50745a3bbd4ce99a19 Mon Sep 17 00:00:00 2001
From: Aiden Grossman <aidengrossman at google.com>
Date: Fri, 13 Feb 2026 02:21:49 +0000
Subject: [PATCH 2/3] feedback
Created using spr 1.3.7
---
llvm/lib/Transforms/Utils/MatrixUtils.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/llvm/lib/Transforms/Utils/MatrixUtils.cpp b/llvm/lib/Transforms/Utils/MatrixUtils.cpp
index a35003c3bc390..7bb0cb919f5c9 100644
--- a/llvm/lib/Transforms/Utils/MatrixUtils.cpp
+++ b/llvm/lib/Transforms/Utils/MatrixUtils.cpp
@@ -35,8 +35,8 @@ BasicBlock *TileInfo::CreateLoop(BasicBlock *Preheader, BasicBlock *Exit,
Type *I32Ty = Type::getInt64Ty(Ctx);
BranchInst::Create(Body, Header);
BranchInst::Create(Latch, Body);
- PHINode *IV = PHINode::Create(I32Ty, 2, Name + ".iv",
- Header->getTerminator()->getIterator());
+ PHINode *IV =
+ PHINode::Create(I32Ty, 2, Name + ".iv", Header->getTerminator()->getIterator());
IV->addIncoming(ConstantInt::get(I32Ty, 0), Preheader);
B.SetInsertPoint(Latch);
>From 068789d8e4c2f4234fb59610a9f0c8943348f2b7 Mon Sep 17 00:00:00 2001
From: Aiden Grossman <aidengrossman at google.com>
Date: Wed, 18 Feb 2026 02:08:17 +0000
Subject: [PATCH 3/3] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20ch?=
=?UTF-8?q?anges=20introduced=20through=20rebase?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Created using spr 1.3.7
[skip ci]
---
.../lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp b/llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp
index 053f1d99274ae..65c6330d7bdd5 100644
--- a/llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp
+++ b/llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp
@@ -104,6 +104,10 @@ static cl::opt<unsigned> SplitMatmulRemainderOverThreshold(
"in the inner loop of matmul"),
cl::init(0));
+namespace llvm {
+extern cl::opt<bool> ProfcheckDisableMetadataFixes;
+} // end namespace llvm
+
/// Helper function to either return Scope, if it is a subprogram or the
/// attached subprogram for a local scope.
static DISubprogram *getSubprogram(DIScope *Scope) {
@@ -2466,11 +2470,16 @@ class LowerMatrixIntrinsics {
} else {
CondV.resize(A.getNumVectors());
llvm::fill(CondV, Cond);
- MDFrom = Inst;
+ if (!ProfcheckDisableMetadataFixes)
+ MDFrom = Inst;
}
- for (auto [CV, AV, BV] : llvm::zip_equal(CondV, A.vectors(), B.vectors()))
+ for (auto [CV, AV, BV] : llvm::zip_equal(CondV, A.vectors(), B.vectors())) {
+ assert(!(isa<VectorType>(CV->getType()) && static_cast<bool>(MDFrom)) &&
+ "If we have a vector conditional, we should be propagating "
+ "profile information.");
Result.addVector(Builder.CreateSelect(CV, AV, BV, "", MDFrom));
+ }
return Result.addNumComputeOps(getNumOps(Result.getVectorTy()) *
Result.getNumVectors());
More information about the llvm-commits
mailing list