OSDN Git Service

[Hexagon] Ignore DBG_VALUEs when counting instructions in hexagon-early-if
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>
Wed, 9 Aug 2017 21:22:05 +0000 (21:22 +0000)
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>
Wed, 9 Aug 2017 21:22:05 +0000 (21:22 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@310524 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Hexagon/HexagonEarlyIfConv.cpp
lib/Target/Hexagon/HexagonTargetMachine.cpp
test/CodeGen/Hexagon/early-if-debug.mir [new file with mode: 0644]

index 7d08788..fdf57a8 100644 (file)
@@ -155,9 +155,7 @@ namespace {
   public:
     static char ID;
 
-    HexagonEarlyIfConversion() : MachineFunctionPass(ID) {
-      initializeHexagonEarlyIfConversionPass(*PassRegistry::getPassRegistry());
-    }
+    HexagonEarlyIfConversion() : MachineFunctionPass(ID) {}
 
     StringRef getPassName() const override {
       return "Hexagon early if conversion";
@@ -227,7 +225,7 @@ namespace {
 
 char HexagonEarlyIfConversion::ID = 0;
 
-INITIALIZE_PASS(HexagonEarlyIfConversion, "hexagon-eif",
+INITIALIZE_PASS(HexagonEarlyIfConversion, "hexagon-early-if",
   "Hexagon early if conversion", false, false)
 
 bool HexagonEarlyIfConversion::isPreheader(const MachineBasicBlock *B) const {
@@ -539,7 +537,10 @@ bool HexagonEarlyIfConversion::isProfitable(const FlowPattern &FP) const {
   auto TotalCount = [] (const MachineBasicBlock *B, unsigned &Spare) {
     if (!B)
       return 0u;
-    unsigned T = std::distance(B->begin(), B->getFirstTerminator());
+    unsigned T = std::count_if(B->begin(), B->getFirstTerminator(),
+                               [](const MachineInstr &MI) {
+                                 return !MI.isDebugValue();
+                               });
     if (T < HEXAGON_PACKET_SIZE)
       Spare += HEXAGON_PACKET_SIZE-T;
     return T;
index 543318c..0163475 100644 (file)
@@ -109,6 +109,7 @@ SchedCustomRegistry("hexagon", "Run Hexagon's custom scheduler",
 
 namespace llvm {
   extern char &HexagonExpandCondsetsID;
+  void initializeHexagonEarlyIfConversionPass(PassRegistry&);
   void initializeHexagonExpandCondsetsPass(PassRegistry&);
   void initializeHexagonGenMuxPass(PassRegistry&);
   void initializeHexagonLoopIdiomRecognizePass(PassRegistry&);
@@ -163,6 +164,7 @@ extern "C" void LLVMInitializeHexagonTarget() {
   RegisterTargetMachine<HexagonTargetMachine> X(getTheHexagonTarget());
 
   PassRegistry &PR = *PassRegistry::getPassRegistry();
+  initializeHexagonEarlyIfConversionPass(PR);
   initializeHexagonGenMuxPass(PR);
   initializeHexagonLoopIdiomRecognizePass(PR);
   initializeHexagonNewValueJumpPass(PR);
diff --git a/test/CodeGen/Hexagon/early-if-debug.mir b/test/CodeGen/Hexagon/early-if-debug.mir
new file mode 100644 (file)
index 0000000..39b5036
--- /dev/null
@@ -0,0 +1,53 @@
+# RUN: llc -march=hexagon -eif-limit=4 -run-pass hexagon-early-if -o - %s | FileCheck %s
+# Check that even with the limit of 4 instructions, the block bb.1 is
+# if-converted.
+
+# CHECK-LABEL: bb.0:
+# CHECK: %0 = COPY %r0
+# CHECK: %1 = C2_cmpeqi %0, 0
+# CHECK: %2 = A2_tfrsi 123
+# CHECK: DBG_VALUE debug-use %0, debug-use _
+# CHECK: DBG_VALUE debug-use %0, debug-use _
+# CHECK: DBG_VALUE debug-use %0, debug-use _
+# CHECK: DBG_VALUE debug-use %0, debug-use _
+# CHECK: DBG_VALUE debug-use %0, debug-use _
+# CHECK: %3 = A2_tfrsi 321
+# CHECK: %5 = C2_mux %1, %2, %3
+
+--- |
+  define void @foo() {
+    ret void
+  }
+  !1 = !DIExpression()
+...
+---
+name: foo
+tracksRegLiveness: true
+registers:
+  - { id: 0, class: intregs }
+  - { id: 1, class: predregs }
+  - { id: 2, class: intregs }
+  - { id: 3, class: intregs }
+  - { id: 4, class: intregs }
+body:             |
+  bb.0:
+    liveins: %r0
+
+    %0 = COPY %r0
+    %1 = C2_cmpeqi %0, 0
+    %2 = A2_tfrsi 123
+    J2_jumpt %1, %bb.2, implicit-def dead %pc
+    J2_jump %bb.1, implicit-def dead %pc
+
+  bb.1:
+    DBG_VALUE debug-use %0, debug-use _, !1, !1
+    DBG_VALUE debug-use %0, debug-use _, !1, !1
+    DBG_VALUE debug-use %0, debug-use _, !1, !1
+    DBG_VALUE debug-use %0, debug-use _, !1, !1
+    DBG_VALUE debug-use %0, debug-use _, !1, !1
+    %3 = A2_tfrsi 321
+
+  bb.2:
+    %4 = PHI %2, %bb.0, %3, %bb.1
+
+...