libfirm
13 years agoreindent escape_ana.c in firm style
Matthias Braun [Wed, 25 May 2011 16:18:07 +0000 (18:18 +0200)]
reindent escape_ana.c in firm style

13 years agoifconv must remove bads first
Andreas Zwinkau [Thu, 26 May 2011 10:49:15 +0000 (12:49 +0200)]
ifconv must remove bads first

Fixes C/unkept_loop.c

13 years agoNew API function: remove_bads
Andreas Zwinkau [Thu, 26 May 2011 10:38:52 +0000 (12:38 +0200)]
New API function: remove_bads

The functionality already existed,
but this is necessary at more than on place.

13 years agosimplify merge_env struct
Andreas Zwinkau [Thu, 26 May 2011 08:03:43 +0000 (10:03 +0200)]
simplify merge_env struct

13 years agoreuse is_switch_Cond function
Andreas Zwinkau [Wed, 25 May 2011 08:36:39 +0000 (10:36 +0200)]
reuse is_switch_Cond function

13 years agoAdditional cfopt: Cond=>Jmp
Andreas Zwinkau [Tue, 24 May 2011 14:34:06 +0000 (16:34 +0200)]
Additional cfopt: Cond=>Jmp

        Cond
       /    \
  projA      projB   =>   Jmp     Bad
       \    /                \   /
       block                 block

This optimization might produce more empty blocks to remove,
which in turn might enable more Cond=>Jmp opts.
So we need to perform this until nothing changes anymore.

Fixes x86code/cfopt.c
Breaks C/unkept_loop.c, because ifconv cannot handle Bads

13 years agoTypo.
Julian Oppermann [Wed, 25 May 2011 14:54:16 +0000 (16:54 +0200)]
Typo.

13 years agoRemove nop optimization
Andreas Zwinkau [Tue, 24 May 2011 12:32:35 +0000 (14:32 +0200)]
Remove nop optimization

This code does nothing, because the previous commit removed the
equivalent_node_Block function.

13 years agoRemove equivalent_node_Block
Andreas Zwinkau [Mon, 23 May 2011 14:29:39 +0000 (16:29 +0200)]
Remove equivalent_node_Block

Fixes opt/localopts2

Because of Phis blocks cannot be equivalent. The cfopt must do all
block merging.

For example, consider the case where block A has one predecessor
block B, which contains a Jmp. Naively, we might exchange(A,B).
However, A might contain a Phi with one operand, then the graph
is broken afterwards, since we move the Phi into B as well.

13 years agoRemove goto
Andreas Zwinkau [Wed, 25 May 2011 08:42:16 +0000 (10:42 +0200)]
Remove goto

13 years agoFix cfopt Bad mode
Andreas Zwinkau [Wed, 25 May 2011 13:20:11 +0000 (15:20 +0200)]
Fix cfopt Bad mode

13 years agoget_Block_cfgpred_block must return mode_BB
Andreas Zwinkau [Wed, 25 May 2011 13:18:42 +0000 (15:18 +0200)]
get_Block_cfgpred_block must return mode_BB

13 years agoFix comment
Andreas Zwinkau [Wed, 25 May 2011 07:53:17 +0000 (09:53 +0200)]
Fix comment

13 years agocleanup fragile op handling
Matthias Braun [Wed, 25 May 2011 13:31:54 +0000 (15:31 +0200)]
cleanup fragile op handling

- The pns of X_regular and X_except are annotated in the opcode now.
- The memory input is annotated in the opcode now
- only nodes with X_regular, X_except are marked fragile

13 years agogenerate n_Node_XXX enums for node inputs
Matthias Braun [Wed, 25 May 2011 12:37:22 +0000 (14:37 +0200)]
generate n_Node_XXX enums for node inputs

13 years agoBad,Unknown are no cfopcdes
Matthias Braun [Wed, 25 May 2011 12:00:00 +0000 (14:00 +0200)]
Bad,Unknown are no cfopcdes

