diff options
| author | Sanjay Patel <spatel@rotateright.com> | 2015-09-02 15:42:49 +0000 |
|---|---|---|
| committer | Sanjay Patel <spatel@rotateright.com> | 2015-09-02 15:42:49 +0000 |
| commit | fbcd189f8aab34ac2573ddf8d9ace2921b87e703 (patch) | |
| tree | 5731e43ad2334b62ce6fdbd5f41f884287c75c23 /llvm/test/CodeGen | |
| parent | 9b819036076fe3a4e27c5a0f923fe139012fdfc7 (diff) | |
| download | bcm5719-llvm-fbcd189f8aab34ac2573ddf8d9ace2921b87e703.tar.gz bcm5719-llvm-fbcd189f8aab34ac2573ddf8d9ace2921b87e703.zip | |
[x86] fix allowsMisalignedMemoryAccesses() for 8-byte and smaller accesses
This is a continuation of the fix from:
http://reviews.llvm.org/D10662
and discussion in:
http://reviews.llvm.org/D12154
Here, we distinguish slow unaligned SSE (128-bit) accesses from slow unaligned
scalar (64-bit and under) accesses. Other lowering (eg, getOptimalMemOpType)
assumes that unaligned scalar accesses are always ok, so this changes
allowsMisalignedMemoryAccesses() to match that behavior.
Differential Revision: http://reviews.llvm.org/D12543
llvm-svn: 246658
Diffstat (limited to 'llvm/test/CodeGen')
| -rw-r--r-- | llvm/test/CodeGen/X86/memcpy-2.ll | 26 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/pr11985.ll | 22 |
2 files changed, 19 insertions, 29 deletions
diff --git a/llvm/test/CodeGen/X86/memcpy-2.ll b/llvm/test/CodeGen/X86/memcpy-2.ll index 1d3033fd77b..7ef61c9a677 100644 --- a/llvm/test/CodeGen/X86/memcpy-2.ll +++ b/llvm/test/CodeGen/X86/memcpy-2.ll @@ -5,15 +5,6 @@ ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=core2 | FileCheck %s -check-prefix=X86-64 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=nehalem | FileCheck %s -check-prefix=NHM_64 -;;; TODO: The last run line chooses cpu=nehalem to reveal possible bugs in the "t4" test case. -;;; -;;; Nehalem has a 'fast unaligned memory' attribute, so (1) some of the loads and stores -;;; are certainly unaligned and (2) the first load and first store overlap with the second -;;; load and second store respectively. -;;; -;;; Is either of the sequences ideal? -;;; Is the ideal code being generated for all CPU models? - @.str = internal constant [25 x i8] c"image\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" @.str2 = internal constant [30 x i8] c"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\00", align 4 @@ -190,13 +181,18 @@ entry: ; NOSSE: movl $2021161080 ; NOSSE: movl $2021161080 +;;; TODO: (1) Some of the loads and stores are certainly unaligned and (2) the first load and first +;;; store overlap with the second load and second store respectively. +;;; +;;; Is either of the sequences ideal? + ; X86-64-LABEL: t4: -; X86-64: movabsq $8680820740569200760, %rax -; X86-64: movq %rax -; X86-64: movq %rax -; X86-64: movq %rax -; X86-64: movw $120 -; X86-64: movl $2021161080 +; X86-64: movabsq $33909456017848440, %rax ## imm = 0x78787878787878 +; X86-64: movq %rax, -10(%rsp) +; X86-64: movabsq $8680820740569200760, %rax ## imm = 0x7878787878787878 +; X86-64: movq %rax, -16(%rsp) +; X86-64: movq %rax, -24(%rsp) +; X86-64: movq %rax, -32(%rsp) ; NHM_64-LABEL: t4: ; NHM_64: movups _.str2+14(%rip), %xmm0 diff --git a/llvm/test/CodeGen/X86/pr11985.ll b/llvm/test/CodeGen/X86/pr11985.ll index 1adf6d42347..aae00de112d 100644 --- a/llvm/test/CodeGen/X86/pr11985.ll +++ b/llvm/test/CodeGen/X86/pr11985.ll @@ -1,26 +1,20 @@ ; RUN: llc < %s -mtriple=x86_64-pc-linux -mcpu=prescott | FileCheck %s --check-prefix=PRESCOTT ; RUN: llc < %s -mtriple=x86_64-pc-linux -mcpu=nehalem | FileCheck %s --check-prefix=NEHALEM -;;; TODO: The last run line chooses cpu=nehalem to reveal possible bugs in the "foo" test case. -;;; -;;; Nehalem has a 'fast unaligned memory' attribute, so (1) some of the loads and stores -;;; are certainly unaligned and (2) the first load and first store overlap with the second -;;; load and second store respectively. +;;; TODO: (1) Some of the loads and stores are certainly unaligned and (2) the first load and first +;;; store overlap with the second load and second store respectively. ;;; ;;; Is either of these sequences ideal? -;;; Is the ideal code being generated for all CPU models? define float @foo(i8* nocapture %buf, float %a, float %b) nounwind uwtable { ; PRESCOTT-LABEL: foo: ; PRESCOTT: # BB#0: # %entry -; PRESCOTT-NEXT: movw .Ltmp0+20(%rip), %ax -; PRESCOTT-NEXT: movw %ax, 20(%rdi) -; PRESCOTT-NEXT: movl .Ltmp0+16(%rip), %eax -; PRESCOTT-NEXT: movl %eax, 16(%rdi) -; PRESCOTT-NEXT: movq .Ltmp0+8(%rip), %rax -; PRESCOTT-NEXT: movq %rax, 8(%rdi) -; PRESCOTT-NEXT: movq .Ltmp0(%rip), %rax -; PRESCOTT-NEXT: movq %rax, (%rdi) +; PRESCOTT-NEXT: movq .Ltmp0+14(%rip), %rax +; PRESCOTT-NEXT: movq %rax, 14(%rdi) +; PRESCOTT-NEXT: movq .Ltmp0+8(%rip), %rax +; PRESCOTT-NEXT: movq %rax, 8(%rdi) +; PRESCOTT-NEXT: movq .Ltmp0(%rip), %rax +; PRESCOTT-NEXT: movq %rax, (%rdi) ; ; NEHALEM-LABEL: foo: ; NEHALEM: # BB#0: # %entry |

