summaryrefslogtreecommitdiff
path: root/src/shader_recompiler/frontend/ir/value.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/shader_recompiler/frontend/ir/value.h')
-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>;
264using F16F32F64 = TypedValue<Type::F16 | Type::F32 | Type::F64>; 264using F16F32F64 = TypedValue<Type::F16 | Type::F32 | Type::F64>;
265using UAny = TypedValue<Type::U8 | Type::U16 | Type::U32 | Type::U64>; 265using UAny = TypedValue<Type::U8 | Type::U16 | Type::U32 | Type::U64>;
266 266
267inline bool Value::IsIdentity() const noexcept {
268 return type == Type::Opaque && inst->GetOpcode() == Opcode::Identity;
269}
270
271inline bool Value::IsPhi() const noexcept {
272 return type == Type::Opaque && inst->GetOpcode() == Opcode::Phi;
273}
274
275inline bool Value::IsEmpty() const noexcept {
276 return type == Type::Void;
277}
278
279inline bool Value::IsImmediate() const noexcept {
280 IR::Type current_type{type};
281 const IR::Inst* current_inst{inst};
282 while (current_type == Type::Opaque && current_inst->GetOpcode() == Opcode::Identity) {
283 const Value& arg{current_inst->Arg(0)};
284 current_type = arg.type;
285 current_inst = arg.inst;
286 }
287 return current_type != Type::Opaque;
288}
289
267} // namespace Shader::IR 290} // namespace Shader::IR