Skip to content

Commit c830d51

Browse files
committed
[HIP] Enable -amdgpu-internalize-symbols
Enable -amdgpu-internalize-symbols to eliminate unused functions and global variables for whole program to speed up compilation and improve performance. For -fno-gpu-rdc, -amdgpu-internalize-symbols is passed to clang -cc1. For -fgpu-rdc, -amdgpu-internalize-symbols is passed to lld. Differential Revision: https://reviews.llvm.org/D81959
1 parent afd43a7 commit c830d51

File tree

6 files changed

+40
-14
lines changed

6 files changed

+40
-14
lines changed

clang/lib/Driver/ToolChains/HIP.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,14 @@ void AMDGCN::Linker::constructLldCommand(Compilation &C, const JobAction &JA,
5757
const llvm::opt::ArgList &Args) const {
5858
// Construct lld command.
5959
// The output from ld.lld is an HSA code object file.
60-
ArgStringList LldArgs{"-flavor", "gnu", "--no-undefined",
61-
"-shared", "-o", Output.getFilename()};
60+
ArgStringList LldArgs{"-flavor",
61+
"gnu",
62+
"--no-undefined",
63+
"-shared",
64+
"-mllvm",
65+
"-amdgpu-internalize-symbols",
66+
"-o",
67+
Output.getFilename()};
6268
for (auto Input : Inputs)
6369
LldArgs.push_back(Input.getFilename());
6470
const char *Lld = Args.MakeArgString(getToolChain().GetProgramPath("lld"));
@@ -143,6 +149,8 @@ void HIPToolChain::addClangTargetOptions(
143149
if (DriverArgs.hasFlag(options::OPT_fgpu_rdc, options::OPT_fno_gpu_rdc,
144150
false))
145151
CC1Args.push_back("-fgpu-rdc");
152+
else
153+
CC1Args.append({"-mllvm", "-amdgpu-internalize-symbols"});
146154

147155
StringRef MaxThreadsPerBlock =
148156
DriverArgs.getLastArgValue(options::OPT_gpu_max_threads_per_block_EQ);

clang/test/Driver/hip-link-save-temps.hip

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@
2323
// CHECK-NOT: llvm-link
2424
// CHECK-NOT: opt
2525
// CHECK-NOT: llc
26-
// CHECK: "{{.*lld.*}}" {{.*}} "-o" "a.out-hip-amdgcn-amd-amdhsa-gfx900" "obj1-hip-amdgcn-amd-amdhsa-gfx900.o" "obj2-hip-amdgcn-amd-amdhsa-gfx900.o"
27-
// CHECK: "{{.*lld.*}}" {{.*}} "-o" "a.out-hip-amdgcn-amd-amdhsa-gfx906" "obj1-hip-amdgcn-amd-amdhsa-gfx906.o" "obj2-hip-amdgcn-amd-amdhsa-gfx906.o"
26+
// CHECK: "{{.*lld.*}}" {{.*}} "-mllvm" "-amdgpu-internalize-symbols"
27+
// CHECK-SAME: "-o" "a.out-hip-amdgcn-amd-amdhsa-gfx900" "obj1-hip-amdgcn-amd-amdhsa-gfx900.o" "obj2-hip-amdgcn-amd-amdhsa-gfx900.o"
28+
// CHECK: "{{.*lld.*}}" {{.*}} "-mllvm" "-amdgpu-internalize-symbols"
29+
// CHECK-SAME: "-o" "a.out-hip-amdgcn-amd-amdhsa-gfx906" "obj1-hip-amdgcn-amd-amdhsa-gfx906.o" "obj2-hip-amdgcn-amd-amdhsa-gfx906.o"
2830
// OUT: "{{.*clang-offload-bundler.*}}" {{.*}} "-outputs=executable.hipfb"
2931
// OUT: "{{.*ld.*}}" {{.*}} "-o" "executable" {{.*}} "-T" "executable.lk"
3032
// NOUT: "{{.*clang-offload-bundler.*}}" {{.*}} "-outputs=a.out.hipfb"

clang/test/Driver/hip-save-temps.hip

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,22 @@
3535
// CHECK: {{".*clang.*"}} "-cc1" {{.*}} "-E" {{.*}} [[CPU:"-target-cpu" "gfx900"]] {{.*}} "-o" "hip-save-temps-hip-amdgcn-amd-amdhsa-gfx900.cui"
3636
// NORDC: {{".*clang.*"}} "-cc1" {{.*}} "-emit-llvm-bc" {{.*}} [[CPU]] {{.*}} "-disable-llvm-passes" {{.*}} "-o" "hip-save-temps-hip-amdgcn-amd-amdhsa-gfx900.bc"
3737
// RDC: {{".*clang.*"}} "-cc1" {{.*}} "-emit-llvm-bc" {{.*}} [[CPU]] {{.*}} "-disable-llvm-passes" {{.*}} "-o" "hip-save-temps-hip-amdgcn-amd-amdhsa-gfx900.tmp.bc"
38-
// NORDC: {{".*clang.*"}} "-cc1" {{.*}} "-S" {{.*}} [[CPU]] {{.*}} "-o" "hip-save-temps-hip-amdgcn-amd-amdhsa-gfx900.s"
38+
39+
// NORDC: {{".*clang.*"}} "-cc1" {{.*}} "-S"
40+
// NORDC-SAME: "-mllvm" "-amdgpu-internalize-symbols"
41+
// NORDC-SAME: [[CPU]]
42+
// NORDC-SAME: "-o" "hip-save-temps-hip-amdgcn-amd-amdhsa-gfx900.s"
43+
3944
// RDC: {{".*clang.*"}} "-cc1" {{.*}} "-emit-llvm-bc" {{.*}} [[CPU]] {{.*}} "-o" "hip-save-temps-hip-amdgcn-amd-amdhsa-gfx900.bc"
4045
// NORDC: {{".*clang.*"}} "-cc1as" {{.*}} "-filetype" "obj" {{.*}} [[CPU]] {{.*}} "-o" "hip-save-temps-hip-amdgcn-amd-amdhsa-gfx900.o"
4146
// CHECK-NOT: llvm-link
4247
// CHECK-NOT: opt
4348
// CHECK-NOT: llc
4449
// NORDC: {{.*lld.*}}"-o" "hip-save-temps-hip-amdgcn-amd-amdhsa-gfx900.out"
45-
// RDCL: "{{.*lld.*}}" {{.*}} "-o" "a.out-hip-amdgcn-amd-amdhsa-gfx900"
50+
51+
// RDCL: "{{.*lld.*}}" {{.*}} "-mllvm" "-amdgpu-internalize-symbols"
52+
// RDCL-SAME: "-o" "a.out-hip-amdgcn-amd-amdhsa-gfx900"
53+
4654
// NORDC: "{{.*clang-offload-bundler.*}}" {{.*}} "-outputs=hip-save-temps.hip-hip-amdgcn-amd-amdhsa.hipfb"
4755
// CHECK: "{{.*clang.*}}" "-cc1" {{.*}} "-E" {{.*}} "-o" "hip-save-temps-host-x86_64-unknown-linux-gnu.cui"
4856
// NORDC: "{{.*clang.*}}" "-cc1" {{.*}} "-emit-llvm-bc" {{.*}} "-fcuda-include-gpubinary" {{.*}} "-o" "hip-save-temps-host-x86_64-unknown-linux-gnu.bc"

clang/test/Driver/hip-toolchain-no-rdc.hip

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@
3838
// CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
3939
// CHECK-SAME: "-emit-obj"
4040
// CHECK-SAME: {{.*}} "-main-file-name" "a.cu"
41-
// CHECK-SAME: "-fcuda-is-device" "-fcuda-allow-variadic-functions" "-fvisibility" "hidden"
41+
// CHECK-SAME: "-fcuda-is-device" "-mllvm" "-amdgpu-internalize-symbols"
42+
// CHECK-SAME: "-fcuda-allow-variadic-functions" "-fvisibility" "hidden"
4243
// CHECK-SAME: "-fapply-global-visibility-to-externs"
4344
// CHECK-SAME: "{{.*}}lib1.bc" "{{.*}}lib2.bc"
4445
// CHECK-SAME: "-target-cpu" "gfx803"
@@ -60,7 +61,8 @@
6061
// CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
6162
// CHECK-SAME: "-emit-obj"
6263
// CHECK-SAME: {{.*}} "-main-file-name" "a.cu"
63-
// CHECK-SAME: "-fcuda-is-device" "-fcuda-allow-variadic-functions" "-fvisibility" "hidden"
64+
// CHECK-SAME: "-fcuda-is-device" "-mllvm" "-amdgpu-internalize-symbols"
65+
// CHECK-SAME: "-fcuda-allow-variadic-functions" "-fvisibility" "hidden"
6466
// CHECK-SAME: "-fapply-global-visibility-to-externs"
6567
// CHECK-SAME: "{{.*}}lib1.bc" "{{.*}}lib2.bc"
6668
// CHECK-SAME: "-target-cpu" "gfx900"
@@ -98,7 +100,8 @@
98100
// CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
99101
// CHECK-SAME: "-emit-obj"
100102
// CHECK-SAME: {{.*}} "-main-file-name" "b.hip"
101-
// CHECK-SAME: "-fcuda-is-device" "-fcuda-allow-variadic-functions" "-fvisibility" "hidden"
103+
// CHECK-SAME: "-fcuda-is-device" "-mllvm" "-amdgpu-internalize-symbols"
104+
// CHECK-SAME: "-fcuda-allow-variadic-functions" "-fvisibility" "hidden"
102105
// CHECK-SAME: "-fapply-global-visibility-to-externs"
103106
// CHECK-SAME: "{{.*}}lib1.bc" "{{.*}}lib2.bc"
104107
// CHECK-SAME: "-target-cpu" "gfx803"
@@ -120,7 +123,8 @@
120123
// CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
121124
// CHECK-SAME: "-emit-obj"
122125
// CHECK-SAME: {{.*}} "-main-file-name" "b.hip"
123-
// CHECK-SAME: "-fcuda-is-device" "-fcuda-allow-variadic-functions" "-fvisibility" "hidden"
126+
// CHECK-SAME: "-fcuda-is-device" "-mllvm" "-amdgpu-internalize-symbols"
127+
// CHECK-SAME: "-fcuda-allow-variadic-functions" "-fvisibility" "hidden"
124128
// CHECK-SAME: "-fapply-global-visibility-to-externs"
125129
// CHECK-SAME: "{{.*}}lib1.bc" "{{.*}}lib2.bc"
126130
// CHECK-SAME: "-target-cpu" "gfx900"

clang/test/Driver/hip-toolchain-rdc-separate.hip

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,14 @@
9797
// LINK-NOT: "*.llvm-link"
9898
// LINK-NOT: ".*opt"
9999
// LINK-NOT: ".*llc"
100-
// LINK: {{".*lld.*"}} {{.*}} "-o" "[[IMG_DEV1:.*.out]]" "[[A_BC1]]" "[[B_BC1]]"
100+
// LINK: {{".*lld.*"}} {{.*}} "-mllvm" "-amdgpu-internalize-symbols"
101+
// LINK-SAME: "-o" "[[IMG_DEV1:.*.out]]" "[[A_BC1]]" "[[B_BC1]]"
101102

102103
// LINK-NOT: "*.llvm-link"
103104
// LINK-NOT: ".*opt"
104105
// LINK-NOT: ".*llc"
105-
// LINK: {{".*lld.*"}} {{.*}} "-o" "[[IMG_DEV2:.*.out]]" "[[A_BC2]]" "[[B_BC2]]"
106+
// LINK: {{".*lld.*"}} {{.*}} "-mllvm" "-amdgpu-internalize-symbols"
107+
// LINK-SAME: "-o" "[[IMG_DEV2:.*.out]]" "[[A_BC2]]" "[[B_BC2]]"
106108

107109
// LINK: [[BUNDLER:".*clang-offload-bundler"]] "-type=o"
108110
// LINK-SAME: "-targets={{.*}},hip-amdgcn-amd-amdhsa-gfx803,hip-amdgcn-amd-amdhsa-gfx900"

clang/test/Driver/hip-toolchain-rdc.hip

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@
3737
// CHECK-NOT: "*.llvm-link"
3838
// CHECK-NOT: ".*opt"
3939
// CHECK-NOT: ".*llc"
40-
// CHECK: {{".*lld.*"}} {{.*}} "-o" "[[IMG_DEV1:.*.out]]" [[A_BC1]] [[B_BC1]]
40+
// CHECK: {{".*lld.*"}} {{.*}} "-mllvm" "-amdgpu-internalize-symbols"
41+
// CHECK-SAME: "-o" "[[IMG_DEV1:.*.out]]" [[A_BC1]] [[B_BC1]]
4142

4243
// CHECK: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
4344
// CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
@@ -62,7 +63,8 @@
6263
// CHECK-NOT: "*.llvm-link"
6364
// CHECK-NOT: ".*opt"
6465
// CHECK-NOT: ".*llc"
65-
// CHECK: {{".*lld.*"}} {{.*}} "-o" "[[IMG_DEV2:.*.out]]" [[A_BC2]] [[B_BC2]]
66+
// CHECK: {{".*lld.*"}} {{.*}} "-mllvm" "-amdgpu-internalize-symbols"
67+
// CHECK-SAME: "-o" "[[IMG_DEV2:.*.out]]" [[A_BC2]] [[B_BC2]]
6668

6769
// CHECK: [[CLANG]] "-cc1" "-triple" "x86_64-unknown-linux-gnu"
6870
// CHECK-SAME: "-aux-triple" "amdgcn-amd-amdhsa"

0 commit comments

Comments
 (0)