[PATCH] D81353: [PowerPC] Don't convert Loop to CTR Loop for fp128 BinaryOperator
Zhang Kang via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 7 19:13:05 PDT 2020
ZhangKang created this revision.
ZhangKang added reviewers: hfinkel, efriedma, PowerPC, nemanjai.
ZhangKang added a project: LLVM.
Herald added subscribers: shchenz, wuzish, kbarton, hiraditya.
If the instruction in the Loop use CTR, we won't convert loop to CTR loop.
For PPC BinaryOperator of fp128 will become libcall, we shouldn't convert loop to
CTR loop if the loop contain libCall.
But currently, in the `PPCTTIImpl::mightUseCTR()` function, we only deal with
BinaryOperator for ppc_fp128, don't deal with the fp128.
This bug has caused assertion error, when the loop we want to convert it to CTL loop
contains BinaryOperator for ppc_fp128 like `%mul = fmul fp128 %0, %1`.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D81353
Files:
llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp
llvm/test/CodeGen/PowerPC/ctrloop-fp128.ll
Index: llvm/test/CodeGen/PowerPC/ctrloop-fp128.ll
===================================================================
--- llvm/test/CodeGen/PowerPC/ctrloop-fp128.ll
+++ llvm/test/CodeGen/PowerPC/ctrloop-fp128.ll
@@ -25,8 +25,8 @@
ret void
; CHECK-LABEL: fmul_ctrloop_fp128
-; CHECK: call void @llvm.set.loop.iterations.i64(i64 4)
-; CHECK: call i1 @llvm.loop.decrement.i64(i64 1)
+; CHECK-NOT: call void @llvm.set.loop.iterations.i64(i64 4)
+; CHECK-NOT: call i1 @llvm.loop.decrement.i64(i64 1)
}
declare void @obfuscate(i8*, ...) local_unnamed_addr #2
Index: llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp
===================================================================
--- llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp
+++ llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp
@@ -429,8 +429,9 @@
return true;
} else if (isa<BinaryOperator>(J) &&
- J->getType()->getScalarType()->isPPC_FP128Ty()) {
- // Most operations on ppc_f128 values become calls.
+ (J->getType()->getScalarType()->isFP128Ty() ||
+ J->getType()->getScalarType()->isPPC_FP128Ty())) {
+ // Most operations on f128 or ppc_f128 values become calls.
return true;
} else if (isa<UIToFPInst>(J) || isa<SIToFPInst>(J) ||
isa<FPToUIInst>(J) || isa<FPToSIInst>(J)) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D81353.269088.patch
Type: text/x-patch
Size: 1370 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200608/0e35aa3b/attachment.bin>
More information about the llvm-commits
mailing list