Index: lib/Target/NVPTX/NVPTXISelLowering.cpp =================================================================== --- lib/Target/NVPTX/NVPTXISelLowering.cpp +++ lib/Target/NVPTX/NVPTXISelLowering.cpp @@ -1355,7 +1355,8 @@ // .param .align 16 .b8 retval0[], or // .param .b retval0 unsigned resultsz = TD->getTypeAllocSizeInBits(retTy); - if (retTy->isSingleValueType()) { + if (retTy->isFloatingPointTy() || retTy->isIntegerTy() || + retTy->isPointerTy()) { // Scalar needs to be at least 32bit wide if (resultsz < 32) resultsz = 32; Index: test/CodeGen/NVPTX/vector-return.ll =================================================================== --- /dev/null +++ test/CodeGen/NVPTX/vector-return.ll @@ -0,0 +1,12 @@ +; RUN: llc < %s -march=nvptx64 -mcpu=sm_35 | FileCheck %s + +declare fastcc <2 x float> @bar(<2 x float> %input) + +define void @foo(<2 x float> %input, <2 x float>* %output) { +; CHECK-LABEL: @foo +entry: + %call = tail call fastcc <2 x float> @bar(<2 x float> %input) +; CHECK: .param .align 8 .b8 retval0[8]; + store <2 x float> %call, <2 x float>* %output, align 8 + ret void +}