mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-19 04:32:19 +00:00
R600/SI: Expand misaligned 16-bit memory accesses
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228190 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fd4c349de2
commit
89c96b1cd0
@ -324,6 +324,11 @@ bool SITargetLowering::allowsMisalignedMemoryAccesses(EVT VT,
|
||||
return Align % 4 == 0;
|
||||
}
|
||||
|
||||
// Smaller than dword value must be aligned.
|
||||
// FIXME: This should be allowed on CI+
|
||||
if (VT.bitsLT(MVT::i32))
|
||||
return false;
|
||||
|
||||
// 8.1.6 - For Dword or larger reads or writes, the two LSBs of the
|
||||
// byte-address are ignored, thus forcing Dword alignment.
|
||||
// This applies to private, global, and constant memory.
|
||||
|
@ -1,6 +1,30 @@
|
||||
; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs< %s | FileCheck -check-prefix=SI %s
|
||||
; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs< %s | FileCheck -check-prefix=SI %s
|
||||
|
||||
; SI-LABEL: {{^}}unaligned_load_store_i16_local:
|
||||
; SI: ds_read_u8
|
||||
; SI: ds_read_u8
|
||||
; SI: ds_write_b8
|
||||
; SI: ds_write_b8
|
||||
; SI: s_endpgm
|
||||
define void @unaligned_load_store_i16_local(i16 addrspace(3)* %p, i16 addrspace(3)* %r) nounwind {
|
||||
%v = load i16 addrspace(3)* %p, align 1
|
||||
store i16 %v, i16 addrspace(3)* %r, align 1
|
||||
ret void
|
||||
}
|
||||
|
||||
; SI-LABEL: {{^}}unaligned_load_store_i16_global:
|
||||
; SI: buffer_load_ubyte
|
||||
; SI: buffer_load_ubyte
|
||||
; SI: buffer_store_byte
|
||||
; SI: buffer_store_byte
|
||||
; SI: s_endpgm
|
||||
define void @unaligned_load_store_i16_global(i16 addrspace(1)* %p, i16 addrspace(1)* %r) nounwind {
|
||||
%v = load i16 addrspace(1)* %p, align 1
|
||||
store i16 %v, i16 addrspace(1)* %r, align 1
|
||||
ret void
|
||||
}
|
||||
|
||||
; SI-LABEL: {{^}}unaligned_load_store_i32_local:
|
||||
; SI: ds_read_u8
|
||||
; SI: ds_read_u8
|
||||
|
Loading…
x
Reference in New Issue
Block a user