|  | ; RUN: llc -mtriple=mips64el-unknown-unknown -mcpu=mips4 -mattr=+soft-float -O1 \ | 
|  | ; RUN:     -disable-mips-delay-filler -relocation-model=pic < %s | FileCheck \ | 
|  | ; RUN:     %s -check-prefixes=ALL,C_CC_FMT,PRER6,NOT-R2R6 | 
|  | ; RUN: llc -mtriple=mips64el-unknown-unknown -mcpu=mips64 -mattr=+soft-float -O1 \ | 
|  | ; RUN:     -disable-mips-delay-filler -relocation-model=pic < %s | FileCheck \ | 
|  | ; RUN:     %s -check-prefixes=ALL,C_CC_FMT,PRER6,NOT-R2R6 | 
|  | ; RUN: llc -mtriple=mips64el-unknown-unknown -mcpu=mips64r2 -mattr=+soft-float \ | 
|  | ; RUN:     -O1 -disable-mips-delay-filler -relocation-model=pic < %s | FileCheck \ | 
|  | ; RUN:     %s -check-prefixes=ALL,C_CC_FMT,PRER6,R2R6 | 
|  | ; RUN: llc -mtriple=mips64el-unknown-unknown -mcpu=mips64r6 -mattr=+soft-float \ | 
|  | ; RUN:     -O1 -disable-mips-delay-filler -relocation-model=pic < %s | FileCheck \ | 
|  | ; RUN:     %s -check-prefixes=ALL,CMP_CC_FMT,R6,R2R6 | 
|  |  | 
|  | @gld0 = external global fp128 | 
|  | @gld1 = external global fp128 | 
|  | @gld2 = external global fp128 | 
|  | @gf1 = external global float | 
|  | @gd1 = external global double | 
|  |  | 
|  | ; ALL-LABEL: addLD: | 
|  | ; ALL: ld $25, %call16(__addtf3) | 
|  |  | 
|  | define fp128 @addLD() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %1 = load fp128, fp128* @gld1, align 16 | 
|  | %add = fadd fp128 %0, %1 | 
|  | ret fp128 %add | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: subLD: | 
|  | ; ALL: ld $25, %call16(__subtf3) | 
|  |  | 
|  | define fp128 @subLD() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %1 = load fp128, fp128* @gld1, align 16 | 
|  | %sub = fsub fp128 %0, %1 | 
|  | ret fp128 %sub | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: mulLD: | 
|  | ; ALL: ld $25, %call16(__multf3) | 
|  |  | 
|  | define fp128 @mulLD() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %1 = load fp128, fp128* @gld1, align 16 | 
|  | %mul = fmul fp128 %0, %1 | 
|  | ret fp128 %mul | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: divLD: | 
|  | ; ALL: ld $25, %call16(__divtf3) | 
|  |  | 
|  | define fp128 @divLD() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %1 = load fp128, fp128* @gld1, align 16 | 
|  | %div = fdiv fp128 %0, %1 | 
|  | ret fp128 %div | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: conv_LD_char: | 
|  | ; ALL: ld $25, %call16(__floatsitf) | 
|  |  | 
|  | define fp128 @conv_LD_char(i8 signext %a) { | 
|  | entry: | 
|  | %conv = sitofp i8 %a to fp128 | 
|  | ret fp128 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: conv_LD_short: | 
|  | ; ALL: ld $25, %call16(__floatsitf) | 
|  |  | 
|  | define fp128 @conv_LD_short(i16 signext %a) { | 
|  | entry: | 
|  | %conv = sitofp i16 %a to fp128 | 
|  | ret fp128 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: conv_LD_int: | 
|  | ; ALL: ld $25, %call16(__floatsitf) | 
|  |  | 
|  | define fp128 @conv_LD_int(i32 %a) { | 
|  | entry: | 
|  | %conv = sitofp i32 %a to fp128 | 
|  | ret fp128 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: conv_LD_LL: | 
|  | ; ALL: ld $25, %call16(__floatditf) | 
|  |  | 
|  | define fp128 @conv_LD_LL(i64 %a) { | 
|  | entry: | 
|  | %conv = sitofp i64 %a to fp128 | 
|  | ret fp128 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: conv_LD_UChar: | 
|  | ; ALL: ld $25, %call16(__floatunsitf) | 
|  |  | 
|  | define fp128 @conv_LD_UChar(i8 zeroext %a) { | 
|  | entry: | 
|  | %conv = uitofp i8 %a to fp128 | 
|  | ret fp128 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: conv_LD_UShort: | 
|  | ; ALL: ld $25, %call16(__floatunsitf) | 
|  |  | 
|  | define fp128 @conv_LD_UShort(i16 zeroext %a) { | 
|  | entry: | 
|  | %conv = uitofp i16 %a to fp128 | 
|  | ret fp128 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: conv_LD_UInt: | 
|  | ; ALL: ld $25, %call16(__floatunsitf) | 
|  |  | 
|  | define fp128 @conv_LD_UInt(i32 signext %a) { | 
|  | entry: | 
|  | %conv = uitofp i32 %a to fp128 | 
|  | ret fp128 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: conv_LD_ULL: | 
|  | ; ALL: ld $25, %call16(__floatunditf) | 
|  |  | 
|  | define fp128 @conv_LD_ULL(i64 %a) { | 
|  | entry: | 
|  | %conv = uitofp i64 %a to fp128 | 
|  | ret fp128 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: conv_char_LD: | 
|  | ; ALL: ld $25, %call16(__fixtfsi) | 
|  |  | 
|  | define signext i8 @conv_char_LD(fp128 %a) { | 
|  | entry: | 
|  | %conv = fptosi fp128 %a to i8 | 
|  | ret i8 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: conv_short_LD: | 
|  | ; ALL: ld $25, %call16(__fixtfsi) | 
|  |  | 
|  | define signext i16 @conv_short_LD(fp128 %a) { | 
|  | entry: | 
|  | %conv = fptosi fp128 %a to i16 | 
|  | ret i16 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: conv_int_LD: | 
|  | ; ALL: ld $25, %call16(__fixtfsi) | 
|  |  | 
|  | define i32 @conv_int_LD(fp128 %a) { | 
|  | entry: | 
|  | %conv = fptosi fp128 %a to i32 | 
|  | ret i32 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: conv_LL_LD: | 
|  | ; ALL: ld $25, %call16(__fixtfdi) | 
|  |  | 
|  | define i64 @conv_LL_LD(fp128 %a) { | 
|  | entry: | 
|  | %conv = fptosi fp128 %a to i64 | 
|  | ret i64 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: conv_UChar_LD: | 
|  | ; ALL: ld $25, %call16(__fixtfsi) | 
|  |  | 
|  | define zeroext i8 @conv_UChar_LD(fp128 %a) { | 
|  | entry: | 
|  | %conv = fptoui fp128 %a to i8 | 
|  | ret i8 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: conv_UShort_LD: | 
|  | ; ALL: ld $25, %call16(__fixtfsi) | 
|  |  | 
|  | define zeroext i16 @conv_UShort_LD(fp128 %a) { | 
|  | entry: | 
|  | %conv = fptoui fp128 %a to i16 | 
|  | ret i16 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: conv_UInt_LD: | 
|  | ; ALL: ld $25, %call16(__fixunstfsi) | 
|  |  | 
|  | define i32 @conv_UInt_LD(fp128 %a) { | 
|  | entry: | 
|  | %conv = fptoui fp128 %a to i32 | 
|  | ret i32 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: conv_ULL_LD: | 
|  | ; ALL: ld $25, %call16(__fixunstfdi) | 
|  |  | 
|  | define i64 @conv_ULL_LD(fp128 %a) { | 
|  | entry: | 
|  | %conv = fptoui fp128 %a to i64 | 
|  | ret i64 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: conv_LD_float: | 
|  | ; ALL: ld $25, %call16(__extendsftf2) | 
|  |  | 
|  | define fp128 @conv_LD_float(float %a) { | 
|  | entry: | 
|  | %conv = fpext float %a to fp128 | 
|  | ret fp128 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: conv_LD_double: | 
|  | ; ALL: ld $25, %call16(__extenddftf2) | 
|  |  | 
|  | define fp128 @conv_LD_double(double %a) { | 
|  | entry: | 
|  | %conv = fpext double %a to fp128 | 
|  | ret fp128 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: conv_float_LD: | 
|  | ; ALL: ld $25, %call16(__trunctfsf2) | 
|  |  | 
|  | define float @conv_float_LD(fp128 %a) { | 
|  | entry: | 
|  | %conv = fptrunc fp128 %a to float | 
|  | ret float %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: conv_double_LD: | 
|  | ; ALL: ld $25, %call16(__trunctfdf2) | 
|  |  | 
|  | define double @conv_double_LD(fp128 %a) { | 
|  | entry: | 
|  | %conv = fptrunc fp128 %a to double | 
|  | ret double %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL:             libcall1_fabsl: | 
|  | ; NOT-R2R6-DAG: ld      $[[R0:[0-9]+]], 8($[[R4:[0-9]+]]) | 
|  | ; NOT-R2R6-DAG: daddiu  $[[R1:[0-9]+]], $zero, 1 | 
|  | ; NOT-R2R6-DAG: dsll    $[[R2:[0-9]+]], $[[R1]], 63 | 
|  | ; NOT-R2R6-DAG: daddiu  $[[R3:[0-9]+]], $[[R2]], -1 | 
|  | ; NOT-R2R6-DAG: and     $4, $[[R0]], $[[R3]] | 
|  | ; NOT-R2R6-DAG: ld      $2, 0($[[R4]]) | 
|  |  | 
|  | ; R2R6-DAG: ld     $[[R0:[0-9]+]], 0($[[R3:[0-9]+]]) | 
|  | ; R2R6-DAG: ld     $[[R1:[0-9]+]], 8($[[R3]]) | 
|  | ; R2R6-DAG: dextm  $[[R2:[0-9]+]], $[[R1]], 0, 63 | 
|  |  | 
|  | define fp128 @libcall1_fabsl() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %call = tail call fp128 @fabsl(fp128 %0) nounwind readnone | 
|  | ret fp128 %call | 
|  | } | 
|  |  | 
|  | declare fp128 @fabsl(fp128) #1 | 
|  |  | 
|  | ; ALL-LABEL: libcall1_ceill: | 
|  | ; ALL: ld $25, %call16(ceill) | 
|  |  | 
|  | define fp128 @libcall1_ceill() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %call = tail call fp128 @ceill(fp128 %0) nounwind readnone | 
|  | ret fp128 %call | 
|  | } | 
|  |  | 
|  | declare fp128 @ceill(fp128) #1 | 
|  |  | 
|  | ; ALL-LABEL: libcall1_sinl: | 
|  | ; ALL: ld $25, %call16(sinl) | 
|  |  | 
|  | define fp128 @libcall1_sinl() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %call = tail call fp128 @sinl(fp128 %0) nounwind | 
|  | ret fp128 %call | 
|  | } | 
|  |  | 
|  | declare fp128 @sinl(fp128) #2 | 
|  |  | 
|  | ; ALL-LABEL: libcall1_cosl: | 
|  | ; ALL: ld $25, %call16(cosl) | 
|  |  | 
|  | define fp128 @libcall1_cosl() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %call = tail call fp128 @cosl(fp128 %0) nounwind | 
|  | ret fp128 %call | 
|  | } | 
|  |  | 
|  | declare fp128 @cosl(fp128) #2 | 
|  |  | 
|  | ; ALL-LABEL: libcall1_expl: | 
|  | ; ALL: ld $25, %call16(expl) | 
|  |  | 
|  | define fp128 @libcall1_expl() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %call = tail call fp128 @expl(fp128 %0) nounwind | 
|  | ret fp128 %call | 
|  | } | 
|  |  | 
|  | declare fp128 @expl(fp128) #2 | 
|  |  | 
|  | ; ALL-LABEL: libcall1_exp2l: | 
|  | ; ALL: ld $25, %call16(exp2l) | 
|  |  | 
|  | define fp128 @libcall1_exp2l() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %call = tail call fp128 @exp2l(fp128 %0) nounwind | 
|  | ret fp128 %call | 
|  | } | 
|  |  | 
|  | declare fp128 @exp2l(fp128) #2 | 
|  |  | 
|  | ; ALL-LABEL: libcall1_logl: | 
|  | ; ALL: ld $25, %call16(logl) | 
|  |  | 
|  | define fp128 @libcall1_logl() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %call = tail call fp128 @logl(fp128 %0) nounwind | 
|  | ret fp128 %call | 
|  | } | 
|  |  | 
|  | declare fp128 @logl(fp128) #2 | 
|  |  | 
|  | ; ALL-LABEL: libcall1_log2l: | 
|  | ; ALL: ld $25, %call16(log2l) | 
|  |  | 
|  | define fp128 @libcall1_log2l() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %call = tail call fp128 @log2l(fp128 %0) nounwind | 
|  | ret fp128 %call | 
|  | } | 
|  |  | 
|  | declare fp128 @log2l(fp128) #2 | 
|  |  | 
|  | ; ALL-LABEL: libcall1_log10l: | 
|  | ; ALL: ld $25, %call16(log10l) | 
|  |  | 
|  | define fp128 @libcall1_log10l() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %call = tail call fp128 @log10l(fp128 %0) nounwind | 
|  | ret fp128 %call | 
|  | } | 
|  |  | 
|  | declare fp128 @log10l(fp128) #2 | 
|  |  | 
|  | ; ALL-LABEL: libcall1_nearbyintl: | 
|  | ; ALL: ld $25, %call16(nearbyintl) | 
|  |  | 
|  | define fp128 @libcall1_nearbyintl() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %call = tail call fp128 @nearbyintl(fp128 %0) nounwind readnone | 
|  | ret fp128 %call | 
|  | } | 
|  |  | 
|  | declare fp128 @nearbyintl(fp128) #1 | 
|  |  | 
|  | ; ALL-LABEL: libcall1_floorl: | 
|  | ; ALL: ld $25, %call16(floorl) | 
|  |  | 
|  | define fp128 @libcall1_floorl() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %call = tail call fp128 @floorl(fp128 %0) nounwind readnone | 
|  | ret fp128 %call | 
|  | } | 
|  |  | 
|  | declare fp128 @floorl(fp128) #1 | 
|  |  | 
|  | ; ALL-LABEL: libcall1_sqrtl: | 
|  | ; ALL: ld $25, %call16(sqrtl) | 
|  |  | 
|  | define fp128 @libcall1_sqrtl() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %call = tail call fp128 @sqrtl(fp128 %0) nounwind | 
|  | ret fp128 %call | 
|  | } | 
|  |  | 
|  | declare fp128 @sqrtl(fp128) #2 | 
|  |  | 
|  | ; ALL-LABEL: libcall1_rintl: | 
|  | ; ALL: ld $25, %call16(rintl) | 
|  |  | 
|  | define fp128 @libcall1_rintl() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %call = tail call fp128 @rintl(fp128 %0) nounwind readnone | 
|  | ret fp128 %call | 
|  | } | 
|  |  | 
|  | declare fp128 @rintl(fp128) #1 | 
|  |  | 
|  | ; ALL-LABEL: libcall_powil: | 
|  | ; ALL: ld $25, %call16(__powitf2) | 
|  |  | 
|  | define fp128 @libcall_powil(fp128 %a, i32 %b) { | 
|  | entry: | 
|  | %0 = tail call fp128 @llvm.powi.f128(fp128 %a, i32 %b) | 
|  | ret fp128 %0 | 
|  | } | 
|  |  | 
|  | declare fp128 @llvm.powi.f128(fp128, i32) #3 | 
|  |  | 
|  | ; ALL-LABEL:     libcall2_copysignl: | 
|  | ; NOT-R2R6-DAG: daddiu $[[R2:[0-9]+]], $zero, 1 | 
|  | ; NOT-R2R6-DAG: dsll   $[[R3:[0-9]+]], $[[R2]], 63 | 
|  | ; ALL-DAG:      ld     $[[R0:[0-9]+]], %got_disp(gld1) | 
|  | ; ALL-DAG:      ld     $[[R1:[0-9]+]], 8($[[R0]]) | 
|  | ; NOT-R2R6-DAG: and    $[[R4:[0-9]+]], $[[R1]], $[[R3]] | 
|  | ; ALL-DAG:      ld     $[[R5:[0-9]+]], %got_disp(gld0) | 
|  | ; ALL-DAG:      ld     $[[R6:[0-9]+]], 8($[[R5]]) | 
|  | ; R2R6:         dinsu  $[[R0:[0-9]+]], $[[R1:[0-9]+]], 63, 1 | 
|  | ; NOT-R2R6-DAG: daddiu $[[R7:[0-9]+]], $[[R3]], -1 | 
|  | ; NOT-R2R6-DAG: and    $[[R8:[0-9]+]], $[[R6]], $[[R7]] | 
|  | ; NOT-R2R6-DAG: or     $4, $[[R8]], $[[R4]] | 
|  | ; ALL-DAG:      ld     $2, 0($[[R5]]) | 
|  |  | 
|  | define fp128 @libcall2_copysignl() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %1 = load fp128, fp128* @gld1, align 16 | 
|  | %call = tail call fp128 @copysignl(fp128 %0, fp128 %1) nounwind readnone | 
|  | ret fp128 %call | 
|  | } | 
|  |  | 
|  | declare fp128 @copysignl(fp128, fp128) #1 | 
|  |  | 
|  | ; ALL-LABEL: libcall2_powl: | 
|  | ; ALL: ld $25, %call16(powl) | 
|  |  | 
|  | define fp128 @libcall2_powl() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %1 = load fp128, fp128* @gld1, align 16 | 
|  | %call = tail call fp128 @powl(fp128 %0, fp128 %1) nounwind | 
|  | ret fp128 %call | 
|  | } | 
|  |  | 
|  | declare fp128 @powl(fp128, fp128) #2 | 
|  |  | 
|  | ; ALL-LABEL: libcall2_fmodl: | 
|  | ; ALL: ld $25, %call16(fmodl) | 
|  |  | 
|  | define fp128 @libcall2_fmodl() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %1 = load fp128, fp128* @gld1, align 16 | 
|  | %call = tail call fp128 @fmodl(fp128 %0, fp128 %1) nounwind | 
|  | ret fp128 %call | 
|  | } | 
|  |  | 
|  | declare fp128 @fmodl(fp128, fp128) #2 | 
|  |  | 
|  | ; ALL-LABEL: libcall3_fmal: | 
|  | ; ALL: ld $25, %call16(fmal) | 
|  |  | 
|  | define fp128 @libcall3_fmal() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld0, align 16 | 
|  | %1 = load fp128, fp128* @gld2, align 16 | 
|  | %2 = load fp128, fp128* @gld1, align 16 | 
|  | %3 = tail call fp128 @llvm.fma.f128(fp128 %0, fp128 %2, fp128 %1) | 
|  | ret fp128 %3 | 
|  | } | 
|  |  | 
|  | declare fp128 @llvm.fma.f128(fp128, fp128, fp128) #4 | 
|  |  | 
|  | ; ALL-LABEL: cmp_lt: | 
|  | ; ALL: ld $25, %call16(__lttf2) | 
|  |  | 
|  | define i32 @cmp_lt(fp128 %a, fp128 %b) { | 
|  | entry: | 
|  | %cmp = fcmp olt fp128 %a, %b | 
|  | %conv = zext i1 %cmp to i32 | 
|  | ret i32 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: cmp_le: | 
|  | ; ALL: ld $25, %call16(__letf2) | 
|  |  | 
|  | define i32 @cmp_le(fp128 %a, fp128 %b) { | 
|  | entry: | 
|  | %cmp = fcmp ole fp128 %a, %b | 
|  | %conv = zext i1 %cmp to i32 | 
|  | ret i32 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: cmp_gt: | 
|  | ; ALL: ld $25, %call16(__gttf2) | 
|  |  | 
|  | define i32 @cmp_gt(fp128 %a, fp128 %b) { | 
|  | entry: | 
|  | %cmp = fcmp ogt fp128 %a, %b | 
|  | %conv = zext i1 %cmp to i32 | 
|  | ret i32 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: cmp_ge: | 
|  | ; ALL: ld $25, %call16(__getf2) | 
|  |  | 
|  | define i32 @cmp_ge(fp128 %a, fp128 %b) { | 
|  | entry: | 
|  | %cmp = fcmp oge fp128 %a, %b | 
|  | %conv = zext i1 %cmp to i32 | 
|  | ret i32 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: cmp_eq: | 
|  | ; ALL: ld $25, %call16(__eqtf2) | 
|  |  | 
|  | define i32 @cmp_eq(fp128 %a, fp128 %b) { | 
|  | entry: | 
|  | %cmp = fcmp oeq fp128 %a, %b | 
|  | %conv = zext i1 %cmp to i32 | 
|  | ret i32 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: cmp_ne: | 
|  | ; ALL: ld $25, %call16(__netf2) | 
|  |  | 
|  | define i32 @cmp_ne(fp128 %a, fp128 %b) { | 
|  | entry: | 
|  | %cmp = fcmp une fp128 %a, %b | 
|  | %conv = zext i1 %cmp to i32 | 
|  | ret i32 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: load_LD_LD: | 
|  | ; ALL: ld $[[R0:[0-9]+]], %got_disp(gld1) | 
|  | ; ALL: ld $2, 0($[[R0]]) | 
|  | ; ALL: ld $4, 8($[[R0]]) | 
|  |  | 
|  | define fp128 @load_LD_LD() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld1, align 16 | 
|  | ret fp128 %0 | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: load_LD_float: | 
|  | ; ALL:   ld   $[[R0:[0-9]+]], %got_disp(gf1) | 
|  | ; ALL:   lw   $4, 0($[[R0]]) | 
|  | ; ALL:   ld   $25, %call16(__extendsftf2) | 
|  | ; PRER6: jalr $25 | 
|  | ; R6:    jalrc $25 | 
|  |  | 
|  | define fp128 @load_LD_float() { | 
|  | entry: | 
|  | %0 = load float, float* @gf1, align 4 | 
|  | %conv = fpext float %0 to fp128 | 
|  | ret fp128 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: load_LD_double: | 
|  | ; ALL:   ld   $[[R0:[0-9]+]], %got_disp(gd1) | 
|  | ; ALL:   ld   $4, 0($[[R0]]) | 
|  | ; ALL:   ld   $25, %call16(__extenddftf2) | 
|  | ; PRER6: jalr $25 | 
|  | ; R6:    jalrc $25 | 
|  |  | 
|  | define fp128 @load_LD_double() { | 
|  | entry: | 
|  | %0 = load double, double* @gd1, align 8 | 
|  | %conv = fpext double %0 to fp128 | 
|  | ret fp128 %conv | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: store_LD_LD: | 
|  | ; ALL: ld $[[R0:[0-9]+]], %got_disp(gld1) | 
|  | ; ALL: ld $[[R2:[0-9]+]], 8($[[R0]]) | 
|  | ; ALL: ld $[[R3:[0-9]+]], %got_disp(gld0) | 
|  | ; ALL: sd $[[R2]], 8($[[R3]]) | 
|  | ; ALL: ld $[[R1:[0-9]+]], 0($[[R0]]) | 
|  | ; ALL: sd $[[R1]], 0($[[R3]]) | 
|  |  | 
|  | define void @store_LD_LD() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld1, align 16 | 
|  | store fp128 %0, fp128* @gld0, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: store_LD_float: | 
|  | ; ALL:   ld   $[[R0:[0-9]+]], %got_disp(gld1) | 
|  | ; ALL:   ld   $4, 0($[[R0]]) | 
|  | ; ALL:   ld   $5, 8($[[R0]]) | 
|  | ; ALL:   ld   $25, %call16(__trunctfsf2) | 
|  | ; PRER6: jalr $25 | 
|  | ; R6:    jalrc $25 | 
|  | ; ALL:   ld   $[[R1:[0-9]+]], %got_disp(gf1) | 
|  | ; ALL:   sw   $2, 0($[[R1]]) | 
|  |  | 
|  | define void @store_LD_float() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld1, align 16 | 
|  | %conv = fptrunc fp128 %0 to float | 
|  | store float %conv, float* @gf1, align 4 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: store_LD_double: | 
|  | ; ALL:   ld   $[[R0:[0-9]+]], %got_disp(gld1) | 
|  | ; ALL:   ld   $4, 0($[[R0]]) | 
|  | ; ALL:   ld   $5, 8($[[R0]]) | 
|  | ; ALL:   ld   $25, %call16(__trunctfdf2) | 
|  | ; PRER6: jalr $25 | 
|  | ; R6:    jalrc $25 | 
|  | ; ALL:   ld   $[[R1:[0-9]+]], %got_disp(gd1) | 
|  | ; ALL:   sd   $2, 0($[[R1]]) | 
|  |  | 
|  | define void @store_LD_double() { | 
|  | entry: | 
|  | %0 = load fp128, fp128* @gld1, align 16 | 
|  | %conv = fptrunc fp128 %0 to double | 
|  | store double %conv, double* @gd1, align 8 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: select_LD: | 
|  | ; C_CC_FMT:      movn $8, $6, $4 | 
|  | ; C_CC_FMT:      movn $9, $7, $4 | 
|  | ; C_CC_FMT:      move $2, $8 | 
|  | ; C_CC_FMT:      move $4, $9 | 
|  |  | 
|  | ; FIXME: This sll works around an implementation detail in the code generator | 
|  | ;        (setcc's result is i32 so bits 32-63 are undefined). It's not really | 
|  | ;        needed. | 
|  | ; CMP_CC_FMT-DAG: sll $[[CC:[0-9]+]], $4, 0 | 
|  | ; CMP_CC_FMT-DAG: seleqz $[[EQ1:[0-9]+]], $8, $[[CC]] | 
|  | ; CMP_CC_FMT-DAG: selnez $[[NE1:[0-9]+]], $6, $[[CC]] | 
|  | ; CMP_CC_FMT-DAG: or $2, $[[NE1]], $[[EQ1]] | 
|  | ; CMP_CC_FMT-DAG: seleqz $[[EQ2:[0-9]+]], $9, $[[CC]] | 
|  | ; CMP_CC_FMT-DAG: selnez $[[NE2:[0-9]+]], $7, $[[CC]] | 
|  | ; CMP_CC_FMT-DAG: or $4, $[[NE2]], $[[EQ2]] | 
|  |  | 
|  | define fp128 @select_LD(i32 signext %a, i64, fp128 %b, fp128 %c) { | 
|  | entry: | 
|  | %tobool = icmp ne i32 %a, 0 | 
|  | %cond = select i1 %tobool, fp128 %b, fp128 %c | 
|  | ret fp128 %cond | 
|  | } | 
|  |  | 
|  | ; ALL-LABEL: selectCC_LD: | 
|  | ; ALL:           move $[[R0:[0-9]+]], $11 | 
|  | ; ALL:           move $[[R1:[0-9]+]], $10 | 
|  | ; ALL:           move $[[R2:[0-9]+]], $9 | 
|  | ; ALL:           move $[[R3:[0-9]+]], $8 | 
|  | ; ALL:           ld   $25, %call16(__gttf2)($gp) | 
|  | ; PRER6:         jalr $25 | 
|  | ; R6:            jalrc $25 | 
|  |  | 
|  | ; C_CC_FMT:      slti $[[CC:[0-9]+]], $2, 1 | 
|  | ; C_CC_FMT:      movz $[[R1]], $[[R3]], $[[CC]] | 
|  | ; C_CC_FMT:      movz $[[R0]], $[[R2]], $[[CC]] | 
|  | ; C_CC_FMT:      move $2, $[[R1]] | 
|  | ; C_CC_FMT:      move $4, $[[R0]] | 
|  |  | 
|  | ; CMP_CC_FMT:    slt $[[CC:[0-9]+]], $zero, $2 | 
|  | ; CMP_CC_FMT:    seleqz $[[EQ1:[0-9]+]], $[[R1]], $[[CC]] | 
|  | ; CMP_CC_FMT:    selnez $[[NE1:[0-9]+]], $[[R3]], $[[CC]] | 
|  | ; CMP_CC_FMT:    or $2, $[[NE1]], $[[EQ1]] | 
|  | ; CMP_CC_FMT:    seleqz $[[EQ2:[0-9]+]], $[[R0]], $[[CC]] | 
|  | ; CMP_CC_FMT:    selnez $[[NE2:[0-9]+]], $[[R2]], $[[CC]] | 
|  | ; CMP_CC_FMT:    or $4, $[[NE2]], $[[EQ2]] | 
|  |  | 
|  | define fp128 @selectCC_LD(fp128 %a, fp128 %b, fp128 %c, fp128 %d) { | 
|  | entry: | 
|  | %cmp = fcmp ogt fp128 %a, %b | 
|  | %cond = select i1 %cmp, fp128 %c, fp128 %d | 
|  | ret fp128 %cond | 
|  | } |