diff options
author | Michael Kuperstein <michael.kuperstein@gmail.com> | 2016-03-04 21:23:29 +0000 |
---|---|---|
committer | Michael Kuperstein <michael.kuperstein@gmail.com> | 2016-03-04 21:23:29 +0000 |
commit | b89f0fa2a2853e14a989d30bb8789b5815462d1a (patch) | |
tree | e140b30d513bb2c6f5fb77279fc243b33b612d56 /llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | |
parent | 5d07531d0235f4ea8e497c2b11f4cbd9ab09680d (diff) | |
download | bcm5719-llvm-b89f0fa2a2853e14a989d30bb8789b5815462d1a.tar.gz bcm5719-llvm-b89f0fa2a2853e14a989d30bb8789b5815462d1a.zip |
[DAGCombine] Fix divrem combine not to assume div/rem type is simple.
The divrem combine assumed the type of the div/rem is simple, which isn't
necessarily true. This probably worked fine until r250825, since it only
saw legal types, but now breaks when it runs as a pre-type-legalization
combine.
This fixes PR26835.
Differential Revision: http://reviews.llvm.org/D17878
llvm-svn: 262746
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index dfae183723f..36af244c2b8 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -2138,7 +2138,10 @@ SDValue DAGCombiner::visitMUL(SDNode *N) { static bool isDivRemLibcallAvailable(SDNode *Node, bool isSigned, const TargetLowering &TLI) { RTLIB::Libcall LC; - switch (Node->getSimpleValueType(0).SimpleTy) { + EVT NodeType = Node->getValueType(0); + if (!NodeType.isSimple()) + return false; + switch (NodeType.getSimpleVT().SimpleTy) { default: return false; // No libcall for vector types. case MVT::i8: LC= isSigned ? RTLIB::SDIVREM_I8 : RTLIB::UDIVREM_I8; break; case MVT::i16: LC= isSigned ? RTLIB::SDIVREM_I16 : RTLIB::UDIVREM_I16; break; |