diff --git a/src/ir/Function.cc b/src/ir/Function.cc index e67b0b206841dd036b757c63a3c5cae7c4f35f59..0508e0b34629df9f3e93408a1289e3bcb342fa16 100644 --- a/src/ir/Function.cc +++ b/src/ir/Function.cc @@ -15,8 +15,8 @@ Function::Function(FuncType* fType, bool isExt, string name) setSideEffects(true); setPureFunction(false); setRecursive(false); - setMemRead(true); - setMemWrite(true); + setMemRead(false); + setMemWrite(false); return; } entry = new BasicBlock(name + "_entry"); diff --git a/src/opt/LoopAnalysis.cc b/src/opt/LoopAnalysis.cc index 8237937928ac9522f4591554cdd6a1719a4a6a3b..ea7a6a0a6d0485b8773c604f7c87352ca5468811 100644 --- a/src/opt/LoopAnalysis.cc +++ b/src/opt/LoopAnalysis.cc @@ -55,6 +55,7 @@ bool LoopAnalysis::runOnFunction(Function* func) { loopInfoBase->calculateDepth(); func->setLoopInfoBase(loopInfoBase); + loopInfoBase->analyseSimpleLoop(); // #ifdef DEBUG_MODE // loopInfoBase->dump(); // #endif diff --git a/src/opt/LoopUnroll.cc b/src/opt/LoopUnroll.cc index d2459fe46989f878854ce5433c66e2fb2be8a1e4..ddefdea38c31f6e9aaadcadc9737441b58a1f972 100644 --- a/src/opt/LoopUnroll.cc +++ b/src/opt/LoopUnroll.cc @@ -35,7 +35,6 @@ bool LoopUnroll::runOnModule(ANTPIE::Module* module) { bool LoopUnroll::runOnFunction(Function* func) { bool changed = false; LoopInfoBase* liBase = func->getLoopInfoBase(); - liBase->analyseSimpleLoop(); for (LoopInfo* loopInfo : liBase->loopInfos) { if (loopInfo->subLoops.empty()) { changed |= runOnLoop(loopInfo); @@ -64,6 +63,7 @@ bool LoopUnroll::runOnLoop(LoopInfo* loopInfo) { // Too big if (size > MAX_LINE) return changed; + if (loopInfo->blocks.size() > 2) return changed; SimpleLoopInfo* simpleLoop = loopInfo->simpleLoop; BranchInst* brInst = simpleLoop->brInstr;