shader: Move microinstruction header to the value header
This commit is contained in:
		| @@ -36,7 +36,6 @@ add_library(shader_recompiler STATIC | |||||||
|     frontend/ir/ir_emitter.cpp |     frontend/ir/ir_emitter.cpp | ||||||
|     frontend/ir/ir_emitter.h |     frontend/ir/ir_emitter.h | ||||||
|     frontend/ir/microinstruction.cpp |     frontend/ir/microinstruction.cpp | ||||||
|     frontend/ir/microinstruction.h |  | ||||||
|     frontend/ir/modifiers.h |     frontend/ir/modifiers.h | ||||||
|     frontend/ir/opcodes.cpp |     frontend/ir/opcodes.cpp | ||||||
|     frontend/ir/opcodes.h |     frontend/ir/opcodes.h | ||||||
|   | |||||||
| @@ -10,7 +10,6 @@ | |||||||
|  |  | ||||||
| #include "shader_recompiler/backend/spirv/emit_spirv.h" | #include "shader_recompiler/backend/spirv/emit_spirv.h" | ||||||
| #include "shader_recompiler/frontend/ir/basic_block.h" | #include "shader_recompiler/frontend/ir/basic_block.h" | ||||||
| #include "shader_recompiler/frontend/ir/microinstruction.h" |  | ||||||
| #include "shader_recompiler/frontend/ir/program.h" | #include "shader_recompiler/frontend/ir/program.h" | ||||||
|  |  | ||||||
| namespace Shader::Backend::SPIRV { | namespace Shader::Backend::SPIRV { | ||||||
|   | |||||||
| @@ -8,7 +8,6 @@ | |||||||
|  |  | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "shader_recompiler/backend/spirv/emit_context.h" | #include "shader_recompiler/backend/spirv/emit_context.h" | ||||||
| #include "shader_recompiler/frontend/ir/microinstruction.h" |  | ||||||
| #include "shader_recompiler/frontend/ir/program.h" | #include "shader_recompiler/frontend/ir/program.h" | ||||||
| #include "shader_recompiler/profile.h" | #include "shader_recompiler/profile.h" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -13,7 +13,6 @@ | |||||||
|  |  | ||||||
| #include "common/bit_cast.h" | #include "common/bit_cast.h" | ||||||
| #include "shader_recompiler/frontend/ir/condition.h" | #include "shader_recompiler/frontend/ir/condition.h" | ||||||
| #include "shader_recompiler/frontend/ir/microinstruction.h" |  | ||||||
| #include "shader_recompiler/frontend/ir/value.h" | #include "shader_recompiler/frontend/ir/value.h" | ||||||
| #include "shader_recompiler/object_pool.h" | #include "shader_recompiler/object_pool.h" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -10,7 +10,6 @@ | |||||||
|  |  | ||||||
| #include <boost/container/small_vector.hpp> | #include <boost/container/small_vector.hpp> | ||||||
|  |  | ||||||
| #include "shader_recompiler/frontend/ir/microinstruction.h" |  | ||||||
| #include "shader_recompiler/frontend/ir/value.h" | #include "shader_recompiler/frontend/ir/value.h" | ||||||
|  |  | ||||||
| namespace Shader::IR { | namespace Shader::IR { | ||||||
|   | |||||||
| @@ -6,8 +6,8 @@ | |||||||
| #include <memory> | #include <memory> | ||||||
|  |  | ||||||
| #include "shader_recompiler/exception.h" | #include "shader_recompiler/exception.h" | ||||||
| #include "shader_recompiler/frontend/ir/microinstruction.h" |  | ||||||
| #include "shader_recompiler/frontend/ir/type.h" | #include "shader_recompiler/frontend/ir/type.h" | ||||||
|  | #include "shader_recompiler/frontend/ir/value.h" | ||||||
|  |  | ||||||
| namespace Shader::IR { | namespace Shader::IR { | ||||||
| namespace { | namespace { | ||||||
|   | |||||||
| @@ -1,162 +0,0 @@ | |||||||
| // Copyright 2021 yuzu Emulator Project |  | ||||||
| // Licensed under GPLv2 or any later version |  | ||||||
| // Refer to the license.txt file included. |  | ||||||
|  |  | ||||||
| #pragma once |  | ||||||
|  |  | ||||||
| #include <array> |  | ||||||
| #include <cstring> |  | ||||||
| #include <type_traits> |  | ||||||
| #include <utility> |  | ||||||
| #include <vector> |  | ||||||
|  |  | ||||||
| #include <boost/container/small_vector.hpp> |  | ||||||
| #include <boost/intrusive/list.hpp> |  | ||||||
|  |  | ||||||
| #include "common/bit_cast.h" |  | ||||||
| #include "common/common_types.h" |  | ||||||
| #include "shader_recompiler/frontend/ir/opcodes.h" |  | ||||||
| #include "shader_recompiler/frontend/ir/type.h" |  | ||||||
| #include "shader_recompiler/frontend/ir/value.h" |  | ||||||
|  |  | ||||||
| namespace Shader::IR { |  | ||||||
|  |  | ||||||
| class Block; |  | ||||||
|  |  | ||||||
| struct AssociatedInsts; |  | ||||||
|  |  | ||||||
| class Inst : public boost::intrusive::list_base_hook<> { |  | ||||||
| public: |  | ||||||
|     explicit Inst(Opcode op_, u32 flags_) noexcept; |  | ||||||
|     ~Inst(); |  | ||||||
|  |  | ||||||
|     Inst& operator=(const Inst&) = delete; |  | ||||||
|     Inst(const Inst&) = delete; |  | ||||||
|  |  | ||||||
|     Inst& operator=(Inst&&) = delete; |  | ||||||
|     Inst(Inst&&) = delete; |  | ||||||
|  |  | ||||||
|     /// Get the number of uses this instruction has. |  | ||||||
|     [[nodiscard]] int UseCount() const noexcept { |  | ||||||
|         return use_count; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /// Determines whether this instruction has uses or not. |  | ||||||
|     [[nodiscard]] bool HasUses() const noexcept { |  | ||||||
|         return use_count > 0; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /// Get the opcode this microinstruction represents. |  | ||||||
|     [[nodiscard]] IR::Opcode GetOpcode() const noexcept { |  | ||||||
|         return op; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /// Determines if there is a pseudo-operation associated with this instruction. |  | ||||||
|     [[nodiscard]] bool HasAssociatedPseudoOperation() const noexcept { |  | ||||||
|         return associated_insts != nullptr; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /// Determines whether or not this instruction may have side effects. |  | ||||||
|     [[nodiscard]] bool MayHaveSideEffects() const noexcept; |  | ||||||
|  |  | ||||||
|     /// Determines whether or not this instruction is a pseudo-instruction. |  | ||||||
|     /// Pseudo-instructions depend on their parent instructions for their semantics. |  | ||||||
|     [[nodiscard]] bool IsPseudoInstruction() const noexcept; |  | ||||||
|  |  | ||||||
|     /// Determines if all arguments of this instruction are immediates. |  | ||||||
|     [[nodiscard]] bool AreAllArgsImmediates() const; |  | ||||||
|  |  | ||||||
|     /// Gets a pseudo-operation associated with this instruction |  | ||||||
|     [[nodiscard]] Inst* GetAssociatedPseudoOperation(IR::Opcode opcode); |  | ||||||
|  |  | ||||||
|     /// Get the type this instruction returns. |  | ||||||
|     [[nodiscard]] IR::Type Type() const; |  | ||||||
|  |  | ||||||
|     /// Get the number of arguments this instruction has. |  | ||||||
|     [[nodiscard]] size_t NumArgs() const { |  | ||||||
|         return op == Opcode::Phi ? phi_args.size() : NumArgsOf(op); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /// Get the value of a given argument index. |  | ||||||
|     [[nodiscard]] Value Arg(size_t index) const noexcept { |  | ||||||
|         if (op == Opcode::Phi) { |  | ||||||
|             return phi_args[index].second; |  | ||||||
|         } else { |  | ||||||
|             return args[index]; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /// Set the value of a given argument index. |  | ||||||
|     void SetArg(size_t index, Value value); |  | ||||||
|  |  | ||||||
|     /// Get a pointer to the block of a phi argument. |  | ||||||
|     [[nodiscard]] Block* PhiBlock(size_t index) const; |  | ||||||
|     /// Add phi operand to a phi instruction. |  | ||||||
|     void AddPhiOperand(Block* predecessor, const Value& value); |  | ||||||
|  |  | ||||||
|     void Invalidate(); |  | ||||||
|     void ClearArgs(); |  | ||||||
|  |  | ||||||
|     void ReplaceUsesWith(Value replacement); |  | ||||||
|  |  | ||||||
|     void ReplaceOpcode(IR::Opcode opcode); |  | ||||||
|  |  | ||||||
|     template <typename FlagsType> |  | ||||||
|     requires(sizeof(FlagsType) <= sizeof(u32) && std::is_trivially_copyable_v<FlagsType>) |  | ||||||
|         [[nodiscard]] FlagsType Flags() const noexcept { |  | ||||||
|         FlagsType ret; |  | ||||||
|         std::memcpy(reinterpret_cast<char*>(&ret), &flags, sizeof(ret)); |  | ||||||
|         return ret; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     template <typename FlagsType> |  | ||||||
|     requires(sizeof(FlagsType) <= sizeof(u32) && std::is_trivially_copyable_v<FlagsType>) |  | ||||||
|         [[nodiscard]] void SetFlags(FlagsType value) noexcept { |  | ||||||
|         std::memcpy(&flags, &value, sizeof(value)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /// Intrusively store the host definition of this instruction. |  | ||||||
|     template <typename DefinitionType> |  | ||||||
|     void SetDefinition(DefinitionType def) { |  | ||||||
|         definition = Common::BitCast<u32>(def); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /// Return the intrusively stored host definition of this instruction. |  | ||||||
|     template <typename DefinitionType> |  | ||||||
|     [[nodiscard]] DefinitionType Definition() const noexcept { |  | ||||||
|         return Common::BitCast<DefinitionType>(definition); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| private: |  | ||||||
|     struct NonTriviallyDummy { |  | ||||||
|         NonTriviallyDummy() noexcept {} |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     void Use(const Value& value); |  | ||||||
|     void UndoUse(const Value& value); |  | ||||||
|  |  | ||||||
|     IR::Opcode op{}; |  | ||||||
|     int use_count{}; |  | ||||||
|     u32 flags{}; |  | ||||||
|     u32 definition{}; |  | ||||||
|     union { |  | ||||||
|         NonTriviallyDummy dummy{}; |  | ||||||
|         boost::container::small_vector<std::pair<Block*, Value>, 2> phi_args; |  | ||||||
|         std::array<Value, 5> args; |  | ||||||
|     }; |  | ||||||
|     std::unique_ptr<AssociatedInsts> associated_insts; |  | ||||||
| }; |  | ||||||
| static_assert(sizeof(Inst) <= 128, "Inst size unintentionally increased"); |  | ||||||
|  |  | ||||||
| struct AssociatedInsts { |  | ||||||
|     union { |  | ||||||
|         Inst* in_bounds_inst; |  | ||||||
|         Inst* sparse_inst; |  | ||||||
|         Inst* zero_inst{}; |  | ||||||
|     }; |  | ||||||
|     Inst* sign_inst{}; |  | ||||||
|     Inst* carry_inst{}; |  | ||||||
|     Inst* overflow_inst{}; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace Shader::IR |  | ||||||
| @@ -8,8 +8,8 @@ | |||||||
| #include <fmt/format.h> | #include <fmt/format.h> | ||||||
|  |  | ||||||
| #include "shader_recompiler/frontend/ir/basic_block.h" | #include "shader_recompiler/frontend/ir/basic_block.h" | ||||||
| #include "shader_recompiler/frontend/ir/microinstruction.h" |  | ||||||
| #include "shader_recompiler/frontend/ir/program.h" | #include "shader_recompiler/frontend/ir/program.h" | ||||||
|  | #include "shader_recompiler/frontend/ir/value.h" | ||||||
|  |  | ||||||
| namespace Shader::IR { | namespace Shader::IR { | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2,7 +2,6 @@ | |||||||
| // Licensed under GPLv2 or any later version | // Licensed under GPLv2 or any later version | ||||||
| // Refer to the license.txt file included. | // Refer to the license.txt file included. | ||||||
|  |  | ||||||
| #include "shader_recompiler/frontend/ir/microinstruction.h" |  | ||||||
| #include "shader_recompiler/frontend/ir/opcodes.h" | #include "shader_recompiler/frontend/ir/opcodes.h" | ||||||
| #include "shader_recompiler/frontend/ir/value.h" | #include "shader_recompiler/frontend/ir/value.h" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -4,19 +4,34 @@ | |||||||
|  |  | ||||||
| #pragma once | #pragma once | ||||||
|  |  | ||||||
|  | #include <array> | ||||||
|  | #include <cstring> | ||||||
|  | #include <memory> | ||||||
|  | #include <type_traits> | ||||||
|  | #include <utility> | ||||||
|  | #include <vector> | ||||||
|  |  | ||||||
|  | #include <boost/container/small_vector.hpp> | ||||||
|  | #include <boost/intrusive/list.hpp> | ||||||
|  |  | ||||||
|  | #include "common/bit_cast.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "shader_recompiler/exception.h" | #include "shader_recompiler/exception.h" | ||||||
| #include "shader_recompiler/frontend/ir/attribute.h" | #include "shader_recompiler/frontend/ir/attribute.h" | ||||||
|  | #include "shader_recompiler/frontend/ir/opcodes.h" | ||||||
|  | #include "shader_recompiler/frontend/ir/patch.h" | ||||||
| #include "shader_recompiler/frontend/ir/pred.h" | #include "shader_recompiler/frontend/ir/pred.h" | ||||||
| #include "shader_recompiler/frontend/ir/reg.h" | #include "shader_recompiler/frontend/ir/reg.h" | ||||||
| #include "shader_recompiler/frontend/ir/patch.h" |  | ||||||
| #include "shader_recompiler/frontend/ir/type.h" | #include "shader_recompiler/frontend/ir/type.h" | ||||||
|  | #include "shader_recompiler/frontend/ir/value.h" | ||||||
|  |  | ||||||
| namespace Shader::IR { | namespace Shader::IR { | ||||||
|  |  | ||||||
| class Block; | class Block; | ||||||
| class Inst; | class Inst; | ||||||
|  |  | ||||||
|  | struct AssociatedInsts; | ||||||
|  |  | ||||||
| class Value { | class Value { | ||||||
| public: | public: | ||||||
|     Value() noexcept : type{IR::Type::Void}, inst{nullptr} {} |     Value() noexcept : type{IR::Type::Void}, inst{nullptr} {} | ||||||
| @@ -101,6 +116,140 @@ public: | |||||||
|     explicit TypedValue(IR::Inst* inst_) : TypedValue(Value(inst_)) {} |     explicit TypedValue(IR::Inst* inst_) : TypedValue(Value(inst_)) {} | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | class Inst : public boost::intrusive::list_base_hook<> { | ||||||
|  | public: | ||||||
|  |     explicit Inst(IR::Opcode op_, u32 flags_) noexcept; | ||||||
|  |     ~Inst(); | ||||||
|  |  | ||||||
|  |     Inst& operator=(const Inst&) = delete; | ||||||
|  |     Inst(const Inst&) = delete; | ||||||
|  |  | ||||||
|  |     Inst& operator=(Inst&&) = delete; | ||||||
|  |     Inst(Inst&&) = delete; | ||||||
|  |  | ||||||
|  |     /// Get the number of uses this instruction has. | ||||||
|  |     [[nodiscard]] int UseCount() const noexcept { | ||||||
|  |         return use_count; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// Determines whether this instruction has uses or not. | ||||||
|  |     [[nodiscard]] bool HasUses() const noexcept { | ||||||
|  |         return use_count > 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// Get the opcode this microinstruction represents. | ||||||
|  |     [[nodiscard]] IR::Opcode GetOpcode() const noexcept { | ||||||
|  |         return op; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// Determines if there is a pseudo-operation associated with this instruction. | ||||||
|  |     [[nodiscard]] bool HasAssociatedPseudoOperation() const noexcept { | ||||||
|  |         return associated_insts != nullptr; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// Determines whether or not this instruction may have side effects. | ||||||
|  |     [[nodiscard]] bool MayHaveSideEffects() const noexcept; | ||||||
|  |  | ||||||
|  |     /// Determines whether or not this instruction is a pseudo-instruction. | ||||||
|  |     /// Pseudo-instructions depend on their parent instructions for their semantics. | ||||||
|  |     [[nodiscard]] bool IsPseudoInstruction() const noexcept; | ||||||
|  |  | ||||||
|  |     /// Determines if all arguments of this instruction are immediates. | ||||||
|  |     [[nodiscard]] bool AreAllArgsImmediates() const; | ||||||
|  |  | ||||||
|  |     /// Gets a pseudo-operation associated with this instruction | ||||||
|  |     [[nodiscard]] Inst* GetAssociatedPseudoOperation(IR::Opcode opcode); | ||||||
|  |  | ||||||
|  |     /// Get the type this instruction returns. | ||||||
|  |     [[nodiscard]] IR::Type Type() const; | ||||||
|  |  | ||||||
|  |     /// Get the number of arguments this instruction has. | ||||||
|  |     [[nodiscard]] size_t NumArgs() const { | ||||||
|  |         return op == IR::Opcode::Phi ? phi_args.size() : NumArgsOf(op); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// Get the value of a given argument index. | ||||||
|  |     [[nodiscard]] Value Arg(size_t index) const noexcept { | ||||||
|  |         if (op == IR::Opcode::Phi) { | ||||||
|  |             return phi_args[index].second; | ||||||
|  |         } else { | ||||||
|  |             return args[index]; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// Set the value of a given argument index. | ||||||
|  |     void SetArg(size_t index, Value value); | ||||||
|  |  | ||||||
|  |     /// Get a pointer to the block of a phi argument. | ||||||
|  |     [[nodiscard]] Block* PhiBlock(size_t index) const; | ||||||
|  |     /// Add phi operand to a phi instruction. | ||||||
|  |     void AddPhiOperand(Block* predecessor, const Value& value); | ||||||
|  |  | ||||||
|  |     void Invalidate(); | ||||||
|  |     void ClearArgs(); | ||||||
|  |  | ||||||
|  |     void ReplaceUsesWith(Value replacement); | ||||||
|  |  | ||||||
|  |     void ReplaceOpcode(IR::Opcode opcode); | ||||||
|  |  | ||||||
|  |     template <typename FlagsType> | ||||||
|  |     requires(sizeof(FlagsType) <= sizeof(u32) && std::is_trivially_copyable_v<FlagsType>) | ||||||
|  |         [[nodiscard]] FlagsType Flags() const noexcept { | ||||||
|  |         FlagsType ret; | ||||||
|  |         std::memcpy(reinterpret_cast<char*>(&ret), &flags, sizeof(ret)); | ||||||
|  |         return ret; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     template <typename FlagsType> | ||||||
|  |     requires(sizeof(FlagsType) <= sizeof(u32) && std::is_trivially_copyable_v<FlagsType>) | ||||||
|  |         [[nodiscard]] void SetFlags(FlagsType value) noexcept { | ||||||
|  |         std::memcpy(&flags, &value, sizeof(value)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// Intrusively store the host definition of this instruction. | ||||||
|  |     template <typename DefinitionType> | ||||||
|  |     void SetDefinition(DefinitionType def) { | ||||||
|  |         definition = Common::BitCast<u32>(def); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// Return the intrusively stored host definition of this instruction. | ||||||
|  |     template <typename DefinitionType> | ||||||
|  |     [[nodiscard]] DefinitionType Definition() const noexcept { | ||||||
|  |         return Common::BitCast<DefinitionType>(definition); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | private: | ||||||
|  |     struct NonTriviallyDummy { | ||||||
|  |         NonTriviallyDummy() noexcept {} | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     void Use(const Value& value); | ||||||
|  |     void UndoUse(const Value& value); | ||||||
|  |  | ||||||
|  |     IR::Opcode op{}; | ||||||
|  |     int use_count{}; | ||||||
|  |     u32 flags{}; | ||||||
|  |     u32 definition{}; | ||||||
|  |     union { | ||||||
|  |         NonTriviallyDummy dummy{}; | ||||||
|  |         boost::container::small_vector<std::pair<Block*, Value>, 2> phi_args; | ||||||
|  |         std::array<Value, 5> args; | ||||||
|  |     }; | ||||||
|  |     std::unique_ptr<AssociatedInsts> associated_insts; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(Inst) <= 128, "Inst size unintentionally increased"); | ||||||
|  |  | ||||||
|  | struct AssociatedInsts { | ||||||
|  |     union { | ||||||
|  |         Inst* in_bounds_inst; | ||||||
|  |         Inst* sparse_inst; | ||||||
|  |         Inst* zero_inst{}; | ||||||
|  |     }; | ||||||
|  |     Inst* sign_inst{}; | ||||||
|  |     Inst* carry_inst{}; | ||||||
|  |     Inst* overflow_inst{}; | ||||||
|  | }; | ||||||
|  |  | ||||||
| using U1 = TypedValue<Type::U1>; | using U1 = TypedValue<Type::U1>; | ||||||
| using U8 = TypedValue<Type::U8>; | using U8 = TypedValue<Type::U8>; | ||||||
| using U16 = TypedValue<Type::U16>; | using U16 = TypedValue<Type::U16>; | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ | |||||||
|  |  | ||||||
| #include "shader_recompiler/environment.h" | #include "shader_recompiler/environment.h" | ||||||
| #include "shader_recompiler/frontend/ir/basic_block.h" | #include "shader_recompiler/frontend/ir/basic_block.h" | ||||||
| #include "shader_recompiler/frontend/ir/microinstruction.h" | #include "shader_recompiler/frontend/ir/value.h" | ||||||
| #include "shader_recompiler/frontend/maxwell/control_flow.h" | #include "shader_recompiler/frontend/maxwell/control_flow.h" | ||||||
| #include "shader_recompiler/object_pool.h" | #include "shader_recompiler/object_pool.h" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -3,9 +3,9 @@ | |||||||
| // Refer to the license.txt file included. | // Refer to the license.txt file included. | ||||||
|  |  | ||||||
| #include "shader_recompiler/environment.h" | #include "shader_recompiler/environment.h" | ||||||
| #include "shader_recompiler/frontend/ir/microinstruction.h" |  | ||||||
| #include "shader_recompiler/frontend/ir/modifiers.h" | #include "shader_recompiler/frontend/ir/modifiers.h" | ||||||
| #include "shader_recompiler/frontend/ir/program.h" | #include "shader_recompiler/frontend/ir/program.h" | ||||||
|  | #include "shader_recompiler/frontend/ir/value.h" | ||||||
| #include "shader_recompiler/ir_opt/passes.h" | #include "shader_recompiler/ir_opt/passes.h" | ||||||
| #include "shader_recompiler/shader_info.h" | #include "shader_recompiler/shader_info.h" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ | |||||||
| #include "common/bit_util.h" | #include "common/bit_util.h" | ||||||
| #include "shader_recompiler/exception.h" | #include "shader_recompiler/exception.h" | ||||||
| #include "shader_recompiler/frontend/ir/ir_emitter.h" | #include "shader_recompiler/frontend/ir/ir_emitter.h" | ||||||
| #include "shader_recompiler/frontend/ir/microinstruction.h" | #include "shader_recompiler/frontend/ir/value.h" | ||||||
| #include "shader_recompiler/ir_opt/passes.h" | #include "shader_recompiler/ir_opt/passes.h" | ||||||
|  |  | ||||||
| namespace Shader::Optimization { | namespace Shader::Optimization { | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
| #include <ranges> | #include <ranges> | ||||||
|  |  | ||||||
| #include "shader_recompiler/frontend/ir/basic_block.h" | #include "shader_recompiler/frontend/ir/basic_block.h" | ||||||
| #include "shader_recompiler/frontend/ir/microinstruction.h" | #include "shader_recompiler/frontend/ir/value.h" | ||||||
| #include "shader_recompiler/ir_opt/passes.h" | #include "shader_recompiler/ir_opt/passes.h" | ||||||
|  |  | ||||||
| namespace Shader::Optimization { | namespace Shader::Optimization { | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ | |||||||
| #include "shader_recompiler/frontend/ir/basic_block.h" | #include "shader_recompiler/frontend/ir/basic_block.h" | ||||||
| #include "shader_recompiler/frontend/ir/breadth_first_search.h" | #include "shader_recompiler/frontend/ir/breadth_first_search.h" | ||||||
| #include "shader_recompiler/frontend/ir/ir_emitter.h" | #include "shader_recompiler/frontend/ir/ir_emitter.h" | ||||||
| #include "shader_recompiler/frontend/ir/microinstruction.h" | #include "shader_recompiler/frontend/ir/value.h" | ||||||
| #include "shader_recompiler/ir_opt/passes.h" | #include "shader_recompiler/ir_opt/passes.h" | ||||||
|  |  | ||||||
| namespace Shader::Optimization { | namespace Shader::Optimization { | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
| #include <vector> | #include <vector> | ||||||
|  |  | ||||||
| #include "shader_recompiler/frontend/ir/basic_block.h" | #include "shader_recompiler/frontend/ir/basic_block.h" | ||||||
| #include "shader_recompiler/frontend/ir/microinstruction.h" | #include "shader_recompiler/frontend/ir/value.h" | ||||||
| #include "shader_recompiler/ir_opt/passes.h" | #include "shader_recompiler/ir_opt/passes.h" | ||||||
|  |  | ||||||
| namespace Shader::Optimization { | namespace Shader::Optimization { | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
| #include <algorithm> | #include <algorithm> | ||||||
|  |  | ||||||
| #include "shader_recompiler/frontend/ir/ir_emitter.h" | #include "shader_recompiler/frontend/ir/ir_emitter.h" | ||||||
| #include "shader_recompiler/frontend/ir/microinstruction.h" | #include "shader_recompiler/frontend/ir/value.h" | ||||||
| #include "shader_recompiler/ir_opt/passes.h" | #include "shader_recompiler/ir_opt/passes.h" | ||||||
|  |  | ||||||
| namespace Shader::Optimization { | namespace Shader::Optimization { | ||||||
|   | |||||||
| @@ -23,10 +23,10 @@ | |||||||
| #include <boost/container/flat_set.hpp> | #include <boost/container/flat_set.hpp> | ||||||
|  |  | ||||||
| #include "shader_recompiler/frontend/ir/basic_block.h" | #include "shader_recompiler/frontend/ir/basic_block.h" | ||||||
| #include "shader_recompiler/frontend/ir/microinstruction.h" |  | ||||||
| #include "shader_recompiler/frontend/ir/opcodes.h" | #include "shader_recompiler/frontend/ir/opcodes.h" | ||||||
| #include "shader_recompiler/frontend/ir/pred.h" | #include "shader_recompiler/frontend/ir/pred.h" | ||||||
| #include "shader_recompiler/frontend/ir/reg.h" | #include "shader_recompiler/frontend/ir/reg.h" | ||||||
|  | #include "shader_recompiler/frontend/ir/value.h" | ||||||
| #include "shader_recompiler/ir_opt/passes.h" | #include "shader_recompiler/ir_opt/passes.h" | ||||||
|  |  | ||||||
| namespace Shader::Optimization { | namespace Shader::Optimization { | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ | |||||||
|  |  | ||||||
| #include "shader_recompiler/exception.h" | #include "shader_recompiler/exception.h" | ||||||
| #include "shader_recompiler/frontend/ir/basic_block.h" | #include "shader_recompiler/frontend/ir/basic_block.h" | ||||||
| #include "shader_recompiler/frontend/ir/microinstruction.h" | #include "shader_recompiler/frontend/ir/value.h" | ||||||
| #include "shader_recompiler/ir_opt/passes.h" | #include "shader_recompiler/ir_opt/passes.h" | ||||||
|  |  | ||||||
| namespace Shader::Optimization { | namespace Shader::Optimization { | ||||||
|   | |||||||
| @@ -16,7 +16,7 @@ | |||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "common/thread_worker.h" | #include "common/thread_worker.h" | ||||||
| #include "shader_recompiler/frontend/ir/basic_block.h" | #include "shader_recompiler/frontend/ir/basic_block.h" | ||||||
| #include "shader_recompiler/frontend/ir/microinstruction.h" | #include "shader_recompiler/frontend/ir/value.h" | ||||||
| #include "shader_recompiler/frontend/maxwell/control_flow.h" | #include "shader_recompiler/frontend/maxwell/control_flow.h" | ||||||
| #include "shader_recompiler/object_pool.h" | #include "shader_recompiler/object_pool.h" | ||||||
| #include "shader_recompiler/profile.h" | #include "shader_recompiler/profile.h" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user