From f459e87e836f74edf66e11aca81102e0a896336a Mon Sep 17 00:00:00 2001 From: Fred Chow Date: Tue, 7 Sep 2021 23:40:46 -0700 Subject: [PATCH] Do not call LowerBrCondition() until after LFO --- src/mapleall/maple_ir/include/mir_lower.h | 3 +++ src/mapleall/maple_ir/src/mir_lower.cpp | 4 +++- src/mapleall/maple_me/include/lfo_mir_lower.h | 5 +++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/mapleall/maple_ir/include/mir_lower.h b/src/mapleall/maple_ir/include/mir_lower.h index 039c340231..c1ec898f3c 100644 --- a/src/mapleall/maple_ir/include/mir_lower.h +++ b/src/mapleall/maple_ir/include/mir_lower.h @@ -116,6 +116,9 @@ class MIRLower { } static bool ShouldOptArrayMrt(const MIRFunction &func); + + virtual bool InLFO() const { return false; } + protected: MIRModule &mirModule; private: diff --git a/src/mapleall/maple_ir/src/mir_lower.cpp b/src/mapleall/maple_ir/src/mir_lower.cpp index 64ebf7037c..67d79270af 100644 --- a/src/mapleall/maple_ir/src/mir_lower.cpp +++ b/src/mapleall/maple_ir/src/mir_lower.cpp @@ -355,7 +355,9 @@ void MIRLower::LowerFunc(MIRFunction &func) { ASSERT(origBody != nullptr, "nullptr check"); BlockNode *newBody = LowerBlock(*origBody); ASSERT(newBody != nullptr, "nullptr check"); - LowerBrCondition(*newBody); + if (!InLFO()) { + LowerBrCondition(*newBody); + } func.SetBody(newBody); } diff --git a/src/mapleall/maple_me/include/lfo_mir_lower.h b/src/mapleall/maple_me/include/lfo_mir_lower.h index 166eb9d551..e7d30afffc 100644 --- a/src/mapleall/maple_me/include/lfo_mir_lower.h +++ b/src/mapleall/maple_me/include/lfo_mir_lower.h @@ -29,8 +29,9 @@ class LFOMIRLower : public MIRLower { func(f), lfoFunc(f->GetLfoFunc()) {} - BlockNode *LowerWhileStmt(WhileStmtNode&); - BlockNode *LowerIfStmt(IfStmtNode &ifstmt, bool recursive = true); + BlockNode *LowerWhileStmt(WhileStmtNode&) override; + BlockNode *LowerIfStmt(IfStmtNode &ifstmt, bool recursive = true) override; + bool InLFO() const override { return true; } }; } #endif // MAPLE_ME_INCLUDE_LFO_MIR_LOWER_H -- Gitee