Skip to content

Commit f1e917d

Browse files
authored
[Offload] Unify offloading entries into a single section (#125731)
Summary: This patch unifies the existing offloading entires into a single section called `llvm_offload_entires`. This lets us use a more unified offloading infrastructure so that all targets share the same handling. The effect is that people in the runtimes now need to check if the kind is what they expect, but the expectation is that you can combine multiple potential providers into a compile job. Doesn't fully work yet because of other runtime issues, but some day. Mostly this helps the future of liboffload where we want to handle different languages than OpenMP.
1 parent e833e52 commit f1e917d

File tree

11 files changed

+124
-139
lines changed

11 files changed

+124
-139
lines changed

clang/lib/CodeGen/CGCUDANV.cpp

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ class CGNVCUDARuntime : public CGCUDARuntime {
4040

4141
/// The prefix used for function calls and section names (CUDA, HIP, LLVM)
4242
StringRef Prefix;
43-
/// TODO: We should transition the OpenMP section to LLVM/Offload
44-
StringRef SectionPrefix;
4543

4644
private:
4745
llvm::IntegerType *IntTy, *SizeTy;
@@ -234,13 +232,12 @@ CGNVCUDARuntime::CGNVCUDARuntime(CodeGenModule &CGM)
234232
VoidTy = CGM.VoidTy;
235233
PtrTy = CGM.UnqualPtrTy;
236234

237-
if (CGM.getLangOpts().OffloadViaLLVM) {
235+
if (CGM.getLangOpts().OffloadViaLLVM)
238236
Prefix = "llvm";
239-
SectionPrefix = "omp";
240-
} else if (CGM.getLangOpts().HIP)
241-
SectionPrefix = Prefix = "hip";
237+
else if (CGM.getLangOpts().HIP)
238+
Prefix = "hip";
242239
else
243-
SectionPrefix = Prefix = "cuda";
240+
Prefix = "cuda";
244241
}
245242

246243
llvm::FunctionCallee CGNVCUDARuntime::getSetupArgumentFn() const {
@@ -1198,17 +1195,19 @@ void CGNVCUDARuntime::transformManagedVars() {
11981195
// register the symbols with the linked device image.
11991196
void CGNVCUDARuntime::createOffloadingEntries() {
12001197
SmallVector<char, 32> Out;
1201-
StringRef Section = (SectionPrefix + "_offloading_entries").toStringRef(Out);
12021198
llvm::object::OffloadKind Kind = CGM.getLangOpts().HIP
12031199
? llvm::object::OffloadKind::OFK_HIP
12041200
: llvm::object::OffloadKind::OFK_Cuda;
1201+
// For now, just spoof this as OpenMP because that's the runtime it uses.
1202+
if (CGM.getLangOpts().OffloadViaLLVM)
1203+
Kind = llvm::object::OffloadKind::OFK_OpenMP;
12051204

12061205
llvm::Module &M = CGM.getModule();
12071206
for (KernelInfo &I : EmittedKernels)
12081207
llvm::offloading::emitOffloadingEntry(
12091208
M, Kind, KernelHandles[I.Kernel->getName()],
12101209
getDeviceSideName(cast<NamedDecl>(I.D)), /*Flags=*/0, /*Data=*/0,
1211-
llvm::offloading::OffloadGlobalEntry, Section);
1210+
llvm::offloading::OffloadGlobalEntry);
12121211

12131212
for (VarInfo &I : DeviceVars) {
12141213
uint64_t VarSize =
@@ -1233,23 +1232,23 @@ void CGNVCUDARuntime::createOffloadingEntries() {
12331232
llvm::offloading::emitOffloadingEntry(
12341233
M, Kind, I.Var, getDeviceSideName(I.D), VarSize,
12351234
llvm::offloading::OffloadGlobalManagedEntry | Flags,
1236-
/*Data=*/I.Var->getAlignment(), Section, ManagedVar);
1235+
/*Data=*/I.Var->getAlignment(), ManagedVar);
12371236
} else {
12381237
llvm::offloading::emitOffloadingEntry(
12391238
M, Kind, I.Var, getDeviceSideName(I.D), VarSize,
12401239
llvm::offloading::OffloadGlobalEntry | Flags,
1241-
/*Data=*/0, Section);
1240+
/*Data=*/0);
12421241
}
12431242
} else if (I.Flags.getKind() == DeviceVarFlags::Surface) {
12441243
llvm::offloading::emitOffloadingEntry(
12451244
M, Kind, I.Var, getDeviceSideName(I.D), VarSize,
12461245
llvm::offloading::OffloadGlobalSurfaceEntry | Flags,
1247-
I.Flags.getSurfTexType(), Section);
1246+
I.Flags.getSurfTexType());
12481247
} else if (I.Flags.getKind() == DeviceVarFlags::Texture) {
12491248
llvm::offloading::emitOffloadingEntry(
12501249
M, Kind, I.Var, getDeviceSideName(I.D), VarSize,
12511250
llvm::offloading::OffloadGlobalTextureEntry | Flags,
1252-
I.Flags.getSurfTexType(), Section);
1251+
I.Flags.getSurfTexType());
12531252
}
12541253
}
12551254
}

