Expand unaligned 32 bit loads from an address which is a constant
authorRichard Osborne <richard@xmos.com>
Thu, 16 Jul 2009 10:42:35 +0000 (10:42 +0000)
committerRichard Osborne <richard@xmos.com>
Thu, 16 Jul 2009 10:42:35 +0000 (10:42 +0000)
commitccb7e96ef0ef743c822ce19aac324b429198bff2
treefe61e988b5308bc5c137f6148e43bbed11adf4de
parent7f47ce966219b8dbc37cf8c289660dd83923289f
Expand unaligned 32 bit loads from an address which is a constant
offset from a 32 bit aligned base as follows:

  ldw low, base[offset >> 2]
  ldw high, base[(offset >> 2) + 1]
  shr low_shifted, low, (offset & 0x3) * 8
  shl high_shifted, high, 32 - (offset & 0x3) * 8
  or result, low_shifted, high_shifted

Expand 32 bit loads / stores with 16 bit alignment into two 16 bit
loads / stores.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75902 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/XCore/XCoreISelLowering.cpp
test/CodeGen/XCore/unaligned_load.ll
test/CodeGen/XCore/unaligned_store.ll