13 years agofix warnings
Matthias Braun [Wed, 25 May 2011 11:34:57 +0000 (13:34 +0200)]
fix warnings

13 years agofix fehler189.c
Matthias Braun [Wed, 25 May 2011 10:54:31 +0000 (12:54 +0200)]
fix fehler189.c

13 years agotypo
Andreas Zwinkau [Mon, 23 May 2011 14:40:02 +0000 (16:40 +0200)]
typo

13 years agosparc: implement 64bit lowering
Matthias Braun [Wed, 11 May 2011 12:36:05 +0000 (14:36 +0200)]
sparc: implement 64bit lowering

13 years agocompiler library entities should be visibility_external
Matthias Braun [Mon, 23 May 2011 09:01:10 +0000 (11:01 +0200)]
compiler library entities should be visibility_external

13 years agolower_dw: Shift lowering without intrinsics
Matthias Braun [Mon, 16 May 2011 11:32:44 +0000 (13:32 +0200)]
lower_dw: Shift lowering without intrinsics

We can still use ia32 ShlD, ShrD functions by matching Or(Shl,Shr)
patterns in the ia32 transformer.

13 years agolower_dw: huge refactoring, allow custom lowering funcs, fix endianess problems
Matthias Braun [Wed, 11 May 2011 15:57:19 +0000 (17:57 +0200)]
lower_dw: huge refactoring, allow custom lowering funcs, fix endianess problems

13 years agoirg_walk_anchors uses visited field, reserve it
Matthias Braun [Thu, 12 May 2011 12:18:37 +0000 (14:18 +0200)]
irg_walk_anchors uses visited field, reserve it

13 years agoinclude irnode_t.h, irgraph_t.h for better performance
Matthias Braun [Mon, 16 May 2011 11:58:29 +0000 (13:58 +0200)]
include irnode_t.h, irgraph_t.h for better performance

13 years agofix some set_ functions not being marked as FIRM_API
Matthias Braun [Tue, 17 May 2011 17:06:39 +0000 (19:06 +0200)]
fix some set_ functions not being marked as FIRM_API

13 years agofix shiftop optimization failing for negative shift values
Matthias Braun [Wed, 18 May 2011 12:45:53 +0000 (14:45 +0200)]
fix shiftop optimization failing for negative shift values

13 years agouse irg from block instead of current_ir_graph in backend node constructors
Matthias Braun [Wed, 11 May 2011 12:19:16 +0000 (14:19 +0200)]
use irg from block instead of current_ir_graph in backend node constructors

13 years agoadd support for backend nodes without attributes
Matthias Braun [Wed, 11 May 2011 12:13:51 +0000 (14:13 +0200)]
add support for backend nodes without attributes

13 years agolower_dw: add support for Bad nodes
Matthias Braun [Tue, 10 May 2011 17:09:58 +0000 (19:09 +0200)]
lower_dw: add support for Bad nodes

13 years agosparc: Sub is mode neutral
Matthias Braun [Wed, 11 May 2011 14:57:30 +0000 (16:57 +0200)]
sparc: Sub is mode neutral

13 years agobackend: ProjT/Start is an anchor and explicitely transformed
Matthias Braun [Wed, 11 May 2011 13:52:38 +0000 (15:52 +0200)]
backend: ProjT/Start is an anchor and explicitely transformed

13 years agoUnresolved should_be_same constraint => panic
Andreas Zwinkau [Mon, 23 May 2011 11:02:27 +0000 (13:02 +0200)]
Unresolved should_be_same constraint => panic

13 years agofix opt/jumpthreading7
Andreas Zwinkau [Wed, 18 May 2011 12:41:45 +0000 (14:41 +0200)]
fix opt/jumpthreading7

13 years agocode placement fixes gcse
Andreas Zwinkau [Tue, 17 May 2011 11:25:41 +0000 (13:25 +0200)]
code placement fixes gcse

