blob: 6b845cbf380aca9b69d5d78b3ab186af2d528591 [file] [log] [blame]
Nemanja Ivanovicd3c284f2016-07-18 15:30:00 +00001; RUN: llc -mcpu=pwr8 -mtriple=powerpc64le-unknown-linux-gnu \
2; RUN: -verify-machineinstrs < %s | FileCheck %s
3; RUN: llc -mcpu=pwr8 -mtriple=powerpc64-unknown-linux-gnu \
4; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefix=CHECK-BE
5define double @test1(<2 x i64> %a) {
6entry:
7; CHECK-LABEL: test1
8; CHECK: xxswapd [[SW:[0-9]+]], 34
9; CHECK: xscvsxddp 1, [[SW]]
10; CHECK-BE-LABEL: test1
11; CHECK-BE: xxlor [[CP:[0-9]+]], 34, 34
12; CHECK-BE: xscvsxddp 1, [[CP]]
13 %0 = extractelement <2 x i64> %a, i32 0
14 %1 = sitofp i64 %0 to double
15 ret double %1
16}
17
18define double @test2(<2 x i64> %a) {
19entry:
20; CHECK-LABEL: test2
21; CHECK: xxlor [[CP:[0-9]+]], 34, 34
22; CHECK: xscvsxddp 1, [[CP]]
23; CHECK-BE-LABEL: test2
24; CHECK-BE: xxswapd [[SW:[0-9]+]], 34
25; CHECK-BE: xscvsxddp 1, [[SW]]
26 %0 = extractelement <2 x i64> %a, i32 1
27 %1 = sitofp i64 %0 to double
28 ret double %1
29}
30
31define float @test1f(<2 x i64> %a) {
32entry:
33; CHECK-LABEL: test1f
34; CHECK: xxswapd [[SW:[0-9]+]], 34
35; CHECK: xscvsxdsp 1, [[SW]]
36; CHECK-BE-LABEL: test1f
37; CHECK-BE: xxlor [[CP:[0-9]+]], 34, 34
38; CHECK-BE: xscvsxdsp 1, [[CP]]
39 %0 = extractelement <2 x i64> %a, i32 0
40 %1 = sitofp i64 %0 to float
41 ret float %1
42}
43
44define float @test2f(<2 x i64> %a) {
45entry:
46; CHECK-LABEL: test2f
47; CHECK: xxlor [[CP:[0-9]+]], 34, 34
48; CHECK: xscvsxdsp 1, [[CP]]
49; CHECK-BE-LABEL: test2f
50; CHECK-BE: xxswapd [[SW:[0-9]+]], 34
51; CHECK-BE: xscvsxdsp 1, [[SW]]
52 %0 = extractelement <2 x i64> %a, i32 1
53 %1 = sitofp i64 %0 to float
54 ret float %1
55}
56
57define double @test1u(<2 x i64> %a) {
58entry:
59; CHECK-LABEL: test1u
60; CHECK: xxswapd [[SW:[0-9]+]], 34
61; CHECK: xscvuxddp 1, [[SW]]
62; CHECK-BE-LABEL: test1u
63; CHECK-BE: xxlor [[CP:[0-9]+]], 34, 34
64; CHECK-BE: xscvuxddp 1, [[CP]]
65 %0 = extractelement <2 x i64> %a, i32 0
66 %1 = uitofp i64 %0 to double
67 ret double %1
68}
69
70define double @test2u(<2 x i64> %a) {
71entry:
72; CHECK-LABEL: test2u
73; CHECK: xxlor [[CP:[0-9]+]], 34, 34
74; CHECK: xscvuxddp 1, [[CP]]
75; CHECK-BE-LABEL: test2u
76; CHECK-BE: xxswapd [[SW:[0-9]+]], 34
77; CHECK-BE: xscvuxddp 1, [[SW]]
78 %0 = extractelement <2 x i64> %a, i32 1
79 %1 = uitofp i64 %0 to double
80 ret double %1
81}
82
83define float @test1fu(<2 x i64> %a) {
84entry:
85; CHECK-LABEL: test1fu
86; CHECK: xxswapd [[SW:[0-9]+]], 34
87; CHECK: xscvuxdsp 1, [[SW]]
88; CHECK-BE-LABEL: test1fu
89; CHECK-BE: xxlor [[CP:[0-9]+]], 34, 34
90; CHECK-BE: xscvuxdsp 1, [[CP]]
91 %0 = extractelement <2 x i64> %a, i32 0
92 %1 = uitofp i64 %0 to float
93 ret float %1
94}
95
96define float @test2fu(<2 x i64> %a) {
97entry:
98; CHECK-LABEL: test2fu
99; CHECK: xxlor [[CP:[0-9]+]], 34, 34
100; CHECK: xscvuxdsp 1, [[CP]]
101; CHECK-BE-LABEL: test2fu
102; CHECK-BE: xxswapd [[SW:[0-9]+]], 34
103; CHECK-BE: xscvuxdsp 1, [[SW]]
104 %0 = extractelement <2 x i64> %a, i32 1
105 %1 = uitofp i64 %0 to float
106 ret float %1
107}