Home | History | Annotate | Download | only in Mips
      1 ; RUN: llc -mtriple=mips64el-unknown-unknown -mcpu=mips4 -soft-float -O1 \
      2 ; RUN:     -disable-mips-delay-filler < %s | FileCheck %s -check-prefix=ALL -check-prefix=C_CC_FMT
      3 ; RUN: llc -mtriple=mips64el-unknown-unknown -mcpu=mips64 -soft-float -O1 \
      4 ; RUN:     -disable-mips-delay-filler < %s | FileCheck %s -check-prefix=ALL -check-prefix=C_CC_FMT
      5 ; RUN: llc -mtriple=mips64el-unknown-unknown -mcpu=mips64r2 -soft-float -O1 \
      6 ; RUN:     -disable-mips-delay-filler < %s | FileCheck %s -check-prefix=ALL -check-prefix=C_CC_FMT
      7 ; RUN: llc -mtriple=mips64el-unknown-unknown -mcpu=mips64r6 -soft-float -O1 \
      8 ; RUN:     -disable-mips-delay-filler < %s | FileCheck %s -check-prefix=ALL -check-prefix=CMP_CC_FMT
      9 
     10 @gld0 = external global fp128
     11 @gld1 = external global fp128
     12 @gld2 = external global fp128
     13 @gf1 = external global float
     14 @gd1 = external global double
     15 
     16 ; ALL-LABEL: addLD:
     17 ; ALL: ld $25, %call16(__addtf3)
     18 
     19 define fp128 @addLD() {
     20 entry:
     21   %0 = load fp128, fp128* @gld0, align 16
     22   %1 = load fp128, fp128* @gld1, align 16
     23   %add = fadd fp128 %0, %1
     24   ret fp128 %add
     25 }
     26 
     27 ; ALL-LABEL: subLD:
     28 ; ALL: ld $25, %call16(__subtf3)
     29 
     30 define fp128 @subLD() {
     31 entry:
     32   %0 = load fp128, fp128* @gld0, align 16
     33   %1 = load fp128, fp128* @gld1, align 16
     34   %sub = fsub fp128 %0, %1
     35   ret fp128 %sub
     36 }
     37 
     38 ; ALL-LABEL: mulLD:
     39 ; ALL: ld $25, %call16(__multf3)
     40 
     41 define fp128 @mulLD() {
     42 entry:
     43   %0 = load fp128, fp128* @gld0, align 16
     44   %1 = load fp128, fp128* @gld1, align 16
     45   %mul = fmul fp128 %0, %1
     46   ret fp128 %mul
     47 }
     48 
     49 ; ALL-LABEL: divLD:
     50 ; ALL: ld $25, %call16(__divtf3)
     51 
     52 define fp128 @divLD() {
     53 entry:
     54   %0 = load fp128, fp128* @gld0, align 16
     55   %1 = load fp128, fp128* @gld1, align 16
     56   %div = fdiv fp128 %0, %1
     57   ret fp128 %div
     58 }
     59 
     60 ; ALL-LABEL: conv_LD_char:
     61 ; ALL: ld $25, %call16(__floatsitf)
     62 
     63 define fp128 @conv_LD_char(i8 signext %a) {
     64 entry:
     65   %conv = sitofp i8 %a to fp128
     66   ret fp128 %conv
     67 }
     68 
     69 ; ALL-LABEL: conv_LD_short:
     70 ; ALL: ld $25, %call16(__floatsitf)
     71 
     72 define fp128 @conv_LD_short(i16 signext %a) {
     73 entry:
     74   %conv = sitofp i16 %a to fp128
     75   ret fp128 %conv
     76 }
     77 
     78 ; ALL-LABEL: conv_LD_int:
     79 ; ALL: ld $25, %call16(__floatsitf)
     80 
     81 define fp128 @conv_LD_int(i32 %a) {
     82 entry:
     83   %conv = sitofp i32 %a to fp128
     84   ret fp128 %conv
     85 }
     86 
     87 ; ALL-LABEL: conv_LD_LL:
     88 ; ALL: ld $25, %call16(__floatditf)
     89 
     90 define fp128 @conv_LD_LL(i64 %a) {
     91 entry:
     92   %conv = sitofp i64 %a to fp128
     93   ret fp128 %conv
     94 }
     95 
     96 ; ALL-LABEL: conv_LD_UChar:
     97 ; ALL: ld $25, %call16(__floatunsitf)
     98 
     99 define fp128 @conv_LD_UChar(i8 zeroext %a) {
    100 entry:
    101   %conv = uitofp i8 %a to fp128
    102   ret fp128 %conv
    103 }
    104 
    105 ; ALL-LABEL: conv_LD_UShort:
    106 ; ALL: ld $25, %call16(__floatunsitf)
    107 
    108 define fp128 @conv_LD_UShort(i16 zeroext %a) {
    109 entry:
    110   %conv = uitofp i16 %a to fp128
    111   ret fp128 %conv
    112 }
    113 
    114 ; ALL-LABEL: conv_LD_UInt:
    115 ; ALL: ld $25, %call16(__floatunsitf)
    116 
    117 define fp128 @conv_LD_UInt(i32 signext %a) {
    118 entry:
    119   %conv = uitofp i32 %a to fp128
    120   ret fp128 %conv
    121 }
    122 
    123 ; ALL-LABEL: conv_LD_ULL:
    124 ; ALL: ld $25, %call16(__floatunditf)
    125 
    126 define fp128 @conv_LD_ULL(i64 %a) {
    127 entry:
    128   %conv = uitofp i64 %a to fp128
    129   ret fp128 %conv
    130 }
    131 
    132 ; ALL-LABEL: conv_char_LD:
    133 ; ALL: ld $25, %call16(__fixtfsi)
    134 
    135 define signext i8 @conv_char_LD(fp128 %a) {
    136 entry:
    137   %conv = fptosi fp128 %a to i8
    138   ret i8 %conv
    139 }
    140 
    141 ; ALL-LABEL: conv_short_LD:
    142 ; ALL: ld $25, %call16(__fixtfsi)
    143 
    144 define signext i16 @conv_short_LD(fp128 %a) {
    145 entry:
    146   %conv = fptosi fp128 %a to i16
    147   ret i16 %conv
    148 }
    149 
    150 ; ALL-LABEL: conv_int_LD:
    151 ; ALL: ld $25, %call16(__fixtfsi)
    152 
    153 define i32 @conv_int_LD(fp128 %a) {
    154 entry:
    155   %conv = fptosi fp128 %a to i32
    156   ret i32 %conv
    157 }
    158 
    159 ; ALL-LABEL: conv_LL_LD:
    160 ; ALL: ld $25, %call16(__fixtfdi)
    161 
    162 define i64 @conv_LL_LD(fp128 %a) {
    163 entry:
    164   %conv = fptosi fp128 %a to i64
    165   ret i64 %conv
    166 }
    167 
    168 ; ALL-LABEL: conv_UChar_LD:
    169 ; ALL: ld $25, %call16(__fixtfsi)
    170 
    171 define zeroext i8 @conv_UChar_LD(fp128 %a) {
    172 entry:
    173   %conv = fptoui fp128 %a to i8
    174   ret i8 %conv
    175 }
    176 
    177 ; ALL-LABEL: conv_UShort_LD:
    178 ; ALL: ld $25, %call16(__fixtfsi)
    179 
    180 define zeroext i16 @conv_UShort_LD(fp128 %a) {
    181 entry:
    182   %conv = fptoui fp128 %a to i16
    183   ret i16 %conv
    184 }
    185 
    186 ; ALL-LABEL: conv_UInt_LD:
    187 ; ALL: ld $25, %call16(__fixunstfsi)
    188 
    189 define i32 @conv_UInt_LD(fp128 %a) {
    190 entry:
    191   %conv = fptoui fp128 %a to i32
    192   ret i32 %conv
    193 }
    194 
    195 ; ALL-LABEL: conv_ULL_LD:
    196 ; ALL: ld $25, %call16(__fixunstfdi)
    197 
    198 define i64 @conv_ULL_LD(fp128 %a) {
    199 entry:
    200   %conv = fptoui fp128 %a to i64
    201   ret i64 %conv
    202 }
    203 
    204 ; ALL-LABEL: conv_LD_float:
    205 ; ALL: ld $25, %call16(__extendsftf2)
    206 
    207 define fp128 @conv_LD_float(float %a) {
    208 entry:
    209   %conv = fpext float %a to fp128
    210   ret fp128 %conv
    211 }
    212 
    213 ; ALL-LABEL: conv_LD_double:
    214 ; ALL: ld $25, %call16(__extenddftf2)
    215 
    216 define fp128 @conv_LD_double(double %a) {
    217 entry:
    218   %conv = fpext double %a to fp128
    219   ret fp128 %conv
    220 }
    221 
    222 ; ALL-LABEL: conv_float_LD:
    223 ; ALL: ld $25, %call16(__trunctfsf2)
    224 
    225 define float @conv_float_LD(fp128 %a) {
    226 entry:
    227   %conv = fptrunc fp128 %a to float
    228   ret float %conv
    229 }
    230 
    231 ; ALL-LABEL: conv_double_LD:
    232 ; ALL: ld $25, %call16(__trunctfdf2)
    233 
    234 define double @conv_double_LD(fp128 %a) {
    235 entry:
    236   %conv = fptrunc fp128 %a to double
    237   ret double %conv
    238 }
    239 
    240 ; ALL-LABEL:             libcall1_fabsl:
    241 ; ALL-DAG: ld      $[[R0:[0-9]+]], 8($[[R4:[0-9]+]])
    242 ; ALL-DAG: daddiu  $[[R1:[0-9]+]], $zero, 1
    243 ; ALL-DAG: dsll    $[[R2:[0-9]+]], $[[R1]], 63
    244 ; ALL-DAG: daddiu  $[[R3:[0-9]+]], $[[R2]], -1
    245 ; ALL-DAG: and     $4, $[[R0]], $[[R3]]
    246 ; ALL-DAG: ld      $2, 0($[[R4]])
    247 
    248 define fp128 @libcall1_fabsl() {
    249 entry:
    250   %0 = load fp128, fp128* @gld0, align 16
    251   %call = tail call fp128 @fabsl(fp128 %0) nounwind readnone
    252   ret fp128 %call
    253 }
    254 
    255 declare fp128 @fabsl(fp128) #1
    256 
    257 ; ALL-LABEL: libcall1_ceill:
    258 ; ALL: ld $25, %call16(ceill)
    259 
    260 define fp128 @libcall1_ceill() {
    261 entry:
    262   %0 = load fp128, fp128* @gld0, align 16
    263   %call = tail call fp128 @ceill(fp128 %0) nounwind readnone
    264   ret fp128 %call
    265 }
    266 
    267 declare fp128 @ceill(fp128) #1
    268 
    269 ; ALL-LABEL: libcall1_sinl:
    270 ; ALL: ld $25, %call16(sinl)
    271 
    272 define fp128 @libcall1_sinl() {
    273 entry:
    274   %0 = load fp128, fp128* @gld0, align 16
    275   %call = tail call fp128 @sinl(fp128 %0) nounwind
    276   ret fp128 %call
    277 }
    278 
    279 declare fp128 @sinl(fp128) #2
    280 
    281 ; ALL-LABEL: libcall1_cosl:
    282 ; ALL: ld $25, %call16(cosl)
    283 
    284 define fp128 @libcall1_cosl() {
    285 entry:
    286   %0 = load fp128, fp128* @gld0, align 16
    287   %call = tail call fp128 @cosl(fp128 %0) nounwind
    288   ret fp128 %call
    289 }
    290 
    291 declare fp128 @cosl(fp128) #2
    292 
    293 ; ALL-LABEL: libcall1_expl:
    294 ; ALL: ld $25, %call16(expl)
    295 
    296 define fp128 @libcall1_expl() {
    297 entry:
    298   %0 = load fp128, fp128* @gld0, align 16
    299   %call = tail call fp128 @expl(fp128 %0) nounwind
    300   ret fp128 %call
    301 }
    302 
    303 declare fp128 @expl(fp128) #2
    304 
    305 ; ALL-LABEL: libcall1_exp2l:
    306 ; ALL: ld $25, %call16(exp2l)
    307 
    308 define fp128 @libcall1_exp2l() {
    309 entry:
    310   %0 = load fp128, fp128* @gld0, align 16
    311   %call = tail call fp128 @exp2l(fp128 %0) nounwind
    312   ret fp128 %call
    313 }
    314 
    315 declare fp128 @exp2l(fp128) #2
    316 
    317 ; ALL-LABEL: libcall1_logl:
    318 ; ALL: ld $25, %call16(logl)
    319 
    320 define fp128 @libcall1_logl() {
    321 entry:
    322   %0 = load fp128, fp128* @gld0, align 16
    323   %call = tail call fp128 @logl(fp128 %0) nounwind
    324   ret fp128 %call
    325 }
    326 
    327 declare fp128 @logl(fp128) #2
    328 
    329 ; ALL-LABEL: libcall1_log2l:
    330 ; ALL: ld $25, %call16(log2l)
    331 
    332 define fp128 @libcall1_log2l() {
    333 entry:
    334   %0 = load fp128, fp128* @gld0, align 16
    335   %call = tail call fp128 @log2l(fp128 %0) nounwind
    336   ret fp128 %call
    337 }
    338 
    339 declare fp128 @log2l(fp128) #2
    340 
    341 ; ALL-LABEL: libcall1_log10l:
    342 ; ALL: ld $25, %call16(log10l)
    343 
    344 define fp128 @libcall1_log10l() {
    345 entry:
    346   %0 = load fp128, fp128* @gld0, align 16
    347   %call = tail call fp128 @log10l(fp128 %0) nounwind
    348   ret fp128 %call
    349 }
    350 
    351 declare fp128 @log10l(fp128) #2
    352 
    353 ; ALL-LABEL: libcall1_nearbyintl:
    354 ; ALL: ld $25, %call16(nearbyintl)
    355 
    356 define fp128 @libcall1_nearbyintl() {
    357 entry:
    358   %0 = load fp128, fp128* @gld0, align 16
    359   %call = tail call fp128 @nearbyintl(fp128 %0) nounwind readnone
    360   ret fp128 %call
    361 }
    362 
    363 declare fp128 @nearbyintl(fp128) #1
    364 
    365 ; ALL-LABEL: libcall1_floorl:
    366 ; ALL: ld $25, %call16(floorl)
    367 
    368 define fp128 @libcall1_floorl() {
    369 entry:
    370   %0 = load fp128, fp128* @gld0, align 16
    371   %call = tail call fp128 @floorl(fp128 %0) nounwind readnone
    372   ret fp128 %call
    373 }
    374 
    375 declare fp128 @floorl(fp128) #1
    376 
    377 ; ALL-LABEL: libcall1_sqrtl:
    378 ; ALL: ld $25, %call16(sqrtl)
    379 
    380 define fp128 @libcall1_sqrtl() {
    381 entry:
    382   %0 = load fp128, fp128* @gld0, align 16
    383   %call = tail call fp128 @sqrtl(fp128 %0) nounwind
    384   ret fp128 %call
    385 }
    386 
    387 declare fp128 @sqrtl(fp128) #2
    388 
    389 ; ALL-LABEL: libcall1_rintl:
    390 ; ALL: ld $25, %call16(rintl)
    391 
    392 define fp128 @libcall1_rintl() {
    393 entry:
    394   %0 = load fp128, fp128* @gld0, align 16
    395   %call = tail call fp128 @rintl(fp128 %0) nounwind readnone
    396   ret fp128 %call
    397 }
    398 
    399 declare fp128 @rintl(fp128) #1
    400 
    401 ; ALL-LABEL: libcall_powil:
    402 ; ALL: ld $25, %call16(__powitf2)
    403 
    404 define fp128 @libcall_powil(fp128 %a, i32 %b) {
    405 entry:
    406   %0 = tail call fp128 @llvm.powi.f128(fp128 %a, i32 %b)
    407   ret fp128 %0
    408 }
    409 
    410 declare fp128 @llvm.powi.f128(fp128, i32) #3
    411 
    412 ; ALL-LABEL:     libcall2_copysignl:
    413 ; ALL-DAG: daddiu $[[R2:[0-9]+]], $zero, 1
    414 ; ALL-DAG: dsll   $[[R3:[0-9]+]], $[[R2]], 63
    415 ; ALL-DAG: ld     $[[R0:[0-9]+]], %got_disp(gld1)
    416 ; ALL-DAG: ld     $[[R1:[0-9]+]], 8($[[R0]])
    417 ; ALL-DAG: and    $[[R4:[0-9]+]], $[[R1]], $[[R3]]
    418 ; ALL-DAG: ld     $[[R5:[0-9]+]], %got_disp(gld0)
    419 ; ALL-DAG: ld     $[[R6:[0-9]+]], 8($[[R5]])
    420 ; ALL-DAG: daddiu $[[R7:[0-9]+]], $[[R3]], -1
    421 ; ALL-DAG: and    $[[R8:[0-9]+]], $[[R6]], $[[R7]]
    422 ; ALL-DAG: or     $4, $[[R8]], $[[R4]]
    423 ; ALL-DAG: ld     $2, 0($[[R5]])
    424 
    425 define fp128 @libcall2_copysignl() {
    426 entry:
    427   %0 = load fp128, fp128* @gld0, align 16
    428   %1 = load fp128, fp128* @gld1, align 16
    429   %call = tail call fp128 @copysignl(fp128 %0, fp128 %1) nounwind readnone
    430   ret fp128 %call
    431 }
    432 
    433 declare fp128 @copysignl(fp128, fp128) #1
    434 
    435 ; ALL-LABEL: libcall2_powl:
    436 ; ALL: ld $25, %call16(powl)
    437 
    438 define fp128 @libcall2_powl() {
    439 entry:
    440   %0 = load fp128, fp128* @gld0, align 16
    441   %1 = load fp128, fp128* @gld1, align 16
    442   %call = tail call fp128 @powl(fp128 %0, fp128 %1) nounwind
    443   ret fp128 %call
    444 }
    445 
    446 declare fp128 @powl(fp128, fp128) #2
    447 
    448 ; ALL-LABEL: libcall2_fmodl:
    449 ; ALL: ld $25, %call16(fmodl)
    450 
    451 define fp128 @libcall2_fmodl() {
    452 entry:
    453   %0 = load fp128, fp128* @gld0, align 16
    454   %1 = load fp128, fp128* @gld1, align 16
    455   %call = tail call fp128 @fmodl(fp128 %0, fp128 %1) nounwind
    456   ret fp128 %call
    457 }
    458 
    459 declare fp128 @fmodl(fp128, fp128) #2
    460 
    461 ; ALL-LABEL: libcall3_fmal:
    462 ; ALL: ld $25, %call16(fmal)
    463 
    464 define fp128 @libcall3_fmal() {
    465 entry:
    466   %0 = load fp128, fp128* @gld0, align 16
    467   %1 = load fp128, fp128* @gld2, align 16
    468   %2 = load fp128, fp128* @gld1, align 16
    469   %3 = tail call fp128 @llvm.fma.f128(fp128 %0, fp128 %2, fp128 %1)
    470   ret fp128 %3
    471 }
    472 
    473 declare fp128 @llvm.fma.f128(fp128, fp128, fp128) #4
    474 
    475 ; ALL-LABEL: cmp_lt:
    476 ; ALL: ld $25, %call16(__lttf2)
    477 
    478 define i32 @cmp_lt(fp128 %a, fp128 %b) {
    479 entry:
    480   %cmp = fcmp olt fp128 %a, %b
    481   %conv = zext i1 %cmp to i32
    482   ret i32 %conv
    483 }
    484 
    485 ; ALL-LABEL: cmp_le:
    486 ; ALL: ld $25, %call16(__letf2)
    487 
    488 define i32 @cmp_le(fp128 %a, fp128 %b) {
    489 entry:
    490   %cmp = fcmp ole fp128 %a, %b
    491   %conv = zext i1 %cmp to i32
    492   ret i32 %conv
    493 }
    494 
    495 ; ALL-LABEL: cmp_gt:
    496 ; ALL: ld $25, %call16(__gttf2)
    497 
    498 define i32 @cmp_gt(fp128 %a, fp128 %b) {
    499 entry:
    500   %cmp = fcmp ogt fp128 %a, %b
    501   %conv = zext i1 %cmp to i32
    502   ret i32 %conv
    503 }
    504 
    505 ; ALL-LABEL: cmp_ge:
    506 ; ALL: ld $25, %call16(__getf2)
    507 
    508 define i32 @cmp_ge(fp128 %a, fp128 %b) {
    509 entry:
    510   %cmp = fcmp oge fp128 %a, %b
    511   %conv = zext i1 %cmp to i32
    512   ret i32 %conv
    513 }
    514 
    515 ; ALL-LABEL: cmp_eq:
    516 ; ALL: ld $25, %call16(__eqtf2)
    517 
    518 define i32 @cmp_eq(fp128 %a, fp128 %b) {
    519 entry:
    520   %cmp = fcmp oeq fp128 %a, %b
    521   %conv = zext i1 %cmp to i32
    522   ret i32 %conv
    523 }
    524 
    525 ; ALL-LABEL: cmp_ne:
    526 ; ALL: ld $25, %call16(__netf2)
    527 
    528 define i32 @cmp_ne(fp128 %a, fp128 %b) {
    529 entry:
    530   %cmp = fcmp une fp128 %a, %b
    531   %conv = zext i1 %cmp to i32
    532   ret i32 %conv
    533 }
    534 
    535 ; ALL-LABEL: load_LD_LD:
    536 ; ALL: ld $[[R0:[0-9]+]], %got_disp(gld1)
    537 ; ALL: ld $2, 0($[[R0]])
    538 ; ALL: ld $4, 8($[[R0]])
    539 
    540 define fp128 @load_LD_LD() {
    541 entry:
    542   %0 = load fp128, fp128* @gld1, align 16
    543   ret fp128 %0
    544 }
    545 
    546 ; ALL-LABEL: load_LD_float:
    547 ; ALL: ld   $[[R0:[0-9]+]], %got_disp(gf1)
    548 ; ALL: lw   $4, 0($[[R0]])
    549 ; ALL: ld   $25, %call16(__extendsftf2)
    550 ; ALL: jalr $25
    551 
    552 define fp128 @load_LD_float() {
    553 entry:
    554   %0 = load float, float* @gf1, align 4
    555   %conv = fpext float %0 to fp128
    556   ret fp128 %conv
    557 }
    558 
    559 ; ALL-LABEL: load_LD_double:
    560 ; ALL: ld   $[[R0:[0-9]+]], %got_disp(gd1)
    561 ; ALL: ld   $4, 0($[[R0]])
    562 ; ALL: ld   $25, %call16(__extenddftf2)
    563 ; ALL: jalr $25
    564 
    565 define fp128 @load_LD_double() {
    566 entry:
    567   %0 = load double, double* @gd1, align 8
    568   %conv = fpext double %0 to fp128
    569   ret fp128 %conv
    570 }
    571 
    572 ; ALL-LABEL: store_LD_LD:
    573 ; ALL: ld $[[R0:[0-9]+]], %got_disp(gld1)
    574 ; ALL: ld $[[R1:[0-9]+]], 0($[[R0]])
    575 ; ALL: ld $[[R2:[0-9]+]], 8($[[R0]])
    576 ; ALL: ld $[[R3:[0-9]+]], %got_disp(gld0)
    577 ; ALL: sd $[[R2]], 8($[[R3]])
    578 ; ALL: sd $[[R1]], 0($[[R3]])
    579 
    580 define void @store_LD_LD() {
    581 entry:
    582   %0 = load fp128, fp128* @gld1, align 16
    583   store fp128 %0, fp128* @gld0, align 16
    584   ret void
    585 }
    586 
    587 ; ALL-LABEL: store_LD_float:
    588 ; ALL: ld   $[[R0:[0-9]+]], %got_disp(gld1)
    589 ; ALL: ld   $4, 0($[[R0]])
    590 ; ALL: ld   $5, 8($[[R0]])
    591 ; ALL: ld   $25, %call16(__trunctfsf2)
    592 ; ALL: jalr $25
    593 ; ALL: ld   $[[R1:[0-9]+]], %got_disp(gf1)
    594 ; ALL: sw   $2, 0($[[R1]])
    595 
    596 define void @store_LD_float() {
    597 entry:
    598   %0 = load fp128, fp128* @gld1, align 16
    599   %conv = fptrunc fp128 %0 to float
    600   store float %conv, float* @gf1, align 4
    601   ret void
    602 }
    603 
    604 ; ALL-LABEL: store_LD_double:
    605 ; ALL: ld   $[[R0:[0-9]+]], %got_disp(gld1)
    606 ; ALL: ld   $4, 0($[[R0]])
    607 ; ALL: ld   $5, 8($[[R0]])
    608 ; ALL: ld   $25, %call16(__trunctfdf2)
    609 ; ALL: jalr $25
    610 ; ALL: ld   $[[R1:[0-9]+]], %got_disp(gd1)
    611 ; ALL: sd   $2, 0($[[R1]])
    612 
    613 define void @store_LD_double() {
    614 entry:
    615   %0 = load fp128, fp128* @gld1, align 16
    616   %conv = fptrunc fp128 %0 to double
    617   store double %conv, double* @gd1, align 8
    618   ret void
    619 }
    620 
    621 ; ALL-LABEL: select_LD:
    622 ; C_CC_FMT:      movn $8, $6, $4
    623 ; C_CC_FMT:      movn $9, $7, $4
    624 ; C_CC_FMT:      move $2, $8
    625 ; C_CC_FMT:      move $4, $9
    626 
    627 ; FIXME: This sll works around an implementation detail in the code generator
    628 ;        (setcc's result is i32 so bits 32-63 are undefined). It's not really
    629 ;        needed.
    630 ; CMP_CC_FMT-DAG: sll $[[CC:[0-9]+]], $4, 0
    631 ; CMP_CC_FMT-DAG: seleqz $[[EQ1:[0-9]+]], $8, $[[CC]]
    632 ; CMP_CC_FMT-DAG: selnez $[[NE1:[0-9]+]], $6, $[[CC]]
    633 ; CMP_CC_FMT-DAG: or $2, $[[NE1]], $[[EQ1]]
    634 ; CMP_CC_FMT-DAG: seleqz $[[EQ2:[0-9]+]], $9, $[[CC]]
    635 ; CMP_CC_FMT-DAG: selnez $[[NE2:[0-9]+]], $7, $[[CC]]
    636 ; CMP_CC_FMT-DAG: or $4, $[[NE2]], $[[EQ2]]
    637 
    638 define fp128 @select_LD(i32 signext %a, i64, fp128 %b, fp128 %c) {
    639 entry:
    640   %tobool = icmp ne i32 %a, 0
    641   %cond = select i1 %tobool, fp128 %b, fp128 %c
    642   ret fp128 %cond
    643 }
    644 
    645 ; ALL-LABEL: selectCC_LD:
    646 ; ALL:           move $[[R0:[0-9]+]], $11
    647 ; ALL:           move $[[R1:[0-9]+]], $10
    648 ; ALL:           move $[[R2:[0-9]+]], $9
    649 ; ALL:           move $[[R3:[0-9]+]], $8
    650 ; ALL:           ld   $25, %call16(__gttf2)($gp)
    651 ; ALL:           jalr $25
    652 
    653 ; C_CC_FMT:      slti $[[CC:[0-9]+]], $2, 1
    654 ; C_CC_FMT:      movz $[[R1]], $[[R3]], $[[CC]]
    655 ; C_CC_FMT:      movz $[[R0]], $[[R2]], $[[CC]]
    656 ; C_CC_FMT:      move $2, $[[R1]]
    657 ; C_CC_FMT:      move $4, $[[R0]]
    658 
    659 ; CMP_CC_FMT:    slt $[[CC:[0-9]+]], $zero, $2
    660 ; CMP_CC_FMT:    seleqz $[[EQ1:[0-9]+]], $[[R1]], $[[CC]]
    661 ; CMP_CC_FMT:    selnez $[[NE1:[0-9]+]], $[[R3]], $[[CC]]
    662 ; CMP_CC_FMT:    or $2, $[[NE1]], $[[EQ1]]
    663 ; CMP_CC_FMT:    seleqz $[[EQ2:[0-9]+]], $[[R0]], $[[CC]]
    664 ; CMP_CC_FMT:    selnez $[[NE2:[0-9]+]], $[[R2]], $[[CC]]
    665 ; CMP_CC_FMT:    or $4, $[[NE2]], $[[EQ2]]
    666 
    667 define fp128 @selectCC_LD(fp128 %a, fp128 %b, fp128 %c, fp128 %d) {
    668 entry:
    669   %cmp = fcmp ogt fp128 %a, %b
    670   %cond = select i1 %cmp, fp128 %c, fp128 %d
    671   ret fp128 %cond
    672 }
    673