[llvm] [KernelInfo] Implement new LLVM IR pass for GPU code analysis (PR #102944)
Joel E. Denny via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 26 11:23:23 PDT 2024
================
@@ -0,0 +1,121 @@
+//=- KernelInfo.h - Kernel Analysis -------------------------------*- 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
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the KernelInfo, KernelInfoAnalysis, and KernelInfoPrinter
+// classes used to extract function properties from a GPU kernel.
+//
+// See llvm/docs/KernelInfo.rst.
+// ===---------------------------------------------------------------------===//
+
+#ifndef LLVM_ANALYSIS_KERNELINFO_H
+#define LLVM_ANALYSIS_KERNELINFO_H
+
+#include "llvm/Analysis/OptimizationRemarkEmitter.h"
+#include "llvm/Analysis/TargetTransformInfo.h"
+
+namespace llvm {
+class DominatorTree;
+class Function;
+
+/// Data structure holding function info for kernels.
+class KernelInfo {
+ void updateForBB(const BasicBlock &BB, int64_t Direction,
+ OptimizationRemarkEmitter &ORE);
+
+public:
+ static KernelInfo getKernelInfo(Function &F, FunctionAnalysisManager &FAM);
+
+ bool operator==(const KernelInfo &FPI) const {
+ return std::memcmp(this, &FPI, sizeof(KernelInfo)) == 0;
+ }
+
+ bool operator!=(const KernelInfo &FPI) const { return !(*this == FPI); }
+
+ /// Whether the function has external linkage and is not a kernel function.
+ bool ExternalNotKernel = false;
+
+ /// OpenMP Launch bounds.
+ ///@{
+ std::optional<int64_t> OmpTargetNumTeams;
+ std::optional<int64_t> OmpTargetThreadLimit;
+ ///@}
+
+ /// AMDGPU launch bounds.
+ ///@{
+ std::optional<int64_t> AmdgpuMaxNumWorkgroupsX;
+ std::optional<int64_t> AmdgpuMaxNumWorkgroupsY;
+ std::optional<int64_t> AmdgpuMaxNumWorkgroupsZ;
+ std::optional<int64_t> AmdgpuFlatWorkGroupSizeMin;
+ std::optional<int64_t> AmdgpuFlatWorkGroupSizeMax;
+ std::optional<int64_t> AmdgpuWavesPerEuMin;
+ std::optional<int64_t> AmdgpuWavesPerEuMax;
----------------
jdenny-ornl wrote:
I think this issue is handled even though the implementation details are still under discussion elsewhere. Resolving. Please reopen if necessary.
https://github.com/llvm/llvm-project/pull/102944
More information about the llvm-commits
mailing list