diff --git a/llvm/lib/Target/NVPTX/NVPTXAssignValidGlobalNames.cpp b/llvm/lib/Target/NVPTX/NVPTXAssignValidGlobalNames.cpp --- a/llvm/lib/Target/NVPTX/NVPTXAssignValidGlobalNames.cpp +++ b/llvm/lib/Target/NVPTX/NVPTXAssignValidGlobalNames.cpp @@ -73,7 +73,7 @@ std::string ValidName; raw_string_ostream ValidNameStream(ValidName); for (char C : Name) { - if (C == '.' || C == '@') { + if (C == '.' || C == '@' || C == '<' || C == '>') { ValidNameStream << "_$_"; } else { ValidNameStream << C; diff --git a/llvm/test/CodeGen/NVPTX/symbol-naming.ll b/llvm/test/CodeGen/NVPTX/symbol-naming.ll --- a/llvm/test/CodeGen/NVPTX/symbol-naming.ll +++ b/llvm/test/CodeGen/NVPTX/symbol-naming.ll @@ -7,9 +7,11 @@ ; PTX. ; CHECK-NOT: .str +; CHECK-NOT: ; CHECK-NOT: .function. ; CHECK-DAG: _$_str +; CHECK-DAG: _$_str_$_ ; CHECK-DAG: _$_str1 ; CHECK-DAG: _$_function_$_ @@ -20,6 +22,7 @@ @.str = private unnamed_addr constant [13 x i8] c"%d %f %c %d\0A\00", align 1 +@"" = private unnamed_addr constant [13 x i8] c"%d %f %c %d\0A\00", align 1 @_$_str = private unnamed_addr constant [13 x i8] c"%d %f %c %d\0A\00", align 1 @@ -27,6 +30,7 @@ define internal void @.function.() { entry: %call = call i32 (ptr, ...) @printf(ptr @.str) + %call2 = call i32 (ptr, ...) @printf(ptr @"") ret void } @@ -34,6 +38,7 @@ define internal void @_$_function_$_() { entry: %call = call i32 (ptr, ...) @printf(ptr @_$_str) + %call2 = call i32 (ptr, ...) @printf(ptr @"") ret void }