Matthias Braun [Wed, 15 Jun 2011 08:17:42 +0000 (10:17 +0200)]
some cleanups to opt/loop.c
The optimisation still doesn't appear to do anything for me...
Matthias Braun [Sat, 11 Jun 2011 13:05:08 +0000 (15:05 +0200)]
add some const qualifiers to backedges query functions
Matthias Braun [Thu, 9 Jun 2011 16:55:48 +0000 (18:55 +0200)]
unify sparc/ia32 SwitchJmp handling
Andreas Zwinkau [Fri, 10 Jun 2011 12:20:01 +0000 (14:20 +0200)]
improve jumpthreading comments
Andreas Zwinkau [Wed, 8 Jun 2011 14:18:59 +0000 (16:18 +0200)]
Revert "jumpthreading must not split edges"
This reverts commit
2dc832999c2d0b91b1d7eb8a5d3de4b89ce5552a.
The commit made jumpthreading "more conservative", which fixed the
problem. However, it is not a good solution in general.
We need a bigger rewrite of opt/jumpthreading, so it analyzes then
modifies the graph instead of on-the-fly changes. This prevents the
infinite loop, which would e.g. happen with such a cf graph:
\ A \ A
__\ | __\ |
| B | => | B | => ...
| / \ | | / \ |
| D | | E |
| \| | \|
\ C \ D
\___/ \ /
\_C
Breaks opt/jumpthreading5 and opt/jumpthreading5b
Michael Beck [Thu, 9 Jun 2011 15:03:29 +0000 (17:03 +0200)]
Better fix for wrong tarval computation of -(infinity).
Restores the support for no infity, fixed handling of denormals.
Michael Beck [Tue, 31 May 2011 17:29:01 +0000 (19:29 +0200)]
Improved comment, small cosmetic.
Michael Beck [Tue, 31 May 2011 17:28:11 +0000 (19:28 +0200)]
Fixd typo.
Sebastian Buchwald [Thu, 9 Jun 2011 14:20:05 +0000 (16:20 +0200)]
Fixed wrong tarval computation of -(infinity).
Sebastian Buchwald [Wed, 8 Jun 2011 12:56:38 +0000 (14:56 +0200)]
Fixed some typos.
Christoph Mallon [Thu, 9 Jun 2011 12:53:06 +0000 (14:53 +0200)]
Include begin.h and end.h in the generated headers.
Christoph Mallon [Thu, 9 Jun 2011 12:52:19 +0000 (14:52 +0200)]
Fix typo.
Matthias Braun [Thu, 9 Jun 2011 11:49:58 +0000 (13:49 +0200)]
add missing FIRM_API prefixes
Michael Beck [Wed, 8 Jun 2011 17:39:39 +0000 (19:39 +0200)]
Removed the callee/caller saved flag from register specification.
The callee/caller saved information is not constant accross different
ABI's, so don't make it constant. Instead, all BE that still use beabi
provide a callback now.
This allows to implement support for x64_64/Win32 and is a necessary step
for the combined x86 BE.
Matthias Braun [Wed, 8 Jun 2011 17:08:50 +0000 (19:08 +0200)]
verify nodes before optimizing them
Andreas Zwinkau [Wed, 8 Jun 2011 11:19:33 +0000 (13:19 +0200)]
jumpthreading must not split edges
* the splitted edge is never critical, so the name was misleading
* it might result in an infinite loop
fixes opt/jumpthreading5 and opt/jumpthreading5b
Matthias Braun [Tue, 7 Jun 2011 11:03:07 +0000 (13:03 +0200)]
adapt to firm coding conventions, avoid warnings by using INT_TO_PTR and PTR_TO_INT
Matthias Braun [Tue, 7 Jun 2011 10:39:25 +0000 (12:39 +0200)]
fix a few comment typos
Andreas Zwinkau [Mon, 6 Jun 2011 09:30:00 +0000 (11:30 +0200)]
Fix some types
Fixes issue 64, because casting long to int does work on 64bit.
Matthias Braun [Wed, 1 Jun 2011 14:15:43 +0000 (16:15 +0200)]
experimental patch to limit GCSE so we don't produce partially dead code like crazy
Matthias Braun [Wed, 1 Jun 2011 13:56:48 +0000 (15:56 +0200)]
lower small switches to ifs
Andreas Zwinkau [Wed, 1 Jun 2011 13:48:29 +0000 (15:48 +0200)]
remove bads in backend
Like the comment says "we can't have Bad-blocks".
However, optimize_cf does not remove them anymore.
Andreas Zwinkau [Wed, 1 Jun 2011 12:56:25 +0000 (14:56 +0200)]
lower_dw must deactivate edges
There might be some ProjL nodes reachable via out edges
and the following "local" phase does enqueue_users for
optimized nodes, which might visit the 'undead' ProjL.
Matthias Braun [Tue, 31 May 2011 14:27:06 +0000 (16:27 +0200)]
rework fragile ops to have a throws_exception attribute
Matthias Braun [Wed, 1 Jun 2011 12:06:54 +0000 (14:06 +0200)]
change pn_XXX_max enum to really be the maximum pn and not maximum+1, add n_XXX_max enum
Christoph Mallon [Wed, 1 Jun 2011 06:20:31 +0000 (08:20 +0200)]
Assert that the given node in set_r_cur_block() has mode BB.
Christoph Mallon [Wed, 1 Jun 2011 06:22:44 +0000 (08:22 +0200)]
Reduce code duplication: Implement set_cur_block() by calling set_r_cur_block().
Matthias Braun [Tue, 31 May 2011 11:23:44 +0000 (13:23 +0200)]
always transform integer abs, even in GRAPH_STATE_KEEP_MUX
Matthias Braun [Tue, 31 May 2011 11:19:03 +0000 (13:19 +0200)]
fix transform_node_Cmp
Matthias Braun [Tue, 31 May 2011 10:44:52 +0000 (12:44 +0200)]
Introduce flip-flopping normalisations
There are cases where we can normalize in 2 directions and both have
their merits. Just do both in this case. The frontend should at some
point set IRG_GRAPH_STATE_NORMALISATION2 to trigger the 2nd direction.
Matthias Braun [Fri, 27 May 2011 16:21:46 +0000 (18:21 +0200)]
irverify: simplify/refactor internal interfaces
Matthias Braun [Fri, 27 May 2011 16:21:17 +0000 (18:21 +0200)]
a const ir_graph is enough for get_idx_irn
Matthias Braun [Fri, 27 May 2011 14:57:31 +0000 (16:57 +0200)]
fragile nodes must be exception or memory pinned
Matthias Braun [Mon, 30 May 2011 21:18:31 +0000 (23:18 +0200)]
move integer abs optimisation from backend to the middleend
Matthias Braun [Mon, 30 May 2011 18:24:08 +0000 (20:24 +0200)]
reverse direction of bitop/shift normalisation
Andreas Zwinkau [Tue, 31 May 2011 10:56:27 +0000 (12:56 +0200)]
optimize_blocks ignores unreachable blocks
Fixes opt/ioet.c
Andreas Zwinkau [Tue, 31 May 2011 08:55:47 +0000 (10:55 +0200)]
Cosmetics in cfopt
* set_irg_outs_inconsistent is unnecessary as exchange does that already
* "useless if optimization" was a confusing comment
* more precise type: int -> block_flags_t
Andreas Zwinkau [Tue, 31 May 2011 08:50:49 +0000 (10:50 +0200)]
Fix "Some cleanup of cfopt."
The remove_empty_blocks function must be used for a pre-walker, otherwise
it might be called on blocks, which were optimized away. Consider infinite
loops and the Keep edges:
\ ___
B |
\ /
Empty
/
/ Keep Edge!
In this example, we must not call remove_empty_blocks on Empty,
after we called it on B, but a post walker would do that.
unknown [Mon, 30 May 2011 21:59:06 +0000 (23:59 +0200)]
Improved doxygen docu.
unknown [Mon, 30 May 2011 17:00:18 +0000 (19:00 +0200)]
Some cleanup of cfopt.
- renamed clear_link() to clear_link_and_mark_blocks_removable()
- renamed optimize_conds() to optimize_ifs()
- simplified has_*() implementations
- made some walker POST walker
- invalidate out edges
- and add some doxygen docu
- fixed some typos
- adapt to firm indentation style
Matthias Braun [Mon, 30 May 2011 14:21:52 +0000 (16:21 +0200)]
improve our 'don't use AM' heuristic: immediates do not increase register pressure
Christoph Mallon [Fri, 27 May 2011 17:05:29 +0000 (19:05 +0200)]
Use XMALLOCF*().
Andreas Zwinkau [Mon, 30 May 2011 13:46:33 +0000 (15:46 +0200)]
Fix opt/inline.c
Matthias Braun [Sun, 29 May 2011 11:33:26 +0000 (13:33 +0200)]
localopt/lower_dw opt: a==b && c==d => (a^b)|(c^d)==0
Matthias Braun [Sat, 28 May 2011 14:59:47 +0000 (16:59 +0200)]
implement Cmp(Conv(x),Const) => Cmp(x,Const)
Michael Beck [Fri, 27 May 2011 21:19:02 +0000 (23:19 +0200)]
Fixed typos.
Michael Beck [Fri, 27 May 2011 21:12:27 +0000 (23:12 +0200)]
C99 feature removed.
Michael Beck [Fri, 27 May 2011 21:11:32 +0000 (23:11 +0200)]
Fixed calculation of meet blocks broken in
4db6c5b3.
Andreas Zwinkau [Fri, 27 May 2011 13:59:55 +0000 (15:59 +0200)]
cfopt must maintain Bad structure
Sebastian Buchwald [Fri, 27 May 2011 13:44:32 +0000 (15:44 +0200)]
Removed unused variable.
The get_n in the foreach loop is a macro and not a use of the function.
Matthias Braun [Fri, 27 May 2011 12:41:42 +0000 (14:41 +0200)]
merge start-block successor with start-block in backend (necessary after equivalent_node_Block is gone)
Matthias Braun [Fri, 27 May 2011 13:22:17 +0000 (15:22 +0200)]
fix activate_backedges failing for nodes with Deleted block in the identities table
Matthias Braun [Fri, 27 May 2011 11:54:58 +0000 (13:54 +0200)]
implement 'x-(x&y) => x & ~y' localopt
Matthias Braun [Fri, 27 May 2011 08:09:41 +0000 (10:09 +0200)]
implement/refactor x&~x, x|~x, x^~x and x+~x localopts
Christoph Mallon [Fri, 27 May 2011 13:25:03 +0000 (15:25 +0200)]
struct ir_settings_if_conv_t does not exist anymore.
Christoph Mallon [Fri, 27 May 2011 09:04:43 +0000 (11:04 +0200)]
Make the elements of binary_table[] const.
Sebastian Buchwald [Fri, 27 May 2011 11:31:47 +0000 (13:31 +0200)]
Adapted some issues noticed during removal of unused variables.
Sebastian Buchwald [Fri, 27 May 2011 11:29:10 +0000 (13:29 +0200)]
Fixed some warning about unused variables.
Sebastian Buchwald [Wed, 25 May 2011 12:28:13 +0000 (14:28 +0200)]
Fixed some typos.
Andreas Zwinkau [Fri, 27 May 2011 10:12:38 +0000 (12:12 +0200)]
fp-vrp transfer function ignore Bads
Since Bads have modes now the check for mode_X initialized the bitinfo,
which results in incorrect reachability information.
Andreas Zwinkau [Fri, 27 May 2011 08:38:33 +0000 (10:38 +0200)]
edges deactivate fix
Broken with csmith 2.0.0 seed
909842313
in libFirm
1953ce88fe94d589a9b47d2ab8969c21bfb55b3a
Matthias Braun [Sat, 7 May 2011 13:47:01 +0000 (15:47 +0200)]
Do not generate declaration for non-existing arch_get_n_regs()
Matthias Braun [Thu, 26 May 2011 16:37:00 +0000 (18:37 +0200)]
fix ShlD/ShrD not getting generated in some cases
Andreas Zwinkau [Thu, 26 May 2011 13:44:42 +0000 (15:44 +0200)]
Another Bad mode fix
Matthias Braun [Thu, 26 May 2011 11:08:59 +0000 (13:08 +0200)]
convopt: fix potential bug with modulo shifts, improve cost calculation for optimizable conv(shift) combinations
Matthias Braun [Thu, 26 May 2011 11:07:50 +0000 (13:07 +0200)]
add some localopts for shifting over the mode size
Matthias Braun [Wed, 25 May 2011 16:18:07 +0000 (18:18 +0200)]
reindent escape_ana.c in firm style
Andreas Zwinkau [Thu, 26 May 2011 10:49:15 +0000 (12:49 +0200)]
ifconv must remove bads first
Fixes C/unkept_loop.c
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.
Andreas Zwinkau [Thu, 26 May 2011 08:03:43 +0000 (10:03 +0200)]
simplify merge_env struct
Andreas Zwinkau [Wed, 25 May 2011 08:36:39 +0000 (10:36 +0200)]
reuse is_switch_Cond function
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
Julian Oppermann [Wed, 25 May 2011 14:54:16 +0000 (16:54 +0200)]
Typo.
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.
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.
Andreas Zwinkau [Wed, 25 May 2011 08:42:16 +0000 (10:42 +0200)]
Remove goto
Andreas Zwinkau [Wed, 25 May 2011 13:20:11 +0000 (15:20 +0200)]
Fix cfopt Bad mode
Andreas Zwinkau [Wed, 25 May 2011 13:18:42 +0000 (15:18 +0200)]
get_Block_cfgpred_block must return mode_BB
Andreas Zwinkau [Wed, 25 May 2011 07:53:17 +0000 (09:53 +0200)]
Fix comment
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
Matthias Braun [Wed, 25 May 2011 12:37:22 +0000 (14:37 +0200)]
generate n_Node_XXX enums for node inputs
Matthias Braun [Wed, 25 May 2011 12:00:00 +0000 (14:00 +0200)]
Bad,Unknown are no cfopcdes
Matthias Braun [Wed, 25 May 2011 11:34:57 +0000 (13:34 +0200)]
fix warnings
Matthias Braun [Wed, 25 May 2011 10:54:31 +0000 (12:54 +0200)]
fix fehler189.c
Andreas Zwinkau [Mon, 23 May 2011 14:40:02 +0000 (16:40 +0200)]
typo
Matthias Braun [Wed, 11 May 2011 12:36:05 +0000 (14:36 +0200)]
sparc: implement 64bit lowering
Matthias Braun [Mon, 23 May 2011 09:01:10 +0000 (11:01 +0200)]
compiler library entities should be visibility_external
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.
Matthias Braun [Wed, 11 May 2011 15:57:19 +0000 (17:57 +0200)]
lower_dw: huge refactoring, allow custom lowering funcs, fix endianess problems
Matthias Braun [Thu, 12 May 2011 12:18:37 +0000 (14:18 +0200)]
irg_walk_anchors uses visited field, reserve it
Matthias Braun [Mon, 16 May 2011 11:58:29 +0000 (13:58 +0200)]
include irnode_t.h, irgraph_t.h for better performance
Matthias Braun [Tue, 17 May 2011 17:06:39 +0000 (19:06 +0200)]
fix some set_ functions not being marked as FIRM_API
Matthias Braun [Wed, 18 May 2011 12:45:53 +0000 (14:45 +0200)]
fix shiftop optimization failing for negative shift values
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
Matthias Braun [Wed, 11 May 2011 12:13:51 +0000 (14:13 +0200)]
add support for backend nodes without attributes
Matthias Braun [Tue, 10 May 2011 17:09:58 +0000 (19:09 +0200)]
lower_dw: add support for Bad nodes
Matthias Braun [Wed, 11 May 2011 14:57:30 +0000 (16:57 +0200)]
sparc: Sub is mode neutral
Matthias Braun [Wed, 11 May 2011 13:52:38 +0000 (15:52 +0200)]
backend: ProjT/Start is an anchor and explicitely transformed
Andreas Zwinkau [Mon, 23 May 2011 11:02:27 +0000 (13:02 +0200)]
Unresolved should_be_same constraint => panic
Andreas Zwinkau [Wed, 18 May 2011 12:41:45 +0000 (14:41 +0200)]
fix opt/jumpthreading7