| Index: src/IceCfg.cpp
|
| diff --git a/src/IceCfg.cpp b/src/IceCfg.cpp
|
| index ed962d151f43b11d980ede9898db01912ee843f7..04e7acd25a6c0286da9f9bad9b4b93361ddf226b 100644
|
| --- a/src/IceCfg.cpp
|
| +++ b/src/IceCfg.cpp
|
| @@ -284,6 +284,19 @@ bool Cfg::validateLiveness() const {
|
| return Valid;
|
| }
|
|
|
| +// Deletes redundant assignments like "var=var". This includes
|
| +// architecturally redundant moves like "var1:eax=var2:eax". As such,
|
| +// this needs to be done very late in the translation to avoid
|
| +// liveness inconsistencies.
|
| +void Cfg::deleteRedundantAssignments() {
|
| + for (CfgNode *Node : Nodes) {
|
| + // Ignore Phi instructions.
|
| + for (Inst *I : Node->getInsts())
|
| + if (I->isRedundantAssign())
|
| + I->setDeleted();
|
| + }
|
| +}
|
| +
|
| void Cfg::doBranchOpt() {
|
| TimerMarker T(TimerStack::TT_doBranchOpt, this);
|
| for (auto I = Nodes.begin(), E = Nodes.end(); I != E; ++I) {
|
|
|