[llvm] 4569f63 - ARMLowOverheadLoops: a few more dbg msgs to better trace rejected TP loops. NFC.

Sjoerd Meijer via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 10 06:12:55 PST 2020


Author: Sjoerd Meijer
Date: 2020-01-10T14:11:52Z
New Revision: 4569f63ae1cb520ce28f08f4800dfbcd5f255eed

URL: https://github.com/llvm/llvm-project/commit/4569f63ae1cb520ce28f08f4800dfbcd5f255eed
DIFF: https://github.com/llvm/llvm-project/commit/4569f63ae1cb520ce28f08f4800dfbcd5f255eed.diff

LOG: ARMLowOverheadLoops: a few more dbg msgs to better trace rejected TP loops. NFC.

Added: 
    

Modified: 
    llvm/lib/Target/ARM/ARMLowOverheadLoops.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/ARM/ARMLowOverheadLoops.cpp b/llvm/lib/Target/ARM/ARMLowOverheadLoops.cpp
index 6c45eecf0c23..91aba859e1b1 100644
--- a/llvm/lib/Target/ARM/ARMLowOverheadLoops.cpp
+++ b/llvm/lib/Target/ARM/ARMLowOverheadLoops.cpp
@@ -338,8 +338,8 @@ static bool IsSafeToMove(MachineInstr *From, MachineInstr *To, ReachingDefAnalys
 }
 
 bool LowOverheadLoop::ValidateTailPredicate(MachineInstr *StartInsertPt,
-		                            ReachingDefAnalysis *RDA,
-		                            MachineLoopInfo *MLI) {
+    ReachingDefAnalysis *RDA, MachineLoopInfo *MLI) {
+  assert(VCTP && "VCTP instruction expected but is not set");
   // All predication within the loop should be based on vctp. If the block
   // isn't predicated on entry, check whether the vctp is within the block
   // and that all other instructions are then predicated on it.
@@ -471,7 +471,9 @@ void LowOverheadLoop::CheckLegality(ARMBasicBlockUtils *BBUtils,
     LLVM_DEBUG(dbgs() << "ARM Loops: Start insertion point: " << *InsertPt);
 
   if (!IsTailPredicationLegal()) {
-    LLVM_DEBUG(dbgs() << "ARM Loops: Tail-predication is not valid.\n");
+    LLVM_DEBUG(if (!VCTP)
+                 dbgs() << "ARM Loops: Didn't find a VCTP instruction.\n";
+               dbgs() << "ARM Loops: Tail-predication is not valid.\n");
     return;
   }
 
@@ -656,8 +658,10 @@ bool ARMLowOverheadLoops::ProcessLoop(MachineLoop *ML) {
   }
 
   LLVM_DEBUG(LoLoop.dump());
-  if (!LoLoop.FoundAllComponents())
+  if (!LoLoop.FoundAllComponents()) {
+    LLVM_DEBUG(dbgs() << "ARM Loops: Didn't find loop start, update, end\n");
     return false;
+  }
 
   LoLoop.CheckLegality(BBUtils.get(), RDA, MLI);
   Expand(LoLoop);
@@ -817,17 +821,19 @@ void ARMLowOverheadLoops::RemoveLoopUpdate(LowOverheadLoop &LoLoop) {
   LLVM_DEBUG(dbgs() << "ARM Loops: Trying to remove loop update stmt\n");
 
   if (LoLoop.ML->getNumBlocks() != 1) {
-    LLVM_DEBUG(dbgs() << "ARM Loops: single block loop expected\n");
+    LLVM_DEBUG(dbgs() << "ARM Loops: Single block loop expected\n");
     return;
   }
 
-  LLVM_DEBUG(dbgs() << "ARM Loops: Analyzing MO: ";
+  LLVM_DEBUG(dbgs() << "ARM Loops: Analyzing elemcount in operand: ";
              LoLoop.VCTP->getOperand(1).dump());
 
   // Find the definition we are interested in removing, if there is one.
   MachineInstr *Def = RDA->getReachingMIDef(LastInstrInBlock, ElemCount);
-  if (!Def)
+  if (!Def) {
+    LLVM_DEBUG(dbgs() << "ARM Loops: Can't find a def, nothing to do.\n");
     return;
+  }
 
   // Bail if we define CPSR and it is not dead
   if (!Def->registerDefIsDead(ARM::CPSR, TRI)) {
@@ -859,6 +865,9 @@ void ARMLowOverheadLoops::RemoveLoopUpdate(LowOverheadLoop &LoLoop) {
                Def->dump());
     Def->eraseFromParent();
   }
+
+  LLVM_DEBUG(dbgs() << "ARM Loops: Can't remove loop update, it's used by:\n";
+             for (auto U : Uses) U->dump());
 }
 
 void ARMLowOverheadLoops::ConvertVPTBlocks(LowOverheadLoop &LoLoop) {


        


More information about the llvm-commits mailing list