35 lines
667 B
C++
35 lines
667 B
C++
#pragma once
|
|
#include "ir/op.hpp"
|
|
#include "prelude/linkedlist.hpp"
|
|
|
|
namespace IR {
|
|
|
|
class Optimizer
|
|
{
|
|
public:
|
|
virtual bool Apply(DoubleLinkedList<Op*>& ops) = 0;
|
|
};
|
|
|
|
class AllocOptimizer : public Optimizer
|
|
{
|
|
public:
|
|
bool Apply(DoubleLinkedList<Op*>& ops) override
|
|
{
|
|
for (ListNode<Op*>* cur = ops.Begin(); cur != nullptr; )
|
|
{
|
|
auto op = cur->value;
|
|
if (op->GetType() == OpType::ALLOCATE)
|
|
{
|
|
auto tmp = cur;
|
|
cur = cur->next;
|
|
ops.SpliceFront(tmp);
|
|
} else {
|
|
cur = cur->next;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
};
|
|
|
|
}
|