[NVPTX] Fix logic error in loading vector parameters of more than 4 components
authorJustin Holewinski <jholewinski@nvidia.com>
Mon, 11 Nov 2013 19:28:16 +0000 (19:28 +0000)
committerJustin Holewinski <jholewinski@nvidia.com>
Mon, 11 Nov 2013 19:28:16 +0000 (19:28 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194409 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/NVPTX/NVPTXISelLowering.cpp
test/CodeGen/NVPTX/vec8.ll [new file with mode: 0644]

index 828242db8880239ef09a853bd87b5a84e0d8a059..55caaad65b1646927027107270f8fbd169be2b1b 100644 (file)
@@ -1595,7 +1595,7 @@ SDValue NVPTXTargetLowering::LowerFormalArguments(
             }
             Ofst += TD->getTypeAllocSize(VecVT.getTypeForEVT(F->getContext()));
           }
-          InsIdx += VecSize;
+          InsIdx += NumElts;
         }
 
         if (NumElts > 0)
diff --git a/test/CodeGen/NVPTX/vec8.ll b/test/CodeGen/NVPTX/vec8.ll
new file mode 100644 (file)
index 0000000..03f5cfc
--- /dev/null
@@ -0,0 +1,13 @@
+; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s
+
+target triple = "nvptx-unknown-cuda"
+
+; CHECK: .visible .func foo
+define void @foo(<8 x i8> %a, i8* %b) {
+  %t0 = extractelement <8 x i8> %a, i32 0
+; CHECK-DAG: ld.param.v4.u8
+; CHECK-DAG: ld.param.u32
+  store i8 %t0, i8* %b
+  ret void
+}
+