41 lines
873 B
C
41 lines
873 B
C
|
// 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: @test1
|
||
|
// CHECK: @calla
|
||
|
// CHECK: @callb
|
||
|
// CHECK: @callc
|
||
|
// CHECK: ret void
|
||
|
void test1(int a) {
|
||
|
if (a)
|
||
|
calla();
|
||
|
else
|
||
|
callb();
|
||
|
callc();
|
||
|
}
|
||
|
|
||
|
// CHECK: @test2
|
||
|
// CHECK: @callb
|
||
|
// CHECK: @calla
|
||
|
// CHECK: @callc
|
||
|
// CHECK: ret void
|
||
|
void test2(int a) {
|
||
|
if (!a)
|
||
|
callb();
|
||
|
else
|
||
|
calla();
|
||
|
callc();
|
||
|
}
|