summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-09-02 18:49:10 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-12-19 18:30:10 +0100
commit6bbd00570d30de615e695f00f40c6592b76fd8ed (patch)
treeb49126da653189b4694dfa87d8beff78ac7dd8d0
parentd3f150de0bc702edcbb72cb1c1e1dcfb22457410 (diff)
downloadsparse-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.c4
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);