diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2015-05-10 14:14:51 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2015-05-10 14:14:51 +0000 |
| commit | e09584ca9581f78b968a30a09debe699286cace4 (patch) | |
| tree | 1e1f4307ca087d6acdb70002240129b0355d3bfb /llvm/lib/CodeGen | |
| parent | c34f847b805325e167d09304f387a654a542175d (diff) | |
| download | bcm5719-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.cpp | 5 |
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. |

