71 lines · plain
1; RUN: llc -verify-machineinstrs -mcpu=pwr8 -mtriple=powerpc64le-unknown-linux-gnu -O3 < %s | FileCheck %s2 3; These tests verify that VSX swap optimization works for various4; manipulations of <2 x double> vectors.5 6@x = global <2 x double> <double 9.970000e+01, double -1.032220e+02>, align 167@z = global <2 x double> <double 2.332000e+01, double 3.111111e+01>, align 168 9define void @bar0(double %y) {10entry:11 %0 = load <2 x double>, ptr @x, align 1612 %vecins = insertelement <2 x double> %0, double %y, i32 013 store <2 x double> %vecins, ptr @z, align 1614 ret void15}16 17; CHECK-LABEL: @bar018; CHECK-DAG: xxswapd 0, 119; CHECK-DAG: lxvd2x [[REG1:[0-9]+]]20; CHECK: xxmrgld [[REG2:[0-9]+]], 0, [[REG1]]21; CHECK: stxvd2x [[REG2]]22; CHECK-NOT: xxswapd23 24define void @bar1(double %y) {25entry:26 %0 = load <2 x double>, ptr @x, align 1627 %vecins = insertelement <2 x double> %0, double %y, i32 128 store <2 x double> %vecins, ptr @z, align 1629 ret void30}31 32; CHECK-LABEL: @bar133; CHECK-DAG: xxswapd 0, 134; CHECK-DAG: lxvd2x [[REG1:[0-9]+]]35; CHECK: xxpermdi [[REG2:[0-9]+]], [[REG1]], 0, 136; CHECK: stxvd2x [[REG2]]37; CHECK-NOT: xxswapd38 39define void @baz0() {40entry:41 %0 = load <2 x double>, ptr @z, align 1642 %1 = load <2 x double>, ptr @x, align 1643 %vecins = shufflevector <2 x double> %0, <2 x double> %1, <2 x i32> <i32 0, i32 2>44 store <2 x double> %vecins, ptr @z, align 1645 ret void46}47 48; CHECK-LABEL: @baz049; CHECK: lxvd2x50; CHECK: lxvd2x51; CHECK: xxmrghd52; CHECK: stxvd2x53; CHECK-NOT: xxswapd54 55define void @baz1() {56entry:57 %0 = load <2 x double>, ptr @z, align 1658 %1 = load <2 x double>, ptr @x, align 1659 %vecins = shufflevector <2 x double> %0, <2 x double> %1, <2 x i32> <i32 3, i32 1>60 store <2 x double> %vecins, ptr @z, align 1661 ret void62}63 64; CHECK-LABEL: @baz165; CHECK: lxvd2x66; CHECK: lxvd2x67; CHECK: xxmrgld68; CHECK: stxvd2x69; CHECK-NOT: xxswapd70 71