From: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
To: linux-sparse@vger.kernel.org
Cc: Christopher Li <sparse@chrisli.org>,
Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Subject: [RFC PATCH 03/48] give a type to OP_PHISOURCEs
Date: Wed, 23 Aug 2017 22:15:09 +0200 [thread overview]
Message-ID: <20170823201554.90551-4-luc.vanoostenryck@gmail.com> (raw)
In-Reply-To: <20170823201554.90551-1-luc.vanoostenryck@gmail.com>
Currently, OP_PHISOURCEs are given a size but not a type.
For consistency and for sparse-LLVM which need it,
give them a type too.
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
---
flow.c | 2 +-
linearize.c | 16 +++++++---------
linearize.h | 2 +-
3 files changed, 9 insertions(+), 11 deletions(-)
diff --git a/flow.c b/flow.c
index 6b2c879a8..78dd6b3a5 100644
--- a/flow.c
+++ b/flow.c
@@ -414,7 +414,7 @@ found_dominator:
if (dominators && phisrc_in_bb(*dominators, parent))
continue;
br = delete_last_instruction(&parent->insns);
- phi = alloc_phi(parent, one->target, one->size);
+ phi = alloc_phi(parent, one->target, one->type);
phi->ident = phi->ident ? : pseudo->ident;
add_instruction(&parent->insns, br);
use_pseudo(insn, phi, add_pseudo(dominators, phi));
diff --git a/linearize.c b/linearize.c
index ba76397ea..e3d234e7e 100644
--- a/linearize.c
+++ b/linearize.c
@@ -821,7 +821,7 @@ static pseudo_t argument_pseudo(struct entrypoint *ep, int nr)
return pseudo;
}
-pseudo_t alloc_phi(struct basic_block *source, pseudo_t pseudo, int size)
+pseudo_t alloc_phi(struct basic_block *source, pseudo_t pseudo, struct symbol *type)
{
struct instruction *insn;
pseudo_t phi;
@@ -830,7 +830,7 @@ pseudo_t alloc_phi(struct basic_block *source, pseudo_t pseudo, int size)
if (!source)
return VOID;
- insn = alloc_instruction(OP_PHISOURCE, size);
+ insn = alloc_typed_instruction(OP_PHISOURCE, type);
phi = __alloc_pseudo(0);
phi->type = PSEUDO_PHI;
phi->nr = ++nr;
@@ -1384,19 +1384,18 @@ static pseudo_t linearize_short_conditional(struct entrypoint *ep, struct expres
struct basic_block *bb_false;
struct basic_block *merge = alloc_basic_block(ep, expr->pos);
pseudo_t phi1, phi2;
- int size = type_size(expr->ctype);
if (!expr_false || !ep->active)
return VOID;
bb_false = alloc_basic_block(ep, expr_false->pos);
src1 = linearize_expression(ep, cond);
- phi1 = alloc_phi(ep->active, src1, size);
+ phi1 = alloc_phi(ep->active, src1, expr->ctype);
add_branch(ep, expr, src1, merge, bb_false);
set_activeblock(ep, bb_false);
src2 = linearize_expression(ep, expr_false);
- phi2 = alloc_phi(ep->active, src2, size);
+ phi2 = alloc_phi(ep->active, src2, expr->ctype);
set_activeblock(ep, merge);
return add_join_conditional(ep, expr, phi1, phi2);
@@ -1410,7 +1409,6 @@ static pseudo_t linearize_conditional(struct entrypoint *ep, struct expression *
pseudo_t src1, src2;
pseudo_t phi1, phi2;
struct basic_block *bb_true, *bb_false, *merge;
- int size = type_size(expr->ctype);
if (!cond || !expr_true || !expr_false || !ep->active)
return VOID;
@@ -1422,12 +1420,12 @@ static pseudo_t linearize_conditional(struct entrypoint *ep, struct expression *
set_activeblock(ep, bb_true);
src1 = linearize_expression(ep, expr_true);
- phi1 = alloc_phi(ep->active, src1, size);
+ phi1 = alloc_phi(ep->active, src1, expr->ctype);
add_goto(ep, merge);
set_activeblock(ep, bb_false);
src2 = linearize_expression(ep, expr_false);
- phi2 = alloc_phi(ep->active, src2, size);
+ phi2 = alloc_phi(ep->active, src2, expr->ctype);
set_activeblock(ep, merge);
return add_join_conditional(ep, expr, phi1, phi2);
@@ -1926,7 +1924,7 @@ static pseudo_t linearize_return(struct entrypoint *ep, struct statement *stmt)
phi_node->bb = bb_return;
add_instruction(&bb_return->insns, phi_node);
}
- phi = alloc_phi(active, src, type_size(expr->ctype));
+ phi = alloc_phi(active, src, expr->ctype);
phi->ident = &return_ident;
use_pseudo(phi_node, phi, add_pseudo(&phi_node->phi_list, phi));
}
diff --git a/linearize.h b/linearize.h
index bac82d7ff..c03940eea 100644
--- a/linearize.h
+++ b/linearize.h
@@ -331,7 +331,7 @@ struct entrypoint {
extern void insert_select(struct basic_block *bb, struct instruction *br, struct instruction *phi, pseudo_t if_true, pseudo_t if_false);
extern void insert_branch(struct basic_block *bb, struct instruction *br, struct basic_block *target);
-pseudo_t alloc_phi(struct basic_block *source, pseudo_t pseudo, int size);
+pseudo_t alloc_phi(struct basic_block *source, pseudo_t pseudo, struct symbol *type);
pseudo_t alloc_pseudo(struct instruction *def);
pseudo_t value_pseudo(long long val);
--
2.14.0
next prev parent reply other threads:[~2017-08-23 20:16 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-23 20:15 [RFC PATCH 00/48] fix promotion of symbol to register Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 01/48] remove wrong part of simplify_loads() Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 02/48] remove trivial phi-nodes during clean_up_phi() Luc Van Oostenryck
2017-08-23 20:15 ` Luc Van Oostenryck [this message]
2017-08-23 20:15 ` [RFC PATCH 04/48] fix test case kill-phi-ttsb Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 05/48] add test case for incomplete type Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 06/48] add test case for bad return type Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 07/48] topasm: top-level asm is special Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 08/48] ret-void: return nothing only for void functions Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 09/48] small code reorg of add_store() Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 10/48] add PSEUDO_UNDEF Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 11/48] add undef_pseudo() Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 12/48] add insert_phi_node() Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 13/48] extract alloc_phisrc() from alloc_phi() Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 14/48] add remove_use() Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 15/48] rename 'struct warning' to 'struct flag' Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 16/48] let handle_simple_switch() handle an array of flags Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 17/48] dump-ir: rename -fdump-linearize to -fdump-ir Luc Van Oostenryck
2017-08-27 4:44 ` Christopher Li
2017-08-23 20:15 ` [RFC PATCH 18/48] dump-ir: use defines Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 19/48] dump-ir: add an helper to parse sub-options Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 20/48] dump-ir: make it more flexible Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 21/48] sssa: move simplify_one_symbol() to a separate file Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 22/48] mem2reg: rename to use 'promote' instead of 'simplify' Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 23/48] mem2reg: simplify check of modifiers for external visibility Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 24/48] mem2reg: extract externaly_visible() Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 25/48] mem2reg: reorg externaly_visible() returns Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 26/48] mem2reg: ignore all killed instructions Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 27/48] mem2reg: extract kill_pseudo_stores() Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 28/48] mem2reg: extract kill_pseudo_dominated_stores() Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 29/48] mem2reg: extract kill_pseudo_dead_stores() Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 30/48] mem2reg: remove one indent level Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 31/48] mem2reg: add comment to find_dominating_stores() Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 32/48] mem2reg: add flags to enable/disable some parts Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 33/48] mem2reg: rename the other kill_dominated_stores() Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 34/48] mem2reg: move rewrite_load_instruction() here Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 35/48] mem2reg: be clear that we're using a symbol/var Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 36/48] mem2reg: be clear that we're using a symbol/var here too Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 37/48] mem2reg: add description for find_dominating_parents() Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 38/48] mem2reg: let rewrite_load_instruction() take the symbol as arg Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 39/48] mem2reg: remove check phisrc_in_bb() Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 40/48] mem2reg: delay the creation of phi-sources Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 41/48] mem2reg: make rewrite_load_instruction() functional Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 42/48] mem2reg: rename one->target to dom Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 43/48] mem2reg: get recursion right Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 44/48] mem2reg: don't check dominance by removed instructions Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 45/48] mem2reg: update copyright Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 46/48] mem2reg: allow dumping IR Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 47/48] mem2reg: add some small test cases Luc Van Oostenryck
2017-08-23 20:15 ` [RFC PATCH 48/48] mem2reg: don't promote unused or already promoted vars Luc Van Oostenryck
2017-08-23 20:55 ` [RFC PATCH 00/48] fix promotion of symbol to register Christopher Li
2017-08-27 4:40 ` Christopher Li
2017-08-27 5:16 ` Christopher Li
2017-08-29 12:37 ` Christopher Li
2017-09-03 19:24 ` Luc Van Oostenryck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170823201554.90551-4-luc.vanoostenryck@gmail.com \
--to=luc.vanoostenryck@gmail.com \
--cc=linux-sparse@vger.kernel.org \
--cc=sparse@chrisli.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).