[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)
commitac451066f48820a0be4bccba0a64b7c2e2dc0c35
tree9f5cd54b26dbc5609bb35425a60f23ca5fb76bcb
parenta2e5deb86dd5279a806876a31332666f338aba55
[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]

llvm-svn: 213186
llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp
llvm/test/CodeGen/NVPTX/misaligned-vector-ldst.ll [new file with mode: 0644]