1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -O0 -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s
3
4; xscvdpsxds should NOT be emitted, since it saturates the result down to i64.
5; We can't use friz here because it may return -0.0 where the original code doesn't.
6
7define float @f_i128_f(float %v) nounwind {
8; CHECK-LABEL: f_i128_f:
9; CHECK:       # %bb.0: # %entry
10; CHECK-NEXT:    mflr 0
11; CHECK-NEXT:    std 0, 16(1)
12; CHECK-NEXT:    stdu 1, -32(1)
13; CHECK-NEXT:    bl __fixsfti
14; CHECK-NEXT:    nop
15; CHECK-NEXT:    bl __floattisf
16; CHECK-NEXT:    nop
17; CHECK-NEXT:    addi 1, 1, 32
18; CHECK-NEXT:    ld 0, 16(1)
19; CHECK-NEXT:    mtlr 0
20; CHECK-NEXT:    blr
21entry:
22  %a = fptosi float %v to i128
23  %b = sitofp i128 %a to float
24  ret float %b
25}
26
27; NSZ, so it's safe to friz.
28
29define float @f_i128_fi_nsz(float %v) #0 {
30; CHECK-LABEL: f_i128_fi_nsz:
31; CHECK:       # %bb.0: # %entry
32; CHECK-NEXT:    xsrdpiz 1, 1
33; CHECK-NEXT:    blr
34entry:
35  %a = fptosi float %v to i128
36  %b = sitofp i128 %a to float
37  ret float %b
38}
39
40attributes #0 = { "no-signed-zeros-fp-math"="true" }
41
42