Ahmed Bougacha | 24433a7 | 2015-02-12 06:15:29 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s | FileCheck %s --check-prefix=CHECK --check-prefix=SAFE |
| 2 | ; RUN: llc < %s -enable-unsafe-fp-math | FileCheck %s --check-prefix=CHECK --check-prefix=UNSAFE |
| 3 | |
| 4 | target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" |
| 5 | target triple = "x86_64--" |
| 6 | |
| 7 | ; CHECK-LABEL: double_rounding: |
| 8 | ; SAFE: callq __trunctfdf2 |
| 9 | ; SAFE-NEXT: cvtsd2ss %xmm0 |
| 10 | ; UNSAFE: callq __trunctfsf2 |
| 11 | ; UNSAFE-NOT: cvt |
| 12 | define void @double_rounding(fp128* %x, float* %f) { |
| 13 | entry: |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 14 | %0 = load fp128, fp128* %x, align 16 |
Ahmed Bougacha | 24433a7 | 2015-02-12 06:15:29 +0000 | [diff] [blame] | 15 | %1 = fptrunc fp128 %0 to double |
| 16 | %2 = fptrunc double %1 to float |
| 17 | store float %2, float* %f, align 4 |
| 18 | ret void |
| 19 | } |
| 20 | |
| 21 | ; CHECK-LABEL: double_rounding_precise_first: |
| 22 | ; CHECK: fstps (% |
| 23 | ; CHECK-NOT: fstpl |
| 24 | define void @double_rounding_precise_first(float* %f) { |
| 25 | entry: |
| 26 | ; Hack, to generate a precise FP_ROUND to double |
| 27 | %precise = call double asm sideeffect "fld %st(0)", "={st(0)}"() |
| 28 | %0 = fptrunc double %precise to float |
| 29 | store float %0, float* %f, align 4 |
| 30 | ret void |
| 31 | } |