path: root/ir/be/bestack.c
Commit message (Collapse)AuthorAge
* Unify indentation of function parametersSebastian Buchwald2017-03-31
* Use QSORT().Christoph Mallon2016-11-09
* Assert that the frame type is not fixed before layouting it.Christoph Mallon2016-06-27
* Use appropriate macros for iterating over out edgesSebastian Buchwald2016-05-13
* be: Let backends deal with memperm offsetsMatthias Braun2016-04-04
| | | | | | | | | Only the backends know how memperm are implementd and whether they use sp- or fp-relative addressing. This should fix sparc memperm problems. Long-term I'd like to remove the memperm node and use a callback that creates a sequence of target specific nodes instead (similar to how spills and reloads are created).
* be: Rewrite stack frame handlingMatthias Braun2016-04-04
| | | | | | | | | | | | | | | | | | | | This is a bigger rewrite of stack frame handling in the backend: - Do the stack frame type layout late, after all the spill slots have been created. This way we can avoid (and remove) the brittle frame_alloc_area(). - Standardize the meaning of stack entity offsets. After stack frame type layout they are relative to the stack pointer position at the beginning of the function. It is all in one type now, no splitting into "arg", "between" and "stack_frame" type anymore. - Generalize the stack pointer simulation code to work with a single callback. Represent stack state as current offset and align_padding number. Now that callbacks can access and modify them both we do not need custom code in the sparc backend anymore. - Remove alignment specification on IncSP, only keep a ignore_align flag used for the last IncSP that has to remove all existing sp adjustments and may end up on a misaligned SP on ia32/amd64. - Align stack by default on ia32+amd64 backends.
* be: Move 'ignore' check into 'be_create_reg_req()'.Christoph Mallon2016-03-21
* be: Pass an 'irg' instead of an 'obst' to 'be_create_reg_req()'.Christoph Mallon2016-03-21
* Rename get_type_{size|alignment}_bytes() to get_type{size|alignment}()Matthias Braun2016-02-14
* bestack: Directly pass biases to control flow sucessors.Sebastian Buchwald2015-12-07
| | | | The algorithm now also works for Calls with exception Projs.
* Fixed typo.Sebastian Buchwald2015-09-30
* Move ir_node struct from irtypes.h to irnode_t.h, remove irtypes.h, cleanupMatthias Braun2015-09-10
* bearch: Use bool:1 instead of a bitset for remainin reg_req typesMatthias Braun2015-07-01
* Remove produces_sp register constraintMatthias Braun2015-07-01
| | | | | | | | We can easily identify the outputs producing a stack pointer by looking if the stack pointer register is assigned. Unfortunately this also needed a new mechanism to tell the verifier that some registers are not in SSA form (all the time) which needs a few extra lines in each backend.
* bestack: Remove all unnecessary sp producers, not just IncSPs.Christoph Mallon2015-01-11
* remove arch_get_frame_entity()Matthias Braun2014-11-25
| | | | Add callbacks on functions that really need them instead.
* change get_sp_bias and set_frame_offset to be callbacks for ↵Matthias Braun2014-11-22
| | | | be_abi_fix_stack_bias
* be: Pass the stack pointer register as parameter to be_abi_fix_stack_nodes().Christoph Mallon2014-11-13
| | | | | * It was retrieved from the arch_env before. * Also rename be_abi_fix_stack_nodes() to be_fix_stack_nodes().
* use remove_End_n() instead of remove_End_keepalive() where possibleMatthias Braun2014-11-10
* only update livesets if they are validMatthias Braun2014-10-18
* be: Remove unused variable.Christoph Mallon2014-10-07
* API change+fix for IncSP alignmentMatthias Braun2014-10-07
| | | | | | | | - alignment is set on each single IncSP now instead of a global arch_env setting - fixed ia32 not requesting any alignment anymore (even on darwin where we need it) - fixed amd64 creating IncSP nodes without flag_modifies_flags set
* remove support for trampolines/nested functionsMatthias Braun2014-09-19
| | | | | | - It was only available in the ia32 backend and broken there. As the feature is rarely used, I remove it for now instead of going through the trouble of fixing it.
* put irg link directly into node attributsMatthias Braun2014-09-17
| | | | | | | | | The previous approach put the irg link into the block attributes, so while saving memory an extra indirection was necessary. Some testing with valgrind massif+callgrind revealed that a direct link increses peak memory usage by ~1% while also increasing runtime by ~1%. More importantly the code gets a bit simpler and some strange corner cases can be removed with the direct link.
* cleanup, use C99Matthias Braun2014-09-17
* bestack: code cleanup, use C99Matthias Braun2014-09-15
* split Sel node into Member and SelMatthias Braun2014-04-15
| | | | | | | | | - Compound type selection is performed with Member - Array indexing is performed with Sel - Instead of the simpleSel constructor functions you can use the normal Member constructors now - The concept of array element entities has been removed, Sel nodes just contain a pointer to the array type now.
* Add and use foreach_irn_pred{,_r}().Christoph Mallon2014-02-17
* further cleanup in get/set_entity_irg/additional_propertiesMatthias Braun2013-10-31
| | | | | | | - Only allow get_entity_irg()/set_entity_irg() for method entities now. - Allow setting/getting of additional properties for method and alias entities. - Add some missing is_method_entity() checks in cgana.
* do not include config.h anymoreMatthias Braun2013-05-04
| | | | | | It has been empty for nearly all systems. People who used to put stuff in config.h can still create a config.h on their own and inject -include (gcc) or /FI (msvc) into their CPPFLAGS.
* remove license stuff from filesMatthias Braun2012-12-12
| | | | | Just state the copyright and the project the files belong to. You can then find the COPYING file for the whole project.
* bestack: Fetch the start block only once.Christoph Mallon2012-12-05
* bestack: Simplify be_abi_fix_stack_nodes() using be_create_reg_req().Christoph Mallon2012-11-27
* bestack: Remove the unused return value from ↵Christoph Mallon2012-11-26
| | | | stack_frame_compute_initial_offset().
* bestack: Simplify collect_stack_nodes_walker().Christoph Mallon2012-11-26
* cleanup: Remove several uses of current_ir_graph.Christoph Mallon2012-11-25
* bestack: Remove pointless local variable.Christoph Mallon2012-11-24
* bestack: Remove the write-only attribute between_size from struct bias_walk.Christoph Mallon2012-11-24
* Remove the very thin wrapper function arch_register_get_class().Christoph Mallon2012-11-13
* Remove the very thin wrapper function arch_register_get_index().Christoph Mallon2012-11-13
* Let sched_foreach_from() and sched_foreach_reverse_from() declare their ↵Christoph Mallon2012-07-13
| | | | iterator variables.
* remove $Id$, it doesn't work with git anywayMatthias Braun2011-11-10
* big refactoring of arch_XXX functionsMatthias Braun2011-08-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | This tries to get the names in a consistent format. We basically have 2 views on register allocation/constraints now: 1) Register Requirements and Assigments are per-instruction. Each instruction has requirements on its inputs and outputs, register get assigned for outputs of an instruction (assignment is an attribute of an instruction, not of the Proj-nodes). The internal datastructures model this form! The functions here have the form: arch_get_irn_register_req_in(node, input_nr) arch_get_irn_register_in(node, input_nr) arch_get_irn_register_req_out(node, output_nr) arch_set_irn_register_out(node, output_nr, register) 2) Register Requirements and Assignments are on firm-values. This view allows to query/assign requirements and registers at the Proj nodes instead of the repsective predecessors. This is a convenience interface modeled on top of the other! The functions have the form: arch_get_irn_register_req(node) arch_get_irn_register(node) arch_set_irn_register(node, register)
* Another rewrite of prolog/epilog handling: Delay their creation until after ↵Matthias Braun2011-04-08
| | | | register allocation
* all backends have decreasing stackMatthias Braun2011-04-08
* s/keeped/kept/.Christoph Mallon2011-03-17
* bestack: remove unnecessary keep edges from IncSP nodesMatthias Braun2011-03-16
* bestack: add support for nodes resetting the stackMatthias Braun2011-03-16
* make firm compilable with a c++ compilerMatthias Braun2010-11-04
| | | | [r28127]
* make sparc+arm backend completely independent from beabiMatthias Braun2010-10-08
| | | | [r28073]