clang/test/CodeGenCUDA/offloading-entries.cu

Lines changed: 48 additions & 48 deletions
Large diffs are not rendered by default.

clang/test/Driver/linker-wrapper-image.c

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,18 @@
1414
// RUN: clang-linker-wrapper --print-wrapped-module --dry-run --host-triple=x86_64-unknown-windows-gnu \
1515
// RUN: --linker-path=/usr/bin/ld %t.o -o a.out 2>&1 | FileCheck %s --check-prefixes=OPENMP,OPENMP-COFF
1616

17-
// OPENMP-ELF: @__start_omp_offloading_entries = external hidden constant [0 x %struct.__tgt_offload_entry]
18-
// OPENMP-ELF-NEXT: @__stop_omp_offloading_entries = external hidden constant [0 x %struct.__tgt_offload_entry]
19-
// OPENMP-ELF-NEXT: @__dummy.omp_offloading_entries = internal constant [0 x %struct.__tgt_offload_entry] zeroinitializer, section "omp_offloading_entries"
17+
// OPENMP-ELF: @__start_llvm_offload_entries = external hidden constant [0 x %struct.__tgt_offload_entry]
18+
// OPENMP-ELF-NEXT: @__stop_llvm_offload_entries = external hidden constant [0 x %struct.__tgt_offload_entry]
19+
// OPENMP-ELF-NEXT: @__dummy.llvm_offload_entries = internal constant [0 x %struct.__tgt_offload_entry] zeroinitializer, section "llvm_offload_entries"
2020

21-
// OPENMP-COFF: @__start_omp_offloading_entries = weak_odr hidden constant [0 x %struct.__tgt_offload_entry] zeroinitializer, section "omp_offloading_entries$OA"
22-
// OPENMP-COFF-NEXT: @__stop_omp_offloading_entries = weak_odr hidden constant [0 x %struct.__tgt_offload_entry] zeroinitializer, section "omp_offloading_entries$OZ"
21+
// OPENMP-COFF: @__start_llvm_offload_entries = weak_odr hidden constant [0 x %struct.__tgt_offload_entry] zeroinitializer, section "llvm_offload_entries$OA"
22+
// OPENMP-COFF-NEXT: @__stop_llvm_offload_entries = weak_odr hidden constant [0 x %struct.__tgt_offload_entry] zeroinitializer, section "llvm_offload_entries$OZ"
2323

2424
// 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
2525

