[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