libfirm
12 years agoWe can only optimize one CopyB for each return value.
Sebastian Buchwald [Thu, 15 Sep 2011 07:13:41 +0000 (09:13 +0200)]
We can only optimize one CopyB for each return value.

This fixes opt/fehler202.c.

12 years agoMinor indentation fix.
Manuel Mohr [Wed, 14 Sep 2011 12:48:53 +0000 (14:48 +0200)]
Minor indentation fix.

12 years agoMerge branch 'opt_manage'
Andreas Zwinkau [Wed, 14 Sep 2011 11:40:07 +0000 (13:40 +0200)]
Merge branch 'opt_manage'

This is a merge, because it should be considered as a single commit
and libFirm might be broken between the various commits of the branch.
However, there are so many changes, that i do not want to squash
them all into one mega-commit.

12 years agoRemove entity_usage_state attribute
Andreas Zwinkau [Wed, 14 Sep 2011 11:00:07 +0000 (13:00 +0200)]
Remove entity_usage_state attribute

12 years agoRemove dom_state and pdom_state attributes
Andreas Zwinkau [Wed, 14 Sep 2011 09:28:59 +0000 (11:28 +0200)]
Remove dom_state and pdom_state attributes

12 years agoRemove outs_state attribute
Andreas Zwinkau [Tue, 13 Sep 2011 11:08:17 +0000 (13:08 +0200)]
Remove outs_state attribute

API change: removes set_irg_outs_inconsistent and get_irg_outs_state
Use set_irg_state and is_irg_state instead!

12 years agoAPI to enable dumping
Andreas Zwinkau [Thu, 8 Sep 2011 12:25:47 +0000 (14:25 +0200)]
API to enable dumping

12 years agoRemoved IR_GRAPH_STATE_BAD_BLOCK symbol
Andreas Zwinkau [Wed, 7 Sep 2011 12:06:08 +0000 (14:06 +0200)]
Removed IR_GRAPH_STATE_BAD_BLOCK symbol

12 years agoconvert opts to use the opt_manage framework
Andreas Zwinkau [Fri, 2 Sep 2011 11:59:47 +0000 (13:59 +0200)]
convert opts to use the opt_manage framework

Converted: ifconv, boolopt, combo, fpvrp, ldst, code placement,
jumpthreading, deconv, parallelize mem, loop, scalar replacement,
cfopt.

12 years agointroduce opt_manage framework
Andreas Zwinkau [Wed, 7 Sep 2011 12:59:03 +0000 (14:59 +0200)]
introduce opt_manage framework

This is a basic implementation of http://libfirm.org/PhaseManagement

Introduces remove_unreachable_blocks as an extra API function,
which does a subset of optimize_graph_df.

12 years agointroduce remove_unreachable_blocks
Andreas Zwinkau [Thu, 8 Sep 2011 10:56:39 +0000 (12:56 +0200)]
introduce remove_unreachable_blocks

12 years agoRemove dead assignment
Andreas Zwinkau [Wed, 14 Sep 2011 09:01:55 +0000 (11:01 +0200)]
Remove dead assignment

Cheering up Tron ;)

12 years agobeabi: no special treatment of returns_twice
Matthias Braun [Tue, 13 Sep 2011 12:19:26 +0000 (14:19 +0200)]
beabi: no special treatment of returns_twice

returns_twice handling was broken in the ia32-backend (the only real
beabi user) for a long time now. Just noone noticed because our
frontends lacked the special treatment to set the flag correctly.
Turned out setjmp/longjmp on ia32 save/restore the registers anyway
so not doing anything is fine here.

12 years agosparc: implement returns_twice calling convention
Matthias Braun [Tue, 13 Sep 2011 09:06:09 +0000 (11:06 +0200)]
sparc: implement returns_twice calling convention

12 years agodump calling convention and additional properties for method types
Matthias Braun [Tue, 13 Sep 2011 09:05:52 +0000 (11:05 +0200)]
dump calling convention and additional properties for method types

