summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2015-05-10 14:14:51 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2015-05-10 14:14:51 +0000
commite09584ca9581f78b968a30a09debe699286cace4 (patch)
tree1e1f4307ca087d6acdb70002240129b0355d3bfb /llvm/lib/CodeGen
parentc34f847b805325e167d09304f387a654a542175d (diff)
downloadbcm5719-llvm-e09584ca9581f78b968a30a09debe699286cace4.tar.gz
bcm5719-llvm-e09584ca9581f78b968a30a09debe699286cace4.zip
[SelectionDAG] Fixed constant folding issue when legalised types are smaller then the folded type.
Found when testing with llvm-stress on i686 targets. llvm-svn: 236954
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index 1d8cdb60c92..73fe1990711 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -2872,11 +2872,12 @@ SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL,
EVT InVT = BV->getValueType(0);
EVT InSVT = InVT.getScalarType();
- // Find legal integer scalar type for constant promotion.
+ // Find legal integer scalar type for constant promotion and
+ // ensure that its scalar size is at least as large as source.
EVT LegalSVT = SVT;
if (SVT.isInteger()) {
LegalSVT = TLI->getTypeToTransformTo(*getContext(), SVT);
- assert(LegalSVT.bitsGE(SVT) && "Unexpected legal scalar type size");
+ if (LegalSVT.bitsLT(SVT)) break;
}
// Let the above scalar folding handle the folding of each element.
OpenPOWER on IntegriCloud