GCSEing nodes into unreachable blocks is ok now. The
verifier does not check the cfg, when irg is floating.
Code placement fixes and pins the irg after gcse.
Nodes in unreachable blocks are moved into the first block
after the start block.

Reachability checks in place_late are converted into asserts,
because after place_early, there are no unreachable blocks anymore.

reverts c64fe29 and 318579c
but also fixes opt/unreachable_block

13 years agoCode reuse
Andreas Zwinkau [Mon, 16 May 2011 12:39:16 +0000 (14:39 +0200)]
Code reuse

13 years agoDo not gcse unreachable code
Andreas Zwinkau [Mon, 16 May 2011 11:56:08 +0000 (13:56 +0200)]
Do not gcse unreachable code

During global CSE we now ignore nodes in unreachable blocks,
otherwise cse could pick the wrong representative node
and use unreachable nodes in reachable code.

13 years agoDelay exchange until all nodes are created
Andreas Zwinkau [Fri, 13 May 2011 16:30:11 +0000 (18:30 +0200)]
Delay exchange until all nodes are created

add_block_cf_input breaks, if the block has two Bad inputs

13 years agoldstop must deactivate edges after changes
Andreas Zwinkau [Fri, 13 May 2011 11:14:20 +0000 (13:14 +0200)]
ldstop must deactivate edges after changes

Skipping Loads might lead to dead code, which is still reference by
out edges.

13 years agoRemoved C99 features, adopt to Firm style.
Michael Beck [Tue, 10 May 2011 19:43:44 +0000 (21:43 +0200)]
Removed C99 features, adopt to Firm style.

13 years agoRemove kept Bad AFTER dead blocks are deleted to ensure no Bad ist kept.
Michael Beck [Tue, 10 May 2011 19:34:22 +0000 (21:34 +0200)]
Remove kept Bad AFTER dead blocks are deleted to ensure no Bad ist kept.

13 years agoMoved some helper functions from irgopt to irtools for reuse.
Michael Beck [Tue, 10 May 2011 19:18:32 +0000 (21:18 +0200)]
Moved some helper functions from irgopt to irtools for reuse.

13 years agoRemove unused variables, squelch warning about unused parameter.
Christoph Mallon [Tue, 10 May 2011 06:27:49 +0000 (08:27 +0200)]
Remove unused variables, squelch warning about unused parameter.

13 years agoUse simple assignment instead of memcpy() when possible.
Christoph Mallon [Tue, 10 May 2011 06:27:11 +0000 (08:27 +0200)]
Use simple assignment instead of memcpy() when possible.

13 years agosimplify unreachable code elimination:
Matthias Braun [Fri, 6 May 2011 19:12:54 +0000 (21:12 +0200)]
simplify unreachable code elimination:

only set block/phi inputs to bad to kill unreachable code, all other
code will be dead and removed anyway

13 years agofix iredges EDGE_KIND_BLOCK not updating correctly when exchanging blocks
Matthias Braun [Fri, 6 May 2011 18:46:12 +0000 (20:46 +0200)]
fix iredges EDGE_KIND_BLOCK not updating correctly when exchanging blocks

13 years agofix cfg_dumper omitting bads
Matthias Braun [Fri, 6 May 2011 18:45:10 +0000 (20:45 +0200)]
fix cfg_dumper omitting bads

13 years agoiredges: remove unnecessary skip_Proj
Matthias Braun [Fri, 6 May 2011 18:12:52 +0000 (20:12 +0200)]
iredges: remove unnecessary skip_Proj

13 years agoirdom: do not count bad predecessors as control flow
Matthias Braun [Fri, 6 May 2011 12:46:40 +0000 (14:46 +0200)]
irdom: do not count bad predecessors as control flow

13 years agoRemove obsolete loopinfo invalidation
Andreas Zwinkau [Mon, 9 May 2011 09:12:15 +0000 (11:12 +0200)]
Remove obsolete loopinfo invalidation