2626
// OPENMP: @.omp_offloading.device_image = internal unnamed_addr constant [[[SIZE:[0-9]+]] x i8] c"\10\FF\10\AD{{.*}}", section ".llvm.offloading", align 8
27-
// OPENMP-NEXT: @.omp_offloading.device_images = internal unnamed_addr constant [1 x %__tgt_device_image] [%__tgt_device_image { ptr getelementptr ([[[BEGIN:[0-9]+]] x i8], ptr @.omp_offloading.device_image, i64 0, i64 144), ptr getelementptr ([[[END:[0-9]+]] x i8], ptr @.omp_offloading.device_image, i64 0, i64 144), ptr @__start_omp_offloading_entries, ptr @__stop_omp_offloading_entries }]
28-
// OPENMP-NEXT: @.omp_offloading.descriptor = internal constant %__tgt_bin_desc { i32 1, ptr @.omp_offloading.device_images, ptr @__start_omp_offloading_entries, ptr @__stop_omp_offloading_entries }
27+
// OPENMP-NEXT: @.omp_offloading.device_images = internal unnamed_addr constant [1 x %__tgt_device_image] [%__tgt_device_image { ptr getelementptr ([[[BEGIN:[0-9]+]] x i8], ptr @.omp_offloading.device_image, i64 0, i64 144), ptr getelementptr ([[[END:[0-9]+]] x i8], ptr @.omp_offloading.device_image, i64 0, i64 144), ptr @__start_llvm_offload_entries, ptr @__stop_llvm_offload_entries }]
28+
// OPENMP-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 }
2929
// OPENMP-NEXT: @llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 101, ptr @.omp_offloading.descriptor_reg, ptr null }]
3030

3131
// OPENMP: define internal void @.omp_offloading.descriptor_reg() section ".text.startup" {
@@ -51,12 +51,12 @@
5151
// RUN: clang-linker-wrapper --print-wrapped-module --dry-run --host-triple=x86_64-unknown-windows-gnu \
5252
// RUN: --linker-path=/usr/bin/ld %t.o -o a.out 2>&1 | FileCheck %s --check-prefixes=CUDA,CUDA-COFF
5353

54-
// CUDA-ELF: @__start_cuda_offloading_entries = external hidden constant [0 x %struct.__tgt_offload_entry]
55-
// CUDA-ELF-NEXT: @__stop_cuda_offloading_entries = external hidden constant [0 x %struct.__tgt_offload_entry]
56-
// CUDA-ELF-NEXT: @__dummy.cuda_offloading_entries = internal constant [0 x %struct.__tgt_offload_entry] zeroinitializer, section "cuda_offloading_entries"
54+
// CUDA-ELF: @__start_llvm_offload_entries = external hidden constant [0 x %struct.__tgt_offload_entry]
55+
// CUDA-ELF-NEXT: @__stop_llvm_offload_entries = external hidden constant [0 x %struct.__tgt_offload_entry]
56+
// CUDA-ELF-NEXT: @__dummy.llvm_offload_entries = internal constant [0 x %struct.__tgt_offload_entry] zeroinitializer, section "llvm_offload_entries"
5757

58-
// CUDA-COFF: @__start_cuda_offloading_entries = weak_odr hidden constant [0 x %struct.__tgt_offload_entry] zeroinitializer, section "cuda_offloading_entries$OA"
59-
// CUDA-COFF-NEXT: @__stop_cuda_offloading_entries = weak_odr hidden constant [0 x %struct.__tgt_offload_entry] zeroinitializer, section "cuda_offloading_entries$OZ"
58+
// CUDA-COFF: @__start_llvm_offload_entries = weak_odr hidden constant [0 x %struct.__tgt_offload_entry] zeroinitializer, section "llvm_offload_entries$OA"
59+
// CUDA-COFF-NEXT: @__stop_llvm_offload_entries = weak_odr hidden constant [0 x %struct.__tgt_offload_entry] zeroinitializer, section "llvm_offload_entries$OZ"
6060

