1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mipsel -mcpu=mips32r6 -relocation-model=static -disable-mips-delay-filler < %s | FileCheck %s -check-prefix=STATIC32 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mipsel -mcpu=mips64r6 -target-abi n64 -disable-mips-delay-filler < %s | FileCheck %s -check-prefix=PIC 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 5*9880d681SAndroid Build Coastguard Workerdefine void @l() { 6*9880d681SAndroid Build Coastguard Workerentry: 7*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25 8*9880d681SAndroid Build Coastguard Worker %call = tail call i32 @k() 9*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25 10*9880d681SAndroid Build Coastguard Worker %call1 = tail call i32 @j() 11*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %call, %call1 12*9880d681SAndroid Build Coastguard Worker; CHECK: bnec 13*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerif.then: ; preds = %entry: 16*9880d681SAndroid Build Coastguard Worker; STATIC: nop 17*9880d681SAndroid Build Coastguard Worker; STATIC: jal 18*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25 19*9880d681SAndroid Build Coastguard Worker tail call void @f(i32 signext -2) 20*9880d681SAndroid Build Coastguard Worker br label %if.end 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerif.end: ; preds = %if.then, %entry 23*9880d681SAndroid Build Coastguard Worker; CHECK: jrc $ra 24*9880d681SAndroid Build Coastguard Worker ret void 25*9880d681SAndroid Build Coastguard Worker} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerdeclare i32 @k() 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerdeclare i32 @j() 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Workerdeclare void @f(i32 signext) 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker; Function Attrs: define void @l2() { 34*9880d681SAndroid Build Coastguard Workerdefine void @l2() { 35*9880d681SAndroid Build Coastguard Workerentry: 36*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25 37*9880d681SAndroid Build Coastguard Worker %call = tail call i32 @k() 38*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25 39*9880d681SAndroid Build Coastguard Worker %call1 = tail call i32 @i() 40*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %call, %call1 41*9880d681SAndroid Build Coastguard Worker; CHECK beqc 42*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.end, label %if.then 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerif.then: ; preds = %entry: 45*9880d681SAndroid Build Coastguard Worker; STATIC: nop 46*9880d681SAndroid Build Coastguard Worker; STATIC: jal 47*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25 48*9880d681SAndroid Build Coastguard Worker tail call void @f(i32 signext -1) 49*9880d681SAndroid Build Coastguard Worker br label %if.end 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Workerif.end: ; preds = %entry, %if.then 52*9880d681SAndroid Build Coastguard Worker; CHECK: jrc $ra 53*9880d681SAndroid Build Coastguard Worker ret void 54*9880d681SAndroid Build Coastguard Worker} 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Workerdeclare i32 @i() 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 59*9880d681SAndroid Build Coastguard Workerdefine void @l3() { 60*9880d681SAndroid Build Coastguard Workerentry: 61*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25 62*9880d681SAndroid Build Coastguard Worker %call = tail call i32 @k() 63*9880d681SAndroid Build Coastguard Worker %cmp = icmp slt i32 %call, 0 64*9880d681SAndroid Build Coastguard Worker; CHECK : bgez 65*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workerif.then: ; preds = %entry: 68*9880d681SAndroid Build Coastguard Worker; STATIC: nop 69*9880d681SAndroid Build Coastguard Worker; STATIC: jal 70*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25 71*9880d681SAndroid Build Coastguard Worker tail call void @f(i32 signext 0) 72*9880d681SAndroid Build Coastguard Worker br label %if.end 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerif.end: ; preds = %if.then, %entry 75*9880d681SAndroid Build Coastguard Worker; CHECK: jrc $ra 76*9880d681SAndroid Build Coastguard Worker ret void 77*9880d681SAndroid Build Coastguard Worker} 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 80*9880d681SAndroid Build Coastguard Workerdefine void @l4() { 81*9880d681SAndroid Build Coastguard Workerentry: 82*9880d681SAndroid Build Coastguard Worker %call = tail call i32 @k() 83*9880d681SAndroid Build Coastguard Worker %cmp = icmp slt i32 %call, 1 84*9880d681SAndroid Build Coastguard Worker; CHECK: bgtzc 85*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Workerif.then: ; preds = %entry: 88*9880d681SAndroid Build Coastguard Worker; STATIC: nop 89*9880d681SAndroid Build Coastguard Worker; STATIC: jal 90*9880d681SAndroid Build Coastguard Worker tail call void @f(i32 signext 1) 91*9880d681SAndroid Build Coastguard Worker br label %if.end 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Workerif.end: ; preds = %if.then, %entry 94*9880d681SAndroid Build Coastguard Worker; CHECK: jrc $ra 95*9880d681SAndroid Build Coastguard Worker ret void 96*9880d681SAndroid Build Coastguard Worker} 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 99*9880d681SAndroid Build Coastguard Workerdefine void @l5() { 100*9880d681SAndroid Build Coastguard Workerentry: 101*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25 102*9880d681SAndroid Build Coastguard Worker %call = tail call i32 @k() 103*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25 104*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i32 %call, 0 105*9880d681SAndroid Build Coastguard Worker; CHECK: blezc 106*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Workerif.then: ; preds = %entry: 109*9880d681SAndroid Build Coastguard Worker; STATIC: nop 110*9880d681SAndroid Build Coastguard Worker; STATIC: jal 111*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25 112*9880d681SAndroid Build Coastguard Worker tail call void @f(i32 signext 2) 113*9880d681SAndroid Build Coastguard Worker br label %if.end 114*9880d681SAndroid Build Coastguard Worker 115*9880d681SAndroid Build Coastguard Workerif.end: ; preds = %if.then, %entry 116*9880d681SAndroid Build Coastguard Worker; CHECK: jrc $ra 117*9880d681SAndroid Build Coastguard Worker ret void 118*9880d681SAndroid Build Coastguard Worker} 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 121*9880d681SAndroid Build Coastguard Workerdefine void @l6() { 122*9880d681SAndroid Build Coastguard Workerentry: 123*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25 124*9880d681SAndroid Build Coastguard Worker %call = tail call i32 @k() 125*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25 126*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i32 %call, -1 127*9880d681SAndroid Build Coastguard Worker; CHECK: bltzc 128*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 129*9880d681SAndroid Build Coastguard Worker 130*9880d681SAndroid Build Coastguard Workerif.then: ; preds = %entry: 131*9880d681SAndroid Build Coastguard Worker; STATIC: nop 132*9880d681SAndroid Build Coastguard Worker; STATIC: jal 133*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25 134*9880d681SAndroid Build Coastguard Worker tail call void @f(i32 signext 3) 135*9880d681SAndroid Build Coastguard Worker br label %if.end 136*9880d681SAndroid Build Coastguard Worker 137*9880d681SAndroid Build Coastguard Workerif.end: ; preds = %if.then, %entry 138*9880d681SAndroid Build Coastguard Worker; CHECK: jrc $ra 139*9880d681SAndroid Build Coastguard Worker ret void 140*9880d681SAndroid Build Coastguard Worker} 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 143*9880d681SAndroid Build Coastguard Workerdefine void @l7() { 144*9880d681SAndroid Build Coastguard Workerentry: 145*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25 146*9880d681SAndroid Build Coastguard Worker %call = tail call i32 @k() 147*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %call, 0 148*9880d681SAndroid Build Coastguard Worker; CHECK: bnezc 149*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Workerif.then: ; preds = %entry: 152*9880d681SAndroid Build Coastguard Worker; STATIC: nop 153*9880d681SAndroid Build Coastguard Worker; STATIC: jal 154*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25 155*9880d681SAndroid Build Coastguard Worker tail call void @f(i32 signext 4) 156*9880d681SAndroid Build Coastguard Worker br label %if.end 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard Workerif.end: ; preds = %if.then, %entry 159*9880d681SAndroid Build Coastguard Worker; CHECK: jrc $ra 160*9880d681SAndroid Build Coastguard Worker ret void 161*9880d681SAndroid Build Coastguard Worker} 162*9880d681SAndroid Build Coastguard Worker 163*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 164*9880d681SAndroid Build Coastguard Workerdefine void @l8() { 165*9880d681SAndroid Build Coastguard Workerentry: 166*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25 167*9880d681SAndroid Build Coastguard Worker %call = tail call i32 @k() 168*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %call, 0 169*9880d681SAndroid Build Coastguard Worker; CHECK: beqzc 170*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.end, label %if.then 171*9880d681SAndroid Build Coastguard Worker 172*9880d681SAndroid Build Coastguard Workerif.then: ; preds = %entry: 173*9880d681SAndroid Build Coastguard Worker; STATIC: nop 174*9880d681SAndroid Build Coastguard Worker; STATIC: jal 175*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25 176*9880d681SAndroid Build Coastguard Worker tail call void @f(i32 signext 5) 177*9880d681SAndroid Build Coastguard Worker br label %if.end 178*9880d681SAndroid Build Coastguard Worker 179*9880d681SAndroid Build Coastguard Workerif.end: ; preds = %entry, %if.then 180*9880d681SAndroid Build Coastguard Worker; CHECK: jrc $ra 181*9880d681SAndroid Build Coastguard Worker ret void 182*9880d681SAndroid Build Coastguard Worker} 183*9880d681SAndroid Build Coastguard Worker 184*9880d681SAndroid Build Coastguard Workerdefine i32 @l9(i8* ()* %i) #0 { 185*9880d681SAndroid Build Coastguard Workerentry: 186*9880d681SAndroid Build Coastguard Worker %i.addr = alloca i8* ()*, align 4 187*9880d681SAndroid Build Coastguard Worker store i8* ()* %i, i8* ()** %i.addr, align 4 188*9880d681SAndroid Build Coastguard Worker; STATIC32: jal 189*9880d681SAndroid Build Coastguard Worker; STATIC32: nop 190*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25 191*9880d681SAndroid Build Coastguard Worker %call = call i32 @k() 192*9880d681SAndroid Build Coastguard Worker; PIC: jalrc $25 193*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i32 %call, 0 194*9880d681SAndroid Build Coastguard Worker; CHECK: beqzc 195*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 196*9880d681SAndroid Build Coastguard Worker 197*9880d681SAndroid Build Coastguard Workerif.then: ; preds = %entry 198*9880d681SAndroid Build Coastguard Worker %0 = load i8* ()*, i8* ()** %i.addr, align 4 199*9880d681SAndroid Build Coastguard Worker; CHECK: jalrc $25 200*9880d681SAndroid Build Coastguard Worker %call1 = call i8* %0() 201*9880d681SAndroid Build Coastguard Worker br label %if.end 202*9880d681SAndroid Build Coastguard Worker 203*9880d681SAndroid Build Coastguard Workerif.end: ; preds = %if.then, %entry 204*9880d681SAndroid Build Coastguard Worker; CHECK: jrc $ra 205*9880d681SAndroid Build Coastguard Worker ret i32 -1 206*9880d681SAndroid Build Coastguard Worker} 207