Expression *CompoundStatement::doInline(InlineDoState *ids) { Expression *e = NULL; //printf("CompoundStatement::doInline() %d\n", statements->dim); for (size_t i = 0; i < statements->dim; i++) { Statement *s = (*statements)[i]; if (s) { Expression *e2 = s->doInline(ids); e = Expression::combine(e, e2); if (s->isReturnStatement()) break; /* Check for: * if (condition) * return exp1; * else * return exp2; */ IfStatement *ifs = s->isIfStatement(); if (ifs && ifs->elsebody && ifs->ifbody && ifs->ifbody->isReturnStatement() && ifs->elsebody->isReturnStatement() ) break; } } return e; }
Expression *UnrolledLoopStatement::doInline(InlineDoState *ids) { Expression *e = NULL; //printf("UnrolledLoopStatement::doInline() %d\n", statements->dim); for (size_t i = 0; i < statements->dim; i++) { Statement *s = (*statements)[i]; if (s) { Expression *e2 = s->doInline(ids); e = Expression::combine(e, e2); if (ids->foundReturn) break; } } return e; }