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