12 years agoremove_bads must preserve block entities
Andreas Zwinkau [Tue, 13 Sep 2011 11:40:25 +0000 (13:40 +0200)]
remove_bads must preserve block entities

They might be the target of an ijmp afterall.

12 years agoDo not touch deleted nodes.
Sebastian Buchwald [Tue, 13 Sep 2011 06:28:53 +0000 (08:28 +0200)]
Do not touch deleted nodes.

This fixes backend/float_ret_sse.c with -O1.

12 years agosparc: first implementation of upper_bits_clean
Matthias Braun [Fri, 9 Sep 2011 21:28:43 +0000 (23:28 +0200)]
sparc: first implementation of upper_bits_clean

12 years agoia32: fix overly conservative upper_bits_clean (by avoiding undefined behaviour)
Matthias Braun [Fri, 9 Sep 2011 21:28:14 +0000 (23:28 +0200)]
ia32: fix overly conservative upper_bits_clean (by avoiding undefined behaviour)

12 years agosparc: remove unnecessary convs before stores
Matthias Braun [Fri, 9 Sep 2011 20:51:11 +0000 (22:51 +0200)]
sparc: remove unnecessary convs before stores

12 years agomake sure projs of projs are moved in part_block_edges
Matthias Braun [Fri, 9 Sep 2011 09:21:13 +0000 (11:21 +0200)]
make sure projs of projs are moved in part_block_edges

12 years agoimplement compound-call-argument lowering
Matthias Braun [Thu, 8 Sep 2011 13:26:03 +0000 (15:26 +0200)]
implement compound-call-argument lowering

Implement a generic way to lower compound-call-arguments.
Parameters are prepared on the stackframe and passed as a pointer
to the function.

12 years agoChange "associated type" logic to a single linked list to the "higher type"
Matthias Braun [Thu, 8 Sep 2011 10:38:19 +0000 (12:38 +0200)]
Change "associated type" logic to a single linked list to the "higher type"

12 years agoFix offsets for Loads and Stores.
Sebastian Buchwald [Thu, 8 Sep 2011 09:06:38 +0000 (11:06 +0200)]
Fix offsets for Loads and Stores.

12 years agoUse additional register instead of multiple immediate instructions.
Sebastian Buchwald [Wed, 7 Sep 2011 13:02:38 +0000 (15:02 +0200)]
Use additional register instead of multiple immediate instructions.

12 years agoIgnore g4 for internal usage.
Sebastian Buchwald [Tue, 6 Sep 2011 08:04:42 +0000 (10:04 +0200)]
Ignore g4 for internal usage.

12 years agoFixed some typos.
Sebastian Buchwald [Wed, 7 Sep 2011 12:59:34 +0000 (14:59 +0200)]
Fixed some typos.

12 years agoremove_bads invalidates outs
Andreas Zwinkau [Thu, 8 Sep 2011 11:07:43 +0000 (13:07 +0200)]
remove_bads invalidates outs

12 years agofunctions with compound parameters are never const in firm
Matthias Braun [Tue, 6 Sep 2011 15:01:41 +0000 (17:01 +0200)]
functions with compound parameters are never const in firm

This should fix fehler200.c

12 years agosparc: fix invalid stack bias calculation in omit-fp-mode
Matthias Braun [Tue, 6 Sep 2011 14:16:40 +0000 (16:16 +0200)]
sparc: fix invalid stack bias calculation in omit-fp-mode

12 years agosparc: panic instead of segfault for struct parameters
Matthias Braun [Tue, 6 Sep 2011 14:16:24 +0000 (16:16 +0200)]
sparc: panic instead of segfault for struct parameters

12 years agoremove has_compound_ret_parameter, we already had cc_compound_ret
Matthias Braun [Tue, 6 Sep 2011 11:55:20 +0000 (13:55 +0200)]
remove has_compound_ret_parameter, we already had cc_compound_ret

This should also fix compound returns in combination with
-msoft-float on sparc

