From 77d83b008a3d0eab2c97d80cfd1f5d7d2055dec8 Mon Sep 17 00:00:00 2001 From: lizzie Date: Tue, 9 Dec 2025 05:28:01 +0100 Subject: [PATCH] [dynarmic] avoid IsInmediate() comical call recursion (#3145) Signed-off-by: lizzie Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3145 Reviewed-by: crueter Reviewed-by: Caio Oliveira Co-authored-by: lizzie Co-committed-by: lizzie --- src/dynarmic/src/dynarmic/ir/value.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/dynarmic/src/dynarmic/ir/value.cpp b/src/dynarmic/src/dynarmic/ir/value.cpp index 6f8a386827..59b17b5a7b 100644 --- a/src/dynarmic/src/dynarmic/ir/value.cpp +++ b/src/dynarmic/src/dynarmic/ir/value.cpp @@ -100,9 +100,14 @@ bool Value::IsEmpty() const noexcept { } bool Value::IsImmediate() const noexcept { - if (IsIdentity()) - return inner.inst->GetArg(0).IsImmediate(); - return type != Type::Opaque; + IR::Type current_type = type; + IR::Inst const* current_inst = inner.inst; + while (current_type == Type::Opaque && current_inst->GetOpcode() == Opcode::Identity) { + Value const& arg = current_inst->GetArg(0); + current_type = arg.type; + current_inst = arg.inner.inst; + } + return current_type != Type::Opaque; } Type Value::GetType() const noexcept {