13 years agoImplicit set_irg_loopinfo_inconsistent
Andreas Zwinkau [Mon, 9 May 2011 09:04:37 +0000 (11:04 +0200)]
Implicit set_irg_loopinfo_inconsistent

13 years agoRemove obsolete outs invalidation
Andreas Zwinkau [Mon, 9 May 2011 08:52:41 +0000 (10:52 +0200)]
Remove obsolete outs invalidation

13 years agoImplicit set_irg_outs_inconsistent
Andreas Zwinkau [Mon, 9 May 2011 08:50:45 +0000 (10:50 +0200)]
Implicit set_irg_outs_inconsistent

when calling exchange, set_irn_n, or set_irn_in.

fixes backend/inconsistent_outs test case

13 years agoRemove extra dash from assert graph filenames.
Christoph Mallon [Fri, 6 May 2011 17:24:25 +0000 (19:24 +0200)]
Remove extra dash from assert graph filenames.

13 years agoReenable asserts
Andreas Zwinkau [Fri, 6 May 2011 16:43:38 +0000 (18:43 +0200)]
Reenable asserts

They were commented out in commit c4686a6b

13 years agoUse mode from type instead of return value
Andreas Zwinkau [Fri, 6 May 2011 11:38:54 +0000 (13:38 +0200)]
Use mode from type instead of return value

Also bugfix: The second case used uninitialized memory for the Bad's mode.

13 years agoFix ack/t7
Andreas Zwinkau [Fri, 6 May 2011 09:13:34 +0000 (11:13 +0200)]
Fix ack/t7

Some Bads were not maintained in cfopt

13 years agoremove Bads makes outs inconsistent
Andreas Zwinkau [Fri, 6 May 2011 08:52:33 +0000 (10:52 +0200)]
remove Bads makes outs inconsistent

13 years agoAdapt cfopt to Bads with modes
Andreas Zwinkau [Fri, 6 May 2011 08:33:46 +0000 (10:33 +0200)]
Adapt cfopt to Bads with modes

13 years agoRevert "fix opt/loop_without_phi"
Andreas Zwinkau [Thu, 5 May 2011 17:10:50 +0000 (19:10 +0200)]
Revert "fix opt/loop_without_phi"

This reverts commit bcaf3e7900158f4fd3c64dda9ff2d11d652ec474,
because the removed assert now holds again.

13 years agobeabi requires out edges
Andreas Zwinkau [Thu, 5 May 2011 14:48:24 +0000 (16:48 +0200)]
beabi requires out edges

13 years agooptimize_graph_df removes all Bads now
Andreas Zwinkau [Thu, 5 May 2011 14:00:04 +0000 (16:00 +0200)]
optimize_graph_df removes all Bads now

13 years agocfopt maintains Bads now
Andreas Zwinkau [Thu, 5 May 2011 11:54:35 +0000 (13:54 +0200)]
cfopt maintains Bads now

13 years agofix compilation in non-debug mode, remove unused #define
Matthias Braun [Fri, 6 May 2011 07:39:43 +0000 (09:39 +0200)]
fix compilation in non-debug mode, remove unused #define

13 years agoopt_inline: fix uninitialized memory usage
Matthias Braun [Thu, 5 May 2011 14:10:01 +0000 (16:10 +0200)]
opt_inline: fix uninitialized memory usage

13 years agoverify that all blocks can be found by walk_block_graph
Matthias Braun [Thu, 5 May 2011 13:31:58 +0000 (15:31 +0200)]
verify that all blocks can be found by walk_block_graph

This also ensures the invariant that at least 1 block in an endless
loop is kept.

13 years agoircfscc: remove is_outermost_StartBlock check - it was broken and apparently unnecessary
Matthias Braun [Thu, 5 May 2011 13:30:56 +0000 (15:30 +0200)]
ircfscc: remove is_outermost_StartBlock check - it was broken and apparently unnecessary

13 years agolittle cleanup, avoid unnecessary optimize_graph_df
Matthias Braun [Thu, 5 May 2011 11:24:02 +0000 (13:24 +0200)]
little cleanup, avoid unnecessary optimize_graph_df

