OSDN Git Service

[Hexagon] Do not promote terminator instructions in Hexagon loop idioms
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>
Wed, 16 Jan 2019 19:40:27 +0000 (19:40 +0000)
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>
Wed, 16 Jan 2019 19:40:27 +0000 (19:40 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351369 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp

index 985f41f..e828a48 100644 (file)
@@ -1001,6 +1001,7 @@ bool PolynomialMultiplyRecognize::isPromotableTo(Value *Val,
 void PolynomialMultiplyRecognize::promoteTo(Instruction *In,
       IntegerType *DestTy, BasicBlock *LoopB) {
   Type *OrigTy = In->getType();
+  assert(!OrigTy->isVoidTy() && "Invalid instruction to promote");
 
   // Leave boolean values alone.
   if (!In->getType()->isIntegerTy(1))
@@ -1081,7 +1082,8 @@ bool PolynomialMultiplyRecognize::promoteTypes(BasicBlock *LoopB,
   std::transform(LoopB->begin(), LoopB->end(), std::back_inserter(LoopIns),
                  [](Instruction &In) { return &In; });
   for (Instruction *In : LoopIns)
-    promoteTo(In, DestTy, LoopB);
+    if (!In->isTerminator())
+      promoteTo(In, DestTy, LoopB);
 
   // Fix up the PHI nodes in the exit block.
   Instruction *EndI = ExitB->getFirstNonPHI();