1 ; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 -mattr=-direct-move | FileCheck %s
2 ; RUN: llc < %s -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 -mattr=-direct-move | FileCheck %s
4 @d = common global double 0.000000e+00, align 8
5 @f = common global float 0.000000e+00, align 4
6 @i = common global i32 0, align 4
7 @ui = common global i32 0, align 4
9 ; Function Attrs: nounwind
10 define void @dblToInt() #0 {
12 %ii = alloca i32, align 4
13 %0 = load double, double* @d, align 8
14 %conv = fptosi double %0 to i32
15 store volatile i32 %conv, i32* %ii, align 4
17 ; CHECK-LABEL: @dblToInt
18 ; CHECK: xscvdpsxws [[REGCONV1:[0-9]+]],
19 ; CHECK: stxsiwx [[REGCONV1]],
22 ; Function Attrs: nounwind
23 define void @fltToInt() #0 {
25 %ii = alloca i32, align 4
26 %0 = load float, float* @f, align 4
27 %conv = fptosi float %0 to i32
28 store volatile i32 %conv, i32* %ii, align 4
30 ; CHECK-LABEL: @fltToInt
31 ; CHECK: xscvdpsxws [[REGCONV2:[0-9]+]],
32 ; CHECK: stxsiwx [[REGCONV2]],
35 ; Function Attrs: nounwind
36 define void @intToDbl() #0 {
38 %dd = alloca double, align 8
39 %0 = load i32, i32* @i, align 4
40 %conv = sitofp i32 %0 to double
41 store volatile double %conv, double* %dd, align 8
43 ; CHECK-LABEL: @intToDbl
44 ; CHECK: lxsiwax [[REGLD1:[0-9]+]],
45 ; CHECK: xscvsxddp {{[0-9]+}}, [[REGLD1]]
48 ; Function Attrs: nounwind
49 define void @intToFlt() #0 {
51 %ff = alloca float, align 4
52 %0 = load i32, i32* @i, align 4
53 %conv = sitofp i32 %0 to float
54 store volatile float %conv, float* %ff, align 4
56 ; CHECK-LABEL: @intToFlt
57 ; CHECK: lxsiwax [[REGLD2:[0-9]+]],
58 ; CHECK: xscvsxdsp {{[0-9]}}, [[REGLD2]]
61 ; Function Attrs: nounwind
62 define void @dblToUInt() #0 {
64 %uiui = alloca i32, align 4
65 %0 = load double, double* @d, align 8
66 %conv = fptoui double %0 to i32
67 store volatile i32 %conv, i32* %uiui, align 4
69 ; CHECK-LABEL: @dblToUInt
70 ; CHECK: xscvdpuxws [[REGCONV3:[0-9]+]],
71 ; CHECK: stxsiwx [[REGCONV3]],
74 ; Function Attrs: nounwind
75 define void @fltToUInt() #0 {
77 %uiui = alloca i32, align 4
78 %0 = load float, float* @f, align 4
79 %conv = fptoui float %0 to i32
80 store volatile i32 %conv, i32* %uiui, align 4
82 ; CHECK-LABEL: @fltToUInt
83 ; CHECK: xscvdpuxws [[REGCONV4:[0-9]+]],
84 ; CHECK: stxsiwx [[REGCONV4]],
87 ; Function Attrs: nounwind
88 define void @uIntToDbl() #0 {
90 %dd = alloca double, align 8
91 %0 = load i32, i32* @ui, align 4
92 %conv = uitofp i32 %0 to double
93 store volatile double %conv, double* %dd, align 8
95 ; CHECK-LABEL: @uIntToDbl
96 ; CHECK: lxsiwzx [[REGLD3:[0-9]+]],
97 ; CHECK: xscvuxddp {{[0-9]+}}, [[REGLD3]]
100 ; Function Attrs: nounwind
101 define void @uIntToFlt() #0 {
103 %ff = alloca float, align 4
104 %0 = load i32, i32* @ui, align 4
105 %conv = uitofp i32 %0 to float
106 store volatile float %conv, float* %ff, align 4
108 ; CHECK-LABEL: @uIntToFlt
109 ; CHECK: lxsiwzx [[REGLD4:[0-9]+]],
110 ; CHECK: xscvuxdsp {{[0-9]+}}, [[REGLD4]]
113 ; Function Attrs: nounwind
114 define void @dblToFloat() #0 {
116 %ff = alloca float, align 4
117 %0 = load double, double* @d, align 8
118 %conv = fptrunc double %0 to float
119 store volatile float %conv, float* %ff, align 4
121 ; CHECK-LABEL: @dblToFloat
122 ; CHECK: lxsdx [[REGLD5:[0-9]+]],
123 ; CHECK: stxsspx [[REGLD5]],
126 ; Function Attrs: nounwind
127 define void @floatToDbl() #0 {
129 %dd = alloca double, align 8
130 %0 = load float, float* @f, align 4
131 %conv = fpext float %0 to double
132 store volatile double %conv, double* %dd, align 8
134 ; CHECK-LABEL: @floatToDbl
135 ; CHECK: lxsspx [[REGLD5:[0-9]+]],
136 ; CHECK: stxsdx [[REGLD5]],