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 00/48] fix promotion of symbol to register
Date: Wed, 23 Aug 2017 22:15:06 +0200 [thread overview]
Message-ID: <20170823201554.90551-1-luc.vanoostenryck@gmail.com> (raw)
This series fixes the promotion of symbols accesses from
memory to pseudos.
The fix in itself is in the few of the last patches (40-43)
but is preceded by an extensive rework of the whole thing.
As is, it seems to work quite well and of course more
accesses are promoted than the Simple SSA was able to do
(SSSA only cared about purely local vars of which the address
was never ever taken).
For performance, the situation is highly dependent on the
type of code: the amount of work that is done in
simplify_loads() can easily take 80% of the time for complex
files.
Warning 1: this is for review & testing only
Warning 2: it's not (yet) bissectable between patches 40 & 43
Warning 3: simplify_loads is still broken and will need the same
fix (but the code is currently disabled)
This series is available in the git repository at:
git://github.com/lucvoo/sparse.git mem2reg
Luc Van Oostenryck (48):
remove wrong part of simplify_loads()
remove trivial phi-nodes during clean_up_phi()
give a type to OP_PHISOURCEs
fix test case kill-phi-ttsb
add test case for incomplete type
add test case for bad return type
topasm: top-level asm is special
ret-void: return nothing only for void functions
small code reorg of add_store()
add PSEUDO_UNDEF
add undef_pseudo()
add insert_phi_node()
extract alloc_phisrc() from alloc_phi()
add remove_use()
rename 'struct warning' to 'struct flag'
let handle_simple_switch() handle an array of flags
dump-ir: rename -fdump-linearize to -fdump-ir
dump-ir: use defines
dump-ir: add an helper to parse sub-options
dump-ir: make it more flexible
sssa: move simplify_one_symbol() to a separate file
mem2reg: rename to use 'promote' instead of 'simplify'
mem2reg: simplify check of modifiers for external visibility
mem2reg: extract externaly_visible()
mem2reg: reorg externaly_visible() returns
mem2reg: ignore all killed instructions
mem2reg: extract kill_pseudo_stores()
mem2reg: extract kill_pseudo_dominated_stores()
mem2reg: extract kill_pseudo_dead_stores()
mem2reg: remove one indent level
mem2reg: add comment to find_dominating_stores()
mem2reg: add flags to enable/disable some parts
mem2reg: rename the other kill_dominated_stores()
mem2reg: move rewrite_load_instruction() here
mem2reg: be clear that we're using a symbol/var
mem2reg: be clear that we're using a symbol/var here too
mem2reg: add description for find_dominating_parents()
mem2reg: let rewrite_load_instruction() take the symbol as arg
mem2reg: remove check phisrc_in_bb()
mem2reg: delay the creation of phi-sources
mem2reg: make rewrite_load_instruction() functional
mem2reg: rename one->target to dom
mem2reg: get recursion right
mem2reg: don't check dominance by removed instructions
mem2reg: update copyright
mem2reg: allow dumping IR
mem2reg: add some small test cases
mem2reg: don't promote unused or already promoted vars
Makefile | 1 +
cgcc | 2 +-
flow.c | 362 -------------------------
flow.h | 4 +-
lib.c | 102 +++++--
lib.h | 11 +-
linearize.c | 101 +++++--
linearize.h | 8 +-
mem2reg.c | 453 ++++++++++++++++++++++++++++++++
memops.c | 85 ++----
simplify.c | 69 +++--
sparse-llvm.c | 4 +
sparse.1 | 30 ++-
validation/bad-return-type.c | 19 ++
validation/incomplete-struct.c | 23 ++
validation/kill-casts.c | 1 -
validation/kill-phi-ttsbb.c | 2 +-
validation/linear/bitfield-init-mask.c | 2 +-
validation/loop-linearization.c | 60 ++---
validation/mem2reg/global-direct00.c | 24 ++
validation/mem2reg/local-addr-taken00.c | 21 ++
validation/mem2reg/local-direct00.c | 20 ++
validation/optim/trivial-phis.c | 15 ++
23 files changed, 883 insertions(+), 536 deletions(-)
create mode 100644 mem2reg.c
create mode 100644 validation/bad-return-type.c
create mode 100644 validation/incomplete-struct.c
create mode 100644 validation/mem2reg/global-direct00.c
create mode 100644 validation/mem2reg/local-addr-taken00.c
create mode 100644 validation/mem2reg/local-direct00.c
create mode 100644 validation/optim/trivial-phis.c
next 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 Luc Van Oostenryck [this message]
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 ` [RFC PATCH 03/48] give a type to OP_PHISOURCEs Luc Van Oostenryck
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-1-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).