diff options
Diffstat (limited to 'test/CodeGen/PowerPC/unaligned.ll')
-rw-r--r-- | test/CodeGen/PowerPC/unaligned.ll | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/test/CodeGen/PowerPC/unaligned.ll b/test/CodeGen/PowerPC/unaligned.ll index d469c62..64c03cd 100644 --- a/test/CodeGen/PowerPC/unaligned.ll +++ b/test/CodeGen/PowerPC/unaligned.ll @@ -1,4 +1,6 @@ -; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s +; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 -mattr=-vsx | FileCheck %s +target datalayout = "E-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f128:64:128-n32" +; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 -mattr=+vsx | FileCheck -check-prefix=CHECK-VSX %s target datalayout = "E-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f128:64:128-n32" define void @foo1(i16* %p, i16* %r) nounwind { @@ -10,6 +12,10 @@ entry: ; CHECK: @foo1 ; CHECK: lhz ; CHECK: sth + +; CHECK-VSX: @foo1 +; CHECK-VSX: lhz +; CHECK-VSX: sth } define void @foo2(i32* %p, i32* %r) nounwind { @@ -21,6 +27,10 @@ entry: ; CHECK: @foo2 ; CHECK: lwz ; CHECK: stw + +; CHECK-VSX: @foo2 +; CHECK-VSX: lwz +; CHECK-VSX: stw } define void @foo3(i64* %p, i64* %r) nounwind { @@ -32,6 +42,10 @@ entry: ; CHECK: @foo3 ; CHECK: ld ; CHECK: std + +; CHECK-VSX: @foo3 +; CHECK-VSX: ld +; CHECK-VSX: std } define void @foo4(float* %p, float* %r) nounwind { @@ -43,6 +57,10 @@ entry: ; CHECK: @foo4 ; CHECK: lfs ; CHECK: stfs + +; CHECK-VSX: @foo4 +; CHECK-VSX: lfs +; CHECK-VSX: stfs } define void @foo5(double* %p, double* %r) nounwind { @@ -54,6 +72,10 @@ entry: ; CHECK: @foo5 ; CHECK: lfd ; CHECK: stfd + +; CHECK-VSX: @foo5 +; CHECK-VSX: lxsdx +; CHECK-VSX: stxsdx } define void @foo6(<4 x float>* %p, <4 x float>* %r) nounwind { @@ -69,5 +91,15 @@ entry: ; CHECK-DAG: ld ; CHECK-DAG: stdx ; CHECK: stdx + +; For VSX on P7, unaligned loads and stores are preferable to aligned +; stack slots, but lvsl/vperm is better still. (On P8 lxvw4x is preferable.) +; Using unaligned stxvw4x is preferable on both machines. +; CHECK-VSX: @foo6 +; CHECK-VSX-DAG: lvsl +; CHECK-VSX-DAG: lvx +; CHECK-VSX-DAG: lvx +; CHECK-VSX: vperm +; CHECK-VSX: stxvw4x } |