diff options
author | Justin Holewinski <justin.holewinski@gmail.com> | 2012-11-09 23:50:24 +0000 |
---|---|---|
committer | Justin Holewinski <justin.holewinski@gmail.com> | 2012-11-09 23:50:24 +0000 |
commit | 89443ff7ae81e6a439b5b67e5dd587a450090599 (patch) | |
tree | 94e043f5f2634de56d26efc51faa722e5272b79e | |
parent | f1adbfe4e23ce08d1afa1245f2515e863813a6ac (diff) | |
download | llvm-89443ff7ae81e6a439b5b67e5dd587a450090599.tar.gz llvm-89443ff7ae81e6a439b5b67e5dd587a450090599.tar.bz2 llvm-89443ff7ae81e6a439b5b67e5dd587a450090599.tar.xz |
[NVPTX] Use ABI alignment for parameters when alignment is not specified.
Affects SM 2.0+. Fixes bug 13324.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167646 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/NVPTX/NVPTXAsmPrinter.cpp | 3 | ||||
-rw-r--r-- | test/CodeGen/NVPTX/param-align.ll | 25 |
2 files changed, 28 insertions, 0 deletions
diff --git a/lib/Target/NVPTX/NVPTXAsmPrinter.cpp b/lib/Target/NVPTX/NVPTXAsmPrinter.cpp index d3dfb35e26..348ef720f0 100644 --- a/lib/Target/NVPTX/NVPTXAsmPrinter.cpp +++ b/lib/Target/NVPTX/NVPTXAsmPrinter.cpp @@ -1525,6 +1525,9 @@ void NVPTXAsmPrinter::emitFunctionParamList(const Function *F, // <a> = PAL.getparamalignment // size = typeallocsize of element type unsigned align = PAL.getParamAlignment(paramIndex+1); + if (align == 0) + align = TD->getABITypeAlignment(ETy); + unsigned sz = TD->getTypeAllocSize(ETy); O << "\t.param .align " << align << " .b8 "; diff --git a/test/CodeGen/NVPTX/param-align.ll b/test/CodeGen/NVPTX/param-align.ll new file mode 100644 index 0000000000..84ccb650d4 --- /dev/null +++ b/test/CodeGen/NVPTX/param-align.ll @@ -0,0 +1,25 @@ +; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s + +;;; Need 4-byte alignment on float* passed byval +define ptx_device void @t1(float* byval %x) { +; CHECK: .func t1 +; CHECK: .param .align 4 .b8 t1_param_0[4] + ret void +} + + +;;; Need 8-byte alignment on double* passed byval +define ptx_device void @t2(double* byval %x) { +; CHECK: .func t2 +; CHECK: .param .align 8 .b8 t2_param_0[8] + ret void +} + + +;;; Need 4-byte alignment on float2* passed byval +%struct.float2 = type { float, float } +define ptx_device void @t3(%struct.float2* byval %x) { +; CHECK: .func t3 +; CHECK: .param .align 4 .b8 t3_param_0[8] + ret void +} |