From 3473e195088e5cab89217cfa2f4fbcd95ee9b309 Mon Sep 17 00:00:00 2001 From: Ivan Chikish Date: Thu, 13 Apr 2023 20:19:18 +0300 Subject: [PATCH] SPU LLVM: fix savestate safety guards Volatile was removed since it prevented optimizations. --- rpcs3/Emu/Cell/SPURecompiler.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/rpcs3/Emu/Cell/SPURecompiler.cpp b/rpcs3/Emu/Cell/SPURecompiler.cpp index 073285a49b..fe9c264b27 100644 --- a/rpcs3/Emu/Cell/SPURecompiler.cpp +++ b/rpcs3/Emu/Cell/SPURecompiler.cpp @@ -4891,12 +4891,7 @@ class spu_llvm_recompiler : public spu_recompiler_base, public cpu_translator may_be_unsafe_for_savestate = false; } - if (may_be_unsafe_for_savestate) - { - m_ir->CreateStore(m_ir->getInt8(1), spu_ptr(&spu_thread::unsavable)); - } - - m_ir->CreateStore(m_ir->getFalse(), m_fake_global1); + m_ir->CreateStore(m_ir->getInt1(may_be_unsafe_for_savestate), m_fake_global1); if (may_be_unsafe_for_savestate) { @@ -5540,8 +5535,13 @@ public: { m_ir->SetInsertPoint(si); + if (si->getOperand(0) == m_ir->getTrue()) + { + m_ir->CreateStore(m_ir->getInt8(1), _ptr(f->getArg(0), ::offset32(&spu_thread::unsavable))); + } + CallInst* ci{}; - if (si->getOperand(0) == m_ir->getFalse()) + if (si->getOperand(0) == m_ir->getTrue() || si->getOperand(0) == m_ir->getFalse()) { ci = m_ir->CreateCall(m_test_state, {f->getArg(0)}); ci->setCallingConv(m_test_state->getCallingConv());