All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH 00/48] fix promotion of symbol to register
@ 2017-08-23 20:15 Luc Van Oostenryck
  2017-08-23 20:15 ` [RFC PATCH 01/48] remove wrong part of simplify_loads() Luc Van Oostenryck
                   ` (49 more replies)
  0 siblings, 50 replies; 55+ messages in thread
From: Luc Van Oostenryck @ 2017-08-23 20:15 UTC (permalink / raw)
  To: linux-sparse; +Cc: Christopher Li, Luc Van Oostenryck

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

^ permalink raw reply	[flat|nested] 55+ messages in thread

end of thread, other threads:[~2017-09-03 19:24 UTC | newest]

Thread overview: 55+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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 ` [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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.