6161
// CUDA: @.fatbin_image = internal constant [0 x i8] zeroinitializer, section ".nv_fatbin"
6262
// CUDA-NEXT: @.fatbin_wrapper = internal constant %fatbin_wrapper { i32 1180844977, i32 1, ptr @.fatbin_image, ptr null }, section ".nvFatBinSegment", align 8
@@ -83,11 +83,11 @@
8383
//
8484
// CUDA: define internal void @.cuda.globals_reg(ptr %0) section ".text.startup" {
8585
// CUDA-NEXT: entry:
86-
// CUDA-NEXT: %1 = icmp ne ptr @__start_cuda_offloading_entries, @__stop_cuda_offloading_entries
86+
// CUDA-NEXT: %1 = icmp ne ptr @__start_llvm_offload_entries, @__stop_llvm_offload_entries
8787
// CUDA-NEXT: br i1 %1, label %while.entry, label %while.end
8888
//
8989
// CUDA: while.entry:
90-
// CUDA-NEXT: %entry1 = phi ptr [ @__start_cuda_offloading_entries, %entry ], [ %16, %if.end ]
90+
// CUDA-NEXT: %entry1 = phi ptr [ @__start_llvm_offload_entries, %entry ], [ %16, %if.end ]
9191
// CUDA-NEXT: %2 = getelementptr inbounds %struct.__tgt_offload_entry, ptr %entry1, i32 0, i32 4
9292
// CUDA-NEXT: %addr = load ptr, ptr %2, align 8
9393
// CUDA-NEXT: %3 = getelementptr inbounds %struct.__tgt_offload_entry, ptr %entry1, i32 0, i32 8
@@ -145,7 +145,7 @@
145145
//
146146
// CUDA: if.end:
147147
// CUDA-NEXT: %16 = getelementptr inbounds %struct.__tgt_offload_entry, ptr %entry1, i64 1
148-
// CUDA-NEXT: %17 = icmp eq ptr %16, @__stop_cuda_offloading_entries
148+
// CUDA-NEXT: %17 = icmp eq ptr %16, @__stop_llvm_offload_entries
149149
// CUDA-NEXT: br i1 %17, label %while.end, label %while.entry
150150
//
151151
// CUDA: while.end:
@@ -162,12 +162,12 @@
162162
// RUN: clang-linker-wrapper --print-wrapped-module --dry-run --host-triple=x86_64-unknown-windows-gnu \
163163
// RUN: --linker-path=/usr/bin/ld %t.o -o a.out 2>&1 | FileCheck %s --check-prefixes=HIP,HIP-COFF
164164

165-
// HIP-ELF: @__start_hip_offloading_entries = external hidden constant [0 x %struct.__tgt_offload_entry]
166-
// HIP-ELF-NEXT: @__stop_hip_offloading_entries = external hidden constant [0 x %struct.__tgt_offload_entry]
167-
// HIP-ELF-NEXT: @__dummy.hip_offloading_entries = internal constant [0 x %struct.__tgt_offload_entry] zeroinitializer, section "hip_offloading_entries"
165+
// HIP-ELF: @__start_llvm_offload_entries = external hidden constant [0 x %struct.__tgt_offload_entry]
166+
// HIP-ELF-NEXT: @__stop_llvm_offload_entries = external hidden constant [0 x %struct.__tgt_offload_entry]
167+
// HIP-ELF-NEXT: @__dummy.llvm_offload_entries = internal constant [0 x %struct.__tgt_offload_entry] zeroinitializer, section "llvm_offload_entries"
168168

169-
// HIP-COFF: @__start_hip_offloading_entries = weak_odr hidden constant [0 x %struct.__tgt_offload_entry] zeroinitializer, section "hip_offloading_entries$OA"
170-
// HIP-COFF-NEXT: @__stop_hip_offloading_entries = weak_odr hidden constant [0 x %struct.__tgt_offload_entry] zeroinitializer, section "hip_offloading_entries$OZ"
169+
// HIP-COFF: @__start_llvm_offload_entries = weak_odr hidden constant [0 x %struct.__tgt_offload_entry] zeroinitializer, section "llvm_offload_entries$OA"
170+
// HIP-COFF-NEXT: @__stop_llvm_offload_entries = weak_odr hidden constant [0 x %struct.__tgt_offload_entry] zeroinitializer, section "llvm_offload_entries$OZ"
171171

