This pull request is a revised version of #76587. This pull request fixes some build issues that were present in the previous version of this change. > This pull request is the first part of an ongoing effort to extends PGO instrumentation to GPU device code. This PR makes the following changes: > > - Adds blank registration functions to device RTL > - Gives PGO globals protected visibility when targeting a supported GPU > - Handles any addrspace casts for PGO calls > - Implements PGO global extraction in GPU plugins (currently only dumps info) > > These changes can be tested by supplying `-fprofile-instrument=clang` while targeting a GPU.
This commit is contained in:
committed by
GitHub
parent
ded6dd244c
commit
fde2d23ee2
@@ -77,6 +77,7 @@ set(include_files
|
||||
${include_directory}/Interface.h
|
||||
${include_directory}/LibC.h
|
||||
${include_directory}/Mapping.h
|
||||
${include_directory}/Profiling.h
|
||||
${include_directory}/State.h
|
||||
${include_directory}/Synchronization.h
|
||||
${include_directory}/Types.h
|
||||
@@ -93,6 +94,7 @@ set(src_files
|
||||
${source_directory}/Mapping.cpp
|
||||
${source_directory}/Misc.cpp
|
||||
${source_directory}/Parallelism.cpp
|
||||
${source_directory}/Profiling.cpp
|
||||
${source_directory}/Reduction.cpp
|
||||
${source_directory}/State.cpp
|
||||
${source_directory}/Synchronization.cpp
|
||||
|
||||
21
offload/DeviceRTL/include/Profiling.h
Normal file
21
offload/DeviceRTL/include/Profiling.h
Normal file
@@ -0,0 +1,21 @@
|
||||
//===-------- Profiling.h - OpenMP interface ---------------------- C++ -*-===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef OMPTARGET_DEVICERTL_PROFILING_H
|
||||
#define OMPTARGET_DEVICERTL_PROFILING_H
|
||||
|
||||
extern "C" {
|
||||
void __llvm_profile_register_function(void *Ptr);
|
||||
void __llvm_profile_register_names_function(void *Ptr, long int I);
|
||||
void __llvm_profile_instrument_memop(long int I, void *Ptr, int I2);
|
||||
}
|
||||
|
||||
#endif
|
||||
22
offload/DeviceRTL/src/Profiling.cpp
Normal file
22
offload/DeviceRTL/src/Profiling.cpp
Normal file
@@ -0,0 +1,22 @@
|
||||
//===------- Profiling.cpp ---------------------------------------- C++ ---===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "Profiling.h"
|
||||
|
||||
#pragma omp begin declare target device_type(nohost)
|
||||
|
||||
extern "C" {
|
||||
|
||||
// Provides empty implementations for certain functions in compiler-rt
|
||||
// that are emitted by the PGO instrumentation.
|
||||
void __llvm_profile_register_function(void *Ptr) {}
|
||||
void __llvm_profile_register_names_function(void *Ptr, long int I) {}
|
||||
void __llvm_profile_instrument_memop(long int I, void *Ptr, int I2) {}
|
||||
}
|
||||
|
||||
#pragma omp end declare target
|
||||
Reference in New Issue
Block a user