summaryrefslogtreecommitdiffstats
path: root/src/shader_recompiler/frontend/ir/value.h
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2021-04-21 07:42:36 +0200
committerameerj <52414509+ameerj@users.noreply.github.com>2021-07-23 03:51:28 +0200
commitc84bbd9e44e34bba0e602c1a6736535aa531445c (patch)
tree6e1a97dd556fe51d70c5acc18b7258655430e131 /src/shader_recompiler/frontend/ir/value.h
parentshader: Move microinstruction header to the value header (diff)
downloadyuzu-c84bbd9e44e34bba0e602c1a6736535aa531445c.tar
yuzu-c84bbd9e44e34bba0e602c1a6736535aa531445c.tar.gz
yuzu-c84bbd9e44e34bba0e602c1a6736535aa531445c.tar.bz2
yuzu-c84bbd9e44e34bba0e602c1a6736535aa531445c.tar.lz
yuzu-c84bbd9e44e34bba0e602c1a6736535aa531445c.tar.xz
yuzu-c84bbd9e44e34bba0e602c1a6736535aa531445c.tar.zst
yuzu-c84bbd9e44e34bba0e602c1a6736535aa531445c.zip
Diffstat (limited to '')
-rw-r--r--src/shader_recompiler/frontend/ir/value.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/shader_recompiler/frontend/ir/value.h b/src/shader_recompiler/frontend/ir/value.h
index d90a68b37..5425e42a1 100644
--- a/src/shader_recompiler/frontend/ir/value.h
+++ b/src/shader_recompiler/frontend/ir/value.h
@@ -264,4 +264,27 @@ using U16U32U64 = TypedValue<Type::U16 | Type::U32 | Type::U64>;
using F16F32F64 = TypedValue<Type::F16 | Type::F32 | Type::F64>;
using UAny = TypedValue<Type::U8 | Type::U16 | Type::U32 | Type::U64>;
+inline bool Value::IsIdentity() const noexcept {
+ return type == Type::Opaque && inst->GetOpcode() == Opcode::Identity;
+}
+
+inline bool Value::IsPhi() const noexcept {
+ return type == Type::Opaque && inst->GetOpcode() == Opcode::Phi;
+}
+
+inline bool Value::IsEmpty() const noexcept {
+ return type == Type::Void;
+}
+
+inline bool Value::IsImmediate() const noexcept {
+ IR::Type current_type{type};
+ const IR::Inst* current_inst{inst};
+ while (current_type == Type::Opaque && current_inst->GetOpcode() == Opcode::Identity) {
+ const Value& arg{current_inst->Arg(0)};
+ current_type = arg.type;
+ current_inst = arg.inst;
+ }
+ return current_type != Type::Opaque;
+}
+
} // namespace Shader::IR