12 years agosparc: support for thread local storage
Matthias Braun [Tue, 6 Sep 2011 11:24:28 +0000 (13:24 +0200)]
sparc: support for thread local storage

12 years agobegnuas: let user specify elf variants
Matthias Braun [Tue, 6 Sep 2011 11:00:45 +0000 (13:00 +0200)]
begnuas: let user specify elf variants

12 years agolower parameter entities in softfloat lowerer
Matthias Braun [Mon, 5 Sep 2011 14:22:19 +0000 (16:22 +0200)]
lower parameter entities in softfloat lowerer

12 years agosparc: do not use MATCH_MODE_NEUTRAL when using Or/And/Eor for flags
Matthias Braun [Mon, 5 Sep 2011 15:00:08 +0000 (17:00 +0200)]
sparc: do not use MATCH_MODE_NEUTRAL when using Or/And/Eor for flags

12 years agosparc: Ignore long doubles like ia32 backend.
Manuel Mohr [Fri, 26 Aug 2011 11:28:02 +0000 (13:28 +0200)]
sparc:  Ignore long doubles like ia32 backend.

Softfloat library does not support long double anyway.

12 years agosparc: split Mulh node into SMulh and UMulh
Matthias Braun [Mon, 5 Sep 2011 14:48:49 +0000 (16:48 +0200)]
sparc: split Mulh node into SMulh and UMulh

(Hannes ancient technique based on the Proj-mode is deprecated)

12 years agosparc: Stop looking for delay slot node when leaving current block.
Manuel Mohr [Wed, 24 Aug 2011 14:30:23 +0000 (16:30 +0200)]
sparc:  Stop looking for delay slot node when leaving current block.

12 years agoAdded dw_lower special case to handle Calls whose result is never used.
Manuel Mohr [Wed, 24 Aug 2011 12:51:58 +0000 (14:51 +0200)]
Added dw_lower special case to handle Calls whose result is never used.

12 years agoAlternative fix for const functions with aggregate return
Matthias Braun [Mon, 5 Sep 2011 12:07:17 +0000 (14:07 +0200)]
Alternative fix for const functions with aggregate return

They really are const before lowering. So only mark the function
as non-const after lowering

This reverts commit 72c631f337f78b20460c508bd8af37fe67a5af37.

12 years agosparc: initial support for Alloc/Free nodes
Matthias Braun [Tue, 23 Aug 2011 17:09:29 +0000 (19:09 +0200)]
sparc: initial support for Alloc/Free nodes

This commit also adds a generic Alloc/Free lowering helper
Unfortunately we often produce invalid code, because currently our
stackpointer wiring logic is too weak and produces invalid results for
example when using alloca in a loop.

12 years agorename Free argument from size to count to be consistent with Alloc
Matthias Braun [Tue, 23 Aug 2011 16:51:08 +0000 (18:51 +0200)]
rename Free argument from size to count to be consistent with Alloc

12 years agoFix cfopt bug due to infinite loops
Andreas Zwinkau [Tue, 6 Sep 2011 09:14:06 +0000 (11:14 +0200)]
Fix cfopt bug due to infinite loops

12 years agoPrint the linkage of entities only once, not twice.
Christoph Mallon [Sat, 3 Sep 2011 14:45:22 +0000 (16:45 +0200)]
Print the linkage of entities only once, not twice.

12 years agoPrint the value of const initializers instead of just <CONST>Const.
Christoph Mallon [Sat, 3 Sep 2011 14:34:29 +0000 (16:34 +0200)]
Print the value of const initializers instead of just <CONST>Const.

12 years agoAdd missing newlines when dumping entities.
Christoph Mallon [Sat, 3 Sep 2011 14:33:22 +0000 (16:33 +0200)]
Add missing newlines when dumping entities.

12 years agoPrint "default" instead of nothing if an entity has default linkage.
Christoph Mallon [Sat, 3 Sep 2011 14:31:45 +0000 (16:31 +0200)]
Print "default" instead of nothing if an entity has default linkage.

