svn commit: r343102 - in stable: 11/contrib/llvm/lib/Transforms/Vectorize 12/contrib/llvm/lib/Transforms/Vectorize

Dimitry Andric dim at FreeBSD.org
Wed Jan 16 20:38:18 UTC 2019


Author: dim
Date: Wed Jan 16 20:38:17 2019
New Revision: 343102
URL: https://svnweb.freebsd.org/changeset/base/343102

Log:
  Pull in r337861 from upstream llvm trunk (by Hideki Saito):
  
    [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
  
  This should fix "Unhandled instruction type!" (if assertions are
  enabled) or segmentation faults (if assertions are disabled) when
  compiling certain versions of the net-p2p/gtk-gnutella port.
  
  Direct commit to stable/11 and stable/12, since head already has this
  fix.
  
  Reported by:	Jamie Landeg-Jones <jamie at catflap.org>
  PR:		234987

Modified:
  stable/12/contrib/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp

Changes in other areas also in this revision:
Modified:
  stable/11/contrib/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp

Modified: stable/12/contrib/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
==============================================================================
--- stable/12/contrib/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp	Wed Jan 16 20:20:38 2019	(r343101)
+++ stable/12/contrib/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp	Wed Jan 16 20:38:17 2019	(r343102)
@@ -4088,7 +4088,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)) {
@@ -4103,7 +4103,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.


More information about the svn-src-all mailing list