[OpenMP] Add an option to disable function internalization

Function internalization can sometimes occur in situations where we want to
keep the call sites intact. This patch adds an option to disable function
internalization and prevents the device runtime from being internalized while
creating the bitcode library.

Reviewed By: jdoerfert

Differential Revision: https://reviews.llvm.org/D106438
This commit is contained in:
Joseph Huber 2021-07-21 08:57:34 -04:00 committed by Huber, Joseph
parent 1684012a47
commit 4a66860424
3 changed files with 9 additions and 1 deletions

View File

@ -56,6 +56,11 @@ static cl::opt<bool> EnableParallelRegionMerging(
cl::desc("Enable the OpenMP region merging optimization."), cl::Hidden,
cl::init(false));
static cl::opt<bool>
DisableInternalization("openmp-opt-disable-internalization", cl::ZeroOrMore,
cl::desc("Disable function internalization."),
cl::Hidden, cl::init(false));
static cl::opt<bool> PrintICVValues("openmp-print-icv-values", cl::init(false),
cl::Hidden);
static cl::opt<bool> PrintOpenMPKernels("openmp-print-gpu-kernels",
@ -3824,7 +3829,8 @@ PreservedAnalyses OpenMPOptPass::run(Module &M, ModuleAnalysisManager &AM) {
DenseSet<const Function *> InternalizedFuncs;
if (isOpenMPDevice(M))
for (Function &F : M)
if (!F.isDeclaration() && !Kernels.contains(&F) && IsCalled(F)) {
if (!F.isDeclaration() && !Kernels.contains(&F) && IsCalled(F) &&
!DisableInternalization) {
if (Attributor::internalizeFunction(F, /* Force */ true)) {
InternalizedFuncs.insert(&F);
} else if (!F.hasLocalLinkage() && !F.hasFnAttribute(Attribute::Cold)) {

View File

@ -107,6 +107,7 @@ macro(add_cuda_bc_library)
set(cu_cmd ${CLANG_TOOL}
-xc++
-c
-mllvm -openmp-opt-disable-internalization
-std=c++14
-ffreestanding
-target amdgcn-amd-amdhsa

View File

@ -153,6 +153,7 @@ set(cuda_src_files
# Set flags for LLVM Bitcode compilation.
set(bc_flags -S -x c++ -O1 -std=c++14
-mllvm -openmp-opt-disable-internalization
-target nvptx64
-Xclang -emit-llvm-bc
-Xclang -aux-triple -Xclang ${aux_triple}