|
|
@ -57,6 +57,7 @@ public: |
|
|
|
|
|
|
|
|
[[nodiscard]] IR::Inst* Inst() const; |
|
|
[[nodiscard]] IR::Inst* Inst() const; |
|
|
[[nodiscard]] IR::Inst* InstRecursive() const; |
|
|
[[nodiscard]] IR::Inst* InstRecursive() const; |
|
|
|
|
|
[[nodiscard]] IR::Inst* TryInstRecursive() const; |
|
|
[[nodiscard]] IR::Value Resolve() const; |
|
|
[[nodiscard]] IR::Value Resolve() const; |
|
|
[[nodiscard]] IR::Reg Reg() const; |
|
|
[[nodiscard]] IR::Reg Reg() const; |
|
|
[[nodiscard]] IR::Pred Pred() const; |
|
|
[[nodiscard]] IR::Pred Pred() const; |
|
|
@ -308,6 +309,13 @@ inline IR::Inst* Value::InstRecursive() const { |
|
|
return inst; |
|
|
return inst; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
inline IR::Inst* Value::TryInstRecursive() const { |
|
|
|
|
|
if (IsIdentity()) { |
|
|
|
|
|
return inst->Arg(0).TryInstRecursive(); |
|
|
|
|
|
} |
|
|
|
|
|
return type == Type::Opaque ? inst : nullptr; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
inline IR::Value Value::Resolve() const { |
|
|
inline IR::Value Value::Resolve() const { |
|
|
if (IsIdentity()) { |
|
|
if (IsIdentity()) { |
|
|
return inst->Arg(0).Resolve(); |
|
|
return inst->Arg(0).Resolve(); |
|
|
|