Skip to content

Commit 3acb0e9

Browse files
authored
[HIP] Replace use of llvm-mc with clang (#112041)
Summary: We currently use `llvm-mc` which is intended for internal testing and not expected to be present in every installation. This patch changes that to just use clang instead to get the `.o` from the HIP registration code. My preferred solution would be to use the new driver, but I still haven't gotten the test suite to pass on this one weird OpenMP case. Fixes: #112031
1 parent 6fd229a commit 3acb0e9

9 files changed

+22
-22
lines changed

clang/lib/Driver/ToolChains/HIPUtility.cpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -346,14 +346,14 @@ void HIP::constructGenerateObjFileFromHIPFatBinary(
346346
// Create Temp Object File Generator,
347347
// Offload Bundled file and Bundled Object file.
348348
// Keep them if save-temps is enabled.
349-
const char *McinFile;
349+
const char *ObjinFile;
350350
const char *BundleFile;
351351
if (C.getDriver().isSaveTempsEnabled()) {
352-
McinFile = C.getArgs().MakeArgString(Name + ".mcin");
352+
ObjinFile = C.getArgs().MakeArgString(Name + ".mcin");
353353
BundleFile = C.getArgs().MakeArgString(Name + ".hipfb");
354354
} else {
355355
auto TmpNameMcin = C.getDriver().GetTemporaryPath(Name, "mcin");
356-
McinFile = C.addTempFile(C.getArgs().MakeArgString(TmpNameMcin));
356+
ObjinFile = C.addTempFile(C.getArgs().MakeArgString(TmpNameMcin));
357357
auto TmpNameFb = C.getDriver().GetTemporaryPath(Name, "hipfb");
358358
BundleFile = C.addTempFile(C.getArgs().MakeArgString(TmpNameFb));
359359
}
@@ -454,7 +454,7 @@ void HIP::constructGenerateObjFileFromHIPFatBinary(
454454

455455
// Open script file and write the contents.
456456
std::error_code EC;
457-
llvm::raw_fd_ostream Objf(McinFile, EC, llvm::sys::fs::OF_None);
457+
llvm::raw_fd_ostream Objf(ObjinFile, EC, llvm::sys::fs::OF_None);
458458

459459
if (EC) {
460460
C.getDriver().Diag(clang::diag::err_unable_to_make_temp) << EC.message();
@@ -463,10 +463,11 @@ void HIP::constructGenerateObjFileFromHIPFatBinary(
463463

464464
Objf << ObjBuffer;
465465

466-
ArgStringList McArgs{"-triple", Args.MakeArgString(HostTriple.normalize()),
466+
ArgStringList McArgs{"-target", Args.MakeArgString(HostTriple.normalize()),
467467
"-o", Output.getFilename(),
468-
McinFile, "--filetype=obj"};
469-
const char *Mc = Args.MakeArgString(TC.GetProgramPath("llvm-mc"));
470-
C.addCommand(std::make_unique<Command>(JA, T, ResponseFileSupport::None(), Mc,
471-
McArgs, Inputs, Output));
468+
"-x", "assembler",
469+
ObjinFile, "-c"};
470+
const char *Clang = Args.MakeArgString(C.getDriver().ClangExecutable);
471+
C.addCommand(std::make_unique<Command>(JA, T, ResponseFileSupport::None(),
472+
Clang, McArgs, Inputs, Output));
472473
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@
3939
// CHECK-NOT: {{".*/opt"}}
4040
// CHECK-NOT: {{".*/llc"}}
4141
// CHECK: "{{.*lld.*}}" {{.*}} "-plugin-opt=-amdgpu-internalize-symbols"
42-
// CHECK-SAME: "-o" "a.out-hip-amdgcn-amd-amdhsa-gfx900" "obj1-hip-amdgcn-amd-amdhsa-gfx900.o" "obj2-hip-amdgcn-amd-amdhsa-gfx900.o"
42+
// CHECK-SAME: "-o" "[[HIPFB1:.+]]" "obj1-hip-amdgcn-amd-amdhsa-gfx900.o" "obj2-hip-amdgcn-amd-amdhsa-gfx900.o"
4343
// CHECK: "{{.*lld.*}}" {{.*}} "-plugin-opt=-amdgpu-internalize-symbols"
44-
// CHECK-SAME: "-o" "a.out-hip-amdgcn-amd-amdhsa-gfx906" "obj1-hip-amdgcn-amd-amdhsa-gfx906.o" "obj2-hip-amdgcn-amd-amdhsa-gfx906.o"
45-
// CHECK: {{".*llvm-mc.*"}} "-o" "[[OBJBUNDLE:.*.o]]" "{{.*}}.mcin" "--filetype=obj"
44+
// CHECK-SAME: "-o" "[[HIPFB2:.+]]" "obj1-hip-amdgcn-amd-amdhsa-gfx906.o" "obj2-hip-amdgcn-amd-amdhsa-gfx906.o"
45+
// CHECK: "{{.*clang.*}}" "-target" "x86_64-unknown-linux-gnu" "-o" "[[OBJBUNDLE:.+.o]]" "-x" "assembler" "{{.*}}.mcin" "-c"
4646
// OUT: "{{.*ld.*}}" {{.*}} "-o" "executable" {{.*}} "[[OBJBUNDLE]]"
4747
// NOUT: "{{.*ld.*}}" {{.*}} "-o" "a.out" {{.*}} "[[OBJBUNDLE]]"
4848
// SLO: "{{.*llvm-ar.*}}" "rcsD" "libTest.a" {{.*}} "[[OBJBUNDLE]]"

clang/test/Driver/hip-partial-link.hip

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
// LD-R: "{{.*}}/clang-offload-bundler" {{.*}}-unbundle
3636
// LD-R: "{{.*}}/lld" -flavor gnu -m elf64_amdgpu
3737
// LD-R: "{{.*}}/clang-offload-bundler"
38-
// LD-R: "{{.*}}/llvm-mc" -triple x86_64-unknown-linux-gnu
38+
// LD-R: "{{.*}}/clang{{.*}}" -target x86_64-unknown-linux-gnu
3939
// LD-R: "{{.*}}/ld.lld" {{.*}} -r
4040

4141
// RUN: llvm-nm %t.lib.o | FileCheck -check-prefix=OBJ %s
@@ -65,7 +65,7 @@
6565
// STATIC: "{{.*}}/clang-offload-bundler" {{.*}}-unbundle
6666
// STATIC: "{{.*}}/lld" -flavor gnu -m elf64_amdgpu
6767
// STATIC: "{{.*}}/clang-offload-bundler"
68-
// STATIC: "{{.*}}/llvm-mc" -triple x86_64-unknown-linux-gnu
68+
// STATIC: "{{.*}}/clang{{.*}}" -target x86_64-unknown-linux-gnu
6969
// STATIC: "{{.*}}/llvm-ar"
7070

7171
// RUN: %clang -v --target=x86_64-unknown-linux-gnu --no-offload-new-driver \

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
// RDCC: "{{.*clang.*}}" "-cc1as" {{.*}} "-o" "hip-save-temps-host-x86_64-unknown-linux-gnu.o"
5959
// RDCC: "{{.*clang-offload-bundler.*}}" {{.*}} "-output=hip-save-temps.o"
6060
// RDCL: "{{.*clang-offload-bundler.*}}" {{.*}} "-output=hip-save-temps-hip-amdgcn-amd-amdhsa.hipfb"
61-
// RDCL: {{.*}}llvm-mc{{.*}}"-o" "hip-save-temps-hip-amdgcn-amd-amdhsa.o" "hip-save-temps-hip-amdgcn-amd-amdhsa.mcin" "--filetype=obj"
61+
// RDCL: "{{.*clang.*}}" "-target" "x86_64-unknown-linux-gnu" "-o" "{{.*}}.o" "-x" "assembler" "{{.*}}.mcin" "-c"
6262

6363
// -fno-gpu-rdc host object path
6464
// NORDC: "{{.*clang.*}}" "-cc1" {{.*}} "-E" {{.*}} "-o" "hip-save-temps-host-x86_64-unknown-linux-gnu.hipi"

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,8 @@
145145
// LINK-BUNDLE-SAME: "-input={{.*}}" "-input=[[IMG_DEV1]]" "-input=[[IMG_DEV2]]" "-output=[[BUNDLE:.*]]"
146146
// LINK-NOBUNDLE-NOT: {{".*clang-offload-bundler"}} "-type=o"
147147

148-
// LINK-EMBED: {{".*llvm-mc.*"}} "-o" "[[OBJBUNDLE:.*o]]" "{{.*}}.mcin" "--filetype=obj"
149-
// LINK-NOEMBED-NOT: {{".*llvm-mc.*"}} "-o"
148+
// LINK-EMBED: {{".*clang.*"}} "-o" "[[OBJBUNDLE:.*o]]" "{{.*}}.mcin"
149+
// LINK-NOEMBED-NOT: {{".*clang.*"}} "-o"
150150

151151
// LINK-EMBED: [[LD:".*ld.*"]] {{.*}} "-o" "a.out" {{.*}} "[[A_OBJ_HOST]]"
152152
// LINK-EMBED-SAME: "[[B_OBJ_HOST]]" "[[OBJBUNDLE]]"

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,6 @@
8686
// CHECK-SAME: "-targets={{.*}},hipv4-amdgcn-amd-amdhsa--gfx803,hipv4-amdgcn-amd-amdhsa--gfx900"
8787
// CHECK-SAME: "-input=[[IMG_DEV1]]" "-input=[[IMG_DEV2]]" "-output=[[BUNDLE:.*hipfb]]"
8888

89-
// CHECK: [[MC:".*llvm-mc.*"]] "-o" [[OBJBUNDLE:".*o"]] "{{.*}}.mcin" "--filetype=obj"
89+
// CHECK: [[MC:".*clang.*"]] "-o" [[OBJBUNDLE:".*o"]] "{{.*}}.mcin"
9090

9191
// CHECK: [[AR:".*llvm-ar.*"]] "rcsD" "{{.*}}.out" [[A_OBJ_HOST]] [[B_OBJ_HOST]] [[OBJBUNDLE]]

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@
155155
// CHECK-SAME: "-targets={{.*}},hipv4-amdgcn-amd-amdhsa--gfx803,hipv4-amdgcn-amd-amdhsa--gfx900"
156156
// CHECK-SAME: "-input={{.*}}" "-input=[[IMG_DEV1]]" "-input=[[IMG_DEV2]]" "-output=[[BUNDLE]]"
157157

158-
// CHECK: [[MC:".*llvm-mc.*"]] "-triple" [[HOST]] "-o" [[OBJBUNDLE:".*o"]] "{{.*}}.mcin" "--filetype=obj"
158+
// CHECK: [[MC:".*clang.*"]] "-target" [[HOST]] "-o" [[OBJBUNDLE:".*o"]] "{{.*}}.mcin"
159159

160160
// output the executable
161161
// LNX: [[LD:".*ld.*"]] {{.*}}"-o" "a.out" {{.*}} [[A_OBJ_HOST]] [[B_OBJ_HOST]] [[OBJBUNDLE]]

clang/test/Driver/hip-unbundle-preproc.hipi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,5 @@
2323
// RDC: {{".*clang.*"}} "-cc1" {{.*}}"-target-cpu" "gfx803" {{.*}}"-o" "[[DEV_BC:.*bc]]" {{.*}}"[[DEV_PP]]"
2424
// RDC: {{".*lld.*"}} {{.*}}"-o" "[[DEV_ISA:.*]]" "[[DEV_BC]]"
2525
// RDC: {{".*clang-offload-bundler.*"}} {{.*}}"-input={{.*}}" "-input=[[DEV_ISA]]" "-output=[[FATBIN:.*]]"
26-
// RDC: {{".*llvm-mc.*"}} "-o" "[[FATBIN_O:.*o]]"
26+
// RDC: {{".*clang.*"}} "-o" "[[FATBIN_O:.*o]]"
2727
// RDC: {{".*ld.*"}} {{.*}}"[[HOST_O]]" "[[FATBIN_O]]"

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,7 @@
5353
// CHECK-SAME: "-targets={{.*}},hip-spirv64----generic"
5454
// CHECK-SAME: "-input=/dev/null" "-input=[[AB_SPIRV]]"
5555
// CHECK-SAME: "-output=[[AB_FATBIN:.*hipfb]]"
56-
// CHECK: {{".*llvm-mc.*"}} "-o" [[OBJBUNDLE:".*o"]] "{{.*}}.mcin"
57-
// CHECK-SAME: "--filetype=obj"
56+
// CHECK: {{".*clang.*"}} "-o" [[OBJBUNDLE:".*o"]] "{{.*}}.mcin"
5857

5958
// Output the executable
6059
// CHECK: {{".*ld.*"}} {{.*}}"-o" "a.out" {{.*}} [[A_OBJ_HOST]] [[B_OBJ_HOST]]

0 commit comments

Comments
 (0)