aboutsummaryrefslogtreecommitdiff
path: root/backend/include/rcc/CodeGen/MachineMemOperand.h
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-11 17:37:42 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-11 17:37:42 +0800
commit6a7b083f322f4ac47e58cbf9d4d5fd4d1f6fecd0 (patch)
treef363c502f0e2b9cda2f12928049275a433db6ad4 /backend/include/rcc/CodeGen/MachineMemOperand.h
parentadcf8c9b1bd1b47e00bf859693112cea1f7e8c9f (diff)
downloadrcc-project-6a7b083f322f4ac47e58cbf9d4d5fd4d1f6fecd0.tar.gz
rcc-project-6a7b083f322f4ac47e58cbf9d4d5fd4d1f6fecd0.tar.xz
[MIR] Accept fixed-baseline LLVM syntax
Diffstat (limited to 'backend/include/rcc/CodeGen/MachineMemOperand.h')
-rw-r--r--backend/include/rcc/CodeGen/MachineMemOperand.h9
1 files changed, 7 insertions, 2 deletions
diff --git a/backend/include/rcc/CodeGen/MachineMemOperand.h b/backend/include/rcc/CodeGen/MachineMemOperand.h
index a9e19a6..c5c1357 100644
--- a/backend/include/rcc/CodeGen/MachineMemOperand.h
+++ b/backend/include/rcc/CodeGen/MachineMemOperand.h
@@ -3,6 +3,7 @@
#ifndef RCC_CODEGEN_MACHINEMEMOPERAND_H
#define RCC_CODEGEN_MACHINEMEMOPERAND_H
+#include "rcc/CodeGen/GenericConstant.h"
#include "rcc/CodeGen/LowLevelType.h"
#include "rcc/CodeGen/MachineIRTypes.h"
#include "rcc/CodeGen/MachineMetadata.h"
@@ -140,6 +141,7 @@ public:
GlobalSymbol,
ExternalSymbol,
IRValue,
+ IRConstant,
Stack,
GOT,
ConstantPoolPseudo,
@@ -157,6 +159,7 @@ public:
[[nodiscard]] static MemoryBase globalSymbol(std::string Name);
[[nodiscard]] static MemoryBase externalSymbol(std::string Name);
[[nodiscard]] static MemoryBase irValue(std::string Name);
+ [[nodiscard]] static Expected<MemoryBase> irConstant(GenericConstantData Constant);
[[nodiscard]] static MemoryBase stack();
[[nodiscard]] static MemoryBase got();
[[nodiscard]] static MemoryBase constantPoolPseudo();
@@ -173,12 +176,13 @@ public:
[[nodiscard]] std::optional<ConstantPoolIndex> constantPoolIndex() const noexcept;
[[nodiscard]] std::optional<JumpTableIndex> jumpTableIndex() const noexcept;
[[nodiscard]] std::optional<std::string_view> symbolName() const noexcept;
+ [[nodiscard]] const GenericConstantData *constantValue() const noexcept;
friend bool operator==(const MemoryBase &Left, const MemoryBase &Right) = default;
private:
- using Storage =
- std::variant<std::monostate, FrameIndex, ConstantPoolIndex, JumpTableIndex, std::string>;
+ using Storage = std::variant<std::monostate, FrameIndex, ConstantPoolIndex, JumpTableIndex,
+ std::string, GenericConstantData>;
MemoryBase(Kind BaseKind, Storage Value) : BaseKind(BaseKind), Value(std::move(Value)) {}
@@ -193,6 +197,7 @@ struct MachineMemOperandDesc final {
AtomicOrdering FailureOrdering = AtomicOrdering::NotAtomic;
SyncScopeID SyncScope;
MemorySize Size;
+ std::optional<LLT> MemoryType;
Alignment Align;
std::optional<Alignment> BaseAlign;
std::uint32_t AddressSpace = 0;