[NVPTX] Fix off-by-one error when creating the VT list for an SDNode
authorJustin Holewinski <jholewinski@nvidia.com>
Thu, 5 Dec 2013 12:58:00 +0000 (12:58 +0000)
committerJustin Holewinski <jholewinski@nvidia.com>
Thu, 5 Dec 2013 12:58:00 +0000 (12:58 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196503 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/NVPTX/NVPTXISelDAGToDAG.cpp
test/CodeGen/NVPTX/ldparam-v4.ll [new file with mode: 0644]

index 4b8b306a705a32b79e268d3e84fb958329d769db..fc0c84d205bd8f359b0ef786705e279540c97f40 100644 (file)
@@ -2014,7 +2014,7 @@ SDNode *NVPTXDAGToDAGISel::SelectLoadParam(SDNode *Node) {
     VTs = CurDAG->getVTList(EltVT, EltVT, MVT::Other, MVT::Glue);
   } else {
     EVT EVTs[] = { EltVT, EltVT, EltVT, EltVT, MVT::Other, MVT::Glue };
-    VTs = CurDAG->getVTList(&EVTs[0], 5);
+    VTs = CurDAG->getVTList(&EVTs[0], array_lengthof(EVTs));
   }
 
   unsigned OffsetVal = cast<ConstantSDNode>(Offset)->getZExtValue();
diff --git a/test/CodeGen/NVPTX/ldparam-v4.ll b/test/CodeGen/NVPTX/ldparam-v4.ll
new file mode 100644 (file)
index 0000000..ec306aa
--- /dev/null
@@ -0,0 +1,10 @@
+; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s
+
+declare <4 x float> @bar()
+
+define void @foo(<4 x float>* %ptr) {
+; CHECK: ld.param.v4.f32
+  %val = tail call <4 x float> @bar()
+  store <4 x float> %val, <4 x float>* %ptr
+  ret void
+}