| //===- AMDGPUWaitcntUtils.cpp ---------------------------------------------===// | |
| // | |
| // 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 "AMDGPUWaitcntUtils.h" | |
| #include "Utils/AMDGPUBaseInfo.h" | |
| namespace llvm::AMDGPU { | |
| iota_range<InstCounterType> inst_counter_types(InstCounterType MaxCounter) { | |
| return enum_seq(LOAD_CNT, MaxCounter); | |
| } | |
| StringLiteral getInstCounterName(InstCounterType T) { | |
| switch (T) { | |
| case LOAD_CNT: | |
| return "LOAD_CNT"; | |
| case DS_CNT: | |
| return "DS_CNT"; | |
| case EXP_CNT: | |
| return "EXP_CNT"; | |
| case STORE_CNT: | |
| return "STORE_CNT"; | |
| case SAMPLE_CNT: | |
| return "SAMPLE_CNT"; | |
| case BVH_CNT: | |
| return "BVH_CNT"; | |
| case KM_CNT: | |
| return "KM_CNT"; | |
| case X_CNT: | |
| return "X_CNT"; | |
| case ASYNC_CNT: | |
| return "ASYNC_CNT"; | |
| case VA_VDST: | |
| return "VA_VDST"; | |
| case VM_VSRC: | |
| return "VM_VSRC"; | |
| case NUM_INST_CNTS: | |
| return "NUM_INST_CNTS"; | |
| } | |
| llvm_unreachable("Unhandled InstCounterType"); | |
| } | |
| #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) | |
| void Waitcnt::dump() const { dbgs() << *this << '\n'; } | |
| #endif | |
| Waitcnt decodeWaitcnt(const IsaVersion &Version, unsigned Encoded) { | |
| Waitcnt Decoded; | |
| Decoded.set(LOAD_CNT, decodeVmcnt(Version, Encoded)); | |
| Decoded.set(EXP_CNT, decodeExpcnt(Version, Encoded)); | |
| Decoded.set(DS_CNT, decodeLgkmcnt(Version, Encoded)); | |
| return Decoded; | |
| } | |
| unsigned encodeWaitcnt(const IsaVersion &Version, const Waitcnt &Decoded) { | |
| return encodeWaitcnt(Version, Decoded.get(LOAD_CNT), Decoded.get(EXP_CNT), | |
| Decoded.get(DS_CNT)); | |
| } | |
| Waitcnt decodeLoadcntDscnt(const IsaVersion &Version, unsigned LoadcntDscnt) { | |
| Waitcnt Decoded; | |
| Decoded.set(LOAD_CNT, decodeLoadcnt(Version, LoadcntDscnt)); | |
| Decoded.set(DS_CNT, decodeDscnt(Version, LoadcntDscnt)); | |
| return Decoded; | |
| } | |
| Waitcnt decodeStorecntDscnt(const IsaVersion &Version, unsigned StorecntDscnt) { | |
| Waitcnt Decoded; | |
| Decoded.set(STORE_CNT, decodeStorecnt(Version, StorecntDscnt)); | |
| Decoded.set(DS_CNT, decodeDscnt(Version, StorecntDscnt)); | |
| return Decoded; | |
| } | |
| unsigned encodeLoadcntDscnt(const IsaVersion &Version, const Waitcnt &Decoded) { | |
| return encodeLoadcntDscnt(Version, Decoded.get(LOAD_CNT), | |
| Decoded.get(DS_CNT)); | |
| } | |
| unsigned encodeStorecntDscnt(const IsaVersion &Version, | |
| const Waitcnt &Decoded) { | |
| return encodeStorecntDscnt(Version, Decoded.get(STORE_CNT), | |
| Decoded.get(DS_CNT)); | |
| } | |
| } // namespace llvm::AMDGPU |