summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/PowerPC/PPCCTRLoops.cpp
diff options
context:
space:
mode:
authorHal Finkel <hfinkel@anl.gov>2013-05-16 16:52:41 +0000
committerHal Finkel <hfinkel@anl.gov>2013-05-16 16:52:41 +0000
commit47db66d43fd441eb8d619036fb5440a7fc69fb3f (patch)
tree93a1b0bee31c23ca9b1fb364adba674182f65981 /llvm/lib/Target/PowerPC/PPCCTRLoops.cpp
parenteb03f8a75f74d7e96a6b35af0abd2dae513365d7 (diff)
downloadbcm5719-llvm-47db66d43fd441eb8d619036fb5440a7fc69fb3f.tar.gz
bcm5719-llvm-47db66d43fd441eb8d619036fb5440a7fc69fb3f.zip
PPC32 cannot form counter loops around i64 FP conversions
On PPC32, i64 FP conversions are implemented using runtime calls (which clobber the counter register). These must be excluded. llvm-svn: 182023
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCCTRLoops.cpp')
-rw-r--r--llvm/lib/Target/PowerPC/PPCCTRLoops.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCCTRLoops.cpp b/llvm/lib/Target/PowerPC/PPCCTRLoops.cpp
index ae5d9184605..6bbd571894d 100644
--- a/llvm/lib/Target/PowerPC/PPCCTRLoops.cpp
+++ b/llvm/lib/Target/PowerPC/PPCCTRLoops.cpp
@@ -305,7 +305,11 @@ bool PPCCTRLoops::convertToCTRLoop(Loop *L) {
isa<FPToUIInst>(J) || isa<FPToSIInst>(J)) {
CastInst *CI = cast<CastInst>(J);
if (CI->getSrcTy()->getScalarType()->isPPC_FP128Ty() ||
- CI->getDestTy()->getScalarType()->isPPC_FP128Ty())
+ CI->getDestTy()->getScalarType()->isPPC_FP128Ty() ||
+ (TT.isArch32Bit() &&
+ (CI->getSrcTy()->getScalarType()->isIntegerTy(64) ||
+ CI->getDestTy()->getScalarType()->isIntegerTy(64))
+ ))
return MadeChange;
} else if (isa<IndirectBrInst>(J) || isa<InvokeInst>(J)) {
// On PowerPC, indirect jumps use the counter register.
OpenPOWER on IntegriCloud