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