From 41e95a89e409ecaeebc6b8db802bfa64f953a8ff Mon Sep 17 00:00:00 2001 From: Bill Schmidt Date: Tue, 9 Dec 2014 16:59:57 +0000 Subject: [PATCH] [PowerPC 4/4] Enable little-endian support for VSX. With the foregoing three patches, VSX instructions can be used for little endian. This patch removes the restriction that prevented this, and re-enables the test cases from the first three patches. llvm-svn: 223792 --- lib/Target/PowerPC/PPCSubtarget.cpp | 7 ------- test/CodeGen/PowerPC/vsx-ldst-builtin-le.ll | 14 ++++---------- test/CodeGen/PowerPC/vsx-ldst.ll | 11 ++++------- test/CodeGen/PowerPC/vsx_insert_extract_le.ll | 7 +------ test/CodeGen/PowerPC/vsx_shuffle_le.ll | 7 +------ 5 files changed, 10 insertions(+), 36 deletions(-) diff --git a/lib/Target/PowerPC/PPCSubtarget.cpp b/lib/Target/PowerPC/PPCSubtarget.cpp index 04e7ec66e5b..8f0e3a49ee9 100644 --- a/lib/Target/PowerPC/PPCSubtarget.cpp +++ b/lib/Target/PowerPC/PPCSubtarget.cpp @@ -154,13 +154,6 @@ void PPCSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) { // Determine endianness. IsLittleEndian = (TargetTriple.getArch() == Triple::ppc64le); - // FIXME: For now, we disable VSX in little-endian mode until endian - // issues in those instructions can be addressed. - if (IsLittleEndian) { - HasVSX = false; - HasP8Vector = false; - } - // Determine default ABI. if (TargetABI == PPC_ABI_UNKNOWN) { if (!isDarwin() && IsPPC64) { diff --git a/test/CodeGen/PowerPC/vsx-ldst-builtin-le.ll b/test/CodeGen/PowerPC/vsx-ldst-builtin-le.ll index d4285c2dc9d..7367672eab8 100644 --- a/test/CodeGen/PowerPC/vsx-ldst-builtin-le.ll +++ b/test/CodeGen/PowerPC/vsx-ldst-builtin-le.ll @@ -1,13 +1,7 @@ -;; Note: This test case disable VSX until LE support is enabled, as -;; otherwise we fail trying to deal with the @llvm.ppc.vsx.* builtins -;; for loads and stores. -; RUN: llc -mcpu=pwr8 -O2 -mtriple=powerpc64-unknown-linux-gnu < %s -;; FIXME: Delete this and above lines when VSX LE support enabled. - -; R;UN: llc -mcpu=pwr8 -mattr=+vsx -O2 -mtriple=powerpc64le-unknown-linux-gnu < %s > %t -; R;UN: grep lxvd2x < %t | count 18 -; R;UN: grep stxvd2x < %t | count 18 -; R;UN: grep xxpermdi < %t | count 36 +; RUN: llc -mcpu=pwr8 -mattr=+vsx -O2 -mtriple=powerpc64le-unknown-linux-gnu < %s > %t +; RUN: grep lxvd2x < %t | count 18 +; RUN: grep stxvd2x < %t | count 18 +; RUN: grep xxpermdi < %t | count 36 @vf = global <4 x float> , align 16 @vd = global <2 x double> , align 16 diff --git a/test/CodeGen/PowerPC/vsx-ldst.ll b/test/CodeGen/PowerPC/vsx-ldst.ll index b9d23d9c270..688187d1fcb 100644 --- a/test/CodeGen/PowerPC/vsx-ldst.ll +++ b/test/CodeGen/PowerPC/vsx-ldst.ll @@ -9,13 +9,10 @@ ; RUN: grep stxvw4x < %t | count 3 ; RUN: grep stxvd2x < %t | count 3 -;; Note: The LE test variant is disabled until LE support for VSX is enabled, -;; as otherwise we fail to get the expected counts. - -; R;UN: llc -mcpu=pwr8 -mattr=+vsx -O2 -mtriple=powerpc64le-unknown-linux-gnu < %s > %t -; R;UN: grep lxvd2x < %t | count 6 -; R;UN: grep stxvd2x < %t | count 6 -; R;UN: grep xxpermdi < %t | count 12 +; RUN: llc -mcpu=pwr8 -mattr=+vsx -O2 -mtriple=powerpc64le-unknown-linux-gnu < %s > %t +; RUN: grep lxvd2x < %t | count 6 +; RUN: grep stxvd2x < %t | count 6 +; RUN: grep xxpermdi < %t | count 12 @vsi = global <4 x i32> , align 16 @vui = global <4 x i32> , align 16 diff --git a/test/CodeGen/PowerPC/vsx_insert_extract_le.ll b/test/CodeGen/PowerPC/vsx_insert_extract_le.ll index c765ed259ad..0a9df377911 100644 --- a/test/CodeGen/PowerPC/vsx_insert_extract_le.ll +++ b/test/CodeGen/PowerPC/vsx_insert_extract_le.ll @@ -1,9 +1,4 @@ -; Note: This test is disabled until VSX is enabled for LE, as otherwise -; we don't get the correct code gen. -; RUN: llc -mcpu=pwr8 -mtriple=powerpc64-unknown-linux-gnu < %s -; FIXME: Remove this and all above lines when VSX is enabled for LE. - -; R;UN: llc -mcpu=pwr8 -mattr=+vsx -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s +; RUN: llc -mcpu=pwr8 -mattr=+vsx -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s define <2 x double> @testi0(<2 x double>* %p1, double* %p2) { %v = load <2 x double>* %p1 diff --git a/test/CodeGen/PowerPC/vsx_shuffle_le.ll b/test/CodeGen/PowerPC/vsx_shuffle_le.ll index b3682b96f13..588cfdad785 100644 --- a/test/CodeGen/PowerPC/vsx_shuffle_le.ll +++ b/test/CodeGen/PowerPC/vsx_shuffle_le.ll @@ -1,9 +1,4 @@ -; Note: This test is disabled until VSX is enabled for LE, as otherwise -; we don't get the correct code gen. -; RUN: llc -mcpu=pwr8 -mtriple=powerpc64-unknown-linux-gnu < %s -; FIXME: Remove this and all above lines when VSX is enabled for LE. - -; R;UN: llc -mcpu=pwr8 -mattr=+vsx -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s +; RUN: llc -mcpu=pwr8 -mattr=+vsx -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s define <2 x double> @test00(<2 x double>* %p1, <2 x double>* %p2) { %v1 = load <2 x double>* %p1