13 years agogive Bad nodes a mode
Matthias Braun [Wed, 4 May 2011 11:48:18 +0000 (13:48 +0200)]
give Bad nodes a mode

13 years agomark outs as inconsistent when end node is changed
Matthias Braun [Thu, 5 May 2011 11:22:48 +0000 (13:22 +0200)]
mark outs as inconsistent when end node is changed

13 years agooptimize_graph_df: iterate marking of unreachable blocks to guarantee that all unreac...
Matthias Braun [Thu, 5 May 2011 09:31:58 +0000 (11:31 +0200)]
optimize_graph_df: iterate marking of unreachable blocks to guarantee that all unreachable code is killed

13 years agoPrevent endless recursion in if-conv in endless loops.
Christoph Mallon [Thu, 5 May 2011 16:47:40 +0000 (18:47 +0200)]
Prevent endless recursion in if-conv in endless loops.

13 years agoA function that (indirectly) calls itself is not const/pure.
Sebastian Buchwald [Thu, 5 May 2011 14:32:41 +0000 (16:32 +0200)]
A function that (indirectly) calls itself is not const/pure.

This fixes opt/fehler186.c and ack/test2.c.

13 years agoFix embarrassing typo in fp-vrp.
Christoph Mallon [Thu, 5 May 2011 14:55:23 +0000 (16:55 +0200)]
Fix embarrassing typo in fp-vrp.

13 years agoUse the bound of ==-Confirms in fixpoint vrp.
Christoph Mallon [Thu, 5 May 2011 14:20:37 +0000 (16:20 +0200)]
Use the bound of ==-Confirms in fixpoint vrp.

13 years agoRemove pointless local variables.
Christoph Mallon [Thu, 5 May 2011 11:58:36 +0000 (13:58 +0200)]
Remove pointless local variables.

13 years agofix opt/loop_without_phi
Andreas Zwinkau [Thu, 5 May 2011 09:26:07 +0000 (11:26 +0200)]
fix opt/loop_without_phi

Memory loops without Phis can occur in unreachable code.
Make ldstopt handle this by ignorance.

13 years agofix opt/gcse_no_end
Andreas Zwinkau [Thu, 5 May 2011 08:15:19 +0000 (10:15 +0200)]
fix opt/gcse_no_end

jump threading must also copy Keep edges to keep End reachable.

13 years agocfopt: fix countless bugs introduced when changing unreachable code elimination
Matthias Braun [Wed, 4 May 2011 23:40:23 +0000 (01:40 +0200)]
cfopt: fix countless bugs introduced when changing unreachable code elimination

13 years agofix cfopt not marking all possible blocks as removable after the latest changes
Matthias Braun [Wed, 4 May 2011 21:16:38 +0000 (23:16 +0200)]
fix cfopt not marking all possible blocks as removable after the latest changes

13 years agofix unreachable code elimination failing for blocks with only 1 input
Matthias Braun [Wed, 4 May 2011 14:42:33 +0000 (16:42 +0200)]
fix unreachable code elimination failing for blocks with only 1 input

13 years agoConsider that unreachble blocks might have no bitinfo.
Christoph Mallon [Wed, 4 May 2011 13:58:59 +0000 (15:58 +0200)]
Consider that unreachble blocks might have no bitinfo.

13 years agoAssert monotonicity in set_bitinfo().
Christoph Mallon [Wed, 4 May 2011 13:38:40 +0000 (15:38 +0200)]
Assert monotonicity in set_bitinfo().

13 years agoEnsure that the result of a node is undefined if any of its operands is undefined...
Christoph Mallon [Wed, 4 May 2011 13:26:18 +0000 (15:26 +0200)]
Ensure that the result of a node is undefined if any of its operands is undefined (except for phis) or if its block is unreachble.

