ROCM HAL Maintenance (#6472) -Moving Status/StatusOr to iree/base/status_cc.h. -IWYU related changes -Add option to specify where AMD bitcode is
diff --git a/experimental/rocm/CMakeLists.txt b/experimental/rocm/CMakeLists.txt index db57bd3..185bd5c 100644 --- a/experimental/rocm/CMakeLists.txt +++ b/experimental/rocm/CMakeLists.txt
@@ -51,8 +51,6 @@ iree::base::internal iree::base::internal::flatcc iree::base::internal::synchronization - iree::base::logging - iree::base::status iree::base::tracing iree::hal iree::schemas::rocm_executable_def_c_fbs @@ -88,6 +86,7 @@ "dynamic_symbols_test.cc" DEPS ::dynamic_symbols + iree::base iree::testing::gtest iree::testing::gtest_main LABELS
diff --git a/experimental/rocm/api.h b/experimental/rocm/api.h index 638fedd..68fa191 100644 --- a/experimental/rocm/api.h +++ b/experimental/rocm/api.h
@@ -21,7 +21,7 @@ //===----------------------------------------------------------------------===// // ROCM driver creation options. -typedef struct { +typedef struct iree_hal_rocm_driver_options_t { // Index of the default ROCM device to use within the list of available // devices. int default_device_index;
diff --git a/experimental/rocm/context_wrapper.h b/experimental/rocm/context_wrapper.h index 514207d..2c51424 100644 --- a/experimental/rocm/context_wrapper.h +++ b/experimental/rocm/context_wrapper.h
@@ -13,7 +13,7 @@ // Structure to wrap all objects constant within a context. This makes it // simpler to pass it to the different objects and saves memory. -typedef struct { +typedef struct iree_hal_rocm_context_wrapper_t { hipCtx_t rocm_context; iree_allocator_t host_allocator; iree_hal_rocm_dynamic_symbols_t *syms;
diff --git a/experimental/rocm/descriptor_set_layout.c b/experimental/rocm/descriptor_set_layout.c index 0ca1cc8..69fb4af 100644 --- a/experimental/rocm/descriptor_set_layout.c +++ b/experimental/rocm/descriptor_set_layout.c
@@ -6,10 +6,12 @@ #include "experimental/rocm/descriptor_set_layout.h" -#include "experimental/rocm/status_util.h" +#include <stddef.h> + +#include "iree/base/api.h" #include "iree/base/tracing.h" -typedef struct { +typedef struct iree_hal_rocm_descriptor_set_layout_t { iree_hal_resource_t resource; iree_hal_rocm_context_wrapper_t *context; } iree_hal_rocm_descriptor_set_layout_t;
diff --git a/experimental/rocm/descriptor_set_layout.h b/experimental/rocm/descriptor_set_layout.h index 933c9c6..fb07b76 100644 --- a/experimental/rocm/descriptor_set_layout.h +++ b/experimental/rocm/descriptor_set_layout.h
@@ -8,6 +8,7 @@ #define IREE_HAL_ROCM_DESCRIPTOR_SET_LAYOUT_H_ #include "experimental/rocm/context_wrapper.h" +#include "iree/base/api.h" #include "iree/hal/api.h" #ifdef __cplusplus
diff --git a/experimental/rocm/direct_command_buffer.c b/experimental/rocm/direct_command_buffer.c index 9d56001..d75c060 100644 --- a/experimental/rocm/direct_command_buffer.c +++ b/experimental/rocm/direct_command_buffer.c
@@ -6,10 +6,15 @@ #include "experimental/rocm/direct_command_buffer.h" +#include <assert.h> +#include <stddef.h> +#include <stdint.h> + +#include "experimental/rocm/dynamic_symbols.h" #include "experimental/rocm/native_executable.h" #include "experimental/rocm/rocm_buffer.h" -#include "experimental/rocm/rocm_event.h" #include "experimental/rocm/status_util.h" +#include "iree/base/api.h" #include "iree/base/tracing.h" // Command buffer implementation that directly maps to rocm direct.
diff --git a/experimental/rocm/direct_command_buffer.h b/experimental/rocm/direct_command_buffer.h index 70519c9..0145b15 100644 --- a/experimental/rocm/direct_command_buffer.h +++ b/experimental/rocm/direct_command_buffer.h
@@ -10,6 +10,7 @@ #include "experimental/rocm/context_wrapper.h" #include "experimental/rocm/dynamic_symbols.h" #include "experimental/rocm/rocm_headers.h" +#include "iree/base/api.h" #include "iree/hal/api.h" #ifdef __cplusplus
diff --git a/experimental/rocm/dynamic_symbols.c b/experimental/rocm/dynamic_symbols.c index 0643cf1..d676838 100644 --- a/experimental/rocm/dynamic_symbols.c +++ b/experimental/rocm/dynamic_symbols.c
@@ -6,7 +6,7 @@ #include "experimental/rocm/dynamic_symbols.h" -#include <stddef.h> +#include <string.h> #include "iree/base/internal/dynamic_library.h" #include "iree/base/target_platform.h" @@ -29,7 +29,7 @@ syms->loader_library, kName, (void **)&syms->rocmSymbolName)); \ } #define RC_PFN_STR_DECL(rocmSymbolName, ...) RC_PFN_DECL(rocmSymbolName, ...) -#include "experimental/rocm/dynamic_symbol_tables.h" +#include "experimental/rocm/dynamic_symbol_tables.h" // IWYU pragma: keep #undef RC_PFN_DECL #undef RC_PFN_STR_DECL return iree_ok_status();
diff --git a/experimental/rocm/dynamic_symbols.h b/experimental/rocm/dynamic_symbols.h index 2894626..00a58b0 100644 --- a/experimental/rocm/dynamic_symbols.h +++ b/experimental/rocm/dynamic_symbols.h
@@ -19,14 +19,14 @@ // loads all the function declared in `dynamic_symbol_tables.def` and fail if // any of the symbol is not available. The functions signatures are matching // the declarations in `hipruntime.h`. -typedef struct { +typedef struct iree_hal_rocm_dynamic_symbols_t { iree_dynamic_library_t *loader_library; #define RC_PFN_DECL(rocmSymbolName, ...) \ hipError_t (*rocmSymbolName)(__VA_ARGS__); #define RC_PFN_STR_DECL(rocmSymbolName, ...) \ const char *(*rocmSymbolName)(__VA_ARGS__); -#include "experimental/rocm/dynamic_symbol_tables.h" +#include "experimental/rocm/dynamic_symbol_tables.h" // IWYU pragma: export #undef RC_PFN_DECL #undef RC_PFN_STR_DECL } iree_hal_rocm_dynamic_symbols_t;
diff --git a/experimental/rocm/dynamic_symbols_test.cc b/experimental/rocm/dynamic_symbols_test.cc index dd33e07..06ea00a 100644 --- a/experimental/rocm/dynamic_symbols_test.cc +++ b/experimental/rocm/dynamic_symbols_test.cc
@@ -6,8 +6,10 @@ #include "experimental/rocm/dynamic_symbols.h" +#include <iostream> + +#include "iree/base/api.h" #include "iree/testing/gtest.h" -#include "iree/testing/status_matchers.h" namespace iree { namespace hal { @@ -25,7 +27,7 @@ iree_status_t status = iree_hal_rocm_dynamic_symbols_initialize( iree_allocator_system(), &symbols); if (!iree_status_is_ok(status)) { - IREE_LOG(WARNING) << "Symbols cannot be loaded, skipping test."; + std::cerr << "Symbols cannot be loaded, skipping test."; GTEST_SKIP(); }
diff --git a/experimental/rocm/event_semaphore.c b/experimental/rocm/event_semaphore.c index b05bafe..7fe6860 100644 --- a/experimental/rocm/event_semaphore.c +++ b/experimental/rocm/event_semaphore.c
@@ -6,10 +6,12 @@ #include "experimental/rocm/event_semaphore.h" -#include "experimental/rocm/status_util.h" +#include <stddef.h> + +#include "iree/base/api.h" #include "iree/base/tracing.h" -typedef struct { +typedef struct iree_hal_rocm_semaphore_t { iree_hal_resource_t resource; iree_hal_rocm_context_wrapper_t *context; uint64_t initial_value;
diff --git a/experimental/rocm/event_semaphore.h b/experimental/rocm/event_semaphore.h index 87ca683..5f32492 100644 --- a/experimental/rocm/event_semaphore.h +++ b/experimental/rocm/event_semaphore.h
@@ -7,8 +7,11 @@ #ifndef IREE_HAL_ROCM_SEMAPHORE_H_ #define IREE_HAL_ROCM_SEMAPHORE_H_ +#include <stdint.h> + #include "experimental/rocm/context_wrapper.h" #include "experimental/rocm/status_util.h" +#include "iree/base/api.h" #include "iree/hal/api.h" #ifdef __cplusplus
diff --git a/experimental/rocm/executable_layout.c b/experimental/rocm/executable_layout.c index ba88d32..6960cd2 100644 --- a/experimental/rocm/executable_layout.c +++ b/experimental/rocm/executable_layout.c
@@ -6,10 +6,12 @@ #include "experimental/rocm/executable_layout.h" -#include "experimental/rocm/status_util.h" +#include <stddef.h> + +#include "iree/base/api.h" #include "iree/base/tracing.h" -typedef struct { +typedef struct iree_hal_rocm_executable_layout_t { iree_hal_resource_t resource; iree_hal_rocm_context_wrapper_t *context; iree_host_size_t set_layout_count;
diff --git a/experimental/rocm/executable_layout.h b/experimental/rocm/executable_layout.h index c0469aa..cd0fccf 100644 --- a/experimental/rocm/executable_layout.h +++ b/experimental/rocm/executable_layout.h
@@ -8,6 +8,7 @@ #define IREE_HAL_ROCM_EXECUTABLE_LAYOUT_H_ #include "experimental/rocm/context_wrapper.h" +#include "iree/base/api.h" #include "iree/hal/api.h" #ifdef __cplusplus
diff --git a/experimental/rocm/native_executable.c b/experimental/rocm/native_executable.c index 0f1edf2..f72bd4f 100644 --- a/experimental/rocm/native_executable.c +++ b/experimental/rocm/native_executable.c
@@ -6,7 +6,11 @@ #include "experimental/rocm/native_executable.h" +#include <stddef.h> + +#include "experimental/rocm/dynamic_symbols.h" #include "experimental/rocm/status_util.h" +#include "iree/base/api.h" #include "iree/base/tracing.h" // flatcc schemas: @@ -14,14 +18,14 @@ #include "iree/schemas/rocm_executable_def_reader.h" #include "iree/schemas/rocm_executable_def_verifier.h" -typedef struct { +typedef struct iree_hal_rocm_native_executable_function_t { hipFunction_t rocm_function; uint32_t block_size_x; uint32_t block_size_y; uint32_t block_size_z; } iree_hal_rocm_native_executable_function_t; -typedef struct { +typedef struct iree_hal_rocm_native_executable_t { iree_hal_resource_t resource; iree_hal_rocm_context_wrapper_t *context; iree_host_size_t entry_count;
diff --git a/experimental/rocm/native_executable.h b/experimental/rocm/native_executable.h index 0b33b33..7a9229a 100644 --- a/experimental/rocm/native_executable.h +++ b/experimental/rocm/native_executable.h
@@ -7,8 +7,11 @@ #ifndef IREE_HAL_ROCM_NATIVE_EXECUTABLE_H_ #define IREE_HAL_ROCM_NATIVE_EXECUTABLE_H_ +#include <stdint.h> + #include "experimental/rocm/context_wrapper.h" #include "experimental/rocm/rocm_headers.h" +#include "iree/base/api.h" #include "iree/hal/api.h" #ifdef __cplusplus
diff --git a/experimental/rocm/nop_executable_cache.c b/experimental/rocm/nop_executable_cache.c index 35ec16c..6592727 100644 --- a/experimental/rocm/nop_executable_cache.c +++ b/experimental/rocm/nop_executable_cache.c
@@ -6,10 +6,14 @@ #include "experimental/rocm/nop_executable_cache.h" +#include <stdbool.h> +#include <stddef.h> + #include "experimental/rocm/native_executable.h" +#include "iree/base/api.h" #include "iree/base/tracing.h" -typedef struct { +typedef struct iree_hal_rocm_nop_executable_cache_t { iree_hal_resource_t resource; iree_hal_rocm_context_wrapper_t *context; } iree_hal_rocm_nop_executable_cache_t;
diff --git a/experimental/rocm/nop_executable_cache.h b/experimental/rocm/nop_executable_cache.h index 1262fea..d1b2fc1 100644 --- a/experimental/rocm/nop_executable_cache.h +++ b/experimental/rocm/nop_executable_cache.h
@@ -8,6 +8,7 @@ #define IREE_HAL_ROCM_NOP_EXECUTABLE_CACHE_H_ #include "experimental/rocm/context_wrapper.h" +#include "iree/base/api.h" #include "iree/hal/api.h" #ifdef __cplusplus
diff --git a/experimental/rocm/registration/CMakeLists.txt b/experimental/rocm/registration/CMakeLists.txt index f184333..36042bc 100644 --- a/experimental/rocm/registration/CMakeLists.txt +++ b/experimental/rocm/registration/CMakeLists.txt
@@ -16,8 +16,9 @@ SRCS "driver_module.c" DEPS + iree::base + iree::base::cc iree::base::core_headers - iree::base::status iree::base::tracing iree::hal experimental::rocm
diff --git a/experimental/rocm/registration/driver_module.c b/experimental/rocm/registration/driver_module.c index a9df558..2db41b4 100644 --- a/experimental/rocm/registration/driver_module.c +++ b/experimental/rocm/registration/driver_module.c
@@ -7,9 +7,10 @@ #include "experimental/rocm/registration/driver_module.h" #include <inttypes.h> +#include <stddef.h> #include "experimental/rocm/api.h" -#include "iree/base/target_platform.h" +#include "iree/base/api.h" #include "iree/base/tracing.h" #define IREE_HAL_ROCM_DRIVER_ID 0x524f434d0au // ROCM
diff --git a/experimental/rocm/registration/driver_module.h b/experimental/rocm/registration/driver_module.h index 6c55fea..efc1a70 100644 --- a/experimental/rocm/registration/driver_module.h +++ b/experimental/rocm/registration/driver_module.h
@@ -7,6 +7,7 @@ #ifndef IREE_HAL_ROCM_REGISTRATION_DRIVER_MODULE_H_ #define IREE_HAL_ROCM_REGISTRATION_DRIVER_MODULE_H_ +#include "iree/base/api.h" #include "iree/hal/api.h" #ifdef __cplusplus
diff --git a/experimental/rocm/rocm_allocator.c b/experimental/rocm/rocm_allocator.c index c30f4f3..cccdc9f 100644 --- a/experimental/rocm/rocm_allocator.c +++ b/experimental/rocm/rocm_allocator.c
@@ -6,11 +6,15 @@ #include "experimental/rocm/rocm_allocator.h" +#include <stddef.h> + +#include "experimental/rocm/dynamic_symbols.h" #include "experimental/rocm/rocm_buffer.h" #include "experimental/rocm/status_util.h" +#include "iree/base/api.h" #include "iree/base/tracing.h" -typedef struct iree_hal_rocm_allocator_s { +typedef struct iree_hal_rocm_allocator_t { iree_hal_resource_t resource; iree_hal_rocm_context_wrapper_t *context; } iree_hal_rocm_allocator_t;
diff --git a/experimental/rocm/rocm_allocator.h b/experimental/rocm/rocm_allocator.h index 1add674..a47480c 100644 --- a/experimental/rocm/rocm_allocator.h +++ b/experimental/rocm/rocm_allocator.h
@@ -9,6 +9,7 @@ #include "experimental/rocm/context_wrapper.h" #include "experimental/rocm/status_util.h" +#include "iree/base/api.h" #include "iree/hal/api.h" #ifdef __cplusplus
diff --git a/experimental/rocm/rocm_buffer.c b/experimental/rocm/rocm_buffer.c index 5269b4f..195e897 100644 --- a/experimental/rocm/rocm_buffer.c +++ b/experimental/rocm/rocm_buffer.c
@@ -6,11 +6,15 @@ #include "experimental/rocm/rocm_buffer.h" +#include <stddef.h> +#include <stdint.h> +#include <string.h> + #include "experimental/rocm/rocm_allocator.h" -#include "experimental/rocm/status_util.h" +#include "iree/base/api.h" #include "iree/base/tracing.h" -typedef struct iree_hal_rocm_buffer_s { +typedef struct iree_hal_rocm_buffer_t { iree_hal_buffer_t base; void *host_ptr; hipDeviceptr_t device_ptr;
diff --git a/experimental/rocm/rocm_buffer.h b/experimental/rocm/rocm_buffer.h index 7e24bc7..e898630 100644 --- a/experimental/rocm/rocm_buffer.h +++ b/experimental/rocm/rocm_buffer.h
@@ -8,6 +8,7 @@ #define IREE_HAL_ROCM_BUFFER_H_ #include "experimental/rocm/rocm_headers.h" +#include "iree/base/api.h" #include "iree/hal/api.h" #ifdef __cplusplus
diff --git a/experimental/rocm/rocm_device.c b/experimental/rocm/rocm_device.c index b84d2bc..67418f6 100644 --- a/experimental/rocm/rocm_device.c +++ b/experimental/rocm/rocm_device.c
@@ -6,7 +6,11 @@ #include "experimental/rocm/rocm_device.h" -#include "experimental/rocm/api.h" +#include <stddef.h> +#include <stdint.h> +#include <string.h> + +#include "experimental/rocm/context_wrapper.h" #include "experimental/rocm/descriptor_set_layout.h" #include "experimental/rocm/direct_command_buffer.h" #include "experimental/rocm/dynamic_symbols.h" @@ -22,7 +26,7 @@ // iree_hal_rocm_device_t //===----------------------------------------------------------------------===// -typedef struct { +typedef struct iree_hal_rocm_device_t { iree_hal_resource_t resource; iree_string_view_t identifier;
diff --git a/experimental/rocm/rocm_device.h b/experimental/rocm/rocm_device.h index 545436d..67e2f9b 100644 --- a/experimental/rocm/rocm_device.h +++ b/experimental/rocm/rocm_device.h
@@ -9,6 +9,7 @@ #include "experimental/rocm/api.h" #include "experimental/rocm/dynamic_symbols.h" +#include "iree/base/api.h" #include "iree/hal/api.h" #ifdef __cplusplus
diff --git a/experimental/rocm/rocm_driver.c b/experimental/rocm/rocm_driver.c index 4bc3323..8bd8ae6 100644 --- a/experimental/rocm/rocm_driver.c +++ b/experimental/rocm/rocm_driver.c
@@ -4,13 +4,18 @@ // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +#include <stdint.h> +#include <string.h> + #include "experimental/rocm/api.h" #include "experimental/rocm/dynamic_symbols.h" #include "experimental/rocm/rocm_device.h" #include "experimental/rocm/status_util.h" +#include "iree/base/api.h" #include "iree/base/tracing.h" +#include "iree/hal/api.h" -typedef struct { +typedef struct iree_hal_rocm_driver_t { iree_hal_resource_t resource; iree_allocator_t host_allocator; // Identifier used for the driver in the IREE driver registry.
diff --git a/experimental/rocm/rocm_event.c b/experimental/rocm/rocm_event.c index 2d17caa..48b20c3 100644 --- a/experimental/rocm/rocm_event.c +++ b/experimental/rocm/rocm_event.c
@@ -6,11 +6,13 @@ #include "experimental/rocm/rocm_event.h" -#include "experimental/rocm/status_util.h" +#include <stddef.h> + +#include "iree/base/api.h" #include "iree/base/tracing.h" // Dummy events for now, don't do anything. -typedef struct { +typedef struct iree_hal_rocm_event_t { iree_hal_resource_t resource; iree_hal_rocm_context_wrapper_t *context_wrapper; } iree_hal_rocm_event_t;
diff --git a/experimental/rocm/rocm_event.h b/experimental/rocm/rocm_event.h index 6c1ece6..73041a4 100644 --- a/experimental/rocm/rocm_event.h +++ b/experimental/rocm/rocm_event.h
@@ -9,6 +9,7 @@ #include "experimental/rocm/context_wrapper.h" #include "experimental/rocm/rocm_headers.h" +#include "iree/base/api.h" #include "iree/hal/api.h" #ifdef __cplusplus
diff --git a/experimental/rocm/rocm_headers.h b/experimental/rocm/rocm_headers.h index 056e8c0..6f5da96 100644 --- a/experimental/rocm/rocm_headers.h +++ b/experimental/rocm/rocm_headers.h
@@ -11,6 +11,6 @@ #error 32-bit not supported on ROCm #endif // defined(IREE_PTR_SIZE_32) -#include "hip/hip_runtime.h" +#include "hip/hip_runtime.h" // IWYU pragma: export #endif // IREE_HAL_ROCM_ROCM_HEADERS_H_
diff --git a/experimental/rocm/status_util.c b/experimental/rocm/status_util.c index e1b6fd6..a084c3f 100644 --- a/experimental/rocm/status_util.c +++ b/experimental/rocm/status_util.c
@@ -6,6 +6,8 @@ #include "experimental/rocm/status_util.h" +#include <stddef.h> + #include "experimental/rocm/dynamic_symbols.h" iree_status_t iree_hal_rocm_result_to_status(
diff --git a/experimental/rocm/status_util.h b/experimental/rocm/status_util.h index 31e9404..b459591 100644 --- a/experimental/rocm/status_util.h +++ b/experimental/rocm/status_util.h
@@ -7,6 +7,8 @@ #ifndef IREE_HAL_ROCM_STATUS_UTIL_H_ #define IREE_HAL_ROCM_STATUS_UTIL_H_ +#include <stdint.h> + #include "experimental/rocm/dynamic_symbols.h" #include "iree/base/api.h"
diff --git a/iree/compiler/Dialect/HAL/Target/ROCM/ROCMTarget.cpp b/iree/compiler/Dialect/HAL/Target/ROCM/ROCMTarget.cpp index 9457a92..584f6d0 100644 --- a/iree/compiler/Dialect/HAL/Target/ROCM/ROCMTarget.cpp +++ b/iree/compiler/Dialect/HAL/Target/ROCM/ROCMTarget.cpp
@@ -39,8 +39,13 @@ llvm::cl::desc("Whether to try Linking to AMD Bitcodes"), llvm::cl::init(false)); + static llvm::cl::opt<std::string> clROCMBitcodeDir( + "iree-rocm-bc-dir", llvm::cl::desc("Directory of ROCM Bitcode"), + llvm::cl::init("/opt/rocm/amdgcn/bitcode")); + targetOptions.ROCMTargetChip = clROCMTargetChip; targetOptions.ROCMLinkBC = clROCMLinkBC; + targetOptions.ROCMBitcodeDir = clROCMBitcodeDir; return targetOptions; } @@ -150,7 +155,8 @@ // Link module to Device Library if (options_.ROCMLinkBC) - LinkROCDLIfNecessary(llvmModule.get(), options_.ROCMTargetChip); + LinkROCDLIfNecessary(llvmModule.get(), options_.ROCMTargetChip, + options_.ROCMBitcodeDir); // Serialize hsaco kernel into the binary that we will embed in the // final flatbuffer.
diff --git a/iree/compiler/Dialect/HAL/Target/ROCM/ROCMTarget.h b/iree/compiler/Dialect/HAL/Target/ROCM/ROCMTarget.h index 5a28c06..d4aa445 100644 --- a/iree/compiler/Dialect/HAL/Target/ROCM/ROCMTarget.h +++ b/iree/compiler/Dialect/HAL/Target/ROCM/ROCMTarget.h
@@ -20,6 +20,8 @@ std::string ROCMTargetChip; // Whether to try Linking to AMD Bitcodes bool ROCMLinkBC; + // AMD Bitcodes Directory + std::string ROCMBitcodeDir; }; ROCMTargetOptions getROCMTargetOptionsFromFlags(); @@ -29,7 +31,8 @@ std::function<ROCMTargetOptions()> queryOptions); // Links LLVM module to ROC Device Library Bit Code -void LinkROCDLIfNecessary(llvm::Module *module, std::string targetChip); +void LinkROCDLIfNecessary(llvm::Module *module, std::string targetChip, + std::string bitCodeDir); // Compiles ISAToHsaco Code std::string createHsaco(const std::string isa, StringRef name);
diff --git a/iree/compiler/Dialect/HAL/Target/ROCM/ROCMTargetUtils.cpp b/iree/compiler/Dialect/HAL/Target/ROCM/ROCMTargetUtils.cpp index d4b798b..37a605b 100644 --- a/iree/compiler/Dialect/HAL/Target/ROCM/ROCMTargetUtils.cpp +++ b/iree/compiler/Dialect/HAL/Target/ROCM/ROCMTargetUtils.cpp
@@ -90,7 +90,8 @@ return success(); } -static std::vector<std::string> GetROCDLPaths(std::string targetChip) { +static std::vector<std::string> GetROCDLPaths(std::string targetChip, + std::string bitCodeDir) { // AMDGPU bitcodes. int lenOfChipPrefix = 3; std::string chipId = targetChip.substr(lenOfChipPrefix); @@ -101,22 +102,22 @@ "oclc_daz_opt_off.bc", chip_isa_bc}); // Construct full path to ROCDL bitcode libraries. - std::string rocdl_dir_path = "/opt/rocm/amdgcn/bitcode"; std::vector<std::string> result; std::string app = "/"; for (auto &filename : *rocdl_filenames) { - result.push_back(rocdl_dir_path + app + filename); + result.push_back(bitCodeDir + app + filename); } return result; } // Links ROCm-Device-Libs into the given module if the module needs it. -void LinkROCDLIfNecessary(llvm::Module *module, std::string targetChip) { +void LinkROCDLIfNecessary(llvm::Module *module, std::string targetChip, + std::string bitCodeDir) { if (!HAL::CouldNeedDeviceBitcode(*module)) { return; } - if (!succeeded( - HAL::LinkWithBitcodeVector(module, GetROCDLPaths(targetChip)))) { + if (!succeeded(HAL::LinkWithBitcodeVector( + module, GetROCDLPaths(targetChip, bitCodeDir)))) { llvm::WithColor::error(llvm::errs()) << "Fail to Link ROCDL.\n"; }; }