103d85845SMatt Arsenault; RUN: llc -march=r600 -mcpu=redwood -r600-if-convert=0 < %s | FileCheck %s 245bb48eaSTom Stellard 345bb48eaSTom Stellard; This tests for abug where the AMDILCFGStructurizer was crashing on loops 445bb48eaSTom Stellard; like this: 545bb48eaSTom Stellard; 645bb48eaSTom Stellard; for (i = 0; i < x; i++) { 745bb48eaSTom Stellard; if (cond0) { 845bb48eaSTom Stellard; if (cond1) { 945bb48eaSTom Stellard; 1045bb48eaSTom Stellard; } else { 1145bb48eaSTom Stellard; 1245bb48eaSTom Stellard; } 1345bb48eaSTom Stellard; if (cond2) { 1445bb48eaSTom Stellard; 1545bb48eaSTom Stellard; } 1645bb48eaSTom Stellard; } 1745bb48eaSTom Stellard; } 1845bb48eaSTom Stellard 1945bb48eaSTom Stellard; CHECK-LABEL: {{^}}if_inside_loop: 2045bb48eaSTom Stellard; CHECK: LOOP_START_DX10 2145bb48eaSTom Stellard; CHECK: END_LOOP 22*3dbeefa9SMatt Arsenaultdefine amdgpu_kernel void @if_inside_loop(i32 addrspace(1)* %out, i32 %a, i32 %b, i32 %c, i32 %d) { 2345bb48eaSTom Stellardentry: 2445bb48eaSTom Stellard br label %for.body 2545bb48eaSTom Stellard 2645bb48eaSTom Stellardfor.body: 2745bb48eaSTom Stellard %0 = phi i32 [0, %entry], [%inc, %for.inc] 2845bb48eaSTom Stellard %val = phi i32 [0, %entry], [%val.for.inc, %for.inc] 2945bb48eaSTom Stellard %inc = add i32 %0, 1 3045bb48eaSTom Stellard %1 = icmp ult i32 10, %a 3145bb48eaSTom Stellard br i1 %1, label %for.inc, label %if.then 3245bb48eaSTom Stellard 3345bb48eaSTom Stellardif.then: 3445bb48eaSTom Stellard %2 = icmp ne i32 0, %b 3545bb48eaSTom Stellard br i1 %2, label %if.then.true, label %if.then.false 3645bb48eaSTom Stellard 3745bb48eaSTom Stellardif.then.true: 3845bb48eaSTom Stellard %3 = add i32 %a, %val 3945bb48eaSTom Stellard br label %if 4045bb48eaSTom Stellard 4145bb48eaSTom Stellardif.then.false: 4245bb48eaSTom Stellard %4 = mul i32 %a, %val 4345bb48eaSTom Stellard br label %if 4445bb48eaSTom Stellard 4545bb48eaSTom Stellardif: 4645bb48eaSTom Stellard %val.if = phi i32 [%3, %if.then.true], [%4, %if.then.false] 4745bb48eaSTom Stellard %5 = icmp ne i32 0, %c 4845bb48eaSTom Stellard br i1 %5, label %if.true, label %for.inc 4945bb48eaSTom Stellard 5045bb48eaSTom Stellardif.true: 5145bb48eaSTom Stellard %6 = add i32 %a, %val.if 5245bb48eaSTom Stellard br label %for.inc 5345bb48eaSTom Stellard 5445bb48eaSTom Stellardfor.inc: 5545bb48eaSTom Stellard %val.for.inc = phi i32 [%val, %for.body], [%val.if, %if], [%6, %if.true] 5645bb48eaSTom Stellard %7 = icmp ne i32 0, %d 5745bb48eaSTom Stellard br i1 %7, label %for.body, label %exit 5845bb48eaSTom Stellard 5945bb48eaSTom Stellardexit: 6045bb48eaSTom Stellard store i32 %val.for.inc, i32 addrspace(1)* %out 6145bb48eaSTom Stellard ret void 6245bb48eaSTom Stellard} 63