Files
TheRock/rocm-libraries/shared/rocroller/lib/include/rocRoller/Expression_fwd.hpp
T
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

175 lines
4.3 KiB
C++

// Copyright Advanced Micro Devices, Inc., or its affiliates.
// SPDX-License-Identifier: MIT
/**
*
*/
#pragma once
#include <concepts>
#include <functional>
#include <memory>
#include <variant>
#include <rocRoller/AssemblyKernelArgument_fwd.hpp>
#include <rocRoller/InstructionValues/Register_fwd.hpp>
#include <rocRoller/KernelGraph/CoordinateGraph/Dimension_fwd.hpp>
#include <rocRoller/Operations/CommandArgument_fwd.hpp>
namespace rocRoller
{
namespace Expression
{
struct Add;
struct MatrixMultiply;
struct ScaledMatrixMultiply;
struct Multiply;
struct MultiplyAdd;
struct MultiplyHigh;
struct Subtract;
struct Divide;
struct Modulo;
struct ShiftL;
struct LogicalShiftR;
struct ArithmeticShiftR;
struct BitfieldCombine;
struct BitwiseNegate;
struct BitwiseAnd;
struct BitwiseOr;
struct BitwiseXor;
struct GreaterThan;
struct GreaterThanEqual;
struct LessThan;
struct LessThanEqual;
struct Equal;
struct NotEqual;
struct LogicalAnd;
struct LogicalOr;
struct LogicalNot;
struct Exponential2;
struct Exponential;
struct MagicMultiple;
struct MagicShifts;
struct MagicShiftAndSign;
struct Negate;
struct RandomNumber;
struct ToScalar;
struct BitFieldExtract;
struct AddShiftL;
struct ShiftLAdd;
struct Conditional;
struct Convert;
struct Reinterpret;
struct Concatenate;
template <DataType DATATYPE>
struct SRConvert;
struct DataFlowTag;
struct PositionalArgument;
using WaveTilePtr = std::shared_ptr<KernelGraph::CoordinateGraph::WaveTile>;
using Expression = std::variant<
// --- Binary Operations ---
Add,
Subtract,
Multiply,
MultiplyHigh,
Divide,
Modulo,
ShiftL,
LogicalShiftR,
ArithmeticShiftR,
BitfieldCombine,
BitwiseAnd,
BitwiseOr,
BitwiseXor,
LogicalAnd,
LogicalOr,
GreaterThan,
GreaterThanEqual,
LessThan,
LessThanEqual,
Equal,
NotEqual,
Concatenate,
// --- Stochastic Rounding Convert (also binary) ---
SRConvert<DataType::FP8>,
SRConvert<DataType::BF8>,
// --- Unary Operations ---
MagicMultiple,
MagicShifts,
MagicShiftAndSign,
Negate,
BitwiseNegate,
LogicalNot,
Exponential2,
Exponential,
RandomNumber,
ToScalar,
BitFieldExtract,
Convert,
Reinterpret,
// --- Ternary Operations ---
AddShiftL,
ShiftLAdd,
MatrixMultiply,
Conditional,
MultiplyAdd,
// ---Quinary Operation(s) ---
ScaledMatrixMultiply,
// --- Values ---
PositionalArgument,
// Literal: Always available
CommandArgumentValue,
// Available at kernel launch
CommandArgumentPtr,
// Available at kernel execute (i.e. on the GPU), and at kernel launch.
AssemblyKernelArgumentPtr,
// Available at kernel execute (i.e. on the GPU)
Register::ValuePtr,
DataFlowTag,
WaveTilePtr>;
using ExpressionPtr = std::shared_ptr<Expression>;
using ExpressionTransducer = std::function<ExpressionPtr(ExpressionPtr)>;
template <typename T>
concept CExpression = std::constructible_from<Expression, T>;
enum class EvaluationTime : int
{
Translate = 0, //< An expression where all the values come from CommandArgumentValues.
KernelLaunch, //< An expression where values may come from CommandArguments or CommandArgumentValues.
KernelExecute, // An expression that depends on at least one Register::Value.
Count
};
enum class Category : int;
}
}