diff options
author | Hal Finkel <hfinkel@anl.gov> | 2014-12-23 08:38:50 +0000 |
---|---|---|
committer | Hal Finkel <hfinkel@anl.gov> | 2014-12-23 08:38:50 +0000 |
commit | 04b16b51ec2903f1be8a4f9297a24e73b0bbda52 (patch) | |
tree | bc06ba5ca5da696894c4c1df7c8fa4998d9b42fa /llvm | |
parent | 5313da32638e64ec40668877b1b85f68455866e5 (diff) | |
download | bcm5719-llvm-04b16b51ec2903f1be8a4f9297a24e73b0bbda52.tar.gz bcm5719-llvm-04b16b51ec2903f1be8a4f9297a24e73b0bbda52.zip |
[PowerPC] Don't attempt a 64-bit pow2 division on PPC32
In r224033, in moving the signed power-of-2 division expansion into
BuildSDIVPow2, I accidentally made it possible to attempt the lowering for a
64-bit division on PPC32. This later asserts.
Fixes PR21928.
llvm-svn: 224758
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCISelLowering.cpp | 2 | ||||
-rw-r--r-- | llvm/test/CodeGen/PowerPC/sdiv-pow2.ll | 9 |
2 files changed, 11 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp index 62c1f714e9d..18384627ced 100644 --- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp +++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp @@ -8966,6 +8966,8 @@ PPCTargetLowering::BuildSDIVPow2(SDNode *N, const APInt &Divisor, std::vector<SDNode *> *Created) const { // fold (sdiv X, pow2) EVT VT = N->getValueType(0); + if (VT == MVT::i64 && !Subtarget.isPPC64()) + return SDValue(); if ((VT != MVT::i32 && VT != MVT::i64) || !(Divisor.isPowerOf2() || (-Divisor).isPowerOf2())) return SDValue(); diff --git a/llvm/test/CodeGen/PowerPC/sdiv-pow2.ll b/llvm/test/CodeGen/PowerPC/sdiv-pow2.ll index c6330a6807a..5ec019dfb4a 100644 --- a/llvm/test/CodeGen/PowerPC/sdiv-pow2.ll +++ b/llvm/test/CodeGen/PowerPC/sdiv-pow2.ll @@ -1,4 +1,5 @@ ; RUN: llc -mcpu=ppc64 < %s | FileCheck %s +; RUN: llc -mtriple=powerpc-unknown-linux-gnu -mcpu=ppc < %s | FileCheck -check-prefix=CHECK-32 %s target datalayout = "E-m:e-i64:64-n32:64" target triple = "powerpc64-unknown-linux-gnu" @@ -25,6 +26,10 @@ entry: ; CHECK: sradi [[REG1:[0-9]+]], 3, 3 ; CHECK: addze 3, [[REG1]] ; CHECK: blr + +; CHECK-32-LABEL @foo8 +; CHECK-32-NOT: sradi +; CHECK-32: blr } ; Function Attrs: nounwind readnone @@ -52,6 +57,10 @@ entry: ; CHECK: addze [[REG2:[0-9]+]], [[REG1]] ; CHECK: neg 3, [[REG2]] ; CHECK: blr + +; CHECK-32-LABEL @foo8n +; CHECK-32-NOT: sradi +; CHECK-32: blr } attributes #0 = { nounwind readnone } |