172172
// HIP: @.fatbin_image = internal constant [0 x i8] zeroinitializer, section ".hip_fatbin"
173173
// HIP-NEXT: @.fatbin_wrapper = internal constant %fatbin_wrapper { i32 1212764230, i32 1, ptr @.fatbin_image, ptr null }, section ".hipFatBinSegment", align 8
@@ -193,11 +193,11 @@
193193
//
194194
// HIP: define internal void @.hip.globals_reg(ptr %0) section ".text.startup" {
195195
// HIP-NEXT: entry:
196-
// HIP-NEXT: %1 = icmp ne ptr @__start_hip_offloading_entries, @__stop_hip_offloading_entries
196+
// HIP-NEXT: %1 = icmp ne ptr @__start_llvm_offload_entries, @__stop_llvm_offload_entries
197197
// HIP-NEXT: br i1 %1, label %while.entry, label %while.end
198198
//
199199
// HIP: while.entry:
200-
// HIP-NEXT: %entry1 = phi ptr [ @__start_hip_offloading_entries, %entry ], [ %16, %if.end ]
200+
// HIP-NEXT: %entry1 = phi ptr [ @__start_llvm_offload_entries, %entry ], [ %16, %if.end ]
201201
// HIP-NEXT: %2 = getelementptr inbounds %struct.__tgt_offload_entry, ptr %entry1, i32 0, i32 4
202202
// HIP-NEXT: %addr = load ptr, ptr %2, align 8
203203
// HIP-NEXT: %3 = getelementptr inbounds %struct.__tgt_offload_entry, ptr %entry1, i32 0, i32 8
@@ -257,7 +257,7 @@
257257
//
258258
// HIP: if.end:
259259
// HIP-NEXT: %16 = getelementptr inbounds %struct.__tgt_offload_entry, ptr %entry1, i64 1
260-
// HIP-NEXT: %17 = icmp eq ptr %16, @__stop_hip_offloading_entries
260+
// HIP-NEXT: %17 = icmp eq ptr %16, @__stop_llvm_offload_entries
261261
// HIP-NEXT: br i1 %17, label %while.end, label %while.entry
262262
//
263263
// HIP: while.end:

clang/test/OpenMP/declare_target_link_codegen.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@
2727
// HOST: [[SIZES:@.+]] = private unnamed_addr constant [3 x i64] [i64 4, i64 4, i64 4]
2828
// HOST: [[MAPTYPES:@.+]] = private unnamed_addr constant [3 x i64] [i64 35, i64 531, i64 531]
2929
// HOST: @.offloading.entry_name{{.*}} = internal unnamed_addr constant [{{[0-9]+}} x i8] c"c_decl_tgt_ref_ptr\00"
30-
// HOST: @.offloading.entry.c_decl_tgt_ref_ptr = weak constant %struct.__tgt_offload_entry { i64 0, i16 1, i16 1, i32 1, ptr @c_decl_tgt_ref_ptr, ptr @.offloading.entry_name, i64 8, i64 0, ptr null }, section "omp_offloading_entries", align 1
31-
// HOST-COFF: @.offloading.entry.{{.*}} = weak constant %struct.__tgt_offload_entry { {{.*}} }, section "omp_offloading_entries$OE", align 1
30+
// HOST: @.offloading.entry.c_decl_tgt_ref_ptr = weak constant %struct.__tgt_offload_entry { i64 0, i16 1, i16 1, i32 1, ptr @c_decl_tgt_ref_ptr, ptr @.offloading.entry_name, i64 8, i64 0, ptr null }, section "llvm_offload_entries"
31+
// HOST-COFF: @.offloading.entry.{{.*}} = weak constant %struct.__tgt_offload_entry { {{.*}} }, section "llvm_offload_entries$OE"
3232
// DEVICE-NOT: internal unnamed_addr constant [{{[0-9]+}} x i8] c"c_{{.*}}_decl_tgt_ref_ptr\00"
3333
// HOST: @.offloading.entry_name{{.*}} = internal unnamed_addr constant [{{[0-9]+}} x i8] c"_{{.*}}d_{{.*}}_decl_tgt_ref_ptr\00"
34-
// HOST: @.offloading.entry.[[D_PTR]] = weak constant %struct.__tgt_offload_entry { i64 0, i16 1, i16 1, i32 1, ptr @[[D_PTR]], ptr @.offloading.entry_name.3, i64 8, i64 0, ptr null }, section "omp_offloading_entries", align 1
34+
// HOST: @.offloading.entry.[[D_PTR]] = weak constant %struct.__tgt_offload_entry { i64 0, i16 1, i16 1, i32 1, ptr @[[D_PTR]], ptr @.offloading.entry_name.3, i64 8, i64 0, ptr null }, section "llvm_offload_entries"
3535

