1// RUN: %clang_cc1 %s -O3 -emit-llvm -o - | FileCheck %s
2//
3// PR13214
4// No assumption may be made about the order that a frontend emits branch
5// targets (basic blocks). However, the backend's basic block layout makes an
6// attempt to preserve source order of control flow, and any bias toward source
7// order must start with the frontend.
8//
9// Note that the frontend inverts branches to simplify the condition, so the
10// order of a branch instruction's labels cannot be used as a source order bias.
11
12void calla();
13void callb();
14void callc();
15
16// CHECK: @test1
17// CHECK: @calla
18// CHECK: @callb
19// CHECK: @callc
20// CHECK: ret void
21void test1(int a) {
22  if (a)
23    calla();
24  else
25    callb();
26  callc();
27}
28
29// CHECK: @test2
30// CHECK: @callb
31// CHECK: @calla
32// CHECK: @callc
33// CHECK: ret void
34void test2(int a) {
35  if (!a)
36    callb();
37  else
38    calla();
39  callc();
40}
41