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 7 define void @l() { 8 entry: 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 17 if.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 24 if.end: ; preds = %if.then, %entry 25 ; CHECK: jrc $ra 26 ret void 27 } 28 29 declare i32 @k() 30 31 declare i32 @j() 32 33 declare void @f(i32 signext) 34 35 ; Function Attrs: define void @l2() { 36 define void @l2() { 37 entry: 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 46 if.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 53 if.end: ; preds = %entry, %if.then 54 ; CHECK: jrc $ra 55 ret void 56 } 57 58 declare i32 @i() 59 60 ; Function Attrs: nounwind 61 define void @l3() { 62 entry: 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 69 if.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 76 if.end: ; preds = %if.then, %entry 77 ; CHECK: jrc $ra 78 ret void 79 } 80 81 ; Function Attrs: nounwind 82 define void @l4() { 83 entry: 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 89 if.then: ; preds = %entry: 90 ; STATIC: nop 91 ; STATIC: jal 92 tail call void @f(i32 signext 1) 93 br label %if.end 94 95 if.end: ; preds = %if.then, %entry 96 ; CHECK: jrc $ra 97 ret void 98 } 99 100 ; Function Attrs: nounwind 101 define void @l5() { 102 entry: 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 110 if.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 117 if.end: ; preds = %if.then, %entry 118 ; CHECK: jrc $ra 119 ret void 120 } 121 122 ; Function Attrs: nounwind 123 define void @l6() { 124 entry: 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 132 if.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 139 if.end: ; preds = %if.then, %entry 140 ; CHECK: jrc $ra 141 ret void 142 } 143 144 ; Function Attrs: nounwind 145 define void @l7() { 146 entry: 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 153 if.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 160 if.end: ; preds = %if.then, %entry 161 ; CHECK: jrc $ra 162 ret void 163 } 164 165 ; Function Attrs: nounwind 166 define void @l8() { 167 entry: 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 174 if.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 181 if.end: ; preds = %entry, %if.then 182 ; CHECK: jrc $ra 183 ret void 184 } 185 186 define i32 @l9(i8* ()* %i) #0 { 187 entry: 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 199 if.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 205 if.end: ; preds = %if.then, %entry 206 ; CHECK: jrc $ra 207 ret i32 -1 208 } 209