[PATCH] D153253: [LibCallsShrinkWrap][NFC] Reuse createCond and createOrCond
Jim Lin via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 19 01:25:04 PDT 2023
Jim created this revision.
Herald added a subscriber: hiraditya.
Herald added a project: All.
Jim requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Add two new functions `createCond` and `createOrCond` that accept extra
arguments Arg and Arg/Arg2 respectively.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D153253
Files:
llvm/lib/Transforms/Utils/LibCallsShrinkWrap.cpp
Index: llvm/lib/Transforms/Utils/LibCallsShrinkWrap.cpp
===================================================================
--- llvm/lib/Transforms/Utils/LibCallsShrinkWrap.cpp
+++ llvm/lib/Transforms/Utils/LibCallsShrinkWrap.cpp
@@ -79,14 +79,21 @@
Value *generateTwoRangeCond(CallInst *CI, const LibFunc &Func);
Value *generateCondForPow(CallInst *CI, const LibFunc &Func);
+ // Create an OR of two conditions with given Arg and Arg2.
+ Value *createOrCond(CallInst *CI, Value *Arg, CmpInst::Predicate Cmp,
+ float Val, Value *Arg2, CmpInst::Predicate Cmp2,
+ float Val2) {
+ IRBuilder<> BBBuilder(CI);
+ auto Cond2 = createCond(BBBuilder, Arg2, Cmp2, Val2);
+ auto Cond1 = createCond(BBBuilder, Arg, Cmp, Val);
+ return BBBuilder.CreateOr(Cond1, Cond2);
+ }
+
// Create an OR of two conditions.
Value *createOrCond(CallInst *CI, CmpInst::Predicate Cmp, float Val,
CmpInst::Predicate Cmp2, float Val2) {
- IRBuilder<> BBBuilder(CI);
Value *Arg = CI->getArgOperand(0);
- auto Cond2 = createCond(BBBuilder, Arg, Cmp2, Val2);
- auto Cond1 = createCond(BBBuilder, Arg, Cmp, Val);
- return BBBuilder.CreateOr(Cond1, Cond2);
+ return createOrCond(CI, Arg, Cmp, Val, Arg, Cmp2, Val2);
}
// Create a single condition using IRBuilder.
@@ -98,11 +105,17 @@
return BBBuilder.CreateFCmp(Cmp, Arg, V);
}
+ // Create a single condition with given Arg.
+ Value *createCond(CallInst *CI, Value *Arg, CmpInst::Predicate Cmp,
+ float Val) {
+ IRBuilder<> BBBuilder(CI);
+ return createCond(BBBuilder, Arg, Cmp, Val);
+ }
+
// Create a single condition.
Value *createCond(CallInst *CI, CmpInst::Predicate Cmp, float Val) {
- IRBuilder<> BBBuilder(CI);
Value *Arg = CI->getArgOperand(0);
- return createCond(BBBuilder, Arg, Cmp, Val);
+ return createCond(CI, Arg, Cmp, Val);
}
const TargetLibraryInfo &TLI;
@@ -406,7 +419,6 @@
Value *Base = CI->getArgOperand(0);
Value *Exp = CI->getArgOperand(1);
- IRBuilder<> BBBuilder(CI);
// Constant Base case.
if (ConstantFP *CF = dyn_cast<ConstantFP>(Base)) {
@@ -417,10 +429,7 @@
}
++NumWrappedOneCond;
- Constant *V = ConstantFP::get(CI->getContext(), APFloat(127.0f));
- if (!Exp->getType()->isFloatTy())
- V = ConstantExpr::getFPExtend(V, Exp->getType());
- return BBBuilder.CreateFCmp(CmpInst::FCMP_OGT, Exp, V);
+ return createCond(CI, Exp, CmpInst::FCMP_OGT, 127.0f);
}
// If the Base value coming from an integer type.
@@ -445,16 +454,8 @@
}
++NumWrappedTwoCond;
- Constant *V = ConstantFP::get(CI->getContext(), APFloat(UpperV));
- Constant *V0 = ConstantFP::get(CI->getContext(), APFloat(0.0f));
- if (!Exp->getType()->isFloatTy())
- V = ConstantExpr::getFPExtend(V, Exp->getType());
- if (!Base->getType()->isFloatTy())
- V0 = ConstantExpr::getFPExtend(V0, Exp->getType());
-
- Value *Cond = BBBuilder.CreateFCmp(CmpInst::FCMP_OGT, Exp, V);
- Value *Cond0 = BBBuilder.CreateFCmp(CmpInst::FCMP_OLE, Base, V0);
- return BBBuilder.CreateOr(Cond0, Cond);
+ return createOrCond(CI, Base, CmpInst::FCMP_OLE, 0.0f, Exp,
+ CmpInst::FCMP_OGT, UpperV);
}
LLVM_DEBUG(dbgs() << "Not handled pow(): base not from integer convert\n");
return nullptr;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D153253.532560.patch
Type: text/x-patch
Size: 3391 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230619/d0f8ca9d/attachment.bin>
More information about the llvm-commits
mailing list