3636
extern int c;
3737
#pragma omp declare target link(c)

clang/test/OpenMP/nvptx_target_requires_unified_shared_memory.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,10 @@ int bar(int n){
4747
// CHECK-HOST: [[OFFLOAD_MAPTYPES:@.+]] = private unnamed_addr constant [2 x i64] [i64 800, i64 800]
4848

4949
// CHECK-HOST: [[OMP_OFFLOAD_ENTRY_LINK_VAR_PTR_NAME:@.+]] = internal unnamed_addr constant [21 x i8]
50-
// CHECK-HOST: [[OMP_OFFLOAD_ENTRY_LINK_VAR_PTR:@.+]] = weak constant %struct.__tgt_offload_entry { i64 0, i16 1, i16 1, i32 1, ptr [[VAR_DECL_TGT_LINK_PTR]], ptr [[OMP_OFFLOAD_ENTRY_LINK_VAR_PTR_NAME]], i64 8, i64 0, ptr null }, section "omp_offl
50+
// CHECK-HOST: [[OMP_OFFLOAD_ENTRY_LINK_VAR_PTR:@.+]] = weak constant %struct.__tgt_offload_entry { i64 0, i16 1, i16 1, i32 1, ptr [[VAR_DECL_TGT_LINK_PTR]], ptr [[OMP_OFFLOAD_ENTRY_LINK_VAR_PTR_NAME]], i64 8, i64 0, ptr null }, section "llvm_offload_entries"
5151

5252
// CHECK-HOST: [[OMP_OFFLOAD_ENTRY_TO_VAR_PTR_NAME:@.+]] = internal unnamed_addr constant [24 x i8]
53-
// CHECK-HOST: [[OMP_OFFLOAD_ENTRY_TO_VAR_PTR:@.+]] = weak constant %struct.__tgt_offload_entry { i64 0, i16 1, i16 1, i32 0, ptr [[VAR_DECL_TGT_TO_PTR]], ptr [[OMP_OFFLOAD_ENTRY_TO_VAR_PTR_NAME]], i64 8, i64 0, ptr null }, section "omp_offloading_entries", align 1
53+
// CHECK-HOST: [[OMP_OFFLOAD_ENTRY_TO_VAR_PTR:@.+]] = weak constant %struct.__tgt_offload_entry { i64 0, i16 1, i16 1, i32 0, ptr [[VAR_DECL_TGT_TO_PTR]], ptr @.offloading.entry_name.1, i64 8, i64 0, ptr null }, section "llvm_offload_entries"
5454

5555
// CHECK-HOST: [[N_CASTED:%.+]] = alloca i64
5656
// CHECK-HOST: [[SUM_CASTED:%.+]] = alloca i64

clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -691,22 +691,19 @@ wrapDeviceImages(ArrayRef<std::unique_ptr<MemoryBuffer>> Buffers,
691691
switch (Kind) {
692692
case OFK_OpenMP:
693693
if (Error Err = offloading::wrapOpenMPBinaries(
694-
M, BuffersToWrap,
695-
offloading::getOffloadEntryArray(M, "omp_offloading_entries"),
694+
M, BuffersToWrap, offloading::getOffloadEntryArray(M),
696695
/*Suffix=*/"", /*Relocatable=*/Args.hasArg(OPT_relocatable)))
697696
return std::move(Err);
698697
break;
699698
case OFK_Cuda:
700699
if (Error Err = offloading::wrapCudaBinary(
701-
M, BuffersToWrap.front(),
702-
offloading::getOffloadEntryArray(M, "cuda_offloading_entries"),
700+
M, BuffersToWrap.front(), offloading::getOffloadEntryArray(M),
703701
/*Suffix=*/"", /*EmitSurfacesAndTextures=*/false))
704702
return std::move(Err);
705703
break;
706704
case OFK_HIP:
707705
if (Error Err = offloading::wrapHIPBinary(
708-
M, BuffersToWrap.front(),
709-
offloading::getOffloadEntryArray(M, "hip_offloading_entries")))
706+
M, BuffersToWrap.front(), offloading::getOffloadEntryArray(M)))
710707
return std::move(Err);
711708
break;
712709
default:

llvm/include/llvm/Frontend/Offloading/Utility.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ StructType *getEntryTy(Module &M);
8282
/// \param AuxAddr An extra pointer if needed.
8383
void emitOffloadingEntry(Module &M, object::OffloadKind Kind, Constant *Addr,
8484
StringRef Name, uint64_t Size, uint32_t Flags,
85-
uint64_t Data, StringRef SectionName,
86-
Constant *AuxAddr = nullptr);
85+
uint64_t Data, Constant *AuxAddr = nullptr,
86+
StringRef SectionName = "llvm_offload_entries");
8787

