blob: da6605e494f89081094d4d0a2358c9696879f2e8 [file] [log] [blame]
Nemanja Ivanovic6e7879c2016-09-22 09:52:19 +00001; RUN: llc -verify-machineinstrs -mcpu=pwr8 \
2; RUN: -mtriple=powerpc64le-unknown-linux-gnu -O3 < %s | FileCheck %s
3
4; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-linux-gnu -O3 \
5; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefix=CHECK-P9 \
6; RUN: --implicit-check-not xxswapd
7
8; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-linux-gnu -O3 \
9; RUN: -verify-machineinstrs -mattr=-power9-vector < %s | FileCheck %s
Bill Schmidt2be80542015-07-21 21:40:17 +000010
11; These tests verify that VSX swap optimization works when loading a scalar
12; into a vector register.
13
14
15@x = global <2 x double> <double 9.970000e+01, double -1.032220e+02>, align 16
16@z = global <2 x double> <double 2.332000e+01, double 3.111111e+01>, align 16
17@y = global double 1.780000e+00, align 8
18
19define void @bar0() {
20entry:
21 %0 = load <2 x double>, <2 x double>* @x, align 16
22 %1 = load double, double* @y, align 8
23 %vecins = insertelement <2 x double> %0, double %1, i32 0
24 store <2 x double> %vecins, <2 x double>* @z, align 16
25 ret void
26}
27
28; CHECK-LABEL: @bar0
29; CHECK-DAG: lxvd2x [[REG1:[0-9]+]]
30; CHECK-DAG: lxsdx [[REG2:[0-9]+]]
Bill Schmidt34af5e12015-11-10 21:38:26 +000031; CHECK: xxspltd [[REG4:[0-9]+]], [[REG2]], 0
Bill Schmidt2be80542015-07-21 21:40:17 +000032; CHECK: xxpermdi [[REG5:[0-9]+]], [[REG4]], [[REG1]], 1
33; CHECK: stxvd2x [[REG5]]
34
Nemanja Ivanovic6e7879c2016-09-22 09:52:19 +000035; CHECK-P9-LABEL: @bar0
36; CHECK-P9-DAG: lxvx [[REG1:[0-9]+]]
37; CHECK-P9-DAG: lxsdx [[REG2:[0-9]+]]
38; CHECK-P9: xxspltd [[REG4:[0-9]+]], [[REG2]], 0
39; CHECK-P9: xxpermdi [[REG5:[0-9]+]], [[REG4]], [[REG1]], 1
40; CHECK-P9: stxvx [[REG5]]
41
Bill Schmidt2be80542015-07-21 21:40:17 +000042define void @bar1() {
43entry:
44 %0 = load <2 x double>, <2 x double>* @x, align 16
45 %1 = load double, double* @y, align 8
46 %vecins = insertelement <2 x double> %0, double %1, i32 1
47 store <2 x double> %vecins, <2 x double>* @z, align 16
48 ret void
49}
50
51; CHECK-LABEL: @bar1
52; CHECK-DAG: lxvd2x [[REG1:[0-9]+]]
53; CHECK-DAG: lxsdx [[REG2:[0-9]+]]
Bill Schmidt34af5e12015-11-10 21:38:26 +000054; CHECK: xxspltd [[REG4:[0-9]+]], [[REG2]], 0
Bill Schmidt2be80542015-07-21 21:40:17 +000055; CHECK: xxmrghd [[REG5:[0-9]+]], [[REG1]], [[REG4]]
56; CHECK: stxvd2x [[REG5]]
57
Nemanja Ivanovic6e7879c2016-09-22 09:52:19 +000058; CHECK-P9-LABEL: @bar1
59; CHECK-P9-DAG: lxvx [[REG1:[0-9]+]]
60; CHECK-P9-DAG: lxsdx [[REG2:[0-9]+]]
61; CHECK-P9: xxspltd [[REG4:[0-9]+]], [[REG2]], 0
62; CHECK-P9: xxmrghd [[REG5:[0-9]+]], [[REG1]], [[REG4]]
63; CHECK-P9: stxvx [[REG5]]
64