Index: lib/CodeGen/AsmPrinter/AsmPrinter.cpp =================================================================== --- lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -695,7 +695,7 @@ OutStreamer->EmitLabel(DeadBlockSyms[i]); } - if (CurrentFnBegin) { + if (CurrentFnBegin && !MF->getTarget().getTargetTriple().isNVPTX()) { if (MAI->useAssignmentForEHBegin()) { MCSymbol *CurPos = OutContext.createTempSymbol(); OutStreamer->EmitLabel(CurPos); @@ -713,6 +713,13 @@ HI.Handler->beginFunction(MF); } + // For NVPTX target initial function labels must follow the debug location for + // the correct relocation info generation. + if (CurrentFnBegin && MF->getTarget().getTargetTriple().isNVPTX()) { + assert(!MAI->useAssignmentForEHBegin() && "EH is not supported for NVPTX."); + OutStreamer->EmitLabel(CurrentFnBegin); + } + // Emit the prologue data. if (F.hasPrologueData()) EmitGlobalConstant(F.getParent()->getDataLayout(), F.getPrologueData()); Index: test/DebugInfo/NVPTX/cu-range-hole.ll =================================================================== --- test/DebugInfo/NVPTX/cu-range-hole.ll +++ test/DebugInfo/NVPTX/cu-range-hole.ll @@ -6,8 +6,8 @@ ; CHECK: .param .b32 b_param_0 ; CHECK: ) ; CHECK: { -; CHECK: Lfunc_begin0: ; CHECK: .loc 1 1 0 +; CHECK: Lfunc_begin0: ; CHECK: .loc 1 1 0 ; CHECK: ret; ; CHECK: Lfunc_end0: @@ -27,6 +27,7 @@ ; CHECK: .param .b32 d_param_0 ; CHECK: ) ; CHECK: { +; CHECK: .loc 1 3 0 ; CHECK: Lfunc_begin2: ; CHECK: .loc 1 3 0 ; CHECK: ret; Index: test/DebugInfo/NVPTX/debug-loc-offset.ll =================================================================== --- test/DebugInfo/NVPTX/debug-loc-offset.ll +++ test/DebugInfo/NVPTX/debug-loc-offset.ll @@ -11,8 +11,8 @@ ; CHECK: .visible .func (.param .b32 func_retval0) _Z3bari( ; CHECK: { -; CHECK: Lfunc_begin0: ; CHECK: .loc [[CU1:[0-9]+]] 1 0 +; CHECK: Lfunc_begin0: ; CHECK: //DEBUG_VALUE: bar:b <- {{[0-9]+}} ; CHECK: //DEBUG_VALUE: bar:b <- {{[0-9]+}} @@ -39,8 +39,8 @@ ; CHECK: .visible .func _Z3baz1A( ; CHECK: { -; CHECK: Lfunc_begin1: ; CHECK: .loc [[CU2:[0-9]+]] 6 0 +; CHECK: Lfunc_begin1: ; CHECK: //DEBUG_VALUE: baz:z <- {{[0-9]+}} ; CHECK: //DEBUG_VALUE: baz:z <- {{[0-9]+}} ; CHECK: .loc [[CU2]] 10 0