brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 88b20ff Raw
65 lines · plain
1; RUN: llc < %s | FileCheck %s2 3target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"4target triple = "x86_64--"5 6; CHECK-LABEL: double_rounding_safe:7; CHECK: callq __trunctfdf28; CHECK-NEXT: cvtsd2ss %xmm09define void @double_rounding_safe(ptr %x, ptr %f) {10entry:11  %x.fp128 = load fp128, ptr %x, align 1612  %x.double = fptrunc fp128 %x.fp128 to double13  %x.float = fptrunc double %x.double to float14  store float %x.float, ptr %f, align 415  ret void16}17 18; CHECK-LABEL: double_rounding_contract_fst:19; CHECK: callq __trunctfdf220; CHECK-NEXT: cvtsd2ss %xmm021define void @double_rounding_contract_fst(ptr %x, ptr %f) {22entry:23  %x.fp128 = load fp128, ptr %x, align 1624  %x.double = fptrunc contract fp128 %x.fp128 to double25  %x.float = fptrunc double %x.double to float26  store float %x.float, ptr %f, align 427  ret void28}29 30; CHECK-LABEL: double_rounding_contract_snd:31; CHECK: callq __trunctfdf232; CHECK-NEXT: cvtsd2ss %xmm033define void @double_rounding_contract_snd(ptr %x, ptr %f) {34entry:35  %x.fp128 = load fp128, ptr %x, align 1636  %x.double = fptrunc fp128 %x.fp128 to double37  %x.float = fptrunc contract double %x.double to float38  store float %x.float, ptr %f, align 439  ret void40}41 42; CHECK-LABEL: double_rounding:43; CHECK: callq __trunctfsf244; CHECK-NOT: cvt45define void @double_rounding(ptr %x, ptr %f) {46entry:47  %x.fp128 = load fp128, ptr %x, align 1648  %x.double = fptrunc contract fp128 %x.fp128 to double49  %x.float = fptrunc contract double %x.double to float50  store float %x.float, ptr %f, align 451  ret void52}53 54; CHECK-LABEL: double_rounding_precise_first:55; CHECK: fstps (%56; CHECK-NOT: fstpl57define void @double_rounding_precise_first(ptr %f) {58entry:59  ; Hack, to generate a precise FP_ROUND to double60  %precise = call double asm sideeffect "fld %st(0)", "={st(0)}"()61  %0 = fptrunc double %precise to float62  store float %0, ptr %f, align 463  ret void64}65