12 years agoWe may return a parameter and thus need to copy them.
Sebastian Buchwald [Fri, 2 Sep 2011 12:53:34 +0000 (14:53 +0200)]
We may return a parameter and thus need to copy them.

This fixes opt/fehler200.c.

12 years agoDirectly ask backend for current machine size in CopyB lowering.
Manuel Mohr [Thu, 1 Sep 2011 17:41:51 +0000 (19:41 +0200)]
Directly ask backend for current machine size in CopyB lowering.

Old version used parameter.

12 years agoAdapt documentation to implementation
Andreas Zwinkau [Thu, 1 Sep 2011 16:54:31 +0000 (18:54 +0200)]
Adapt documentation to implementation

12 years agoCmp must not counted as an operation
Andreas Zwinkau [Thu, 1 Sep 2011 14:34:47 +0000 (16:34 +0200)]
Cmp must not counted as an operation

12 years agoLet collect_nodes cope with Bad nodes
Andreas Zwinkau [Thu, 1 Sep 2011 14:27:33 +0000 (16:27 +0200)]
Let collect_nodes cope with Bad nodes

12 years agoDo not regard functions with compound return types as pure/const.
Manuel Mohr [Thu, 1 Sep 2011 14:00:31 +0000 (16:00 +0200)]
Do not regard functions with compound return types as pure/const.

12 years agoImproved CopyB lowering, made it part of target lowering.
Manuel Mohr [Wed, 31 Aug 2011 17:34:55 +0000 (19:34 +0200)]
Improved CopyB lowering, made it part of target lowering.

Backends can configure CopyB lowering, so that it's possible to keep
CopyB nodes in a certain size range for special backend-specific
optimizations.  Furthermore, large CopyBs are turned into memcpy calls.

12 years agofix warning
Andreas Zwinkau [Thu, 1 Sep 2011 10:40:37 +0000 (12:40 +0200)]
fix warning

12 years agoImprove cfopt
Andreas Zwinkau [Thu, 1 Sep 2011 09:10:22 +0000 (11:10 +0200)]
Improve cfopt

The part, which does not handle Phis is now recomputing block info,
because converting Cond -> Jmp, might make this info obsolete.

Additionally, it can now remove empty Jmp blocks with more than one
control flow predecessor, provided the origin block has no Phis.

Now cfopt should now be idempotent
(at least the part not handling Phis).

12 years agofix the fix of the call ordering...
Matthias Braun [Tue, 23 Aug 2011 17:19:05 +0000 (19:19 +0200)]
fix the fix of the call ordering...

12 years agoia32: make sure the stackframe IncSp is always used
Matthias Braun [Tue, 23 Aug 2011 11:22:40 +0000 (13:22 +0200)]
ia32: make sure the stackframe IncSp is always used

12 years agosparc: support va_start
Matthias Braun [Mon, 22 Aug 2011 14:11:58 +0000 (16:11 +0200)]
sparc: support va_start

12 years agoa const parameter is enough for get_method_XXX()
Matthias Braun [Mon, 22 Aug 2011 13:24:05 +0000 (15:24 +0200)]
a const parameter is enough for get_method_XXX()

12 years agoadd special constant to represent VA_START-address in a parameter_entity
Matthias Braun [Mon, 22 Aug 2011 12:47:14 +0000 (14:47 +0200)]
add special constant to represent VA_START-address in a parameter_entity

12 years agobeverify: test register width in regalloc verification
Matthias Braun [Thu, 18 Aug 2011 17:17:30 +0000 (19:17 +0200)]
beverify: test register width in regalloc verification

12 years agofix mode of call-result proj
Matthias Braun [Thu, 18 Aug 2011 13:01:44 +0000 (15:01 +0200)]
fix mode of call-result proj

12 years agoFixed call dependency comparison for backend call ordering.
Manuel Mohr [Fri, 19 Aug 2011 13:25:54 +0000 (15:25 +0200)]
Fixed call dependency comparison for backend call ordering.

Code was taken from cmp_call_dependency in beabi.c which handles the
situation correctly.

