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