[cfe-commits] r159215 - /cfe/trunk/test/CodeGen/branch-target-layout.c

Andrew Trick atrick at apple.com
Tue Jun 26 11:13:12 PDT 2012


Author: atrick
Date: Tue Jun 26 13:13:12 2012
New Revision: 159215

URL: http://llvm.org/viewvc/llvm-project?rev=159215&view=rev
Log:
MachineBlockPlacement would prefer that clang lay out blocks in source order.

Added:
    cfe/trunk/test/CodeGen/branch-target-layout.c

Added: cfe/trunk/test/CodeGen/branch-target-layout.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/branch-target-layout.c?rev=159215&view=auto
==============================================================================
--- cfe/trunk/test/CodeGen/branch-target-layout.c (added)
+++ cfe/trunk/test/CodeGen/branch-target-layout.c Tue Jun 26 13:13:12 2012
@@ -0,0 +1,40 @@
+// RUN: %clang_cc1 %s -O3 -emit-llvm -o - | FileCheck %s
+//
+// PR13214
+// No assumption may be made about the order that a frontend emits branch
+// targets (basic blocks). However, the backend's basic block layout makes an
+// attempt to preserve source order of control flow, and any bias toward source
+// order must start with the frontend.
+//
+// Note that the frontend inverts branches to simplify the condition, so the
+// order of a branch instruction's labels cannot be used as a source order bias.
+
+void calla();
+void callb();
+void callc();
+
+// CHECK: @test
+// CHECK: @calla()
+// CHECK: @callb()
+// CHECK: @callc()
+// CHECK: ret void
+void test1(int a) {
+  if (a)
+    calla();
+  else
+    callb();
+  callc();
+}
+
+// CHECK: @test
+// CHECK: @callb()
+// CHECK: @calla()
+// CHECK: @callc()
+// CHECK: ret void
+void test2(int a) {
+  if (!a)
+    callb();
+  else
+    calla();
+  callc();
+}





More information about the cfe-commits mailing list