summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
diff options
context:
space:
mode:
authorHideki Saito <hideki.saito@intel.com>2018-07-24 22:30:31 +0000
committerHideki Saito <hideki.saito@intel.com>2018-07-24 22:30:31 +0000
commitef380b0fc513897df9b036fd168f9920b00855e2 (patch)
treeb3eac8fe19a6bd4bc9e8c3300c1ac9067fc6a75f /llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
parent11eef3b3e93b7b30a85bf48d7d930c3dcbd73b10 (diff)
downloadbcm5719-llvm-ef380b0fc513897df9b036fd168f9920b00855e2.tar.gz
bcm5719-llvm-ef380b0fc513897df9b036fd168f9920b00855e2.zip
[LV] Fix for PR38110, LV encountered llvm_unreachable()
Summary: truncateToMinimalBitWidths() doesn't handle all Instructions and the worst case is compiler crash via llvm_unreachable(). Fix is to add a case to handle PHINode and changed the worst case to NO-OP (from compiler crash). Reviewers: sbaranga, mssimpso, hsaito Reviewed By: hsaito Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D49461 llvm-svn: 337861
Diffstat (limited to 'llvm/lib/Transforms/Vectorize/LoopVectorize.cpp')
-rw-r--r--llvm/lib/Transforms/Vectorize/LoopVectorize.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
index 802f38e13da..3c693f5d5ee 100644
--- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -3276,7 +3276,7 @@ void InnerLoopVectorizer::truncateToMinimalBitwidths() {
SI->getOperand(1), VectorType::get(ScalarTruncatedTy, Elements1));
NewI = B.CreateShuffleVector(O0, O1, SI->getMask());
- } else if (isa<LoadInst>(I)) {
+ } else if (isa<LoadInst>(I) || isa<PHINode>(I)) {
// Don't do anything with the operands, just extend the result.
continue;
} else if (auto *IE = dyn_cast<InsertElementInst>(I)) {
@@ -3291,7 +3291,8 @@ void InnerLoopVectorizer::truncateToMinimalBitwidths() {
EE->getOperand(0), VectorType::get(ScalarTruncatedTy, Elements));
NewI = B.CreateExtractElement(O0, EE->getOperand(2));
} else {
- llvm_unreachable("Unhandled instruction type!");
+ // If we don't know what to do, be conservative and don't do anything.
+ continue;
}
// Lastly, extend the result.
OpenPOWER on IntegriCloud