8888
/// Create a constant struct initializer used to register this global at
8989
/// runtime.
@@ -96,7 +96,7 @@ getOffloadingEntryInitializer(Module &M, object::OffloadKind Kind,
9696
/// Creates a pair of globals used to iterate the array of offloading entries by
9797
/// accessing the section variables provided by the linker.
9898
std::pair<GlobalVariable *, GlobalVariable *>
99-
getOffloadEntryArray(Module &M, StringRef SectionName);
99+
getOffloadEntryArray(Module &M, StringRef SectionName = "llvm_offload_entries");
100100

101101
namespace amdgpu {
102102
/// Check if an image is compatible with current system's environment. The

llvm/lib/Frontend/Offloading/Utility.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ offloading::getOffloadingEntryInitializer(Module &M, object::OffloadKind Kind,
8383
void offloading::emitOffloadingEntry(Module &M, object::OffloadKind Kind,
8484
Constant *Addr, StringRef Name,
8585
uint64_t Size, uint32_t Flags,
86-
uint64_t Data, StringRef SectionName,
87-
Constant *AuxAddr) {
86+
uint64_t Data, Constant *AuxAddr,
87+
StringRef SectionName) {
8888
llvm::Triple Triple(M.getTargetTriple());
8989

9090
auto [EntryInitializer, NameGV] = getOffloadingEntryInitializer(
@@ -103,7 +103,7 @@ void offloading::emitOffloadingEntry(Module &M, object::OffloadKind Kind,
103103
Entry->setSection((SectionName + "$OE").str());
104104
else
105105
Entry->setSection(SectionName);
106-
Entry->setAlignment(Align(1));
106+
Entry->setAlignment(Align(object::OffloadBinary::getAlignment()));
107107
}
108108

109109
std::pair<GlobalVariable *, GlobalVariable *>
@@ -135,6 +135,7 @@ offloading::getOffloadEntryArray(Module &M, StringRef SectionName) {
135135
M, ZeroInitilaizer->getType(), true, GlobalVariable::InternalLinkage,
136136
ZeroInitilaizer, "__dummy." + SectionName);
137137
DummyEntry->setSection(SectionName);
138+
DummyEntry->setAlignment(Align(object::OffloadBinary::getAlignment()));
138139
appendToCompilerUsed(M, DummyEntry);
139140
} else {
140141
// The COFF linker will merge sections containing a '$' together into a

0 commit comments

Comments
 (0)