Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

166 lines
6.7 KiB
C++

//===--------- Platform.h - OpenMP target specific declarations --- 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_PLATFORM_H
#define OMPTARGET_PLATFORM_H
namespace platform {
#pragma omp begin declare target device_type(nohost)
// We cannot use an OpenMP variant because we require "C" linkage.
#ifdef __AMDGPU__
// The ROCm device library uses control globals to alter codegen for the
// different targets. To avoid needing to link them in manually we simply
// define them here.
extern "C" {
#define USED __attribute__((used))
// Disable unsafe math optimizations in the implementation.
USED extern const inline bool __oclc_unsafe_math_opt = 0;
// Disable denormalization at zero optimizations in the implementation.
USED extern const inline bool __oclc_daz_opt = 0;
// Disable rounding optimizations for 32-bit square roots.
USED extern const inline bool __oclc_correctly_rounded_sqrt32 = 1;
// Disable finite math optimizations.
USED extern const inline bool __oclc_finite_only_opt = 0;
// Spoof this to wave64 since we only compile for a single architecture.
USED extern const inline bool __oclc_wavefrontsize64 = 1;
// This is only relevant for statically resolving `malloc`, set to COV6.
USED extern const inline bool __oclc_ABI_version = 600;
#if defined(__gfx700__)
USED extern const inline unsigned __oclc_ISA_version = 7000;
#elif defined(__gfx701__)
USED extern const inline unsigned __oclc_ISA_version = 7001;
#elif defined(__gfx702__)
USED extern const inline unsigned __oclc_ISA_version = 7002;
#elif defined(__gfx703__)
USED extern const inline unsigned __oclc_ISA_version = 7003;
#elif defined(__gfx704__)
USED extern const inline unsigned __oclc_ISA_version = 7004;
#elif defined(__gfx705__)
USED extern const inline unsigned __oclc_ISA_version = 7005;
#elif defined(__gfx801__)
USED extern const inline unsigned __oclc_ISA_version = 8001;
#elif defined(__gfx802__)
USED extern const inline unsigned __oclc_ISA_version = 8002;
#elif defined(__gfx803__)
USED extern const inline unsigned __oclc_ISA_version = 8003;
#elif defined(__gfx805__)
USED extern const inline unsigned __oclc_ISA_version = 8005;
#elif defined(__gfx810__)
USED extern const inline unsigned __oclc_ISA_version = 8100;
#elif defined(__gfx900__)
USED extern const inline unsigned __oclc_ISA_version = 9000;
#elif defined(__gfx902__)
USED extern const inline unsigned __oclc_ISA_version = 9002;
#elif defined(__gfx904__)
USED extern const inline unsigned __oclc_ISA_version = 9004;
#elif defined(__gfx906__)
USED extern const inline unsigned __oclc_ISA_version = 9006;
#elif defined(__gfx908__)
USED extern const inline unsigned __oclc_ISA_version = 9008;
#elif defined(__gfx909__)
USED extern const inline unsigned __oclc_ISA_version = 9009;
#elif defined(__gfx90a__)
USED extern const inline unsigned __oclc_ISA_version = 9010;
#elif defined(__gfx90c__)
USED extern const inline unsigned __oclc_ISA_version = 9012;
#elif defined(__gfx942__)
USED extern const inline unsigned __oclc_ISA_version = 9402;
#elif defined(__gfx950__)
USED extern const inline unsigned __oclc_ISA_version = 9500;
#elif defined(__gfx1010__)
USED extern const inline unsigned __oclc_ISA_version = 10100;
#elif defined(__gfx1011__)
USED extern const inline unsigned __oclc_ISA_version = 10101;
#elif defined(__gfx1012__)
USED extern const inline unsigned __oclc_ISA_version = 10102;
#elif defined(__gfx1013__)
USED extern const inline unsigned __oclc_ISA_version = 10103;
#elif defined(__gfx1030__)
USED extern const inline unsigned __oclc_ISA_version = 10300;
#elif defined(__gfx1031__)
USED extern const inline unsigned __oclc_ISA_version = 10301;
#elif defined(__gfx1032__)
USED extern const inline unsigned __oclc_ISA_version = 10302;
#elif defined(__gfx1033__)
USED extern const inline unsigned __oclc_ISA_version = 10303;
#elif defined(__gfx1034__)
USED extern const inline unsigned __oclc_ISA_version = 10304;
#elif defined(__gfx1035__)
USED extern const inline unsigned __oclc_ISA_version = 10305;
#elif defined(__gfx1036__)
USED extern const inline unsigned __oclc_ISA_version = 10306;
#elif defined(__gfx1100__)
USED extern const inline unsigned __oclc_ISA_version = 11000;
#elif defined(__gfx1101__)
USED extern const inline unsigned __oclc_ISA_version = 11001;
#elif defined(__gfx1102__)
USED extern const inline unsigned __oclc_ISA_version = 11002;
#elif defined(__gfx1103__)
USED extern const inline unsigned __oclc_ISA_version = 11003;
#elif defined(__gfx1150__)
USED extern const inline unsigned __oclc_ISA_version = 11500;
#elif defined(__gfx1151__)
USED extern const inline unsigned __oclc_ISA_version = 11501;
#elif defined(__gfx1152__)
USED extern const inline unsigned __oclc_ISA_version = 11502;
#elif defined(__gfx1153__)
USED extern const inline unsigned __oclc_ISA_version = 11503;
#elif defined(__gfx1200__)
USED extern const inline unsigned __oclc_ISA_version = 12000;
#elif defined(__gfx1201__)
USED extern const inline unsigned __oclc_ISA_version = 12001;
#elif defined(__gfx9_generic__)
USED extern const inline unsigned __oclc_ISA_version = 9000;
#elif defined(__gfx9_4_generic__)
USED extern const inline unsigned __oclc_ISA_version = 9402;
#elif defined(__gfx10_1_generic__)
USED extern const inline unsigned __oclc_ISA_version = 10100;
#elif defined(__gfx10_3_generic__)
USED extern const inline unsigned __oclc_ISA_version = 10300;
#elif defined(__gfx11_generic__)
USED extern const inline unsigned __oclc_ISA_version = 11003;
#elif defined(__gfx12_generic__)
USED extern const inline unsigned __oclc_ISA_version = 12000;
#else
// The only thing this controls that we care about is fast FMA.
// FIXME: We need to stop relying on the DeviceRTL math libs this way.
USED extern const inline unsigned __oclc_ISA_version = 7001;
#endif
}
// These aliases cause clang to emit the control constants with ODR linkage.
// This allows us to link against the symbols via '-mlink-builtin-bitcode'
// without preventing them from being optimized or causing symbol collisions.
[[gnu::alias("__oclc_unsafe_math_opt")]] const bool __oclc_unsafe_math_opt__;
[[gnu::alias("__oclc_daz_opt")]] const bool __oclc_daz_opt__;
[[gnu::alias("__oclc_correctly_rounded_sqrt32")]] const bool
__oclc_correctly_rounded_sqrt32__;
[[gnu::alias("__oclc_finite_only_opt")]] const bool __oclc_finite_only_opt__;
[[gnu::alias("__oclc_wavefrontsize64")]] const bool __oclc_wavefrontsize64__;
[[gnu::alias("__oclc_ISA_version")]] const bool __oclc_ISA_version__;
[[gnu::alias("__oclc_ABI_version")]] const bool __oclc_ABI_version__;
#endif
#pragma omp end declare target
} // namespace platform
#endif