1 ; RUN: llc -march=mipsel -mattr=mips16 -relocation-model=pic -O3 \ 2 ; RUN: -verify-machineinstrs < %s | FileCheck %s -check-prefix=16hf 3 4 @x = global float 5.000000e+00, align 4 5 @y = global float 1.500000e+01, align 4 6 @xd = global double 6.000000e+00, align 8 7 @yd = global double 1.800000e+01, align 8 8 @two = global i32 2, align 4 9 @addsf3_result = common global float 0.000000e+00, align 4 10 @adddf3_result = common global double 0.000000e+00, align 8 11 @subsf3_result = common global float 0.000000e+00, align 4 12 @subdf3_result = common global double 0.000000e+00, align 8 13 @mulsf3_result = common global float 0.000000e+00, align 4 14 @muldf3_result = common global double 0.000000e+00, align 8 15 @divsf3_result = common global float 0.000000e+00, align 4 16 @divdf3_result = common global double 0.000000e+00, align 8 17 @extendsfdf2_result = common global double 0.000000e+00, align 8 18 @xd2 = global double 0x40147E6B74B4CF6A, align 8 19 @truncdfsf2_result = common global float 0.000000e+00, align 4 20 @fix_truncsfsi_result = common global i32 0, align 4 21 @fix_truncdfsi_result = common global i32 0, align 4 22 @si = global i32 -9, align 4 23 @ui = global i32 9, align 4 24 @floatsisf_result = common global float 0.000000e+00, align 4 25 @floatsidf_result = common global double 0.000000e+00, align 8 26 @floatunsisf_result = common global float 0.000000e+00, align 4 27 @floatunsidf_result = common global double 0.000000e+00, align 8 28 @xx = global float 5.000000e+00, align 4 29 @eqsf2_result = common global i32 0, align 4 30 @xxd = global double 6.000000e+00, align 8 31 @eqdf2_result = common global i32 0, align 4 32 @nesf2_result = common global i32 0, align 4 33 @nedf2_result = common global i32 0, align 4 34 @gesf2_result = common global i32 0, align 4 35 @gedf2_result = common global i32 0, align 4 36 @ltsf2_result = common global i32 0, align 4 37 @ltdf2_result = common global i32 0, align 4 38 @lesf2_result = common global i32 0, align 4 39 @ledf2_result = common global i32 0, align 4 40 @gtsf2_result = common global i32 0, align 4 41 @gtdf2_result = common global i32 0, align 4 42 43 define void @test_addsf3() nounwind { 44 entry: 45 ;16hf-LABEL: test_addsf3: 46 %0 = load float, float* @x, align 4 47 %1 = load float, float* @y, align 4 48 %add = fadd float %0, %1 49 store float %add, float* @addsf3_result, align 4 50 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_addsf3)(${{[0-9]+}}) 51 ret void 52 } 53 54 define void @test_adddf3() nounwind { 55 entry: 56 ;16hf-LABEL: test_adddf3: 57 %0 = load double, double* @xd, align 8 58 %1 = load double, double* @yd, align 8 59 %add = fadd double %0, %1 60 store double %add, double* @adddf3_result, align 8 61 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_adddf3)(${{[0-9]+}}) 62 ret void 63 } 64 65 define void @test_subsf3() nounwind { 66 entry: 67 ;16hf-LABEL: test_subsf3: 68 %0 = load float, float* @x, align 4 69 %1 = load float, float* @y, align 4 70 %sub = fsub float %0, %1 71 store float %sub, float* @subsf3_result, align 4 72 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_subsf3)(${{[0-9]+}}) 73 ret void 74 } 75 76 define void @test_subdf3() nounwind { 77 entry: 78 ;16hf-LABEL: test_subdf3: 79 %0 = load double, double* @xd, align 8 80 %1 = load double, double* @yd, align 8 81 %sub = fsub double %0, %1 82 store double %sub, double* @subdf3_result, align 8 83 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_subdf3)(${{[0-9]+}}) 84 ret void 85 } 86 87 define void @test_mulsf3() nounwind { 88 entry: 89 ;16hf-LABEL: test_mulsf3: 90 %0 = load float, float* @x, align 4 91 %1 = load float, float* @y, align 4 92 %mul = fmul float %0, %1 93 store float %mul, float* @mulsf3_result, align 4 94 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_mulsf3)(${{[0-9]+}}) 95 ret void 96 } 97 98 define void @test_muldf3() nounwind { 99 entry: 100 ;16hf-LABEL: test_muldf3: 101 %0 = load double, double* @xd, align 8 102 %1 = load double, double* @yd, align 8 103 %mul = fmul double %0, %1 104 store double %mul, double* @muldf3_result, align 8 105 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_muldf3)(${{[0-9]+}}) 106 ret void 107 } 108 109 define void @test_divsf3() nounwind { 110 entry: 111 ;16hf-LABEL: test_divsf3: 112 %0 = load float, float* @y, align 4 113 %1 = load float, float* @x, align 4 114 %div = fdiv float %0, %1 115 store float %div, float* @divsf3_result, align 4 116 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_divsf3)(${{[0-9]+}}) 117 ret void 118 } 119 120 define void @test_divdf3() nounwind { 121 entry: 122 ;16hf-LABEL: test_divdf3: 123 %0 = load double, double* @yd, align 8 124 %mul = fmul double %0, 2.000000e+00 125 %1 = load double, double* @xd, align 8 126 %div = fdiv double %mul, %1 127 store double %div, double* @divdf3_result, align 8 128 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_divdf3)(${{[0-9]+}}) 129 ret void 130 } 131 132 define void @test_extendsfdf2() nounwind { 133 entry: 134 ;16hf-LABEL: test_extendsfdf2: 135 %0 = load float, float* @x, align 4 136 %conv = fpext float %0 to double 137 store double %conv, double* @extendsfdf2_result, align 8 138 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_extendsfdf2)(${{[0-9]+}}) 139 ret void 140 } 141 142 define void @test_truncdfsf2() nounwind { 143 entry: 144 ;16hf-LABEL: test_truncdfsf2: 145 %0 = load double, double* @xd2, align 8 146 %conv = fptrunc double %0 to float 147 store float %conv, float* @truncdfsf2_result, align 4 148 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_truncdfsf2)(${{[0-9]+}}) 149 ret void 150 } 151 152 define void @test_fix_truncsfsi() nounwind { 153 entry: 154 ;16hf-LABEL: test_fix_truncsfsi: 155 %0 = load float, float* @x, align 4 156 %conv = fptosi float %0 to i32 157 store i32 %conv, i32* @fix_truncsfsi_result, align 4 158 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_fix_truncsfsi)(${{[0-9]+}}) 159 ret void 160 } 161 162 define void @test_fix_truncdfsi() nounwind { 163 entry: 164 ;16hf-LABEL: test_fix_truncdfsi: 165 %0 = load double, double* @xd, align 8 166 %conv = fptosi double %0 to i32 167 store i32 %conv, i32* @fix_truncdfsi_result, align 4 168 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_fix_truncdfsi)(${{[0-9]+}}) 169 ret void 170 } 171 172 define void @test_floatsisf() nounwind { 173 entry: 174 ;16hf-LABEL: test_floatsisf: 175 %0 = load i32, i32* @si, align 4 176 %conv = sitofp i32 %0 to float 177 store float %conv, float* @floatsisf_result, align 4 178 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_floatsisf)(${{[0-9]+}}) 179 ret void 180 } 181 182 define void @test_floatsidf() nounwind { 183 entry: 184 ;16hf-LABEL: test_floatsidf: 185 %0 = load i32, i32* @si, align 4 186 %conv = sitofp i32 %0 to double 187 store double %conv, double* @floatsidf_result, align 8 188 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_floatsidf)(${{[0-9]+}}) 189 ret void 190 } 191 192 define void @test_floatunsisf() nounwind { 193 entry: 194 ;16hf-LABEL: test_floatunsisf: 195 %0 = load i32, i32* @ui, align 4 196 %conv = uitofp i32 %0 to float 197 store float %conv, float* @floatunsisf_result, align 4 198 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_floatunsisf)(${{[0-9]+}}) 199 ret void 200 } 201 202 define void @test_floatunsidf() nounwind { 203 entry: 204 ;16hf-LABEL: test_floatunsidf: 205 %0 = load i32, i32* @ui, align 4 206 %conv = uitofp i32 %0 to double 207 store double %conv, double* @floatunsidf_result, align 8 208 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_floatunsidf)(${{[0-9]+}}) 209 ret void 210 } 211 212 define void @test_eqsf2() nounwind { 213 entry: 214 ;16hf-LABEL: test_eqsf2: 215 %0 = load float, float* @x, align 4 216 %1 = load float, float* @xx, align 4 217 %cmp = fcmp oeq float %0, %1 218 %conv = zext i1 %cmp to i32 219 store i32 %conv, i32* @eqsf2_result, align 4 220 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_eqsf2)(${{[0-9]+}}) 221 ret void 222 } 223 224 define void @test_eqdf2() nounwind { 225 entry: 226 ;16hf-LABEL: test_eqdf2: 227 %0 = load double, double* @xd, align 8 228 %1 = load double, double* @xxd, align 8 229 %cmp = fcmp oeq double %0, %1 230 %conv = zext i1 %cmp to i32 231 store i32 %conv, i32* @eqdf2_result, align 4 232 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_eqdf2)(${{[0-9]+}}) 233 ret void 234 } 235 236 define void @test_nesf2() nounwind { 237 entry: 238 ;16hf-LABEL: test_nesf2: 239 %0 = load float, float* @x, align 4 240 %1 = load float, float* @y, align 4 241 %cmp = fcmp une float %0, %1 242 %conv = zext i1 %cmp to i32 243 store i32 %conv, i32* @nesf2_result, align 4 244 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_nesf2)(${{[0-9]+}}) 245 ret void 246 } 247 248 define void @test_nedf2() nounwind { 249 entry: 250 ;16hf-LABEL: test_nedf2: 251 %0 = load double, double* @xd, align 8 252 %1 = load double, double* @yd, align 8 253 %cmp = fcmp une double %0, %1 254 %conv = zext i1 %cmp to i32 255 store i32 %conv, i32* @nedf2_result, align 4 256 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_nedf2)(${{[0-9]+}}) 257 ret void 258 } 259 260 define void @test_gesf2() nounwind { 261 entry: 262 ;16hf-LABEL: test_gesf2: 263 %0 = load float, float* @x, align 4 264 %1 = load float, float* @xx, align 4 265 %cmp = fcmp oge float %0, %1 266 %2 = load float, float* @y, align 4 267 %cmp1 = fcmp oge float %2, %0 268 %and3 = and i1 %cmp, %cmp1 269 %and = zext i1 %and3 to i32 270 store i32 %and, i32* @gesf2_result, align 4 271 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_gesf2)(${{[0-9]+}}) 272 ret void 273 } 274 275 define void @test_gedf2() nounwind { 276 entry: 277 ;16hf-LABEL: test_gedf2: 278 %0 = load double, double* @xd, align 8 279 %1 = load double, double* @xxd, align 8 280 %cmp = fcmp oge double %0, %1 281 %2 = load double, double* @yd, align 8 282 %cmp1 = fcmp oge double %2, %0 283 %and3 = and i1 %cmp, %cmp1 284 %and = zext i1 %and3 to i32 285 store i32 %and, i32* @gedf2_result, align 4 286 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_gedf2)(${{[0-9]+}}) 287 ret void 288 } 289 290 define void @test_ltsf2() nounwind { 291 entry: 292 ;16hf-LABEL: test_ltsf2: 293 %0 = load float, float* @x, align 4 294 %1 = load float, float* @xx, align 4 295 %lnot = fcmp uge float %0, %1 296 %2 = load float, float* @y, align 4 297 %cmp1 = fcmp olt float %0, %2 298 %and2 = and i1 %lnot, %cmp1 299 %and = zext i1 %and2 to i32 300 store i32 %and, i32* @ltsf2_result, align 4 301 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_ltsf2)(${{[0-9]+}}) 302 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_ltsf2)(${{[0-9]+}}) 303 ret void 304 } 305 306 define void @test_ltdf2() nounwind { 307 entry: 308 ;16hf-LABEL: test_ltdf2: 309 %0 = load double, double* @xd, align 8 310 %1 = load double, double* @xxd, align 8 311 %lnot = fcmp uge double %0, %1 312 %2 = load double, double* @yd, align 8 313 %cmp1 = fcmp olt double %0, %2 314 %and2 = and i1 %lnot, %cmp1 315 %and = zext i1 %and2 to i32 316 store i32 %and, i32* @ltdf2_result, align 4 317 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_ltdf2)(${{[0-9]+}}) 318 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_ltdf2)(${{[0-9]+}}) 319 ret void 320 } 321 322 define void @test_lesf2() nounwind { 323 entry: 324 ;16hf-LABEL: test_lesf2: 325 %0 = load float, float* @x, align 4 326 %1 = load float, float* @xx, align 4 327 %cmp = fcmp ole float %0, %1 328 %2 = load float, float* @y, align 4 329 %cmp1 = fcmp ole float %0, %2 330 %and3 = and i1 %cmp, %cmp1 331 %and = zext i1 %and3 to i32 332 store i32 %and, i32* @lesf2_result, align 4 333 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_lesf2)(${{[0-9]+}}) 334 ret void 335 } 336 337 define void @test_ledf2() nounwind { 338 entry: 339 ;16hf-LABEL: test_ledf2: 340 %0 = load double, double* @xd, align 8 341 %1 = load double, double* @xxd, align 8 342 %cmp = fcmp ole double %0, %1 343 %2 = load double, double* @yd, align 8 344 %cmp1 = fcmp ole double %0, %2 345 %and3 = and i1 %cmp, %cmp1 346 %and = zext i1 %and3 to i32 347 store i32 %and, i32* @ledf2_result, align 4 348 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_ledf2)(${{[0-9]+}}) 349 ret void 350 } 351 352 define void @test_gtsf2() nounwind { 353 entry: 354 ;16hf-LABEL: test_gtsf2: 355 %0 = load float, float* @x, align 4 356 %1 = load float, float* @xx, align 4 357 %lnot = fcmp ule float %0, %1 358 %2 = load float, float* @y, align 4 359 %cmp1 = fcmp ogt float %2, %0 360 %and2 = and i1 %lnot, %cmp1 361 %and = zext i1 %and2 to i32 362 store i32 %and, i32* @gtsf2_result, align 4 363 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_gtsf2)(${{[0-9]+}}) 364 ret void 365 } 366 367 define void @test_gtdf2() nounwind { 368 entry: 369 ;16hf-LABEL: test_gtdf2: 370 %0 = load double, double* @xd, align 8 371 %1 = load double, double* @xxd, align 8 372 %lnot = fcmp ule double %0, %1 373 %2 = load double, double* @yd, align 8 374 %cmp1 = fcmp ogt double %2, %0 375 %and2 = and i1 %lnot, %cmp1 376 %and = zext i1 %and2 to i32 377 store i32 %and, i32* @gtdf2_result, align 4 378 ;16hf: lw ${{[0-9]+}}, %call16(__mips16_gtdf2)(${{[0-9]+}}) 379 ret void 380 } 381 382 383