OSDN Git Service

bpf: Enhance debug information for peephole optimization passes
authorYonghong Song <yhs@fb.com>
Tue, 13 Mar 2018 06:47:07 +0000 (06:47 +0000)
committerYonghong Song <yhs@fb.com>
Tue, 13 Mar 2018 06:47:07 +0000 (06:47 +0000)
Add more debug information for peephole optimization passes.

These would only be enabled for debug version binary and could help
analyzing why some optimization opportunities were missed.

Signed-off-by: Jiong Wang <jiong.wang@netronome.com>
Signed-off-by: Yonghong Song <yhs@fb.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@327371 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/BPF/BPFMIPeephole.cpp

index ac13490..09cc6b3 100644 (file)
@@ -79,6 +79,9 @@ bool BPFMIPeephole::isMovFrom32Def(MachineInstr *MovMI)
 {
   MachineInstr *DefInsn = MRI->getVRegDef(MovMI->getOperand(1).getReg());
 
+  DEBUG(dbgs() << "  Def of Mov Src:");
+  DEBUG(DefInsn->dump());
+
   if (!DefInsn)
     return false;
 
@@ -108,6 +111,8 @@ bool BPFMIPeephole::isMovFrom32Def(MachineInstr *MovMI)
        return false;
   }
 
+  DEBUG(dbgs() << "  One ZExt elim sequence identified.\n");
+
   return true;
 }
 
@@ -134,21 +139,32 @@ bool BPFMIPeephole::eliminateZExtSeq(void) {
         unsigned ShfReg = MI.getOperand(1).getReg();
         MachineInstr *SllMI = MRI->getVRegDef(ShfReg);
 
+        DEBUG(dbgs() << "Starting SRL found:");
+        DEBUG(MI.dump());
+
         if (!SllMI ||
             SllMI->isPHI() ||
             SllMI->getOpcode() != BPF::SLL_ri ||
             SllMI->getOperand(2).getImm() != 32)
           continue;
 
+        DEBUG(dbgs() << "  SLL found:");
+        DEBUG(SllMI->dump());
+
         MachineInstr *MovMI = MRI->getVRegDef(SllMI->getOperand(1).getReg());
         if (!MovMI ||
             MovMI->isPHI() ||
             MovMI->getOpcode() != BPF::MOV_32_64)
           continue;
 
+        DEBUG(dbgs() << "  Type cast Mov found:");
+        DEBUG(MovMI->dump());
+
         unsigned SubReg = MovMI->getOperand(1).getReg();
-        if (!isMovFrom32Def(MovMI))
+        if (!isMovFrom32Def(MovMI)) {
+          DEBUG(dbgs() << "  One ZExt elim sequence failed qualifying elim.\n");
           continue;
+        }
 
         BuildMI(MBB, MI, MI.getDebugLoc(), TII->get(BPF::SUBREG_TO_REG), DstReg)
           .addImm(0).addReg(SubReg).addImm(BPF::sub_32);
@@ -223,6 +239,8 @@ bool BPFMIPreEmitPeephole::eliminateRedundantMov(void) {
     for (MachineInstr &MI : MBB) {
       // If the previous instruction was marked for elimination, remove it now.
       if (ToErase) {
+        DEBUG(dbgs() << "  Redundant Mov Eliminated:");
+        DEBUG(ToErase->dump());
         ToErase->eraseFromParent();
         ToErase = nullptr;
       }