diff --git a/External/FEXCore/Source/Interface/IR/Passes/IRValidation.cpp b/External/FEXCore/Source/Interface/IR/Passes/IRValidation.cpp index 64c4cf8c6..13fb0b608 100644 --- a/External/FEXCore/Source/Interface/IR/Passes/IRValidation.cpp +++ b/External/FEXCore/Source/Interface/IR/Passes/IRValidation.cpp @@ -19,9 +19,18 @@ namespace FEXCore::IR::Validation { class IRValidation final : public FEXCore::IR::Pass { public: + ~IRValidation(); bool Run(IREmitter *IREmit) override; + +private: + BitSet NodeIsLive; + size_t MaxNodes{}; }; +IRValidation::~IRValidation() { + NodeIsLive.Free(); +} + bool IRValidation::Run(IREmitter *IREmit) { bool HadError = false; bool HadWarning = false; @@ -32,8 +41,9 @@ bool IRValidation::Run(IREmitter *IREmit) { std::ostringstream Errors; std::ostringstream Warnings; - BitSet NodeIsLive; - NodeIsLive.Allocate(CurrentIR.GetSSACount()); + if (CurrentIR.GetSSACount() > MaxNodes) { + NodeIsLive.Realloc(CurrentIR.GetSSACount()); + } std::vector Uses(CurrentIR.GetSSACount(), 0);