12 years agoBugfix: Added special case for x mod 1.
Sebastian Buchwald [Fri, 19 Aug 2011 12:07:11 +0000 (14:07 +0200)]
Bugfix: Added special case for x mod 1.

12 years agoIR export: export mode name as string; mark "the" mode_P mode.
Julian Oppermann [Fri, 19 Aug 2011 11:46:32 +0000 (13:46 +0200)]
IR export: export mode name as string; mark "the" mode_P mode.

12 years agoClarify remove_bads doc
Andreas Zwinkau [Fri, 19 Aug 2011 08:17:01 +0000 (10:17 +0200)]
Clarify remove_bads doc

12 years agoCorrect comment.
Christoph Mallon [Fri, 19 Aug 2011 06:15:04 +0000 (08:15 +0200)]
Correct comment.

12 years agoReduce code duplication.
Christoph Mallon [Fri, 19 Aug 2011 06:14:21 +0000 (08:14 +0200)]
Reduce code duplication.

12 years agoUse new_*_Const(irg, get_mode_$VAL(mode)) instead of new_*_Const_long(irg, mode,...
Christoph Mallon [Fri, 19 Aug 2011 06:08:41 +0000 (08:08 +0200)]
Use new_*_Const(irg, get_mode_$VAL(mode)) instead of new_*_Const_long(irg, mode, $VAL).

12 years agosparc: Set object file format when initializing backend.
Manuel Mohr [Thu, 18 Aug 2011 16:56:55 +0000 (18:56 +0200)]
sparc: Set object file format when initializing backend.

Old version breaks for files which do not contain any functions because
in this case, emit_routine never gets called.

12 years agoFix div by one
Andreas Zwinkau [Thu, 18 Aug 2011 14:56:50 +0000 (16:56 +0200)]
Fix div by one

For k==0 the Div to Shift conversion is wrong.
Instead, we just convert to the left operand of the Div.

12 years agoRefactoring to remove one level of indentation
Andreas Zwinkau [Thu, 18 Aug 2011 14:53:18 +0000 (16:53 +0200)]
Refactoring to remove one level of indentation

12 years agoA comment for better understanding
Andreas Zwinkau [Thu, 18 Aug 2011 14:44:19 +0000 (16:44 +0200)]
A comment for better understanding

12 years agosparc: Added a comment.
Manuel Mohr [Thu, 18 Aug 2011 14:40:52 +0000 (16:40 +0200)]
sparc: Added a comment.

12 years agosparc: Add support for Conds where selector is not a Cmp.
Manuel Mohr [Thu, 18 Aug 2011 14:06:24 +0000 (16:06 +0200)]
sparc: Add support for Conds where selector is not a Cmp.

12 years agocleanup
Andreas Zwinkau [Thu, 18 Aug 2011 13:41:54 +0000 (15:41 +0200)]
cleanup

The variable is overwritten right afterwards

12 years agoDon't try to import cons_flags.
Julian Oppermann [Thu, 18 Aug 2011 12:39:19 +0000 (14:39 +0200)]
Don't try to import cons_flags.

12 years agoFixed opt/fehler196.c.
Sebastian Buchwald [Thu, 18 Aug 2011 12:31:40 +0000 (14:31 +0200)]
Fixed opt/fehler196.c.

12 years agoAllow selecting one past the last parameter to get variadic parameters.
Christoph Mallon [Wed, 17 Aug 2011 19:00:50 +0000 (21:00 +0200)]
Allow selecting one past the last parameter to get variadic parameters.

12 years agoRemove unnecessary assignment, which at worst hides a panic.
Christoph Mallon [Wed, 17 Aug 2011 17:40:37 +0000 (19:40 +0200)]
Remove unnecessary assignment, which at worst hides a panic.

12 years agoFix emission of string initializers.
Christoph Mallon [Wed, 17 Aug 2011 13:44:43 +0000 (15:44 +0200)]
Fix emission of string initializers.

Non-printable characters are emitted as octal sequences, e.g. \0 for 0.
Always pad them to three digits, so they do not accidently join with a following ASCII digit.
E.g. "\0""7" was emitted as "\07", correct is "\0007".

12 years agoFixed local optimization.
Sebastian Buchwald [Wed, 17 Aug 2011 14:33:13 +0000 (16:33 +0200)]
Fixed local optimization.

We have to convert the values the same way the program does.

12 years agoreplace unsupported builtins with library calls
Matthias Braun [Wed, 17 Aug 2011 13:15:38 +0000 (15:15 +0200)]
replace unsupported builtins with library calls

12 years agosparc: fix mode of Ldf Projs
Matthias Braun [Tue, 16 Aug 2011 11:26:19 +0000 (13:26 +0200)]
sparc: fix mode of Ldf Projs

12 years agoadd callback for constructing spill/reload
Matthias Braun [Mon, 15 Aug 2011 16:10:38 +0000 (18:10 +0200)]
add callback for constructing spill/reload

So we are not forced to use the generic be_Spill, be_Reload functions
which don't work correctly with double-width register requirements.
This should really fix sparc float spill/reload this time.

12 years agosimplify copy interface and respect double/aligned reqs
Matthias Braun [Mon, 15 Aug 2011 13:24:55 +0000 (15:24 +0200)]
simplify copy interface and respect double/aligned reqs

12 years agofix warnings reported by cparser
Matthias Braun [Mon, 15 Aug 2011 12:23:40 +0000 (14:23 +0200)]
fix warnings reported by cparser

12 years agoCorrect reg_reqs_equal().
Christoph Mallon [Wed, 17 Aug 2011 07:57:39 +0000 (09:57 +0200)]
Correct reg_reqs_equal().

If req2 was limited and req1 wasn't, then it incorrectly returned true.

12 years agoCorrect typos in comments.
Christoph Mallon [Wed, 17 Aug 2011 07:57:06 +0000 (09:57 +0200)]
Correct typos in comments.

12 years agoCorrect indentation.
Christoph Mallon [Wed, 17 Aug 2011 07:56:36 +0000 (09:56 +0200)]
Correct indentation.

12 years agoAdded soft float support for SPARC backend.
Sebastian Buchwald [Mon, 15 Aug 2011 14:39:21 +0000 (16:39 +0200)]
Added soft float support for SPARC backend.

12 years agoFix C/bitfield4
Andreas Zwinkau [Tue, 16 Aug 2011 12:58:03 +0000 (14:58 +0200)]
Fix C/bitfield4

Load-Store-Opt now shifts constant loads from bitfields accordingly.

12 years agocleanup
Andreas Zwinkau [Tue, 16 Aug 2011 12:29:38 +0000 (14:29 +0200)]
cleanup

12 years agofix missing else
Andreas Zwinkau [Tue, 16 Aug 2011 12:01:35 +0000 (14:01 +0200)]
fix missing else

12 years agoAPI Change: Use graph state instead of parameter
Andreas Zwinkau [Tue, 16 Aug 2011 11:28:18 +0000 (13:28 +0200)]
API Change: Use graph state instead of parameter

The lowering phase had a lower_bitfield parameter.
Instead of passing "true", the (e.g. EDG) frontends now must
set_irg_state(irg, IR_GRAPH_STATE_IMPLICIT_BITFIELD_MASKING).

This is necessary, because not only the lowering phase is affected.
Additionally, the load store optimisation should handle Sels differently.

12 years agocleanup
Andreas Zwinkau [Fri, 12 Aug 2011 10:34:09 +0000 (12:34 +0200)]
cleanup

Removes obsolete debug output and confusing comments

12 years agobig refactoring of arch_XXX functions
Matthias Braun [Mon, 15 Aug 2011 11:41:11 +0000 (13:41 +0200)]
big refactoring of arch_XXX functions

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)

12 years agoremove old type
Matthias Braun [Sun, 14 Aug 2011 12:01:53 +0000 (14:01 +0200)]
remove old type