Fix typo.
[oota-llvm.git] / test / CodeGen / PowerPC / vsx_scalar_ld_st.ll
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
3
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
8
9 ; Function Attrs: nounwind
10 define void @dblToInt() #0 {
11 entry:
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
16   ret void
17 ; CHECK-LABEL: @dblToInt
18 ; CHECK: xscvdpsxws [[REGCONV1:[0-9]+]],
19 ; CHECK: stxsiwx [[REGCONV1]],
20 }
21
22 ; Function Attrs: nounwind
23 define void @fltToInt() #0 {
24 entry:
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
29   ret void
30 ; CHECK-LABEL: @fltToInt
31 ; CHECK: xscvdpsxws [[REGCONV2:[0-9]+]],
32 ; CHECK: stxsiwx [[REGCONV2]],
33 }
34
35 ; Function Attrs: nounwind
36 define void @intToDbl() #0 {
37 entry:
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
42   ret void
43 ; CHECK-LABEL: @intToDbl
44 ; CHECK: lxsiwax [[REGLD1:[0-9]+]],
45 ; CHECK: xscvsxddp {{[0-9]+}}, [[REGLD1]]
46 }
47
48 ; Function Attrs: nounwind
49 define void @intToFlt() #0 {
50 entry:
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
55   ret void
56 ; CHECK-LABEL: @intToFlt
57 ; CHECK: lxsiwax [[REGLD2:[0-9]+]],
58 ; FIXME: the below will change when the VSX form is implemented
59 ; CHECK: fcfids {{[0-9]}}, [[REGLD2]]
60 }
61
62 ; Function Attrs: nounwind
63 define void @dblToUInt() #0 {
64 entry:
65   %uiui = alloca i32, align 4
66   %0 = load double, double* @d, align 8
67   %conv = fptoui double %0 to i32
68   store volatile i32 %conv, i32* %uiui, align 4
69   ret void
70 ; CHECK-LABEL: @dblToUInt
71 ; CHECK: xscvdpuxws [[REGCONV3:[0-9]+]],
72 ; CHECK: stxsiwx [[REGCONV3]],
73 }
74
75 ; Function Attrs: nounwind
76 define void @fltToUInt() #0 {
77 entry:
78   %uiui = alloca i32, align 4
79   %0 = load float, float* @f, align 4
80   %conv = fptoui float %0 to i32
81   store volatile i32 %conv, i32* %uiui, align 4
82   ret void
83 ; CHECK-LABEL: @fltToUInt
84 ; CHECK: xscvdpuxws [[REGCONV4:[0-9]+]],
85 ; CHECK: stxsiwx [[REGCONV4]],
86 }
87
88 ; Function Attrs: nounwind
89 define void @uIntToDbl() #0 {
90 entry:
91   %dd = alloca double, align 8
92   %0 = load i32, i32* @ui, align 4
93   %conv = uitofp i32 %0 to double
94   store volatile double %conv, double* %dd, align 8
95   ret void
96 ; CHECK-LABEL: @uIntToDbl
97 ; CHECK: lxsiwzx [[REGLD3:[0-9]+]],
98 ; CHECK: xscvuxddp {{[0-9]+}}, [[REGLD3]]
99 }
100
101 ; Function Attrs: nounwind
102 define void @uIntToFlt() #0 {
103 entry:
104   %ff = alloca float, align 4
105   %0 = load i32, i32* @ui, align 4
106   %conv = uitofp i32 %0 to float
107   store volatile float %conv, float* %ff, align 4
108   ret void
109 ; CHECK-LABEL: @uIntToFlt
110 ; CHECK: lxsiwzx [[REGLD4:[0-9]+]],
111 ; FIXME: the below will change when the VSX form is implemented
112 ; CHECK: fcfidus {{[0-9]+}}, [[REGLD4]]
113 }
114
115 ; Function Attrs: nounwind
116 define void @dblToFloat() #0 {
117 entry:
118   %ff = alloca float, align 4
119   %0 = load double, double* @d, align 8
120   %conv = fptrunc double %0 to float
121   store volatile float %conv, float* %ff, align 4
122   ret void
123 ; CHECK-LABEL: @dblToFloat
124 ; CHECK: lxsdx [[REGLD5:[0-9]+]],
125 ; CHECK: stxsspx [[REGLD5]],
126 }
127
128 ; Function Attrs: nounwind
129 define void @floatToDbl() #0 {
130 entry:
131   %dd = alloca double, align 8
132   %0 = load float, float* @f, align 4
133   %conv = fpext float %0 to double
134   store volatile double %conv, double* %dd, align 8
135   ret void
136 ; CHECK-LABEL: @floatToDbl
137 ; CHECK: lxsspx [[REGLD5:[0-9]+]],
138 ; CHECK: stxsdx [[REGLD5]],
139 }