[llvm] 7efafb0 - [IRBuilder] Migrate fcmp to folding API
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Tue May 21 00:38:35 PDT 2024
Author: Nikita Popov
Date: 2024-05-21T09:38:27+02:00
New Revision: 7efafb0109b899d501a6508a0329e0c181964c47
URL: https://github.com/llvm/llvm-project/commit/7efafb0109b899d501a6508a0329e0c181964c47
DIFF: https://github.com/llvm/llvm-project/commit/7efafb0109b899d501a6508a0329e0c181964c47.diff
LOG: [IRBuilder] Migrate fcmp to folding API
This was one of the last leftovers still using a Create-style
instead of Fold-style API. Convert FoldICmp into FoldCmp so it
can handle both icmp and fcmp.
Added:
Modified:
llvm/include/llvm/Analysis/InstSimplifyFolder.h
llvm/include/llvm/Analysis/TargetFolder.h
llvm/include/llvm/IR/ConstantFolder.h
llvm/include/llvm/IR/IRBuilder.h
llvm/include/llvm/IR/IRBuilderFolder.h
llvm/include/llvm/IR/NoFolder.h
llvm/lib/IR/IRBuilder.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/Analysis/InstSimplifyFolder.h b/llvm/include/llvm/Analysis/InstSimplifyFolder.h
index 8a3269d6add0e..98c7c291fea1f 100644
--- a/llvm/include/llvm/Analysis/InstSimplifyFolder.h
+++ b/llvm/include/llvm/Analysis/InstSimplifyFolder.h
@@ -72,8 +72,8 @@ class InstSimplifyFolder final : public IRBuilderFolder {
return simplifyUnOp(Opc, V, FMF, SQ);
}
- Value *FoldICmp(CmpInst::Predicate P, Value *LHS, Value *RHS) const override {
- return simplifyICmpInst(P, LHS, RHS, SQ);
+ Value *FoldCmp(CmpInst::Predicate P, Value *LHS, Value *RHS) const override {
+ return simplifyCmpInst(P, LHS, RHS, SQ);
}
Value *FoldGEP(Type *Ty, Value *Ptr, ArrayRef<Value *> IdxList,
@@ -139,15 +139,6 @@ class InstSimplifyFolder final : public IRBuilderFolder {
return C; // avoid calling Fold
return ConstFolder.CreatePointerBitCastOrAddrSpaceCast(C, DestTy);
}
-
- //===--------------------------------------------------------------------===//
- // Compare Instructions
- //===--------------------------------------------------------------------===//
-
- Value *CreateFCmp(CmpInst::Predicate P, Constant *LHS,
- Constant *RHS) const override {
- return ConstFolder.CreateFCmp(P, LHS, RHS);
- }
};
} // end namespace llvm
diff --git a/llvm/include/llvm/Analysis/TargetFolder.h b/llvm/include/llvm/Analysis/TargetFolder.h
index b4105ad76c02e..f95d738a40654 100644
--- a/llvm/include/llvm/Analysis/TargetFolder.h
+++ b/llvm/include/llvm/Analysis/TargetFolder.h
@@ -99,7 +99,7 @@ class TargetFolder final : public IRBuilderFolder {
return FoldBinOp(Opc, LHS, RHS);
}
- Value *FoldICmp(CmpInst::Predicate P, Value *LHS, Value *RHS) const override {
+ Value *FoldCmp(CmpInst::Predicate P, Value *LHS, Value *RHS) const override {
auto *LC = dyn_cast<Constant>(LHS);
auto *RC = dyn_cast<Constant>(RHS);
if (LC && RC)
@@ -216,15 +216,6 @@ class TargetFolder final : public IRBuilderFolder {
return C; // avoid calling Fold
return Fold(ConstantExpr::getPointerBitCastOrAddrSpaceCast(C, DestTy));
}
-
- //===--------------------------------------------------------------------===//
- // Compare Instructions
- //===--------------------------------------------------------------------===//
-
- Constant *CreateFCmp(CmpInst::Predicate P, Constant *LHS,
- Constant *RHS) const override {
- return Fold(ConstantExpr::getCompare(P, LHS, RHS));
- }
};
}
diff --git a/llvm/include/llvm/IR/ConstantFolder.h b/llvm/include/llvm/IR/ConstantFolder.h
index 3e74a563a5842..ce4b44ddc855f 100644
--- a/llvm/include/llvm/IR/ConstantFolder.h
+++ b/llvm/include/llvm/IR/ConstantFolder.h
@@ -95,7 +95,7 @@ class ConstantFolder final : public IRBuilderFolder {
return nullptr;
}
- Value *FoldICmp(CmpInst::Predicate P, Value *LHS, Value *RHS) const override {
+ Value *FoldCmp(CmpInst::Predicate P, Value *LHS, Value *RHS) const override {
auto *LC = dyn_cast<Constant>(LHS);
auto *RC = dyn_cast<Constant>(RHS);
if (LC && RC)
@@ -201,15 +201,6 @@ class ConstantFolder final : public IRBuilderFolder {
Type *DestTy) const override {
return ConstantExpr::getPointerBitCastOrAddrSpaceCast(C, DestTy);
}
-
- //===--------------------------------------------------------------------===//
- // Compare Instructions
- //===--------------------------------------------------------------------===//
-
- Constant *CreateFCmp(CmpInst::Predicate P, Constant *LHS,
- Constant *RHS) const override {
- return ConstantExpr::getCompare(P, LHS, RHS);
- }
};
} // end namespace llvm
diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h
index b6534a1962a2f..0d8746344a44b 100644
--- a/llvm/include/llvm/IR/IRBuilder.h
+++ b/llvm/include/llvm/IR/IRBuilder.h
@@ -2350,7 +2350,7 @@ class IRBuilderBase {
Value *CreateICmp(CmpInst::Predicate P, Value *LHS, Value *RHS,
const Twine &Name = "") {
- if (auto *V = Folder.FoldICmp(P, LHS, RHS))
+ if (auto *V = Folder.FoldCmp(P, LHS, RHS))
return V;
return Insert(new ICmpInst(P, LHS, RHS), Name);
}
diff --git a/llvm/include/llvm/IR/IRBuilderFolder.h b/llvm/include/llvm/IR/IRBuilderFolder.h
index 3020f2684ee45..f474c3a0206b1 100644
--- a/llvm/include/llvm/IR/IRBuilderFolder.h
+++ b/llvm/include/llvm/IR/IRBuilderFolder.h
@@ -48,8 +48,8 @@ class IRBuilderFolder {
virtual Value *FoldUnOpFMF(Instruction::UnaryOps Opc, Value *V,
FastMathFlags FMF) const = 0;
- virtual Value *FoldICmp(CmpInst::Predicate P, Value *LHS,
- Value *RHS) const = 0;
+ virtual Value *FoldCmp(CmpInst::Predicate P, Value *LHS,
+ Value *RHS) const = 0;
virtual Value *FoldGEP(Type *Ty, Value *Ptr, ArrayRef<Value *> IdxList,
bool IsInBounds = false) const = 0;
@@ -84,13 +84,6 @@ class IRBuilderFolder {
virtual Value *CreatePointerCast(Constant *C, Type *DestTy) const = 0;
virtual Value *CreatePointerBitCastOrAddrSpaceCast(Constant *C,
Type *DestTy) const = 0;
-
- //===--------------------------------------------------------------------===//
- // Compare Instructions
- //===--------------------------------------------------------------------===//
-
- virtual Value *CreateFCmp(CmpInst::Predicate P, Constant *LHS,
- Constant *RHS) const = 0;
};
} // end namespace llvm
diff --git a/llvm/include/llvm/IR/NoFolder.h b/llvm/include/llvm/IR/NoFolder.h
index 7bb5d5e696e9e..72ab22c0d2949 100644
--- a/llvm/include/llvm/IR/NoFolder.h
+++ b/llvm/include/llvm/IR/NoFolder.h
@@ -70,7 +70,7 @@ class NoFolder final : public IRBuilderFolder {
return nullptr;
}
- Value *FoldICmp(CmpInst::Predicate P, Value *LHS, Value *RHS) const override {
+ Value *FoldCmp(CmpInst::Predicate P, Value *LHS, Value *RHS) const override {
return nullptr;
}
@@ -129,15 +129,6 @@ class NoFolder final : public IRBuilderFolder {
Constant *C, Type *DestTy) const override {
return CastInst::CreatePointerBitCastOrAddrSpaceCast(C, DestTy);
}
-
- //===--------------------------------------------------------------------===//
- // Compare Instructions
- //===--------------------------------------------------------------------===//
-
- Instruction *CreateFCmp(CmpInst::Predicate P,
- Constant *LHS, Constant *RHS) const override {
- return new FCmpInst(P, LHS, RHS);
- }
};
} // end namespace llvm
diff --git a/llvm/lib/IR/IRBuilder.cpp b/llvm/lib/IR/IRBuilder.cpp
index c6f20af0f1dfb..0d6760ed08411 100644
--- a/llvm/lib/IR/IRBuilder.cpp
+++ b/llvm/lib/IR/IRBuilder.cpp
@@ -1053,9 +1053,8 @@ Value *IRBuilderBase::CreateFCmpHelper(
return CreateConstrainedFPCmp(ID, P, LHS, RHS, Name);
}
- if (auto *LC = dyn_cast<Constant>(LHS))
- if (auto *RC = dyn_cast<Constant>(RHS))
- return Insert(Folder.CreateFCmp(P, LC, RC), Name);
+ if (auto *V = Folder.FoldCmp(P, LHS, RHS))
+ return V;
return Insert(setFPAttrs(new FCmpInst(P, LHS, RHS), FPMathTag, FMF), Name);
}
More information about the llvm-commits
mailing list