diff options
author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2018-09-02 18:49:10 +0200 |
---|---|---|
committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2018-12-19 18:30:10 +0100 |
commit | 6bbd00570d30de615e695f00f40c6592b76fd8ed (patch) | |
tree | b49126da653189b4694dfa87d8beff78ac7dd8d0 | |
parent | d3f150de0bc702edcbb72cb1c1e1dcfb22457410 (diff) | |
download | sparse-6bbd00570d30de615e695f00f40c6592b76fd8ed.tar.gz |
allocate BBs after the guards
In linearize_short_conditional(), the 'merge' BB is directly
allocated at function entry but then some checks can directly
return without ever using this BB.
Move the allocation after the checks have been made.
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r-- | linearize.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/linearize.c b/linearize.c index ec11abee..d0b0d3a8 100644 --- a/linearize.c +++ b/linearize.c @@ -1646,13 +1646,15 @@ static pseudo_t linearize_short_conditional(struct entrypoint *ep, struct expres { pseudo_t src1, src2; struct basic_block *bb_false; - struct basic_block *merge = alloc_basic_block(ep, expr->pos); + struct basic_block *merge; pseudo_t phi1, phi2; if (!expr_false || !ep->active) return VOID; bb_false = alloc_basic_block(ep, expr_false->pos); + merge = alloc_basic_block(ep, expr->pos); + src1 = linearize_expression(ep, cond); phi1 = alloc_phi(ep->active, src1, expr->ctype); add_branch(ep, src1, merge, bb_false); |