Skip to content

Commit

Permalink
[clang-offload-wrapper] Lower priority of __tgt_register_lib in favor…
Browse files Browse the repository at this point in the history
… of __tgt_register_requires

Lower priority of __tgt_register_lib in order to make sure that __tgt_register_requires is called before loading a libomptarget plugin.
We want to know beforehand which requirements the user has asked for so that upon loading the plugin libomptarget can report how many devices there are that can satisfy these requirements.

Differential Revision: https://reviews.llvm.org/D75223
  • Loading branch information
grokos committed Mar 3, 2020
1 parent 8fc3e5c commit fca49fe
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 4 deletions.
4 changes: 2 additions & 2 deletions clang/test/Driver/clang-offload-wrapper.c
Expand Up @@ -39,8 +39,8 @@

// CHECK-IR: [[DESC:@.+]] = internal constant [[DESCTY]] { i32 1, [[IMAGETY]]* getelementptr inbounds ([1 x [[IMAGETY]]], [1 x [[IMAGETY]]]* [[IMAGES]], i64 0, i64 0), [[ENTTY]]* [[ENTBEGIN]], [[ENTTY]]* [[ENTEND]] }

// CHECK-IR: @llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 0, void ()* [[REGFN:@.+]], i8* null }]
// CHECK-IR: @llvm.global_dtors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 0, void ()* [[UNREGFN:@.+]], i8* null }]
// CHECK-IR: @llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 1, void ()* [[REGFN:@.+]], i8* null }]
// CHECK-IR: @llvm.global_dtors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 1, void ()* [[UNREGFN:@.+]], i8* null }]

// CHECK-IR: define internal void [[REGFN]]()
// CHECK-IR: call void @__tgt_register_lib([[DESCTY]]* [[DESC]])
Expand Down
10 changes: 8 additions & 2 deletions clang/tools/clang-offload-wrapper/ClangOffloadWrapper.cpp
Expand Up @@ -262,7 +262,12 @@ class BinaryWrapper {
Builder.CreateRetVoid();

// Add this function to constructors.
appendToGlobalCtors(M, Func, 0);
// Set priority to 1 so that __tgt_register_lib is executed AFTER
// __tgt_register_requires (we want to know what requirements have been
// asked for before we load a libomptarget plugin so that by the time the
// plugin is loaded it can report how many devices there are which can
// satisfy these requirements).
appendToGlobalCtors(M, Func, /*Priority*/ 1);
}

void createUnregisterFunction(GlobalVariable *BinDesc) {
Expand All @@ -283,7 +288,8 @@ class BinaryWrapper {
Builder.CreateRetVoid();

// Add this function to global destructors.
appendToGlobalDtors(M, Func, 0);
// Match priority of __tgt_register_lib
appendToGlobalDtors(M, Func, /*Priority*/ 1);
}

public:
Expand Down

0 comments on commit fca49fe

Please sign in to comment.