1*9880d681SAndroid Build Coastguard Worker; RUN: llvm-as < %s | llvm-dis > %t1.ll 2*9880d681SAndroid Build Coastguard Worker; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll 3*9880d681SAndroid Build Coastguard Worker; RUN: diff %t1.ll %t2.ll 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker;; This is an irreducible flow graph 6*9880d681SAndroid Build Coastguard Workerdefine void @irreducible(i1 %cond) { 7*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %X, label %Y 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard WorkerX: ; preds = %Y, %0 10*9880d681SAndroid Build Coastguard Worker br label %Y 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard WorkerY: ; preds = %X, %0 13*9880d681SAndroid Build Coastguard Worker br label %X 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker;; This is a pair of loops that share the same header 17*9880d681SAndroid Build Coastguard Workerdefine void @sharedheader(i1 %cond) { 18*9880d681SAndroid Build Coastguard Worker br label %A 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard WorkerA: ; preds = %Y, %X, %0 21*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %X, label %Y 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard WorkerX: ; preds = %A 24*9880d681SAndroid Build Coastguard Worker br label %A 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard WorkerY: ; preds = %A 27*9880d681SAndroid Build Coastguard Worker br label %A 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker;; This is a simple nested loop 32*9880d681SAndroid Build Coastguard Workerdefine void @nested(i1 %cond1, i1 %cond2, i1 %cond3) { 33*9880d681SAndroid Build Coastguard Worker br label %Loop1 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard WorkerLoop1: ; preds = %L2Exit, %0 36*9880d681SAndroid Build Coastguard Worker br label %Loop2 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard WorkerLoop2: ; preds = %L3Exit, %Loop1 39*9880d681SAndroid Build Coastguard Worker br label %Loop3 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard WorkerLoop3: ; preds = %Loop3, %Loop2 42*9880d681SAndroid Build Coastguard Worker br i1 %cond3, label %Loop3, label %L3Exit 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard WorkerL3Exit: ; preds = %Loop3 45*9880d681SAndroid Build Coastguard Worker br i1 %cond2, label %Loop2, label %L2Exit 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard WorkerL2Exit: ; preds = %L3Exit 48*9880d681SAndroid Build Coastguard Worker br i1 %cond1, label %Loop1, label %L1Exit 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard WorkerL1Exit: ; preds = %L2Exit 51*9880d681SAndroid Build Coastguard Worker ret void 52*9880d681SAndroid Build Coastguard Worker} 53*9880d681SAndroid Build Coastguard Worker 54