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/3] [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/3] 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/3] 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"

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to