[NVPTX] Honor alignment on vector loads/stores
authorJustin Holewinski <jholewinski@nvidia.com>
Wed, 16 Jul 2014 19:45:35 +0000 (19:45 +0000)
committerJustin Holewinski <jholewinski@nvidia.com>
Wed, 16 Jul 2014 19:45:35 +0000 (19:45 +0000)
commita1535e3b9b365c028c0ab56c4505b8afc8d6a86a
tree85e28405549c1bdbed278f2f005f40ab8b806c8e
parent5c3e016576619391edccd0d51ba12c5d1dcd9466
[NVPTX] Honor alignment on vector loads/stores

We were not considering the stated alignment on vector loads/stores,
leading us to generate vector instructions even when we do not have
sufficient alignment.

Now, for IR like:

  %1 = load <4 x float>, <4 x float>* %ptr, align 4

we will generate correct, conservative PTX like:

  ld.f32 ... [%ptr]
  ld.f32 ... [%ptr+4]
  ld.f32 ... [%ptr+8]
  ld.f32 ... [%ptr+12]

Or if we have an alignment of 8 (for example), we can
generate code like:

  ld.v2.f32 ... [%ptr]
  ld.v2.f32 ... [%ptr+8]

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213186 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/NVPTX/NVPTXISelLowering.cpp
test/CodeGen/NVPTX/misaligned-vector-ldst.ll [new file with mode: 0644]