diff options
Diffstat (limited to 'llvm/test/CodeGen/PowerPC/ppc64-align-long-double.ll')
-rw-r--r-- | llvm/test/CodeGen/PowerPC/ppc64-align-long-double.ll | 78 |
1 files changed, 39 insertions, 39 deletions
diff --git a/llvm/test/CodeGen/PowerPC/ppc64-align-long-double.ll b/llvm/test/CodeGen/PowerPC/ppc64-align-long-double.ll index 8a5c5731865..c9a45a881f1 100644 --- a/llvm/test/CodeGen/PowerPC/ppc64-align-long-double.ll +++ b/llvm/test/CodeGen/PowerPC/ppc64-align-long-double.ll @@ -1,3 +1,4 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -verify-machineinstrs -mcpu=pwr7 -O2 -fast-isel=false -mattr=-vsx < %s | FileCheck %s ; RUN: llc -verify-machineinstrs -mcpu=pwr7 -O2 -fast-isel=false -mattr=+vsx < %s | FileCheck -check-prefix=CHECK-VSX %s ; RUN: llc -verify-machineinstrs -mcpu=pwr9 -O2 -fast-isel=false -mattr=+vsx < %s | FileCheck -check-prefix=CHECK-P9 %s @@ -12,49 +13,48 @@ target triple = "powerpc64-unknown-linux-gnu" %struct.S = type { double, ppc_fp128 } +; The additional stores are caused because we forward the value in the +; store->load->bitcast path to make a store and bitcast of the same +; value. Since the target does bitcast through memory and we no longer +; remember the address we need to do the store in a fresh local +; address. define ppc_fp128 @test(%struct.S* byval %x) nounwind { +; CHECK-LABEL: test: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: std 5, -16(1) +; CHECK-NEXT: std 6, -8(1) +; CHECK-NEXT: lfd 1, -16(1) +; CHECK-NEXT: lfd 2, -8(1) +; CHECK-NEXT: std 6, 72(1) +; CHECK-NEXT: std 5, 64(1) +; CHECK-NEXT: std 3, 48(1) +; CHECK-NEXT: std 4, 56(1) +; CHECK-NEXT: blr +; +; CHECK-VSX-LABEL: test: +; CHECK-VSX: # %bb.0: # %entry +; CHECK-VSX-NEXT: std 3, 48(1) +; CHECK-VSX-NEXT: std 6, 72(1) +; CHECK-VSX-NEXT: std 5, 64(1) +; CHECK-VSX-NEXT: std 4, 56(1) +; CHECK-VSX-NEXT: std 5, -16(1) +; CHECK-VSX-NEXT: std 6, -8(1) +; CHECK-VSX-NEXT: lfd 1, -16(1) +; CHECK-VSX-NEXT: lfd 2, -8(1) +; CHECK-VSX-NEXT: blr +; +; CHECK-P9-LABEL: test: +; CHECK-P9: # %bb.0: # %entry +; CHECK-P9-NEXT: mtvsrd 1, 5 +; CHECK-P9-NEXT: mtvsrd 2, 6 +; CHECK-P9-NEXT: std 6, 72(1) +; CHECK-P9-NEXT: std 5, 64(1) +; CHECK-P9-NEXT: std 3, 48(1) +; CHECK-P9-NEXT: std 4, 56(1) +; CHECK-P9-NEXT: blr entry: %b = getelementptr inbounds %struct.S, %struct.S* %x, i32 0, i32 1 %0 = load ppc_fp128, ppc_fp128* %b, align 16 ret ppc_fp128 %0 } -; The additional stores are caused because we forward the value in the -; store->load->bitcast path to make a store and bitcast of the same -; value. Since the target does bitcast through memory and we no longer -; remember the address we need to do the store in a fresh local -; address. - -; CHECK-DAG: std 6, 72(1) -; CHECK-DAG: std 5, 64(1) -; CHECK-DAG: std 4, 56(1) -; CHECK-DAG: std 3, 48(1) - -; CHECK-DAG: std 5, -16(1) -; CHECK-DAG: std 6, -8(1) -; CHECK-DAG: lfd 1, -16(1) -; CHECK-DAG: lfd 2, -8(1) - -; FIXMECHECK: lfd 1, 64(1) -; FIXMECHECK: lfd 2, 72(1) - -; CHECK-VSX-DAG: std 6, 72(1) -; CHECK-VSX-DAG: std 5, 64(1) -; CHECK-VSX-DAG: std 4, 56(1) -; CHECK-VSX-DAG: std 3, 48(1) -; CHECK-VSX-DAG: std 5, -16(1) -; CHECK-VSX-DAG: std 6, -8(1) -; CHECK-VSX: lfd 1, -16(1) -; CHECK-VSX: lfd 2, -8(1) - -; FIXME-VSX: addi 4, 1, 48 -; FIXME-VSX: lxsdx 1, 4, 3 -; FIXME-VSX: li 3, 24 -; FIXME-VSX: lxsdx 2, 4, 3 - -; CHECK-P9-DAG: std 6, 72(1) -; CHECK-P9-DAG: std 5, 64(1) -; CHECK-P9-DAG: std 4, 56(1) -; CHECK-P9-DAG: std 3, 48(1) -; CHECK-P9-DAG: mtvsrd 1, 5 -; CHECK-P9-DAG: mtvsrd 2, 6 |