xref: /llvm-project/llvm/test/CodeGen/PowerPC/GlobalISel/float-integer-conv.ll (revision 0a9b1c59f000cab21afc0c19df0f635445826422)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
3; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -global-isel  -ppc-vsr-nums-as-vr \
4; RUN:   -ppc-asm-full-reg-names -verify-machineinstrs -o - < %s | FileCheck %s
5
6define i64 @fptosi_float_i64(float %i) {
7; CHECK-LABEL: fptosi_float_i64:
8; CHECK:       # %bb.0: # %entry
9; CHECK-NEXT:    xscvdpsxds f0, f1
10; CHECK-NEXT:    mffprd r3, f0
11; CHECK-NEXT:    blr
12entry:
13  %conv = fptosi float %i to i64
14  ret i64 %conv
15}
16
17define i64 @fptosi_double_i64(double %i) {
18; CHECK-LABEL: fptosi_double_i64:
19; CHECK:       # %bb.0: # %entry
20; CHECK-NEXT:    xscvdpsxds f0, f1
21; CHECK-NEXT:    mffprd r3, f0
22; CHECK-NEXT:    blr
23entry:
24  %conv = fptosi double %i to i64
25  ret i64 %conv
26}
27
28define i64 @fptoui_float_i64(float %i) {
29; CHECK-LABEL: fptoui_float_i64:
30; CHECK:       # %bb.0: # %entry
31; CHECK-NEXT:    xscvdpuxds f0, f1
32; CHECK-NEXT:    mffprd r3, f0
33; CHECK-NEXT:    blr
34entry:
35  %conv = fptoui float %i to i64
36  ret i64 %conv
37}
38
39define i64 @fptoui_double_i64(double %i) {
40; CHECK-LABEL: fptoui_double_i64:
41; CHECK:       # %bb.0: # %entry
42; CHECK-NEXT:    xscvdpuxds f0, f1
43; CHECK-NEXT:    mffprd r3, f0
44; CHECK-NEXT:    blr
45entry:
46  %conv = fptoui double %i to i64
47  ret i64 %conv
48}
49
50define float @sitofp_i64_float(i64 %i) {
51; CHECK-LABEL: sitofp_i64_float:
52; CHECK:       # %bb.0: # %entry
53; CHECK-NEXT:    mtfprd f0, r3
54; CHECK-NEXT:    xscvsxdsp f1, f0
55; CHECK-NEXT:    blr
56entry:
57  %conv = sitofp i64 %i to float
58  ret float %conv
59}
60
61define double @sitofp_i64_double(i64 %i) {
62; CHECK-LABEL: sitofp_i64_double:
63; CHECK:       # %bb.0: # %entry
64; CHECK-NEXT:    mtfprd f0, r3
65; CHECK-NEXT:    xscvsxddp f1, f0
66; CHECK-NEXT:    blr
67entry:
68  %conv = sitofp i64 %i to double
69  ret double %conv
70}
71
72define float @uitofp_i64_float(i64 %i) {
73; CHECK-LABEL: uitofp_i64_float:
74; CHECK:       # %bb.0: # %entry
75; CHECK-NEXT:    mtfprd f0, r3
76; CHECK-NEXT:    xscvuxdsp f1, f0
77; CHECK-NEXT:    blr
78entry:
79  %conv = uitofp i64 %i to float
80  ret float %conv
81}
82
83define double @uitofp_i64_double(i64 %i) {
84; CHECK-LABEL: uitofp_i64_double:
85; CHECK:       # %bb.0: # %entry
86; CHECK-NEXT:    mtfprd f0, r3
87; CHECK-NEXT:    xscvuxddp f1, f0
88; CHECK-NEXT:    blr
89entry:
90  %conv = uitofp i64 %i to double
91  ret double %conv
92}
93