Apply llvm fix for "Invalid PPC CTR loop!" error on powerpcspe
Merge commit d9d15af7873f from llvm git (Qiu Chaofan): [PowerPC] Treat llvm.fmuladd intrinsic as using CTR This fixes bug 55463, similar to D78668. This is a temporary fix since we will switch to post-isel CTR loop determination in the future. Reviewed By: dim, shchenz Differential Revision: https://reviews.llvm.org/D125746 MFC after: 2 weeks
This commit is contained in:
parent
f70de61e56
commit
1a0329799c
34
commit-d9d15af7873fe16d7a0dde4def30f40fa9901777.diff
Normal file
34
commit-d9d15af7873fe16d7a0dde4def30f40fa9901777.diff
Normal file
@ -0,0 +1,34 @@
|
||||
commit d9d15af7873fe16d7a0dde4def30f40fa9901777
|
||||
Author: Qiu Chaofan <qiucofan@cn.ibm.com>
|
||||
Date: Wed May 18 15:55:02 2022 +0800
|
||||
|
||||
[PowerPC] Treat llvm.fmuladd intrinsic as using CTR
|
||||
|
||||
This fixes bug 55463, similar to D78668. This is a temporary fix since
|
||||
we will switch to post-isel CTR loop determination in the future.
|
||||
|
||||
Reviewed By: dim, shchenz
|
||||
|
||||
Differential Revision: https://reviews.llvm.org/D125746
|
||||
|
||||
diff --git a/llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp b/llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp
|
||||
index 501cfa07efeb..7b956fd3478e 100644
|
||||
--- a/llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp
|
||||
+++ b/llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp
|
||||
@@ -491,15 +491,13 @@ bool PPCTTIImpl::mightUseCTR(BasicBlock *BB, TargetLibraryInfo *LibInfo,
|
||||
case Intrinsic::experimental_constrained_sin:
|
||||
case Intrinsic::experimental_constrained_cos:
|
||||
return true;
|
||||
- // There is no corresponding FMA instruction for PPC double double.
|
||||
- // Thus, we need to disable CTR loop generation for this type.
|
||||
- case Intrinsic::fmuladd:
|
||||
case Intrinsic::copysign:
|
||||
if (CI->getArgOperand(0)->getType()->getScalarType()->
|
||||
isPPC_FP128Ty())
|
||||
return true;
|
||||
else
|
||||
continue; // ISD::FCOPYSIGN is never a library call.
|
||||
+ case Intrinsic::fmuladd:
|
||||
case Intrinsic::fma: Opcode = ISD::FMA; break;
|
||||
case Intrinsic::sqrt: Opcode = ISD::FSQRT; break;
|
||||
case Intrinsic::floor: Opcode = ISD::FFLOOR; break;
|
@ -491,15 +491,13 @@ bool PPCTTIImpl::mightUseCTR(BasicBlock *BB, TargetLibraryInfo *LibInfo,
|
||||
case Intrinsic::experimental_constrained_sin:
|
||||
case Intrinsic::experimental_constrained_cos:
|
||||
return true;
|
||||
// There is no corresponding FMA instruction for PPC double double.
|
||||
// Thus, we need to disable CTR loop generation for this type.
|
||||
case Intrinsic::fmuladd:
|
||||
case Intrinsic::copysign:
|
||||
if (CI->getArgOperand(0)->getType()->getScalarType()->
|
||||
isPPC_FP128Ty())
|
||||
return true;
|
||||
else
|
||||
continue; // ISD::FCOPYSIGN is never a library call.
|
||||
case Intrinsic::fmuladd:
|
||||
case Intrinsic::fma: Opcode = ISD::FMA; break;
|
||||
case Intrinsic::sqrt: Opcode = ISD::FSQRT; break;
|
||||
case Intrinsic::floor: Opcode = ISD::FFLOOR; break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user