[clang] 3a8bd23 - [OffloadWrapper] Use getPtrAdd() instead of getGetElementPtr() (#222014)

via cfe-commits cfe-commits at lists.llvm.org
Wed Sep 9 00:28:26 PDT 2026


Author: Nikita Popov
Date: 2026-09-09T09:28:22+02:00
New Revision: 3a8bd232cfa8c08a6c7e88801696af65ed1562ea

URL: https://github.com/llvm/llvm-project/commit/3a8bd232cfa8c08a6c7e88801696af65ed1562ea
DIFF: https://github.com/llvm/llvm-project/commit/3a8bd232cfa8c08a6c7e88801696af65ed1562ea.diff

LOG: [OffloadWrapper] Use getPtrAdd() instead of getGetElementPtr() (#222014)

One case has a redundant zero-offset GEP. The other two just add
a byte offset in a convoluted way.

Added: 
    

Modified: 
    clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-image.c
    llvm/lib/Frontend/Offloading/OffloadWrapper.cpp
    llvm/test/tools/llvm-offload-wrapper/offload-wrapper.ll

Removed: 
    


################################################################################
diff  --git a/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-image.c b/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-image.c
index 238645aace5cf..75226e913b3d3 100644
--- a/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-image.c
+++ b/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-image.c
@@ -25,7 +25,7 @@
 // OPENMP-REL: @.omp_offloading.device_image = internal unnamed_addr constant [[[SIZE:[0-9]+]] x i8] c"\10\FF\10\AD{{.*}}", section ".llvm.offloading.relocatable", align 8
 
 //      OPENMP: @.omp_offloading.device_image = internal unnamed_addr constant [[[SIZE:[0-9]+]] x i8] c"\10\FF\10\AD{{.*}}", section ".llvm.offloading", align 8
-// OPENMP-NEXT: @.omp_offloading.device_images = internal unnamed_addr constant [1 x %__tgt_device_image] [%__tgt_device_image { ptr getelementptr ([[[IMG_OFF:[0-9]+]] x i8], ptr @.omp_offloading.device_image, i64 0, i64 [[IMG_OFF]]), ptr getelementptr ([[[IMG_OFF]] x i8], ptr @.omp_offloading.device_image, i64 0, i64 [[IMG_OFF]]), ptr {{(@__start_llvm_offload_entries|getelementptr inbounds \(\[1 x %struct.__tgt_offload_entry\], ptr @__start_llvm_offload_entries, i32 0, i32 1\))}}, ptr @__stop_llvm_offload_entries }]
+// OPENMP-NEXT: @.omp_offloading.device_images = internal unnamed_addr constant [1 x %__tgt_device_image] [%__tgt_device_image { ptr getelementptr (i8, ptr @.omp_offloading.device_image, i64 [[IMG_OFF:[0-9]+]]), ptr getelementptr (i8, ptr @.omp_offloading.device_image, i64 [[IMG_OFF]]), ptr {{(@__start_llvm_offload_entries|getelementptr inbounds \(\[1 x %struct.__tgt_offload_entry\], ptr @__start_llvm_offload_entries, i32 0, i32 1\))}}, ptr @__stop_llvm_offload_entries }]
 // OPENMP-NEXT: @.omp_offloading.descriptor = internal constant %__tgt_bin_desc { i32 1, ptr @.omp_offloading.device_images, ptr {{(@__start_llvm_offload_entries|getelementptr inbounds \(\[1 x %struct.__tgt_offload_entry\], ptr @__start_llvm_offload_entries, i32 0, i32 1\))}}, ptr @__stop_llvm_offload_entries }
 // OPENMP-NEXT: @llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 101, ptr @.omp_offloading.descriptor_reg, ptr null }]
 

diff  --git a/llvm/lib/Frontend/Offloading/OffloadWrapper.cpp b/llvm/lib/Frontend/Offloading/OffloadWrapper.cpp
index 7d763a110b862..bcd65513bc842 100644
--- a/llvm/lib/Frontend/Offloading/OffloadWrapper.cpp
+++ b/llvm/lib/Frontend/Offloading/OffloadWrapper.cpp
@@ -132,8 +132,6 @@ GlobalVariable *createBinDesc(Module &M, ArrayRef<ArrayRef<char>> Bufs,
   LLVMContext &C = M.getContext();
   auto [EntriesB, EntriesE] = EntryArray;
 
-  auto *Zero = ConstantInt::get(getSizeTTy(M), 0u);
-
   // Create initializer for the images array.
   SmallVector<Constant *, 4u> ImagesInits;
   ImagesInits.reserve(Bufs.size());
@@ -170,13 +168,8 @@ GlobalVariable *createBinDesc(Module &M, ArrayRef<ArrayRef<char>> Bufs,
 
     auto *Begin = ConstantInt::get(getSizeTTy(M), BeginOffset);
     auto *Size = ConstantInt::get(getSizeTTy(M), EndOffset);
-    Constant *ZeroBegin[] = {Zero, Begin};
-    Constant *ZeroSize[] = {Zero, Size};
-
-    auto *ImageB =
-        ConstantExpr::getGetElementPtr(Image->getValueType(), Image, ZeroBegin);
-    auto *ImageE =
-        ConstantExpr::getGetElementPtr(Image->getValueType(), Image, ZeroSize);
+    auto *ImageB = ConstantExpr::getPtrAdd(Image, Begin);
+    auto *ImageE = ConstantExpr::getPtrAdd(Image, Size);
 
     ImagesInits.push_back(ConstantStruct::get(getDeviceImageTy(M), ImageB,
                                               ImageE, EntriesB, EntriesE));
@@ -651,11 +644,8 @@ class SYCLWrapper {
                                           : ".llvm.offloading");
 
     IntegerType *Int64Ty = Type::getInt64Ty(C);
-    Constant *Zero = ConstantInt::get(Int64Ty, 0);
     Constant *Size = ConstantInt::get(Int64Ty, Buffer.size());
-    Constant *Start = ConstantExpr::getGetElementPtr(
-        BinaryGV->getValueType(), BinaryGV, ArrayRef<Constant *>{Zero, Zero});
-    return {Start, Size};
+    return {BinaryGV, Size};
   }
 
   Function *createRegisterFatbinFunction(Constant *Start, Constant *Size) {

diff  --git a/llvm/test/tools/llvm-offload-wrapper/offload-wrapper.ll b/llvm/test/tools/llvm-offload-wrapper/offload-wrapper.ll
index 420e41adbd115..9d8abaca5924c 100644
--- a/llvm/test/tools/llvm-offload-wrapper/offload-wrapper.ll
+++ b/llvm/test/tools/llvm-offload-wrapper/offload-wrapper.ll
@@ -11,7 +11,7 @@
 ; OMP-NEXT: @__dummy.llvm_offload_entries = internal constant [0 x %struct.__tgt_offload_entry] zeroinitializer, section "llvm_offload_entries", align 8
 ; OMP-NEXT: @llvm.used = appending global [1 x ptr] [ptr @__dummy.llvm_offload_entries], section "llvm.metadata"
 ; OMP-NEXT: @.omp_offloading.device_image = internal unnamed_addr constant [[[SIZE:[0-9]+]] x i8] c"{{.*}}", section ".llvm.offloading", align 8
-; OMP-NEXT: @.omp_offloading.device_images = internal unnamed_addr constant [1 x %__tgt_device_image] [%__tgt_device_image { ptr @.omp_offloading.device_image, ptr getelementptr ([[[SIZE]] x i8], ptr @.omp_offloading.device_image, i64 0, i64 [[SIZE]]), ptr @__start_llvm_offload_entries, ptr @__stop_llvm_offload_entries }]
+; OMP-NEXT: @.omp_offloading.device_images = internal unnamed_addr constant [1 x %__tgt_device_image] [%__tgt_device_image { ptr @.omp_offloading.device_image, ptr getelementptr (i8, ptr @.omp_offloading.device_image, i64 [[SIZE]]), ptr @__start_llvm_offload_entries, ptr @__stop_llvm_offload_entries }]
 ; OMP-NEXT: @.omp_offloading.descriptor = internal constant %__tgt_bin_desc { i32 1, ptr @.omp_offloading.device_images, ptr @__start_llvm_offload_entries, ptr @__stop_llvm_offload_entries }
 ; OMP-NEXT: @llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 101, ptr @.omp_offloading.descriptor_reg, ptr null }]
 


        


More information about the cfe-commits mailing list