[llvm] 1d0476c - [FuncSpec] Prefer DataLayout-aware constant folding of GEPs.
Alexandros Lamprineas via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 11 05:48:05 PDT 2023
Author: Alexandros Lamprineas
Date: 2023-07-11T13:24:26+01:00
New Revision: 1d0476cb4d152872d7df20eb3330d9e53fff5a3a
URL: https://github.com/llvm/llvm-project/commit/1d0476cb4d152872d7df20eb3330d9e53fff5a3a
DIFF: https://github.com/llvm/llvm-project/commit/1d0476cb4d152872d7df20eb3330d9e53fff5a3a.diff
LOG: [FuncSpec] Prefer DataLayout-aware constant folding of GEPs.
As shown in D154820, the DataLayout-independent constant folding
interface is not good enough for handling GEPs. Instead we should
be using the DataLayout-aware constant folding interface. Since
there isn't a method to specifically handle GEPs we can use the
one which folds generic instruction operands.
Differential Revision: https://reviews.llvm.org/D154821
Added:
Modified:
llvm/lib/Transforms/IPO/FunctionSpecialization.cpp
llvm/unittests/Transforms/IPO/FunctionSpecializationTest.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp b/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp
index 5180e3ffa09777..b51b45a8fb16ea 100644
--- a/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp
+++ b/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp
@@ -55,7 +55,6 @@
#include "llvm/Analysis/ValueLattice.h"
#include "llvm/Analysis/ValueLatticeUtils.h"
#include "llvm/Analysis/ValueTracking.h"
-#include "llvm/IR/ConstantFold.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/Transforms/Scalar/SCCP.h"
#include "llvm/Transforms/Utils/Cloning.h"
@@ -260,7 +259,7 @@ Constant *InstCostVisitor::visitLoadInst(LoadInst &I) {
}
Constant *InstCostVisitor::visitGetElementPtrInst(GetElementPtrInst &I) {
- SmallVector<Value *, 8> Operands;
+ SmallVector<Constant *, 8> Operands;
Operands.reserve(I.getNumOperands());
for (unsigned Idx = 0, E = I.getNumOperands(); Idx != E; ++Idx) {
@@ -273,10 +272,8 @@ Constant *InstCostVisitor::visitGetElementPtrInst(GetElementPtrInst &I) {
Operands.push_back(C);
}
- auto *Ptr = cast<Constant>(Operands[0]);
- auto Ops = ArrayRef(Operands.begin() + 1, Operands.end());
- return ConstantFoldGetElementPtr(I.getSourceElementType(), Ptr,
- I.isInBounds(), std::nullopt, Ops);
+ auto Ops = ArrayRef(Operands.begin(), Operands.end());
+ return ConstantFoldInstOperands(&I, Ops, DL);
}
Constant *InstCostVisitor::visitSelectInst(SelectInst &I) {
diff --git a/llvm/unittests/Transforms/IPO/FunctionSpecializationTest.cpp b/llvm/unittests/Transforms/IPO/FunctionSpecializationTest.cpp
index 12e5d98d516203..222311dc040a86 100644
--- a/llvm/unittests/Transforms/IPO/FunctionSpecializationTest.cpp
+++ b/llvm/unittests/Transforms/IPO/FunctionSpecializationTest.cpp
@@ -281,8 +281,8 @@ TEST_F(FunctionSpecializationTest, Misc) {
Ref = getInstCost(Gep) + getInstCost(Load) + getInstCost(Freeze) +
getInstCost(Smax);
Bonus = Specializer.getSpecializationBonus(F->getArg(2), GV, Visitor);
- EXPECT_NE(Bonus, Ref);
- EXPECT_FALSE(Bonus > 0);
+ EXPECT_EQ(Bonus, Ref);
+ EXPECT_TRUE(Bonus > 0);
Bonus = Specializer.getSpecializationBonus(F->getArg(3), Undef, Visitor);
EXPECT_TRUE(Bonus == 0);
More information about the llvm-commits
mailing list