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 }] _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
