summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGautam Chakrabarti <gchakrabarti@nvidia.com>2014-01-28 18:35:29 +0000
committerGautam Chakrabarti <gchakrabarti@nvidia.com>2014-01-28 18:35:29 +0000
commit2c283400f9639e245816d3c5cc2b4e2bfb8e02b6 (patch)
tree560a6df024630587f77d67d6c9c7f01b0752dc32
parent2ea61f17ad77956d0a2e969a2085b480424d665c (diff)
downloadbcm5719-llvm-2c283400f9639e245816d3c5cc2b4e2bfb8e02b6.tar.gz
bcm5719-llvm-2c283400f9639e245816d3c5cc2b4e2bfb8e02b6.zip
[NVPTX] Fix emitting aggregate parameters
The code was missing the case for aggregate parameters and hence was emitting them as .b0 type. Also fixed a couple of comments. llvm-svn: 200325
-rw-r--r--llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp6
-rw-r--r--llvm/test/CodeGen/NVPTX/aggr-param.ll20
2 files changed, 23 insertions, 3 deletions
diff --git a/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp b/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
index 2c8e7e70f68..5fad27e47a9 100644
--- a/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
+++ b/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
@@ -1522,8 +1522,8 @@ void NVPTXAsmPrinter::emitFunctionParamList(const Function *F, raw_ostream &O) {
}
if (PAL.hasAttribute(paramIndex + 1, Attribute::ByVal) == false) {
- if (Ty->isVectorTy()) {
- // Just print .param .b8 .align <a> .param[size];
+ if (Ty->isAggregateType() || Ty->isVectorTy()) {
+ // Just print .param .align <a> .b8 .param[size];
// <a> = PAL.getparamalignment
// size = typeallocsize of element type
unsigned align = PAL.getParamAlignment(paramIndex + 1);
@@ -1603,7 +1603,7 @@ void NVPTXAsmPrinter::emitFunctionParamList(const Function *F, raw_ostream &O) {
Type *ETy = PTy->getElementType();
if (isABI || isKernelFunc) {
- // Just print .param .b8 .align <a> .param[size];
+ // Just print .param .align <a> .b8 .param[size];
// <a> = PAL.getparamalignment
// size = typeallocsize of element type
unsigned align = PAL.getParamAlignment(paramIndex + 1);
diff --git a/llvm/test/CodeGen/NVPTX/aggr-param.ll b/llvm/test/CodeGen/NVPTX/aggr-param.ll
new file mode 100644
index 00000000000..21deb7ebce8
--- /dev/null
+++ b/llvm/test/CodeGen/NVPTX/aggr-param.ll
@@ -0,0 +1,20 @@
+; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s
+
+; Make sure aggregate param types get emitted properly.
+
+%struct.float4 = type { float, float, float, float }
+
+; CHECK: .visible .func bar
+; CHECK: .param .align 4 .b8 bar_param_0[16]
+define void @bar(%struct.float4 %f) {
+entry:
+ ret void
+}
+
+; CHECK: .visible .func foo
+; CHECK: .param .align 4 .b8 foo_param_0[20]
+define void @foo([5 x i32] %f) {
+entry:
+ ret void
+}
+
OpenPOWER on IntegriCloud