summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorChad Rosier <mcrosier@apple.com>2011-11-29 23:57:10 +0000
committerChad Rosier <mcrosier@apple.com>2011-11-29 23:57:10 +0000
commit82e1bd8e94b101785d382a1f4a12731e427e7934 (patch)
tree4d07c3d31e50be2ddb70d8890f5717eff9de7abf /llvm/lib
parentfaa5c13d8f535c2463a9c694eafac845eaffe3ff (diff)
downloadbcm5719-llvm-82e1bd8e94b101785d382a1f4a12731e427e7934.tar.gz
bcm5719-llvm-82e1bd8e94b101785d382a1f4a12731e427e7934.zip
Add support for sqrt, sqrtl, and sqrtf in TargetLibraryInfo. Disable
(fptrunc (sqrt (fpext x))) -> (sqrtf x) transformation if -fno-builtin is specified. rdar://10466410 llvm-svn: 145460
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/TargetLibraryInfo.cpp3
-rw-r--r--llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp7
-rw-r--r--llvm/lib/Transforms/InstCombine/InstructionCombining.cpp2
3 files changed, 9 insertions, 3 deletions
diff --git a/llvm/lib/Target/TargetLibraryInfo.cpp b/llvm/lib/Target/TargetLibraryInfo.cpp
index aa2e014b2bc..d6dbde5b3ac 100644
--- a/llvm/lib/Target/TargetLibraryInfo.cpp
+++ b/llvm/lib/Target/TargetLibraryInfo.cpp
@@ -28,6 +28,9 @@ const char* TargetLibraryInfo::StandardNames[LibFunc::NumLibFuncs] =
"memset_pattern16",
"iprintf",
"siprintf",
+ "sqrt",
+ "sqrtl",
+ "sqrtf",
"fiprintf",
"fwrite",
"fputs"
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
index f10e48abf10..63065e3e2ef 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
@@ -14,6 +14,7 @@
#include "InstCombine.h"
#include "llvm/Analysis/ConstantFolding.h"
#include "llvm/Target/TargetData.h"
+#include "llvm/Target/TargetLibraryInfo.h"
#include "llvm/Support/PatternMatch.h"
using namespace llvm;
using namespace PatternMatch;
@@ -1213,10 +1214,10 @@ Instruction *InstCombiner::visitFPTrunc(FPTruncInst &CI) {
}
// Fold (fptrunc (sqrt (fpext x))) -> (sqrtf x)
- // NOTE: This should be disabled by -fno-builtin-sqrt if we ever support it.
+ const TargetLibraryInfo &TLI = getAnalysis<TargetLibraryInfo>();
CallInst *Call = dyn_cast<CallInst>(CI.getOperand(0));
- if (Call && Call->getCalledFunction() &&
- Call->getCalledFunction()->getName() == "sqrt" &&
+ if (Call && Call->getCalledFunction() && TLI.has(LibFunc::sqrtf) &&
+ Call->getCalledFunction()->getName() == TLI.getName(LibFunc::sqrt) &&
Call->getNumArgOperands() == 1 &&
Call->hasOneUse()) {
CastInst *Arg = dyn_cast<CastInst>(Call->getArgOperand(0));
diff --git a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
index a7a6311c1a8..60c7fefb15d 100644
--- a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
@@ -41,6 +41,7 @@
#include "llvm/Analysis/InstructionSimplify.h"
#include "llvm/Analysis/MemoryBuiltins.h"
#include "llvm/Target/TargetData.h"
+#include "llvm/Target/TargetLibraryInfo.h"
#include "llvm/Transforms/Utils/Local.h"
#include "llvm/Support/CFG.h"
#include "llvm/Support/Debug.h"
@@ -79,6 +80,7 @@ INITIALIZE_PASS(InstCombiner, "instcombine",
void InstCombiner::getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesCFG();
+ AU.addRequired<TargetLibraryInfo>();
}
OpenPOWER on IntegriCloud