1; RUN: llc -mcpu=pwr8 -mattr=+vsx -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s
2
3define <2 x double> @testi0(<2 x double>* %p1, double* %p2) {
4  %v = load <2 x double>, <2 x double>* %p1
5  %s = load double, double* %p2
6  %r = insertelement <2 x double> %v, double %s, i32 0
7  ret <2 x double> %r
8
9; CHECK-LABEL: testi0
10; CHECK: lxvd2x 0, 0, 3
11; CHECK: lxsdx 34, 0, 4
12; CHECK: xxpermdi 0, 0, 0, 2
13; CHECK: xxpermdi 1, 34, 34, 0
14; CHECK: xxpermdi 34, 0, 1, 1
15}
16
17define <2 x double> @testi1(<2 x double>* %p1, double* %p2) {
18  %v = load <2 x double>, <2 x double>* %p1
19  %s = load double, double* %p2
20  %r = insertelement <2 x double> %v, double %s, i32 1
21  ret <2 x double> %r
22
23; CHECK-LABEL: testi1
24; CHECK: lxvd2x 0, 0, 3
25; CHECK: lxsdx 34, 0, 4
26; CHECK: xxpermdi 0, 0, 0, 2
27; CHECK: xxpermdi 1, 34, 34, 0
28; CHECK: xxpermdi 34, 1, 0, 3
29}
30
31define double @teste0(<2 x double>* %p1) {
32  %v = load <2 x double>, <2 x double>* %p1
33  %r = extractelement <2 x double> %v, i32 0
34  ret double %r
35
36; FIXME: Swap optimization will collapse this into lxvd2x 1, 0, 3.
37
38; CHECK-LABEL: teste0
39; CHECK: lxvd2x 0, 0, 3
40; CHECK: xxpermdi 0, 0, 0, 2
41; CHECK: xxpermdi 1, 0, 0, 2
42}
43
44define double @teste1(<2 x double>* %p1) {
45  %v = load <2 x double>, <2 x double>* %p1
46  %r = extractelement <2 x double> %v, i32 1
47  ret double %r
48
49; CHECK-LABEL: teste1
50; CHECK: lxvd2x 0, 0, 3
51; CHECK: xxpermdi 1, 0, 0, 2
52}
53