/// Identify each WCR iterating the body of CompoundStmt. void TransformWCR::VisitRawCompoundStmt(CompoundStmt *S, StmtVector &Body, StmtVector &WCR) { CompoundStmt::body_iterator I, E; for (I = S->body_begin(), E = S->body_end(); I != E; ++I) { Stmt *stmt = *I; if (stmt->hasBarrier()) { MergeBodyAndWCR(Body, WCR); WCR.clear(); Body.push_back(VisitStmt(stmt)); } else { if (DeclStmt *DS = dyn_cast<DeclStmt>(stmt)) { // If there is a Decl that does not have an init expr, // it is code-motioned to the Body. VisitRawDeclStmt(DS, Body, WCR); continue; } else if (CompoundStmt *CS = dyn_cast<CompoundStmt>(stmt)) { // StmtList is divided into multiple stmts. if (CS->isStmtList()) { VisitRawCompoundStmt(CS, Body, WCR); ASTCtx.Deallocate((void *)CS); continue; } } // Most stmts are inserted into the WCR. WCR.push_back(stmt); } } }