зеркало из https://github.com/microsoft/clang-1.git
41 строка
873 B
C
41 строка
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();
|
|
}
|