From fcc7aafa64338bdbac356dd509acd20f35563ef5 Mon Sep 17 00:00:00 2001 From: Stan Cox Date: Wed, 21 May 2008 09:22:17 -0400 Subject: Optimize compound and binary expression assignments. --- elaborate.cxx | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'elaborate.cxx') diff --git a/elaborate.cxx b/elaborate.cxx index 4bc43832..87deb9cf 100644 --- a/elaborate.cxx +++ b/elaborate.cxx @@ -1696,6 +1696,7 @@ struct dead_assignment_remover: public traversing_visitor // called with null current_expr. void visit_assignment (assignment* e); + void visit_binary_expression (binary_expression* e); void visit_arrayindex (arrayindex* e); void visit_functioncall (functioncall* e); void visit_if_statement (if_statement* e); @@ -1726,6 +1727,7 @@ dead_assignment_remover::visit_assignment (assignment* e) { expression** last_expr = current_expr; e->left->visit (this); + current_expr = &e->right; e->right->visit (this); current_expr = last_expr; if (vut.read.find(leftvar) == vut.read.end()) // var never read? @@ -1758,6 +1760,17 @@ dead_assignment_remover::visit_assignment (assignment* e) } } +void +dead_assignment_remover::visit_binary_expression (binary_expression* e) +{ + expression** last_expr = current_expr; + current_expr = &e->left; + e->left->visit (this); + current_expr = &e->right; + e->right->visit (this); + current_expr = last_expr; +} + void dead_assignment_remover::visit_arrayindex (arrayindex *e) { -- cgit