// 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(); }