[llvm] [OFFLOAD][L0] Add control for Copy Offload Hint (PR #203203)

Alex Duran via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 11 02:07:49 PDT 2026


https://github.com/adurang updated https://github.com/llvm/llvm-project/pull/203203

>From 2f4729bd2f9e26ce4b9791b1f8d987790a274e3f Mon Sep 17 00:00:00 2001
From: "Duran, Alex" <alejandro.duran at intel.com>
Date: Wed, 10 Jun 2026 00:07:28 -0700
Subject: [PATCH 1/2] [OFFLOAD][L0] Add control for Copy Offload Hint

---
 offload/plugins-nextgen/level_zero/include/L0Options.h | 5 +++--
 offload/plugins-nextgen/level_zero/src/L0Device.cpp    | 5 ++++-
 offload/plugins-nextgen/level_zero/src/L0Options.cpp   | 2 ++
 3 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/offload/plugins-nextgen/level_zero/include/L0Options.h b/offload/plugins-nextgen/level_zero/include/L0Options.h
index c4df2e4bb16a3..72d0892c732bc 100644
--- a/offload/plugins-nextgen/level_zero/include/L0Options.h
+++ b/offload/plugins-nextgen/level_zero/include/L0Options.h
@@ -63,8 +63,9 @@ class SpecConstantsTy {
 /// L0 Plugin flags.
 struct L0OptionFlagsTy {
   uint64_t UseMemoryPool : 1;
-  uint64_t Reserved : 63;
-  L0OptionFlagsTy() : UseMemoryPool(1), Reserved(0) {}
+  uint64_t UseCopyOffloadHint : 1;
+  uint64_t Reserved : 62;
+  L0OptionFlagsTy() : UseMemoryPool(1), UseCopyOffloadHint(0), Reserved(0) {}
 };
 
 struct L0OptionsTy {
diff --git a/offload/plugins-nextgen/level_zero/src/L0Device.cpp b/offload/plugins-nextgen/level_zero/src/L0Device.cpp
index 3f3922036c8c3..fd664f33b81e9 100644
--- a/offload/plugins-nextgen/level_zero/src/L0Device.cpp
+++ b/offload/plugins-nextgen/level_zero/src/L0Device.cpp
@@ -714,11 +714,14 @@ Error L0DeviceTy::makeMemoryResident(void *Mem, size_t Size) {
 Expected<ze_command_list_handle_t>
 L0DeviceTy::createImmCmdList(uint32_t Ordinal, uint32_t Index, bool InOrder) {
   ze_command_queue_flags_t Flags = InOrder ? ZE_COMMAND_QUEUE_FLAG_IN_ORDER : 0;
+  if (getPlugin().getOptions().Flags.UseCopyOffloadHint)
+    Flags |= ZE_COMMAND_QUEUE_FLAG_COPY_OFFLOAD_HINT;
+
   ze_command_queue_desc_t Desc{ZE_STRUCTURE_TYPE_COMMAND_QUEUE_DESC,
                                nullptr,
                                Ordinal,
                                Index,
-                               Flags | ZE_COMMAND_QUEUE_FLAG_COPY_OFFLOAD_HINT,
+                               Flags,
                                ZE_COMMAND_QUEUE_MODE_ASYNCHRONOUS,
                                ZE_COMMAND_QUEUE_PRIORITY_NORMAL};
   ze_command_list_handle_t CmdList = nullptr;
diff --git a/offload/plugins-nextgen/level_zero/src/L0Options.cpp b/offload/plugins-nextgen/level_zero/src/L0Options.cpp
index 561c7b5323bb4..259449bbf6476 100644
--- a/offload/plugins-nextgen/level_zero/src/L0Options.cpp
+++ b/offload/plugins-nextgen/level_zero/src/L0Options.cpp
@@ -25,6 +25,8 @@ void L0OptionsTy::processEnvironmentVars() {
       std::string(" ") +
       StringEnvar("LIBOMPTARGET_LEVEL_ZERO_COMPILATION_OPTIONS", "").get();
 
+  Flags.UseCopyOffloadHint = BoolEnvar("LIBOFFLOAD_LEVEL_ZERO_USE_COPY_OFFLOAD_HINT", true);
+
   // Memory pool syntax:
   // LIBOMPTARGET_LEVEL_ZERO_MEMORY_POOL=<Option>
   //  <Option>       := 0 | <PoolInfoList>

>From 1a15337e437b0a9ce8e960b18113319eb5a87e28 Mon Sep 17 00:00:00 2001
From: Alex Duran <alejandro.duran at intel.com>
Date: Thu, 11 Jun 2026 11:07:39 +0200
Subject: [PATCH 2/2] Set bit to 1 too in constructor

---
 offload/plugins-nextgen/level_zero/include/L0Options.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/offload/plugins-nextgen/level_zero/include/L0Options.h b/offload/plugins-nextgen/level_zero/include/L0Options.h
index 72d0892c732bc..897e23ef4ca04 100644
--- a/offload/plugins-nextgen/level_zero/include/L0Options.h
+++ b/offload/plugins-nextgen/level_zero/include/L0Options.h
@@ -65,7 +65,7 @@ struct L0OptionFlagsTy {
   uint64_t UseMemoryPool : 1;
   uint64_t UseCopyOffloadHint : 1;
   uint64_t Reserved : 62;
-  L0OptionFlagsTy() : UseMemoryPool(1), UseCopyOffloadHint(0), Reserved(0) {}
+  L0OptionFlagsTy() : UseMemoryPool(1), UseCopyOffloadHint(1), Reserved(0) {}
 };
 
 struct L0OptionsTy {



More information about the llvm-commits mailing list