diff options
Diffstat (limited to '')
| -rw-r--r-- | src/shader_recompiler/frontend/ir/value.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/shader_recompiler/frontend/ir/value.h b/src/shader_recompiler/frontend/ir/value.h index 0c6bf684d..dbea20115 100644 --- a/src/shader_recompiler/frontend/ir/value.h +++ b/src/shader_recompiler/frontend/ir/value.h | |||
| @@ -57,6 +57,7 @@ public: | |||
| 57 | 57 | ||
| 58 | [[nodiscard]] IR::Inst* Inst() const; | 58 | [[nodiscard]] IR::Inst* Inst() const; |
| 59 | [[nodiscard]] IR::Inst* InstRecursive() const; | 59 | [[nodiscard]] IR::Inst* InstRecursive() const; |
| 60 | [[nodiscard]] IR::Inst* TryInstRecursive() const; | ||
| 60 | [[nodiscard]] IR::Value Resolve() const; | 61 | [[nodiscard]] IR::Value Resolve() const; |
| 61 | [[nodiscard]] IR::Reg Reg() const; | 62 | [[nodiscard]] IR::Reg Reg() const; |
| 62 | [[nodiscard]] IR::Pred Pred() const; | 63 | [[nodiscard]] IR::Pred Pred() const; |
| @@ -308,6 +309,13 @@ inline IR::Inst* Value::InstRecursive() const { | |||
| 308 | return inst; | 309 | return inst; |
| 309 | } | 310 | } |
| 310 | 311 | ||
| 312 | inline IR::Inst* Value::TryInstRecursive() const { | ||
| 313 | if (IsIdentity()) { | ||
| 314 | return inst->Arg(0).TryInstRecursive(); | ||
| 315 | } | ||
| 316 | return type == Type::Opaque ? inst : nullptr; | ||
| 317 | } | ||
| 318 | |||
| 311 | inline IR::Value Value::Resolve() const { | 319 | inline IR::Value Value::Resolve() const { |
| 312 | if (IsIdentity()) { | 320 | if (IsIdentity()) { |
| 313 | return inst->Arg(0).Resolve(); | 321 | return inst->Arg(0).Resolve(); |