https://github.com/lalaniket8 updated https://github.com/llvm/llvm-project/pull/125646
>From 3608d77e3633d853682ffbae16c5b227259ed69c Mon Sep 17 00:00:00 2001 From: anikelal <anike...@amd.com> Date: Tue, 4 Feb 2025 12:13:20 +0530 Subject: [PATCH 1/4] [Driver][HIP] Do not pass -dependency-file flag for HIP Device offloading When we launch hipcc with multiple offload architectures along with -MF dep_file flag, the clang compilation invocations for host and device offloads write to the same dep_file, and can lead to collision during file IO operations. This can typically happen during large workloads. This commit provides a fix to generate dep_file only in host compilation. --- clang/lib/Driver/ToolChains/Clang.cpp | 30 ++++++++++++++------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index c0891d46b0a62cd..00ef8983c58e711 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -1013,21 +1013,23 @@ void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA, ArgM = ArgMD; if (ArgM) { - // Determine the output location. - const char *DepFile; - if (Arg *MF = Args.getLastArg(options::OPT_MF)) { - DepFile = MF->getValue(); - C.addFailureResultFile(DepFile, &JA); - } else if (Output.getType() == types::TY_Dependencies) { - DepFile = Output.getFilename(); - } else if (!ArgMD) { - DepFile = "-"; - } else { - DepFile = getDependencyFileName(Args, Inputs); - C.addFailureResultFile(DepFile, &JA); + if (!JA.isDeviceOffloading(Action::OFK_HIP)) { + // Determine the output location. + const char *DepFile; + if (Arg *MF = Args.getLastArg(options::OPT_MF)) { + DepFile = MF->getValue(); + C.addFailureResultFile(DepFile, &JA); + } else if (Output.getType() == types::TY_Dependencies) { + DepFile = Output.getFilename(); + } else if (!ArgMD) { + DepFile = "-"; + } else { + DepFile = getDependencyFileName(Args, Inputs); + C.addFailureResultFile(DepFile, &JA); + } + CmdArgs.push_back("-dependency-file"); + CmdArgs.push_back(DepFile); } - CmdArgs.push_back("-dependency-file"); - CmdArgs.push_back(DepFile); bool HasTarget = false; for (const Arg *A : Args.filtered(options::OPT_MT, options::OPT_MQ)) { >From a0098e9d915fca7ffe67f7f8ccdadad82b655a66 Mon Sep 17 00:00:00 2001 From: anikelal <anike...@amd.com> Date: Wed, 5 Feb 2025 14:49:50 +0530 Subject: [PATCH 2/4] Adding littest --- .../Driver/dep-file-flag-with-multiple-offload-archs.hip | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 clang/test/Driver/dep-file-flag-with-multiple-offload-archs.hip diff --git a/clang/test/Driver/dep-file-flag-with-multiple-offload-archs.hip b/clang/test/Driver/dep-file-flag-with-multiple-offload-archs.hip new file mode 100644 index 000000000000000..a183647a733192f --- /dev/null +++ b/clang/test/Driver/dep-file-flag-with-multiple-offload-archs.hip @@ -0,0 +1,6 @@ +// RUN: %clang -### --offload-arch=gfx1030 --offload-arch=gfx1100 --offload-arch=gfx1101 -MD -MF tmp.d -v %s 2>&1 | FileCheck %s + +// CHECK-NOT: {{.*}}clang{{.*}}"-target-cpu" "gfx1030"{{.*}}"-dependency-file" "tmp.d" +// CHECK-NOT: {{.*}}clang{{.*}}"-target-cpu" "gfx1100"{{.*}}"-dependency-file" "tmp.d" +// CHECK-NOT: {{.*}}clang{{.*}}"-target-cpu" "gfx1101"{{.*}}"-dependency-file" "tmp.d" +// CHECK: {{.*}}clang{{.*}}"-target-cpu" "x86-64"{{.*}}"-dependency-file" "tmp.d" >From d0ce707ec014e8014123b74eb836725fe3581dda Mon Sep 17 00:00:00 2001 From: anikelal <anike...@amd.com> Date: Fri, 7 Feb 2025 12:30:58 +0530 Subject: [PATCH 3/4] Removed verbose flag --- clang/test/Driver/dep-file-flag-with-multiple-offload-archs.hip | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/test/Driver/dep-file-flag-with-multiple-offload-archs.hip b/clang/test/Driver/dep-file-flag-with-multiple-offload-archs.hip index a183647a733192f..18be650855a49a2 100644 --- a/clang/test/Driver/dep-file-flag-with-multiple-offload-archs.hip +++ b/clang/test/Driver/dep-file-flag-with-multiple-offload-archs.hip @@ -1,4 +1,4 @@ -// RUN: %clang -### --offload-arch=gfx1030 --offload-arch=gfx1100 --offload-arch=gfx1101 -MD -MF tmp.d -v %s 2>&1 | FileCheck %s +// RUN: %clang -### --offload-arch=gfx1030 --offload-arch=gfx1100 --offload-arch=gfx1101 -MD -MF tmp.d %s 2>&1 | FileCheck %s // CHECK-NOT: {{.*}}clang{{.*}}"-target-cpu" "gfx1030"{{.*}}"-dependency-file" "tmp.d" // CHECK-NOT: {{.*}}clang{{.*}}"-target-cpu" "gfx1100"{{.*}}"-dependency-file" "tmp.d" >From ebaded53cfa442e5cbf1f577d11e1f8396575f9d Mon Sep 17 00:00:00 2001 From: anikelal <anike...@amd.com> Date: Fri, 7 Feb 2025 15:19:14 +0530 Subject: [PATCH 4/4] Encase each CHECK-NOT with a CHECK run line --- .../Driver/dep-file-flag-with-multiple-offload-archs.hip | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/clang/test/Driver/dep-file-flag-with-multiple-offload-archs.hip b/clang/test/Driver/dep-file-flag-with-multiple-offload-archs.hip index 18be650855a49a2..f721c7a3d24ee02 100644 --- a/clang/test/Driver/dep-file-flag-with-multiple-offload-archs.hip +++ b/clang/test/Driver/dep-file-flag-with-multiple-offload-archs.hip @@ -1,6 +1,11 @@ // RUN: %clang -### --offload-arch=gfx1030 --offload-arch=gfx1100 --offload-arch=gfx1101 -MD -MF tmp.d %s 2>&1 | FileCheck %s +// CHECK: Build config: // CHECK-NOT: {{.*}}clang{{.*}}"-target-cpu" "gfx1030"{{.*}}"-dependency-file" "tmp.d" +// CHECK: {{.*}}lld{{.*}}"-plugin-opt=mcpu=gfx1030" // CHECK-NOT: {{.*}}clang{{.*}}"-target-cpu" "gfx1100"{{.*}}"-dependency-file" "tmp.d" +// CHECK: {{.*}}lld{{.*}}"-plugin-opt=mcpu=gfx1100" // CHECK-NOT: {{.*}}clang{{.*}}"-target-cpu" "gfx1101"{{.*}}"-dependency-file" "tmp.d" +// CHECK: {{.*}}lld{{.*}}"-plugin-opt=mcpu=gfx1101" +// CHECK: {{.*}}clang-offload-bundler // CHECK: {{.*}}clang{{.*}}"-target-cpu" "x86-64"{{.*}}"-dependency-file" "tmp.d" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits