diff --git a/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp b/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp --- a/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp +++ b/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp @@ -873,6 +873,8 @@ printReturnValStr(F, OS); OS << Name->getName(); emitFunctionParamList(F, OS); + if (shouldEmitPTXNoReturn(F, TM)) + OS << "\n.noreturn"; OS << ";\n"; OS << ".alias " << Name->getName() << ", " << F->getName() << ";\n"; diff --git a/llvm/test/CodeGen/NVPTX/alias.ll b/llvm/test/CodeGen/NVPTX/alias.ll --- a/llvm/test/CodeGen/NVPTX/alias.ll +++ b/llvm/test/CodeGen/NVPTX/alias.ll @@ -1,4 +1,4 @@ -; RUN: llc < %s -march=nvptx64 -mcpu=sm_30 -mattr=+ptx63 | FileCheck %s +; RUN: llc < %s -march=nvptx64 -mcpu=sm_30 -mattr=+ptx64 | FileCheck %s define i32 @a() { ret i32 0 } @b = internal alias i32 (), ptr @a @@ -7,6 +7,13 @@ define void @foo(i32 %0, ptr %1) { ret void } @bar = alias i32 (), ptr @foo +define void @noreturn() #0 { + ret void +} +@noreturn_alias = alias i32 (), ptr @noreturn + +attributes #0 = { noreturn } + ; CHECK: .visible .func (.param .b32 func_retval0) a() ; CHECK: .visible .func foo( @@ -14,6 +21,9 @@ ; CHECK-NEXT: .param .b64 foo_param_1 ; CHECK-NEXT: ) +; CHECK: .visible .func noreturn() +; CHECK-NEXT: .noreturn + ; CHECK: .visible .func (.param .b32 func_retval0) b(); ; CHECK-NEXT: .alias b, a; @@ -25,3 +35,7 @@ ; CHECK-NEXT: .param .b64 foo_param_1 ; CHECK-NEXT: ); ; CHECK-NEXT: .alias bar, foo; + +; CHECK: .visible .func noreturn_alias() +; CHECK-NEXT: .noreturn; +; CHECK-NEXT: .alias noreturn_alias, noreturn;