13 years agoConsider that unreachble blocks might have no bitinfo.
Christoph Mallon [Wed, 4 May 2011 12:54:28 +0000 (14:54 +0200)]
Consider that unreachble blocks might have no bitinfo.

13 years agoCorrectly handle the case that unreachble blocks are not necessarily replaced before...
Christoph Mallon [Wed, 4 May 2011 12:35:00 +0000 (14:35 +0200)]
Correctly handle the case that unreachble blocks are not necessarily replaced before the nodes they contain.

13 years agoModel (un)reachable block info with bottom/top, not false/true.
Christoph Mallon [Wed, 4 May 2011 10:42:05 +0000 (12:42 +0200)]
Model (un)reachable block info with bottom/top, not false/true.

13 years agoInitially mark the end block as reachable and set the bad node to bottom (i.e. undefi...
Christoph Mallon [Tue, 3 May 2011 17:38:43 +0000 (19:38 +0200)]
Initially mark the end block as reachable and set the bad node to bottom (i.e. undefined).

13 years agoFetch traval false/true once in transfer() for better readability.
Christoph Mallon [Tue, 3 May 2011 11:50:42 +0000 (13:50 +0200)]
Fetch traval false/true once in transfer() for better readability.

13 years agoalways compute doms in optimize_graph_df instead of hoping for them to be available
Matthias Braun [Wed, 4 May 2011 08:54:13 +0000 (10:54 +0200)]
always compute doms in optimize_graph_df instead of hoping for them to be available

13 years agoAmend combo fix.
Michael Beck [Tue, 3 May 2011 14:25:52 +0000 (16:25 +0200)]
Amend combo fix.

One more condition is needed to ensure monotony.

13 years agoFixed combo by fixing an old artefact from the older libFirm Cmp nodes.
Michael Beck [Tue, 3 May 2011 09:52:11 +0000 (11:52 +0200)]
Fixed combo by fixing an old artefact from the older libFirm Cmp nodes.

In older libFirm version, Cmp computes top, true or bottom.
Now Cmp computes true or false, so the monotony fix must be upgraded.

This fixes opt/combo_paper.c

13 years agoBugFix: mode_b lowering might create new control flow (if ir_create_cond_set() is...
Michael Beck [Tue, 3 May 2011 09:49:41 +0000 (11:49 +0200)]
BugFix: mode_b lowering might create new control flow (if ir_create_cond_set() is used), so invalidate analysis data.

13 years agoBugFix: Always invalidate loop-info if data flow was changed.
Michael Beck [Tue, 3 May 2011 09:48:58 +0000 (11:48 +0200)]
BugFix: Always invalidate loop-info if data flow was changed.

13 years agofix lower_mode_b: phi inputs may be bad
Matthias Braun [Mon, 2 May 2011 12:04:43 +0000 (14:04 +0200)]
fix lower_mode_b: phi inputs may be bad

13 years agoalso do unreachable code elimination during gcse
Matthias Braun [Mon, 2 May 2011 09:06:33 +0000 (11:06 +0200)]
also do unreachable code elimination during gcse

13 years agoimprove robustness of CFG verifier for strange cases with Tuples
Matthias Braun [Fri, 29 Apr 2011 17:15:55 +0000 (19:15 +0200)]
improve robustness of CFG verifier for strange cases with Tuples

13 years agoenqueue users of Bad as well in optimize_graph_df
Matthias Braun [Fri, 29 Apr 2011 16:34:28 +0000 (18:34 +0200)]
enqueue users of Bad as well in optimize_graph_df

13 years agoonly calculate dominance if CFG verification was fine to avoid crashs/endless loops
Matthias Braun [Fri, 29 Apr 2011 16:18:55 +0000 (18:18 +0200)]
only calculate dominance if CFG verification was fine to avoid crashs/endless loops

13 years agocleanup/partly rewrite code_placement algo
Matthias Braun [Fri, 29 Apr 2011 15:52:14 +0000 (17:52 +0200)]
cleanup/partly rewrite code_placement algo