aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linearize.c
diff options
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 /linearize.c
parentd3f150de0bc702edcbb72cb1c1e1dcfb22457410 (diff)
downloadsparse-dev-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>
Diffstat (limited to 'linearize.c')
-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);