mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-06 15:00:17 +02:00
Passes: Return by unique_ptr where applicable
Same behavior, but makes the ownership intentions explicit in the interface.
This commit is contained in:
1 parent
38d25d97f5
commit
6084bdf982
16 files changed
+49
-52
No files matched your search
+2
-4
@@ -45,10 +45,9 @@ void PassManager::AddDefaultPasses(bool InlineConstants, bool StaticRegisterAllo
|
||||
InsertPass(CreateStaticRegisterAllocationPass());
|
||||
}
|
||||
|
||||
CompactionPass = CreateIRCompaction();
|
||||
// If the IR is compacted post-RA then the node indexing gets messed up and the backend isn't able to find the register assigned to a node
|
||||
// Compact before IR, don't worry about RA generating spills/fills
|
||||
InsertPass(CompactionPass);
|
||||
CompactionPass = InsertPass(CreateIRCompaction());
|
||||
}
|
||||
|
||||
void PassManager::AddDefaultValidationPasses() {
|
||||
@@ -60,8 +59,7 @@ void PassManager::AddDefaultValidationPasses() {
|
||||
}
|
||||
|
||||
void PassManager::InsertRegisterAllocationPass(bool OptimizeSRA) {
|
||||
RAPass = IR::CreateRegisterAllocationPass(CompactionPass, OptimizeSRA);
|
||||
InsertPass(RAPass);
|
||||
RAPass = InsertPass(IR::CreateRegisterAllocationPass(CompactionPass, OptimizeSRA));
|
||||
}
|
||||
|
||||
bool PassManager::Run(IREmitter *IREmit) {
|
||||
|
||||
+5
-5
@@ -42,9 +42,9 @@ class PassManager final {
|
||||
public:
|
||||
void AddDefaultPasses(bool InlineConstants, bool StaticRegisterAllocation);
|
||||
void AddDefaultValidationPasses();
|
||||
void InsertPass(Pass *Pass) {
|
||||
Pass* InsertPass(std::unique_ptr<Pass> Pass) {
|
||||
Pass->RegisterPassManager(this);
|
||||
Passes.emplace_back(Pass);
|
||||
return Passes.emplace_back(std::move(Pass)).get();
|
||||
}
|
||||
|
||||
void InsertRegisterAllocationPass(bool OptimizeSRA);
|
||||
@@ -73,15 +73,15 @@ protected:
|
||||
|
||||
private:
|
||||
Pass *RAPass{};
|
||||
FEXCore::IR::Pass *CompactionPass{};
|
||||
Pass *CompactionPass{};
|
||||
|
||||
std::vector<std::unique_ptr<Pass>> Passes;
|
||||
|
||||
#if defined(ASSERTIONS_ENABLED) && ASSERTIONS_ENABLED
|
||||
std::vector<std::unique_ptr<Pass>> ValidationPasses;
|
||||
void InsertValidationPass(Pass *Pass) {
|
||||
void InsertValidationPass(std::unique_ptr<Pass> Pass) {
|
||||
Pass->RegisterPassManager(this);
|
||||
ValidationPasses.emplace_back(Pass);
|
||||
ValidationPasses.emplace_back(std::move(Pass));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
+15
-13
@@ -1,25 +1,27 @@
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace FEXCore::IR {
|
||||
class Pass;
|
||||
class RegisterAllocationPass;
|
||||
class RegisterAllocationData;
|
||||
|
||||
FEXCore::IR::Pass* CreateConstProp(bool InlineConstants);
|
||||
FEXCore::IR::Pass* CreateContextLoadStoreElimination();
|
||||
FEXCore::IR::Pass* CreateSyscallOptimization();
|
||||
FEXCore::IR::Pass* CreateDeadFlagCalculationEliminination();
|
||||
FEXCore::IR::Pass* CreateDeadStoreElimination();
|
||||
FEXCore::IR::Pass* CreatePassDeadCodeElimination();
|
||||
FEXCore::IR::Pass* CreateIRCompaction();
|
||||
FEXCore::IR::RegisterAllocationPass* CreateRegisterAllocationPass(FEXCore::IR::Pass* CompactionPass, bool OptimizeSRA);
|
||||
FEXCore::IR::Pass* CreateStaticRegisterAllocationPass();
|
||||
FEXCore::IR::Pass* CreateLongDivideEliminationPass();
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreateConstProp(bool InlineConstants);
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreateContextLoadStoreElimination();
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreateSyscallOptimization();
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreateDeadFlagCalculationEliminination();
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreateDeadStoreElimination();
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreatePassDeadCodeElimination();
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreateIRCompaction();
|
||||
std::unique_ptr<FEXCore::IR::RegisterAllocationPass> CreateRegisterAllocationPass(FEXCore::IR::Pass* CompactionPass, bool OptimizeSRA);
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreateStaticRegisterAllocationPass();
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreateLongDivideEliminationPass();
|
||||
|
||||
namespace Validation {
|
||||
FEXCore::IR::Pass* CreateIRValidation();
|
||||
FEXCore::IR::Pass* CreatePhiValidation();
|
||||
FEXCore::IR::Pass* CreateValueDominanceValidation();
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreateIRValidation();
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreatePhiValidation();
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreateValueDominanceValidation();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -992,8 +992,8 @@ bool ConstProp::Run(IREmitter *IREmit) {
|
||||
return Changed;
|
||||
}
|
||||
|
||||
FEXCore::IR::Pass* CreateConstProp(bool InlineConstants) {
|
||||
return new ConstProp(InlineConstants);
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreateConstProp(bool InlineConstants) {
|
||||
return std::make_unique<ConstProp>(InlineConstants);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -59,10 +59,8 @@ void DeadCodeElimination::markUsed(OrderedNodeWrapper *CodeOp, IROp_Header *IROp
|
||||
|
||||
}
|
||||
|
||||
|
||||
FEXCore::IR::Pass* CreatePassDeadCodeElimination() {
|
||||
return new DeadCodeElimination{};
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreatePassDeadCodeElimination() {
|
||||
return std::make_unique<DeadCodeElimination>();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+3
-3
@@ -283,7 +283,7 @@ class RCLSE final : public FEXCore::IR::Pass {
|
||||
public:
|
||||
RCLSE() {
|
||||
ClassifyContextStruct(&ClassifiedStruct);
|
||||
DCE.reset(FEXCore::IR::CreatePassDeadCodeElimination());
|
||||
DCE = FEXCore::IR::CreatePassDeadCodeElimination();
|
||||
}
|
||||
bool Run(FEXCore::IR::IREmitter *IREmit) override;
|
||||
private:
|
||||
@@ -636,8 +636,8 @@ bool RCLSE::Run(FEXCore::IR::IREmitter *IREmit) {
|
||||
|
||||
namespace FEXCore::IR {
|
||||
|
||||
FEXCore::IR::Pass* CreateContextLoadStoreElimination() {
|
||||
return new RCLSE{};
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreateContextLoadStoreElimination() {
|
||||
return std::make_unique<RCLSE>();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -331,8 +331,8 @@ bool DeadStoreElimination::Run(IREmitter *IREmit) {
|
||||
return Changed;
|
||||
}
|
||||
|
||||
FEXCore::IR::Pass* CreateDeadStoreElimination() {
|
||||
return new DeadStoreElimination{};
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreateDeadStoreElimination() {
|
||||
return std::make_unique<DeadStoreElimination>();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -199,8 +199,8 @@ bool IRCompaction::Run(IREmitter *IREmit) {
|
||||
return true;
|
||||
}
|
||||
|
||||
FEXCore::IR::Pass* CreateIRCompaction() {
|
||||
return new IRCompaction{};
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreateIRCompaction() {
|
||||
return std::make_unique<IRCompaction>();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -285,7 +285,7 @@ bool IRValidation::Run(IREmitter *IREmit) {
|
||||
return false;
|
||||
}
|
||||
|
||||
FEXCore::IR::Pass* CreateIRValidation() {
|
||||
return new IRValidation{};
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreateIRValidation() {
|
||||
return std::make_unique<IRValidation>();
|
||||
}
|
||||
}
|
||||
@@ -106,7 +106,7 @@ bool LongDivideEliminationPass::Run(IREmitter *IREmit) {
|
||||
return Changed;
|
||||
}
|
||||
|
||||
FEXCore::IR::Pass* CreateLongDivideEliminationPass() {
|
||||
return new LongDivideEliminationPass{};
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreateLongDivideEliminationPass() {
|
||||
return std::make_unique<LongDivideEliminationPass>();
|
||||
}
|
||||
}
|
||||
@@ -66,8 +66,8 @@ bool PhiValidation::Run(IREmitter *IREmit) {
|
||||
return false;
|
||||
}
|
||||
|
||||
FEXCore::IR::Pass* CreatePhiValidation() {
|
||||
return new PhiValidation{};
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreatePhiValidation() {
|
||||
return std::make_unique<PhiValidation>();
|
||||
}
|
||||
|
||||
}
|
||||
+2
-2
@@ -59,8 +59,8 @@ bool DeadFlagCalculationEliminination::Run(IREmitter *IREmit) {
|
||||
return Changed;
|
||||
}
|
||||
|
||||
FEXCore::IR::Pass* CreateDeadFlagCalculationEliminination() {
|
||||
return new DeadFlagCalculationEliminination{};
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreateDeadFlagCalculationEliminination() {
|
||||
return std::make_unique<DeadFlagCalculationEliminination>();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1538,7 +1538,7 @@ namespace FEXCore::IR {
|
||||
return Changed;
|
||||
}
|
||||
|
||||
FEXCore::IR::RegisterAllocationPass* CreateRegisterAllocationPass(FEXCore::IR::Pass* CompactionPass, bool OptimizeSRA) {
|
||||
return new ConstrainedRAPass{CompactionPass, OptimizeSRA};
|
||||
std::unique_ptr<FEXCore::IR::RegisterAllocationPass> CreateRegisterAllocationPass(FEXCore::IR::Pass* CompactionPass, bool OptimizeSRA) {
|
||||
return std::make_unique<ConstrainedRAPass>(CompactionPass, OptimizeSRA);
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -94,8 +94,8 @@ bool StaticRegisterAllocationPass::Run(IREmitter *IREmit) {
|
||||
return true;
|
||||
}
|
||||
|
||||
FEXCore::IR::Pass* CreateStaticRegisterAllocationPass() {
|
||||
return new StaticRegisterAllocationPass{};
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreateStaticRegisterAllocationPass() {
|
||||
return std::make_unique<StaticRegisterAllocationPass>();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -44,12 +44,11 @@ bool SyscallOptimization::Run(IREmitter *IREmit) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return Changed;
|
||||
}
|
||||
|
||||
FEXCore::IR::Pass* CreateSyscallOptimization() {
|
||||
return new SyscallOptimization{};
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreateSyscallOptimization() {
|
||||
return std::make_unique<SyscallOptimization>();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -212,8 +212,8 @@ bool ValueDominanceValidation::Run(IREmitter *IREmit) {
|
||||
return false;
|
||||
}
|
||||
|
||||
FEXCore::IR::Pass* CreateValueDominanceValidation() {
|
||||
return new ValueDominanceValidation{};
|
||||
std::unique_ptr<FEXCore::IR::Pass> CreateValueDominanceValidation() {
|
||||
return std::make_unique<ValueDominanceValidation>();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user