[llvm] 1d5820a - [NVPTX] improve identifier renaming for PTX (#79459)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 26 13:49:04 PST 2024
Author: Alex MacLean
Date: 2024-01-26T13:49:00-08:00
New Revision: 1d5820aafeb08c176189d44331e3e2a8030e76e4
URL: https://github.com/llvm/llvm-project/commit/1d5820aafeb08c176189d44331e3e2a8030e76e4
DIFF: https://github.com/llvm/llvm-project/commit/1d5820aafeb08c176189d44331e3e2a8030e76e4.diff
LOG: [NVPTX] improve identifier renaming for PTX (#79459)
Update `NVPTXAssignValidGlobalNames` to convert all characters which are
illegal in PTX identifiers to `_$_`. ([PTX ISA: 4.4
Identifiers](https://docs.nvidia.com/cuda/parallel-thread-execution/index.html#identifiers)).
Added:
Modified:
llvm/lib/Target/NVPTX/NVPTXAssignValidGlobalNames.cpp
llvm/test/CodeGen/NVPTX/symbol-naming.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/NVPTX/NVPTXAssignValidGlobalNames.cpp b/llvm/lib/Target/NVPTX/NVPTXAssignValidGlobalNames.cpp
index 789995743861270..9f5a217795183b7 100644
--- a/llvm/lib/Target/NVPTX/NVPTXAssignValidGlobalNames.cpp
+++ b/llvm/lib/Target/NVPTX/NVPTXAssignValidGlobalNames.cpp
@@ -17,6 +17,7 @@
//===----------------------------------------------------------------------===//
#include "NVPTX.h"
+#include "llvm/ADT/StringExtras.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/LegacyPassManager.h"
@@ -73,10 +74,12 @@ std::string NVPTXAssignValidGlobalNames::cleanUpName(StringRef Name) {
std::string ValidName;
raw_string_ostream ValidNameStream(ValidName);
for (char C : Name) {
- if (C == '.' || C == '@' || C == '<' || C == '>') {
- ValidNameStream << "_$_";
- } else {
+ // While PTX also allows '%' at the start of identifiers, LLVM will throw a
+ // fatal error for '%' in symbol names in MCSymbol::print. Exclude for now.
+ if (isAlnum(C) || C == '_' || C == '$') {
ValidNameStream << C;
+ } else {
+ ValidNameStream << "_$_";
}
}
diff --git a/llvm/test/CodeGen/NVPTX/symbol-naming.ll b/llvm/test/CodeGen/NVPTX/symbol-naming.ll
index ba85e1fc73743c0..780bc7422f739d7 100644
--- a/llvm/test/CodeGen/NVPTX/symbol-naming.ll
+++ b/llvm/test/CodeGen/NVPTX/symbol-naming.ll
@@ -8,11 +8,13 @@
; CHECK-NOT: .str
; CHECK-NOT: <str>
+; CHECK-NOT: another-str
; CHECK-NOT: .function.
; CHECK-DAG: _$_str
; CHECK-DAG: _$_str_$_
; CHECK-DAG: _$_str1
+; CHECK-DAG: another_$_str
; CHECK-DAG: _$_function_$_
; CHECK-DAG: _$_function_$_2
@@ -24,6 +26,7 @@ target triple = "nvptx64-unknown-unknown"
@.str = 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
@_$_str = private unnamed_addr constant [13 x i8] c"%d %f %c %d\0A\00", align 1
+ at another-str = private unnamed_addr constant [13 x i8] c"%d %f %c %d\0A\00", align 1
; Function Attrs: nounwind
@@ -38,7 +41,7 @@ entry:
define internal void @_$_function_$_() {
entry:
%call = call i32 (ptr, ...) @printf(ptr @_$_str)
- %call2 = call i32 (ptr, ...) @printf(ptr @"<str>")
+ %call2 = call i32 (ptr, ...) @printf(ptr @another-str)
ret void
}
More information about the llvm-commits
mailing list