diff options
| author | Artem Belevich <tra@google.com> | 2016-06-29 20:51:15 +0000 |
|---|---|---|
| committer | Artem Belevich <tra@google.com> | 2016-06-29 20:51:15 +0000 |
| commit | 4d5d7be8cc5c34ba03a25975bdcb7e1f96a82997 (patch) | |
| tree | 63630bfa433d848162a6167510ff06ed2fd9398b /llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp | |
| parent | a5da256f9225b8a1fc4010a3c8101d91fba264bd (diff) | |
| download | bcm5719-llvm-4d5d7be8cc5c34ba03a25975bdcb7e1f96a82997.tar.gz bcm5719-llvm-4d5d7be8cc5c34ba03a25975bdcb7e1f96a82997.zip | |
Revert r273313 "[NVPTX] Improve lowering of byval args of device functions."
The change causes llvm crash in some unoptimized builds.
llvm-svn: 274163
Diffstat (limited to 'llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp')
| -rw-r--r-- | llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp b/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp index 7d457aff46c..e81f824b2f3 100644 --- a/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp +++ b/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp @@ -2078,6 +2078,7 @@ SDValue NVPTXTargetLowering::LowerFormalArguments( SDValue Root = DAG.getRoot(); std::vector<SDValue> OutChains; + bool isKernel = llvm::isKernelFunction(*F); bool isABI = (STI.getSmVersion() >= 20); assert(isABI && "Non-ABI compilation is not supported"); if (!isABI) @@ -2111,8 +2112,7 @@ SDValue NVPTXTargetLowering::LowerFormalArguments( theArgs[i], (theArgs[i]->getParent() ? theArgs[i]->getParent()->getParent() : nullptr))) { - assert(llvm::isKernelFunction(*F) && - "Only kernels can have image/sampler params"); + assert(isKernel && "Only kernels can have image/sampler params"); InVals.push_back(DAG.getConstant(i + 1, dl, MVT::i32)); continue; } @@ -2334,11 +2334,6 @@ SDValue NVPTXTargetLowering::LowerFormalArguments( // machine instruction fails because TargetExternalSymbol // (not lowered) is target dependent, and CopyToReg assumes // the source is lowered. - // - // Byval arguments for regular function are lowered the same way - // as for kernels in order to generate better code and work around - // a known issue in ptxas. See comments in - // NVPTXDAGToDAGISel::SelectAddrSpaceCast() for the gory details. EVT ObjectVT = getValueType(DL, Ty); assert(ObjectVT == Ins[InsIdx].VT && "Ins type did not match function type"); @@ -2346,7 +2341,14 @@ SDValue NVPTXTargetLowering::LowerFormalArguments( SDValue p = DAG.getNode(NVPTXISD::MoveParam, dl, ObjectVT, Arg); if (p.getNode()) p.getNode()->setIROrder(idx + 1); - InVals.push_back(p); + if (isKernel) + InVals.push_back(p); + else { + SDValue p2 = DAG.getNode( + ISD::INTRINSIC_WO_CHAIN, dl, ObjectVT, + DAG.getConstant(Intrinsic::nvvm_ptr_local_to_gen, dl, MVT::i32), p); + InVals.push_back(p2); + } } // Clang will check explicit VarArg and issue error if any. However, Clang |

