1*9880d681SAndroid Build Coastguard Worker; RUN: llc -verify-machineinstrs < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; This test case used to fail both with and without -verify-machineinstrs 3*9880d681SAndroid Build Coastguard Worker; (-verify-machineinstrs would catch the problem right after instruction 4*9880d681SAndroid Build Coastguard Worker; scheduling because the live intervals would not be right for the registers 5*9880d681SAndroid Build Coastguard Worker; that were both inputs to the inline asm and also early-clobber outputs). 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-m:e-i64:64-n32:64" 8*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc64-bgq-linux" 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker%struct._IO_FILE.119.8249.32639.195239.200117.211499.218003.221255.222881.224507.226133.240767.244019.245645.248897.260279.271661.281417.283043.302555.304181.325319.326945.344713 = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker.118.8248.32638.195238.200116.211498.218002.221254.222880.224506.226132.240766.244018.245644.248896.260278.271660.281416.283042.302554.304180.325318.326944.344712*, %struct._IO_FILE.119.8249.32639.195239.200117.211499.218003.221255.222881.224507.226133.240767.244019.245645.248897.260279.271661.281417.283043.302555.304181.325319.326945.344713*, i32, i32, i64, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i64, i32, [20 x i8] } 11*9880d681SAndroid Build Coastguard Worker%struct._IO_marker.118.8248.32638.195238.200116.211498.218002.221254.222880.224506.226132.240766.244018.245644.248896.260278.271660.281416.283042.302554.304180.325318.326944.344712 = type { %struct._IO_marker.118.8248.32638.195238.200116.211498.218002.221254.222880.224506.226132.240766.244018.245644.248896.260278.271660.281416.283042.302554.304180.325318.326944.344712*, %struct._IO_FILE.119.8249.32639.195239.200117.211499.218003.221255.222881.224507.226133.240767.244019.245645.248897.260279.271661.281417.283043.302555.304181.325319.326945.344713*, i32 } 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker@.str236 = external unnamed_addr constant [121 x i8], align 1 14*9880d681SAndroid Build Coastguard Worker@.str294 = external unnamed_addr constant [49 x i8], align 1 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 17*9880d681SAndroid Build Coastguard Workerdeclare void @fprintf(%struct._IO_FILE.119.8249.32639.195239.200117.211499.218003.221255.222881.224507.226133.240767.244019.245645.248897.260279.271661.281417.283043.302555.304181.325319.326945.344713* nocapture, i8* nocapture readonly, ...) #0 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker; Function Attrs: inlinehint nounwind 20*9880d681SAndroid Build Coastguard Workerdefine void @_ZN4PAMI6Device2MU15ResourceManager46calculatePerCoreMUResourcesBasedOnAvailabilityEv(i32 %inp32, i64 %inp64) #1 align 2 { 21*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_ZN4PAMI6Device2MU15ResourceManager46calculatePerCoreMUResourcesBasedOnAvailabilityEv 22*9880d681SAndroid Build Coastguard Worker; CHECK: sc 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerentry: 25*9880d681SAndroid Build Coastguard Worker %numFreeResourcesInSubgroup = alloca i32, align 4 26*9880d681SAndroid Build Coastguard Worker %0 = ptrtoint i32* %numFreeResourcesInSubgroup to i64 27*9880d681SAndroid Build Coastguard Worker br label %for.cond2.preheader 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerfor.cond2.preheader: ; preds = %if.end23.3, %entry 30*9880d681SAndroid Build Coastguard Worker %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %if.end23.3 ] 31*9880d681SAndroid Build Coastguard Worker %group.098 = phi i32 [ 0, %entry ], [ %inc37, %if.end23.3 ] 32*9880d681SAndroid Build Coastguard Worker %minFreeBatIdsPerCore.097 = phi i64 [ 32, %entry ], [ %numFreeBatIdsInGroup.0.minFreeBatIdsPerCore.0, %if.end23.3 ] 33*9880d681SAndroid Build Coastguard Worker %minFreeRecFifosPerCore.096 = phi i64 [ 16, %entry ], [ %minFreeRecFifosPerCore.1, %if.end23.3 ] 34*9880d681SAndroid Build Coastguard Worker %minFreeInjFifosPerCore.095 = phi i64 [ 32, %entry ], [ %numFreeInjFifosInGroup.0.minFreeInjFifosPerCore.0, %if.end23.3 ] 35*9880d681SAndroid Build Coastguard Worker %cmp5 = icmp eq i32 %inp32, 0 36*9880d681SAndroid Build Coastguard Worker br i1 %cmp5, label %if.end, label %if.then 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerif.then: ; preds = %if.end23.2, %if.end23.1, %if.end23, %for.cond2.preheader 39*9880d681SAndroid Build Coastguard Worker unreachable 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Workerif.end: ; preds = %for.cond2.preheader 42*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* %numFreeResourcesInSubgroup, align 4 43*9880d681SAndroid Build Coastguard Worker %conv = zext i32 %1 to i64 44*9880d681SAndroid Build Coastguard Worker %2 = call { i64, i64, i64, i64 } asm sideeffect "sc", "=&{r0},=&{r3},=&{r4},=&{r5},{r0},{r3},{r4},{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11},~{r12},~{cr0},~{memory}"(i64 1034, i64 %indvars.iv, i64 %0, i64 %inp64) #2 45*9880d681SAndroid Build Coastguard Worker %cmp10 = icmp eq i32 0, 0 46*9880d681SAndroid Build Coastguard Worker br i1 %cmp10, label %if.end14, label %if.then11 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerif.then11: ; preds = %if.end.3, %if.end.2, %if.end.1, %if.end 49*9880d681SAndroid Build Coastguard Worker unreachable 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Workerif.end14: ; preds = %if.end 52*9880d681SAndroid Build Coastguard Worker %3 = load i32, i32* %numFreeResourcesInSubgroup, align 4 53*9880d681SAndroid Build Coastguard Worker %cmp19 = icmp eq i32 %inp32, 0 54*9880d681SAndroid Build Coastguard Worker br i1 %cmp19, label %if.end23, label %if.then20 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Workerif.then20: ; preds = %if.end14.3, %if.end14.2, %if.end14.1, %if.end14 57*9880d681SAndroid Build Coastguard Worker %conv4.i65.lcssa = phi i32 [ %inp32, %if.end14 ], [ 0, %if.end14.1 ], [ %conv4.i65.2, %if.end14.2 ], [ %conv4.i65.3, %if.end14.3 ] 58*9880d681SAndroid Build Coastguard Worker call void (%struct._IO_FILE.119.8249.32639.195239.200117.211499.218003.221255.222881.224507.226133.240767.244019.245645.248897.260279.271661.281417.283043.302555.304181.325319.326945.344713*, i8*, ...) @fprintf(%struct._IO_FILE.119.8249.32639.195239.200117.211499.218003.221255.222881.224507.226133.240767.244019.245645.248897.260279.271661.281417.283043.302555.304181.325319.326945.344713* undef, i8* getelementptr inbounds ([121 x i8], [121 x i8]* @.str236, i64 0, i64 0), i32 signext 2503) #3 59*9880d681SAndroid Build Coastguard Worker call void (%struct._IO_FILE.119.8249.32639.195239.200117.211499.218003.221255.222881.224507.226133.240767.244019.245645.248897.260279.271661.281417.283043.302555.304181.325319.326945.344713*, i8*, ...) @fprintf(%struct._IO_FILE.119.8249.32639.195239.200117.211499.218003.221255.222881.224507.226133.240767.244019.245645.248897.260279.271661.281417.283043.302555.304181.325319.326945.344713* undef, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str294, i64 0, i64 0), i32 signext %conv4.i65.lcssa) #3 60*9880d681SAndroid Build Coastguard Worker unreachable 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Workerif.end23: ; preds = %if.end14 63*9880d681SAndroid Build Coastguard Worker %conv15 = zext i32 %3 to i64 64*9880d681SAndroid Build Coastguard Worker %4 = load i32, i32* %numFreeResourcesInSubgroup, align 4 65*9880d681SAndroid Build Coastguard Worker %conv24 = zext i32 %4 to i64 66*9880d681SAndroid Build Coastguard Worker %5 = call { i64, i64, i64, i64 } asm sideeffect "sc", "=&{r0},=&{r3},=&{r4},=&{r5},{r0},{r3},{r4},{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11},~{r12},~{cr0},~{memory}"(i64 1033, i64 0, i64 %0, i64 %inp64) #2 67*9880d681SAndroid Build Coastguard Worker %cmp5.1 = icmp eq i32 0, 0 68*9880d681SAndroid Build Coastguard Worker br i1 %cmp5.1, label %if.end.1, label %if.then 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Workerfor.end38: ; preds = %if.end23.3 71*9880d681SAndroid Build Coastguard Worker ret void 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Workerif.end.1: ; preds = %if.end23 74*9880d681SAndroid Build Coastguard Worker %6 = load i32, i32* %numFreeResourcesInSubgroup, align 4 75*9880d681SAndroid Build Coastguard Worker %conv.1 = zext i32 %6 to i64 76*9880d681SAndroid Build Coastguard Worker %add.1 = add nuw nsw i64 %conv.1, %conv 77*9880d681SAndroid Build Coastguard Worker %7 = call { i64, i64, i64, i64 } asm sideeffect "sc", "=&{r0},=&{r3},=&{r4},=&{r5},{r0},{r3},{r4},{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11},~{r12},~{cr0},~{memory}"(i64 1034, i64 0, i64 %0, i64 %inp64) #2 78*9880d681SAndroid Build Coastguard Worker %cmp10.1 = icmp eq i32 %inp32, 0 79*9880d681SAndroid Build Coastguard Worker br i1 %cmp10.1, label %if.end14.1, label %if.then11 80*9880d681SAndroid Build Coastguard Worker 81*9880d681SAndroid Build Coastguard Workerif.end14.1: ; preds = %if.end.1 82*9880d681SAndroid Build Coastguard Worker %8 = load i32, i32* %numFreeResourcesInSubgroup, align 4 83*9880d681SAndroid Build Coastguard Worker %cmp19.1 = icmp eq i32 0, 0 84*9880d681SAndroid Build Coastguard Worker br i1 %cmp19.1, label %if.end23.1, label %if.then20 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Workerif.end23.1: ; preds = %if.end14.1 87*9880d681SAndroid Build Coastguard Worker %conv15.1 = zext i32 %8 to i64 88*9880d681SAndroid Build Coastguard Worker %add16.1 = add nuw nsw i64 %conv15.1, %conv15 89*9880d681SAndroid Build Coastguard Worker %9 = load i32, i32* %numFreeResourcesInSubgroup, align 4 90*9880d681SAndroid Build Coastguard Worker %conv24.1 = zext i32 %9 to i64 91*9880d681SAndroid Build Coastguard Worker %add25.1 = add nuw nsw i64 %conv24.1, %conv24 92*9880d681SAndroid Build Coastguard Worker %cmp5.2 = icmp eq i32 %inp32, 0 93*9880d681SAndroid Build Coastguard Worker br i1 %cmp5.2, label %if.end.2, label %if.then 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Workerif.end.2: ; preds = %if.end23.1 96*9880d681SAndroid Build Coastguard Worker %10 = load i32, i32* %numFreeResourcesInSubgroup, align 4 97*9880d681SAndroid Build Coastguard Worker %conv.2 = zext i32 %10 to i64 98*9880d681SAndroid Build Coastguard Worker %add.2 = add nuw nsw i64 %conv.2, %add.1 99*9880d681SAndroid Build Coastguard Worker %11 = call { i64, i64, i64, i64 } asm sideeffect "sc", "=&{r0},=&{r3},=&{r4},=&{r5},{r0},{r3},{r4},{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11},~{r12},~{cr0},~{memory}"(i64 1034, i64 %inp64, i64 %0, i64 %inp64) #2 100*9880d681SAndroid Build Coastguard Worker %cmp10.2 = icmp eq i32 0, 0 101*9880d681SAndroid Build Coastguard Worker br i1 %cmp10.2, label %if.end14.2, label %if.then11 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Workerif.end14.2: ; preds = %if.end.2 104*9880d681SAndroid Build Coastguard Worker %12 = load i32, i32* %numFreeResourcesInSubgroup, align 4 105*9880d681SAndroid Build Coastguard Worker %13 = call { i64, i64, i64, i64 } asm sideeffect "sc", "=&{r0},=&{r3},=&{r4},=&{r5},{r0},{r3},{r4},{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11},~{r12},~{cr0},~{memory}"(i64 1035, i64 %inp64, i64 %0, i64 0) #2 106*9880d681SAndroid Build Coastguard Worker %asmresult1.i64.2 = extractvalue { i64, i64, i64, i64 } %13, 1 107*9880d681SAndroid Build Coastguard Worker %conv4.i65.2 = trunc i64 %asmresult1.i64.2 to i32 108*9880d681SAndroid Build Coastguard Worker %cmp19.2 = icmp eq i32 %conv4.i65.2, 0 109*9880d681SAndroid Build Coastguard Worker br i1 %cmp19.2, label %if.end23.2, label %if.then20 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard Workerif.end23.2: ; preds = %if.end14.2 112*9880d681SAndroid Build Coastguard Worker %conv15.2 = zext i32 %12 to i64 113*9880d681SAndroid Build Coastguard Worker %add16.2 = add nuw nsw i64 %conv15.2, %add16.1 114*9880d681SAndroid Build Coastguard Worker %14 = load i32, i32* %numFreeResourcesInSubgroup, align 4 115*9880d681SAndroid Build Coastguard Worker %conv24.2 = zext i32 %14 to i64 116*9880d681SAndroid Build Coastguard Worker %add25.2 = add nuw nsw i64 %conv24.2, %add25.1 117*9880d681SAndroid Build Coastguard Worker %cmp5.3 = icmp eq i32 0, 0 118*9880d681SAndroid Build Coastguard Worker br i1 %cmp5.3, label %if.end.3, label %if.then 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Workerif.end.3: ; preds = %if.end23.2 121*9880d681SAndroid Build Coastguard Worker %15 = load i32, i32* %numFreeResourcesInSubgroup, align 4 122*9880d681SAndroid Build Coastguard Worker %conv.3 = zext i32 %15 to i64 123*9880d681SAndroid Build Coastguard Worker %add.3 = add nuw nsw i64 %conv.3, %add.2 124*9880d681SAndroid Build Coastguard Worker %cmp10.3 = icmp eq i32 %inp32, 0 125*9880d681SAndroid Build Coastguard Worker br i1 %cmp10.3, label %if.end14.3, label %if.then11 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Workerif.end14.3: ; preds = %if.end.3 128*9880d681SAndroid Build Coastguard Worker %16 = load i32, i32* %numFreeResourcesInSubgroup, align 4 129*9880d681SAndroid Build Coastguard Worker %17 = call { i64, i64, i64, i64 } asm sideeffect "sc", "=&{r0},=&{r3},=&{r4},=&{r5},{r0},{r3},{r4},{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11},~{r12},~{cr0},~{memory}"(i64 1035, i64 0, i64 %0, i64 0) #2 130*9880d681SAndroid Build Coastguard Worker %asmresult1.i64.3 = extractvalue { i64, i64, i64, i64 } %17, 1 131*9880d681SAndroid Build Coastguard Worker %conv4.i65.3 = trunc i64 %asmresult1.i64.3 to i32 132*9880d681SAndroid Build Coastguard Worker %cmp19.3 = icmp eq i32 %conv4.i65.3, 0 133*9880d681SAndroid Build Coastguard Worker br i1 %cmp19.3, label %if.end23.3, label %if.then20 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Workerif.end23.3: ; preds = %if.end14.3 136*9880d681SAndroid Build Coastguard Worker %conv15.3 = zext i32 %16 to i64 137*9880d681SAndroid Build Coastguard Worker %add16.3 = add nuw nsw i64 %conv15.3, %add16.2 138*9880d681SAndroid Build Coastguard Worker %add25.3 = add nuw nsw i64 0, %add25.2 139*9880d681SAndroid Build Coastguard Worker %indvars.iv.next = add nuw nsw i64 %indvars.iv, 4 140*9880d681SAndroid Build Coastguard Worker %cmp27 = icmp ult i64 %add.3, %minFreeInjFifosPerCore.095 141*9880d681SAndroid Build Coastguard Worker %numFreeInjFifosInGroup.0.minFreeInjFifosPerCore.0 = select i1 %cmp27, i64 %add.3, i64 %minFreeInjFifosPerCore.095 142*9880d681SAndroid Build Coastguard Worker %cmp30 = icmp ult i64 %add16.3, %minFreeRecFifosPerCore.096 143*9880d681SAndroid Build Coastguard Worker %minFreeRecFifosPerCore.1 = select i1 %cmp30, i64 %add16.3, i64 %minFreeRecFifosPerCore.096 144*9880d681SAndroid Build Coastguard Worker %cmp33 = icmp ult i64 %add25.3, %minFreeBatIdsPerCore.097 145*9880d681SAndroid Build Coastguard Worker %numFreeBatIdsInGroup.0.minFreeBatIdsPerCore.0 = select i1 %cmp33, i64 %add25.3, i64 %minFreeBatIdsPerCore.097 146*9880d681SAndroid Build Coastguard Worker %inc37 = add nuw nsw i32 %group.098, 1 147*9880d681SAndroid Build Coastguard Worker %cmp = icmp ult i32 %inc37, 16 148*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %for.cond2.preheader, label %for.end38 149*9880d681SAndroid Build Coastguard Worker} 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "target-cpu"="a2q" } 152*9880d681SAndroid Build Coastguard Workerattributes #1 = { inlinehint nounwind "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "target-cpu"="a2q" } 153*9880d681SAndroid Build Coastguard Workerattributes #2 = { nounwind } 154*9880d681SAndroid Build Coastguard Workerattributes #3 = { cold nounwind } 155*9880d681SAndroid Build Coastguard Worker 156