diff options
Diffstat (limited to '')
| -rw-r--r-- | src/shader_recompiler/frontend/ir/value.h | 23 |
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>; | |||
| 264 | using F16F32F64 = TypedValue<Type::F16 | Type::F32 | Type::F64>; | 264 | using F16F32F64 = TypedValue<Type::F16 | Type::F32 | Type::F64>; |
| 265 | using UAny = TypedValue<Type::U8 | Type::U16 | Type::U32 | Type::U64>; | 265 | using UAny = TypedValue<Type::U8 | Type::U16 | Type::U32 | Type::U64>; |
| 266 | 266 | ||
| 267 | inline bool Value::IsIdentity() const noexcept { | ||
| 268 | return type == Type::Opaque && inst->GetOpcode() == Opcode::Identity; | ||
| 269 | } | ||
| 270 | |||
| 271 | inline bool Value::IsPhi() const noexcept { | ||
| 272 | return type == Type::Opaque && inst->GetOpcode() == Opcode::Phi; | ||
| 273 | } | ||
| 274 | |||
| 275 | inline bool Value::IsEmpty() const noexcept { | ||
| 276 | return type == Type::Void; | ||
| 277 | } | ||
| 278 | |||
| 279 | inline 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 |