diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2021-04-21 07:43:44 +0200 |
---|---|---|
committer | ameerj <52414509+ameerj@users.noreply.github.com> | 2021-07-23 03:51:28 +0200 |
commit | f66851e37682ce538172b0945908227ada8d21ac (patch) | |
tree | 2e102ea36e034d7be86abae1165010a1b9612ce7 /src/shader_recompiler/frontend/ir | |
parent | shader: Inline common Value functions into the header (diff) | |
download | yuzu-f66851e37682ce538172b0945908227ada8d21ac.tar yuzu-f66851e37682ce538172b0945908227ada8d21ac.tar.gz yuzu-f66851e37682ce538172b0945908227ada8d21ac.tar.bz2 yuzu-f66851e37682ce538172b0945908227ada8d21ac.tar.lz yuzu-f66851e37682ce538172b0945908227ada8d21ac.tar.xz yuzu-f66851e37682ce538172b0945908227ada8d21ac.tar.zst yuzu-f66851e37682ce538172b0945908227ada8d21ac.zip |
Diffstat (limited to 'src/shader_recompiler/frontend/ir')
-rw-r--r-- | src/shader_recompiler/frontend/ir/microinstruction.cpp | 4 | ||||
-rw-r--r-- | src/shader_recompiler/frontend/ir/value.h | 7 |
2 files changed, 7 insertions, 4 deletions
diff --git a/src/shader_recompiler/frontend/ir/microinstruction.cpp b/src/shader_recompiler/frontend/ir/microinstruction.cpp index 701746a0c..e3350931b 100644 --- a/src/shader_recompiler/frontend/ir/microinstruction.cpp +++ b/src/shader_recompiler/frontend/ir/microinstruction.cpp @@ -279,8 +279,10 @@ void Inst::ClearArgs() { if (!value.IsImmediate()) { UndoUse(value); } - value = {}; } + // Reset arguments to null + // std::memset was measured to be faster on MSVC than std::ranges:fill + std::memset(&args, 0, sizeof(args)); } } diff --git a/src/shader_recompiler/frontend/ir/value.h b/src/shader_recompiler/frontend/ir/value.h index 5425e42a1..7b20824ed 100644 --- a/src/shader_recompiler/frontend/ir/value.h +++ b/src/shader_recompiler/frontend/ir/value.h @@ -34,7 +34,7 @@ struct AssociatedInsts; class Value { public: - Value() noexcept : type{IR::Type::Void}, inst{nullptr} {} + Value() noexcept = default; explicit Value(IR::Inst* value) noexcept; explicit Value(IR::Block* value) noexcept; explicit Value(IR::Reg value) noexcept; @@ -78,9 +78,9 @@ public: private: void ValidateAccess(IR::Type expected) const; - IR::Type type; + IR::Type type{}; union { - IR::Inst* inst; + IR::Inst* inst{}; IR::Block* label; IR::Reg reg; IR::Pred pred; @@ -95,6 +95,7 @@ private: f64 imm_f64; }; }; +static_assert(static_cast<u32>(IR::Type::Void) == 0, "memset relies on IR::Type being zero"); static_assert(std::is_trivially_copyable_v<Value>); template <IR::Type type_> |