[PATCH] D17830: [MBP] Avoid placing random blocks between loop preheader and header

Philip Reames via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 2 16:06:33 PST 2016


This revision was automatically updated to reflect the committed changes.
Closed by commit rL262547: [MBP] Avoid placing random blocks between loop preheader and header (authored by reames).

Changed prior to commit:
  http://reviews.llvm.org/D17830?vs=49673&id=49686#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D17830

Files:
  llvm/trunk/lib/CodeGen/MachineBlockPlacement.cpp
  llvm/trunk/test/CodeGen/X86/mbp-false-cfg-break.ll

Index: llvm/trunk/test/CodeGen/X86/mbp-false-cfg-break.ll
===================================================================
--- llvm/trunk/test/CodeGen/X86/mbp-false-cfg-break.ll
+++ llvm/trunk/test/CodeGen/X86/mbp-false-cfg-break.ll
@@ -0,0 +1,39 @@
+; RUN: llc < %s -march=x86-64 | FileCheck %s
+
+define void @test(i1 %cnd) !prof !{!"function_entry_count", i64 1024} {
+; CHECK-LABEL: @test
+; Using the assembly comments to indicate block order..
+; CHECK: # %loop
+; CHECK: # %backedge
+; CHECK: # %exit
+; CHECK: # %rare
+; CHECK: # %rare.1
+
+  br i1 undef, label %rare.1, label %preheader, !prof !{!"branch_weights", i32 0, i32 1000}
+rare.1:
+  call void @foo()
+  br label %preheader
+
+preheader:
+  br label %loop
+
+loop:
+  %iv = phi i32 [0, %preheader], [%iv.next, %backedge]
+  call void @foo()
+  br i1 %cnd, label %backedge, label %rare, !prof !{!"branch_weights", i32 1000000, i32 1}
+rare:
+  call void @foo()
+  br label %backedge
+backedge:
+  call void @foo()
+  %iv.next = add i32 %iv, 1
+  %cmp = icmp eq i32 %iv.next, 200
+  br i1 %cmp, label %loop, label %exit, !prof !{!"branch_weights", i32 1000, i32 1}
+
+exit:
+  ret void
+
+}
+
+
+declare void @foo()
Index: llvm/trunk/lib/CodeGen/MachineBlockPlacement.cpp
===================================================================
--- llvm/trunk/lib/CodeGen/MachineBlockPlacement.cpp
+++ llvm/trunk/lib/CodeGen/MachineBlockPlacement.cpp
@@ -466,7 +466,8 @@
           MBFI->getBlockFreq(BB) * RealSuccProb * HotProb.getCompl();
       bool BadCFGConflict = false;
       for (MachineBasicBlock *Pred : Succ->predecessors()) {
-        if (Pred == Succ || (BlockFilter && !BlockFilter->count(Pred)) ||
+        if (Pred == Succ || BlockToChain[Pred] == &SuccChain ||
+            (BlockFilter && !BlockFilter->count(Pred)) ||
             BlockToChain[Pred] == &Chain)
           continue;
         BlockFrequency PredEdgeFreq =


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D17830.49686.patch
Type: text/x-patch
Size: 1907 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160303/6497eba4/attachment.bin>


More information about the llvm-commits mailing list