1; RUN: llc -verify-machineinstrs -mcpu=pwr8 -mattr=+vsx \
2; RUN:   -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s
3
4; RUN: llc -verify-machineinstrs -mcpu=pwr9 -mattr=-power9-vector \
5; RUN:   -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s
6
7; RUN: llc -verify-machineinstrs -mcpu=pwr9 \
8; RUN:   -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s \
9; RUN:   --check-prefix=CHECK-P9 --implicit-check-not xxswapd
10
11define <2 x double> @testi0(<2 x double>* %p1, double* %p2) {
12  %v = load <2 x double>, <2 x double>* %p1
13  %s = load double, double* %p2
14  %r = insertelement <2 x double> %v, double %s, i32 0
15  ret <2 x double> %r
16
17; CHECK-LABEL: testi0
18; CHECK: lxvd2x 0, 0, 3
19; CHECK: lxsdx 1, 0, 4
20; CHECK: xxswapd 0, 0
21; CHECK: xxspltd 1, 1, 0
22; CHECK: xxpermdi 34, 0, 1, 1
23
24; CHECK-P9-LABEL: testi0
25; CHECK-P9: lfd [[REG1:[0-9]+]], 0(4)
26; CHECK-P9: lxvx [[REG2:[0-9]+]], 0, 3
27; CHECK-P9: xxspltd [[REG3:[0-9]+]], [[REG1]], 0
28; CHECK-P9: xxpermdi 34, [[REG2]], [[REG3]], 1
29}
30
31define <2 x double> @testi1(<2 x double>* %p1, double* %p2) {
32  %v = load <2 x double>, <2 x double>* %p1
33  %s = load double, double* %p2
34  %r = insertelement <2 x double> %v, double %s, i32 1
35  ret <2 x double> %r
36
37; CHECK-LABEL: testi1
38; CHECK: lxvd2x 0, 0, 3
39; CHECK: lxsdx 1, 0, 4
40; CHECK: xxswapd 0, 0
41; CHECK: xxspltd 1, 1, 0
42; CHECK: xxmrgld 34, 1, 0
43
44; CHECK-P9-LABEL: testi1
45; CHECK-P9: lfd [[REG1:[0-9]+]], 0(4)
46; CHECK-P9: lxvx [[REG2:[0-9]+]], 0, 3
47; CHECK-P9: xxspltd [[REG3:[0-9]+]], [[REG1]], 0
48; CHECK-P9: xxmrgld 34, [[REG3]], [[REG2]]
49}
50
51define double @teste0(<2 x double>* %p1) {
52  %v = load <2 x double>, <2 x double>* %p1
53  %r = extractelement <2 x double> %v, i32 0
54  ret double %r
55
56; CHECK-LABEL: teste0
57; CHECK: lxvd2x 1, 0, 3
58
59; CHECK-P9-LABEL: teste0
60; CHECK-P9: lfd 1, 0(3)
61}
62
63define double @teste1(<2 x double>* %p1) {
64  %v = load <2 x double>, <2 x double>* %p1
65  %r = extractelement <2 x double> %v, i32 1
66  ret double %r
67
68; CHECK-LABEL: teste1
69; CHECK: lxvd2x 0, 0, 3
70; CHECK: xxswapd 1, 0
71
72; CHECK-P9-LABEL: teste1
73; CHECK-P9: lfd 1, 8(3)
74}
75