1*9880d681SAndroid Build Coastguard Worker; RUN: opt -S -structurizecfg %s -o - | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; 3*9880d681SAndroid Build Coastguard Worker; void loop(int *out, int cond_a, int cond_b) { 4*9880d681SAndroid Build Coastguard Worker; 5*9880d681SAndroid Build Coastguard Worker; unsigned i; 6*9880d681SAndroid Build Coastguard Worker; for (i = 0; i < cond_a; i++) { 7*9880d681SAndroid Build Coastguard Worker; out[i] = i; 8*9880d681SAndroid Build Coastguard Worker; if (i > cond_b) { 9*9880d681SAndroid Build Coastguard Worker; break; 10*9880d681SAndroid Build Coastguard Worker; } 11*9880d681SAndroid Build Coastguard Worker; out[i + cond_a] = i; 12*9880d681SAndroid Build Coastguard Worker; } 13*9880d681SAndroid Build Coastguard Worker; } 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerdefine void @loop(i32 addrspace(1)* %out, i32 %cond_a, i32 %cond_b) nounwind uwtable { 16*9880d681SAndroid Build Coastguard Workerentry: 17*9880d681SAndroid Build Coastguard Worker br label %for.cond 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Workerfor.cond: ; preds = %for.inc, %entry 20*9880d681SAndroid Build Coastguard Worker %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ] 21*9880d681SAndroid Build Coastguard Worker %cmp = icmp ult i32 %i.0, %cond_a 22*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %for.body, label %for.end 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker; CHECK: for.body: 25*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.cond 26*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32 addrspace(1)* %out, i32 %i.0 27*9880d681SAndroid Build Coastguard Worker store i32 %i.0, i32 addrspace(1)* %arrayidx, align 4 28*9880d681SAndroid Build Coastguard Worker %cmp1 = icmp ugt i32 %i.0, %cond_b 29*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 %{{[0-9a-zA-Z_]+}}, label %for.inc, label %[[FLOW1:[0-9a-zA-Z_]+]] 30*9880d681SAndroid Build Coastguard Worker br i1 %cmp1, label %for.end, label %for.inc 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker; CHECK: [[FLOW:[0-9a-zA-Z]+]]: 33*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 %{{[0-9a-zA-Z_]+}}, label %for.end, label %for.cond 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Worker; CHECK: for.inc: 36*9880d681SAndroid Build Coastguard Worker; CHECK: br label %[[FLOW1]] 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerfor.inc: ; preds = %for.body 39*9880d681SAndroid Build Coastguard Worker %0 = add i32 %cond_a, %i.0 40*9880d681SAndroid Build Coastguard Worker %arrayidx3 = getelementptr inbounds i32, i32 addrspace(1)* %out, i32 %0 41*9880d681SAndroid Build Coastguard Worker store i32 %i.0, i32 addrspace(1)* %arrayidx3, align 4 42*9880d681SAndroid Build Coastguard Worker %inc = add i32 %i.0, 1 43*9880d681SAndroid Build Coastguard Worker br label %for.cond 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker; CHECK: [[FLOW1]] 46*9880d681SAndroid Build Coastguard Worker; CHECK: br label %[[FLOW]] 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.cond, %for.body 49*9880d681SAndroid Build Coastguard Worker ret void 50*9880d681SAndroid Build Coastguard Worker} 51