From a424fcfcf78080398287745e80e10211cea46beb Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 22 Jul 2018 19:06:28 +0300 Subject: [PATCH] PPU LLVM: fix phenoms --- rpcs3/Emu/Cell/PPUTranslator.cpp | 12 ++++++------ rpcs3/Emu/Cell/PPUTranslator.h | 4 ---- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/rpcs3/Emu/Cell/PPUTranslator.cpp b/rpcs3/Emu/Cell/PPUTranslator.cpp index 4ffb80175e..4c6b5e2fdd 100644 --- a/rpcs3/Emu/Cell/PPUTranslator.cpp +++ b/rpcs3/Emu/Cell/PPUTranslator.cpp @@ -143,7 +143,7 @@ Function* PPUTranslator::Translate(const ppu_function& info) std::fill(std::begin(m_globals), std::end(m_globals), nullptr); std::fill(std::begin(m_locals), std::end(m_locals), nullptr); - IRBuilder<> irb(m_entry = BasicBlock::Create(m_context, "__entry", m_function)); + IRBuilder<> irb(BasicBlock::Create(m_context, "__entry", m_function)); m_ir = &irb; // Instruction address is (m_addr + base) @@ -153,18 +153,18 @@ Function* PPUTranslator::Translate(const ppu_function& info) m_thread = &*m_function->arg_begin(); m_base_loaded = m_ir->CreateLoad(m_base); - m_body = BasicBlock::Create(m_context, "__body", m_function); + const auto body = BasicBlock::Create(m_context, "__body", m_function); // Check status register in the entry block const auto vstate = m_ir->CreateLoad(m_ir->CreateStructGEP(nullptr, m_thread, 1), true); const auto vcheck = BasicBlock::Create(m_context, "__test", m_function); - m_ir->CreateCondBr(m_ir->CreateIsNull(vstate), m_body, vcheck, m_md_likely); + m_ir->CreateCondBr(m_ir->CreateIsNull(vstate), body, vcheck, m_md_likely); // Create tail call to the check function m_ir->SetInsertPoint(vcheck); Call(GetType(), "__check", m_thread, GetAddr())->setTailCallKind(llvm::CallInst::TCK_Tail); m_ir->CreateRetVoid(); - m_ir->SetInsertPoint(m_body); + m_ir->SetInsertPoint(body); // Process blocks const auto block = std::make_pair(info.addr, info.size); @@ -178,7 +178,7 @@ Function* PPUTranslator::Translate(const ppu_function& info) // Process the instructions for (m_addr = block.first - base; m_addr < block.first + block.second - base; m_addr += 4) { - if (m_body->getTerminator()) + if (m_ir->GetInsertBlock()->getTerminator()) { break; } @@ -207,7 +207,7 @@ Function* PPUTranslator::Translate(const ppu_function& info) } // Finalize current block if necessary (create branch to the next address) - if (!m_body->getTerminator()) + if (!m_ir->GetInsertBlock()->getTerminator()) { FlushRegisters(); CallFunction(m_addr); diff --git a/rpcs3/Emu/Cell/PPUTranslator.h b/rpcs3/Emu/Cell/PPUTranslator.h index bc428bb6ab..baf071832c 100644 --- a/rpcs3/Emu/Cell/PPUTranslator.h +++ b/rpcs3/Emu/Cell/PPUTranslator.h @@ -47,10 +47,6 @@ class PPUTranslator final : public cpu_translator // Callable functions llvm::GlobalVariable* m_call; - // Main block - llvm::BasicBlock* m_body; - llvm::BasicBlock* m_entry; - // Thread context struct llvm::StructType* m_thread_type;