diff options
| author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2020-01-09 12:54:16 -0500 |
|---|---|---|
| committer | Matt Arsenault <arsenm2@gmail.com> | 2020-01-09 16:29:44 -0500 |
| commit | fba1fbb9c7367990a0561a36dbf600fc51847246 (patch) | |
| tree | 9c18014951c5b865f113095c69ffac0314634aba /llvm/lib/CodeGen | |
| parent | 767aa507a464e46b9a5aaed8cfec0a621f8fc599 (diff) | |
| download | bcm5719-llvm-fba1fbb9c7367990a0561a36dbf600fc51847246.tar.gz bcm5719-llvm-fba1fbb9c7367990a0561a36dbf600fc51847246.zip | |
GlobalISel: Don't assert on MoreElements creating vectors
If the original type was a scalar, it should be valid to add elements
to turn it into a vector.
Tests included with following legalization change.
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/LegalizerInfo.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerInfo.cpp b/llvm/lib/CodeGen/GlobalISel/LegalizerInfo.cpp index f897f9c7e20..02f6b39e090 100644 --- a/llvm/lib/CodeGen/GlobalISel/LegalizerInfo.cpp +++ b/llvm/lib/CodeGen/GlobalISel/LegalizerInfo.cpp @@ -128,24 +128,26 @@ static bool mutationIsSane(const LegalizeRule &Rule, switch (Rule.getAction()) { case FewerElements: - case MoreElements: { if (!OldTy.isVector()) return false; - + LLVM_FALLTHROUGH; + case MoreElements: { + // MoreElements can go from scalar to vector. + const unsigned OldElts = OldTy.isVector() ? OldTy.getNumElements() : 1; if (NewTy.isVector()) { if (Rule.getAction() == FewerElements) { // Make sure the element count really decreased. - if (NewTy.getNumElements() >= OldTy.getNumElements()) + if (NewTy.getNumElements() >= OldElts) return false; } else { // Make sure the element count really increased. - if (NewTy.getNumElements() <= OldTy.getNumElements()) + if (NewTy.getNumElements() <= OldElts) return false; } } // Make sure the element type didn't change. - return NewTy.getScalarType() == OldTy.getElementType(); + return NewTy.getScalarType() == OldTy.getScalarType(); } case NarrowScalar: case WidenScalar: { |

