diff options
author | Hal Finkel <hfinkel@anl.gov> | 2013-05-16 16:52:41 +0000 |
---|---|---|
committer | Hal Finkel <hfinkel@anl.gov> | 2013-05-16 16:52:41 +0000 |
commit | 47db66d43fd441eb8d619036fb5440a7fc69fb3f (patch) | |
tree | 93a1b0bee31c23ca9b1fb364adba674182f65981 /llvm/lib/Target/PowerPC/PPCCTRLoops.cpp | |
parent | eb03f8a75f74d7e96a6b35af0abd2dae513365d7 (diff) | |
download | bcm5719-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.cpp | 6 |
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. |