summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2015-11-26 09:51:17 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2015-11-26 09:51:17 +0000
commitfb419e71f40512b3a94ba65d9cf57b67776a4ee2 (patch)
treeba37c5ead0cc5f7601320c6db10bf74ecca1945a /llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
parent9b7e7db8caecc28a807d190bd75e4da597d9cb98 (diff)
downloadbcm5719-llvm-fb419e71f40512b3a94ba65d9cf57b67776a4ee2.tar.gz
bcm5719-llvm-fb419e71f40512b3a94ba65d9cf57b67776a4ee2.zip
[SimplifyLibCalls] Don't depend on a called function having a name, it might be an indirect call.
Fixes the crasher in PR25651 and related crashers using the same pattern. llvm-svn: 254145
Diffstat (limited to 'llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp19
1 files changed, 8 insertions, 11 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
index 8e0481df8dc..da852526f50 100644
--- a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
+++ b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
@@ -1112,14 +1112,12 @@ Value *LibCallSimplifier::optimizePow(CallInst *CI, IRBuilder<> &B) {
B.SetFastMathFlags(FMF);
LibFunc::Func Func;
- Function *Callee = OpC->getCalledFunction();
- StringRef FuncName = Callee->getName();
-
- if (TLI->getLibFunc(FuncName, Func) && TLI->has(Func) &&
- (Func == LibFunc::exp || Func == LibFunc::exp2))
+ Function *OpCCallee = OpC->getCalledFunction();
+ if (OpCCallee && TLI->getLibFunc(OpCCallee->getName(), Func) &&
+ TLI->has(Func) && (Func == LibFunc::exp || Func == LibFunc::exp2))
return EmitUnaryFloatFnCall(
- B.CreateFMul(OpC->getArgOperand(0), Op2, "mul"), FuncName, B,
- Callee->getAttributes());
+ B.CreateFMul(OpC->getArgOperand(0), Op2, "mul"),
+ OpCCallee->getName(), B, OpCCallee->getAttributes());
}
}
@@ -1382,8 +1380,7 @@ Value *LibCallSimplifier::optimizeTan(CallInst *CI, IRBuilder<> &B) {
// tanl(atanl(x)) -> x
LibFunc::Func Func;
Function *F = OpC->getCalledFunction();
- StringRef FuncName = F->getName();
- if (TLI->getLibFunc(FuncName, Func) && TLI->has(Func) &&
+ if (F && TLI->getLibFunc(F->getName(), Func) && TLI->has(Func) &&
((Func == LibFunc::atan && Callee->getName() == "tan") ||
(Func == LibFunc::atanf && Callee->getName() == "tanf") ||
(Func == LibFunc::atanl && Callee->getName() == "tanl")))
@@ -1458,9 +1455,9 @@ LibCallSimplifier::classifyArgUse(Value *Val, BasicBlock *BB, bool IsFloat,
return;
Function *Callee = CI->getCalledFunction();
- StringRef FuncName = Callee->getName();
LibFunc::Func Func;
- if (!TLI->getLibFunc(FuncName, Func) || !TLI->has(Func) || !isTrigLibCall(CI))
+ if (Callee && (!TLI->getLibFunc(Callee->getName(), Func) || !TLI->has(Func) ||
+ !isTrigLibCall(CI)))
return;
if (IsFloat) {
OpenPOWER on IntegriCloud