X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=Changes;h=40278f507e79c5edd081c0aabb6e030186327cdf;hb=e0090662d79cd31c3dd35b8d4ee0f35530f75bc5;hp=83ad0bbae6e0a08e7627c90f216d067f6b7f2737;hpb=656afe77ac15081ad612a20a31dbacea1799d484;p=libfirm diff --git a/Changes b/Changes index 83ad0bbae..40278f507 100644 --- a/Changes +++ b/Changes @@ -1,5 +1,561 @@ + ... no more updated, see cvs entries. + + 7.8.02 Goetz + Implemented scc algorithm. Added datastructure to mark + backedges (ana/backedge.h) and to represent loops + (ana/irloop.h). The scc algorithm (ana/irscc.c) builds + both datastructures. + The algorithm does not yet work properly for interprocedural + graphs. Finds more loops than only recursions. + + Improved place_code: now moves nodes out of loops. + Fixed bug in iropt.c: wrong parameter in debug info: iropt_dbg.c + Now flag set_opt_control_flow can be set to 1 again. + + 11.7.2002 Goetz + Viele Aenderungen, + u.a. Zugrffsfkt normalisiert, + global, frame type nicht mehr in irp_types + interproz darstellung + mehr Zugriffsfkt bei entitaeten + u.v.a. + + 25.4.2002 Goetz + Added several constructors to tv. + Changed xgprintf so that full precision of double tvs is printed. + Fixed bug in irouts.c. + + 22.4.2002 Goetz + Added debug support, renamed stuff in ir/debug. + Optimizations still loose debug information. + + 19.3.2002 Goetz + Added flag "peculiarity" to entity.h, type.h. + + 15.3. Goetz + Bug: dominator construction aborts for BreakTest with flag 3.31 + Problem: optimization of many subsequent blocks (Jmp-chains) + where one is inlined (Tuple control flow) in a loop. Not all + nodes in merged blocks are moved to remaining block. + Fix: different calling order to optimize_in_place_2 from + optimize_in_place_wrapper. + Bug: dumping cfg when a block is Bad. Fix: Output Bad node. + Change: not only turn off cse but all optimizations during + inlining. + + 15.3. Goetz + Parted common.h into two files common_t.h. By this config.h + as well as the preprocessor flags are no more visible externaly. + Adapted include directives. + + 12.3. Goetz + Bugfix in inlining: problems in combination with cse. + + 8.3. Goetz + Implemented cf optimizations. + Checked compiler flags -- sorted better to fit optimizations. + + 4.3. Goetz + Bugfix in irdom. + Implemented code placement. + + 28.2 Goetz + block walk in irouts. + irdom implemented: dominator information. + + 25.2. Goetz + Bugfix Optmierung Binops mit mode Tupel. + + 22.2. Goetz + irgopt: inline_small_irgs implemented + + 30.1. - 20.2. Goetz + Bugfixes, some access functions ... + + 29.1.2002 Goetz + New directory: ana for analyses. Adapted configure/makefiles + implemented irout: backedges. Added one field to ir_graph, one to ir_node. + Implemented state management for irgraphs: see irgraph.h. + Must now call finalize_cons() after graph construction!! + + 24.1.2002 Goetz + Procedure global cse. + Flag pinned in irop, irgraph. + Global cse in irop, setting the irgraph flag. + Example programs: Endless_loop.c. global_cse.c. + Adapted irdump. + + 23.1.2002 Goetz + Implemented support for endless loops: + Adapted End node. + Adapted Phi constructors so that memory phis are added. + Adapted Cond optimization: add block to End. + Adapted dead node elimination: compation of Ends predecessors + Adapted inlineing: remember keepalives of inlined graph. + Added informative strings to asserts in irvrfy. + + 21.1.2002 Goetz + Added volatile flag to entity, order flag to array. + Added a set of assertions. + + 17.1.2002 Goetz + Added access function set_class_members() + + 21.12.2001 Goetz + Asserts in irvrfy that verify the mode of Proj nodes. For Start, + Call, Return they check the corresponding function type! Corrected + bugs in testprograms. + Some asserts for legal values of 'pos' arguments in type/entity + access routines. + + 20.12.2001 Goetz + Some access routines for visited flags in entity.h, irnode.h, + bug in oo_program_example. + + 17.12.2001 Boris + Removed all obsolete Makefiles + + 10.12.2001 Goetz + Added support for constant entities. A new example program illustrates + their use. Extended dumper routines to dump constant values. + + 30.11.2001 Goetz + Extendend "comfortable" construction interface by some methods + serving as simple shortcuts. + + 30.11.2001 Goetz + Added a class type to irgs. This class type is to be used as owner + for local entities of the procedure. This are all entities allocated + for each execution of the procedure. + The class type is allocated automatically by new_ir_graph(). Access + routines to get this type are in irgraph.h. + We chose a class type as this allows to represent "inner" procedures + as, e.g., in Pascal. + Adapted array-stack-example. + + 29.11.2001 Goetz + irdump outputs nodeids instead of pointers for labels of nodes. + With a preprocessor flag in common.h this can be turned off. + + 28.11.2001 Boris + Added an Id tag to every .c and .h file + + 20.11.2001 Goetz + Changed SSA constuction for exception control flow. + If PRECISE_EXC_CONTEXT is used Phi nodes will use the values + valid when the execption operation was allocated. This increases + the memory consuption of the construction algorithm by + n_loc * #fragile_ops. + + 19.11.2001 Goetz + Added method to replace in array of a node in irnode.c/h + Added functionality to irgmod: + * collect all Phi nodes as link-list in the Blocks link field + * collect all Proj nodes as link-list in node producing the tuple. + * Seperate a Block into two + Added inlining transformation in irgopt.h + Improved output of dump_ir_block_graph. Now also dumps nodes that + don't belong to a block. + Added flag opt_unreachable_code, opt_inline. + Changed irvrfy so that it accepts nodes with Bad predecessors. + + 19.10.2001 Boris + renamed get_type_nameid to get_type_ident + + 10.9.2001 Goetz + Bugfix: dead node elimination did not replace the hash table + for cse. + + 29.8.2001 Goetz + Added routine remove_irp_irg. + Changed comment to free_ir_graph. + + 29.8.2001 Goetz + Added routine to free irgraphs. + + 17.7.2001 Goetz + Improved add routines to sub, supertype in type.c + + 12.7.2001 Goetz + Added implementation of overwrites stuff. + + 11.7.2001 Goetz + Implemented stuff to change the type graph. See + typegmod.h and tpop.h for basic documentation of the change. + There now exists a type of kind type_id. If this appears + externally this is a bug. + + 9.7.2001 Goetz + Added some new access routines to types. + List of overwritten fields for entities. + Removed a bug in irnode. + + 4.7.2001 Goetz + Added a routine to set the mangled entity name. + Added two routines to copy entites. + + 3.7.2001 Goetz + Entities now have two more flags, for visibility and allocation mode. + Types that have a layout have a flag indicating whether the layout is + fixed. + + 25.6.2001 Goetz + We distinguish three kinds of Cond nodes. These can be distinguished + by the mode of the selector operand and an internal flag of type cond_kind. + First we distinguish binary Conds and switch Conds. + A binary Cond has as selector a boolean value. Proj(0) projects the control + flow for case "False", Proj(1) the control flow for "True". A binary Cond + is recognized by the boolean selector. + The switch Cond has as selector an unsigned integer. It produces as result + an n+1 Tuple (cf0, ... , cfn) of control flows. + We differ two flavours of this Cond. The first, the dense Cond, passes + control along output i if the selector value is i, 0 <= i <= n. If the + selector value is >n it passes control along output n. + The second Cond flavor differes in the treatment of cases not specified in + the source program. It magically knows about the existence of Proj nodes. + It only passes control along output i, 0 <= i <= n, if a node Proj(Cond, i) + exists. Else it passes control along output n (even if this Proj does not + exist.) This Cond we call "fragmentary". There is a special constructor + new_defaultProj that automatically sets the flavor. + The two switch flavors are distinguished by a flag of type cond_kind. + Default flavor is "dense" + + 20.6.2001 Goetz + Extended iropt, tv. + tv now implements Minus, Abs. + iropt now optimizes these and Div, Mod, Quot, DivMod. + Still missing: Shrs, Rot. + tarval_shr somtimes performs shrs, depending on the compiler/system!! + If the ArmRoq implementation is faulty there might appear errors. + + 20.6.2001 Goetz + Changed ircons: If undefined values are used the Phi construction + inserts a constant with value tarval_bad. + + 19.6.2001 Goetz + Changed array bounds in type.h to ir_node*. This allows to + construct array bounds that are complex constant expressions + simpler. Further dynamic array bounds can be displayed. + Comment in ircons.c extended: undefined values in start_block. + + 7.6.2001 Goetz + ifdef'ed all uses of gmp in tv.c away. Optimizations for + mode_Z no more supported, as well as constants of that mode. + + 7.6.2001 Goetz + Dokumentation in ir_dump + Habe Routinen fuer einzelne Knoten/Kanten aus header entfernt: + Benutzen globale Variable die nicht oeffentlich zugaenglich ist. + + 28.5.2001 Goetz + We need an entity for the array elements for the Sel nodes. This + entity should be stored in the array type. Changed constructor + parameters: include array element type. Entity for elements is built + automatically now. + + 28.5.2001 Goetz + Removed bug in tv.c. + Faulty use of va_arg, became visible with new, stricter gcc 2.96. + + 23.5.2001 Goetz + Added list of member entites to union. unioned_types and delimiters + are superfluous now -- removed. + Rationale: we want to express selection of a union member as a Sel + node. for this we need to have entities. The entities contain the + unioned type and have as name the delimiters... + + 17.4.2001 Boris + Changed Makefile/MakeTargets to install headers and libraries + seperately. + + 28.3.2001 Boris + Changed Makefile and Configure scripts to produce a proper tar file + for distribution (libfirm-VERSION.tar) + Use 'make distrib' instead of 'make dist' + + 14.3.2001 Goetz + Changed implementation of tr module. With this I also changed the + interface!! Type casts are unnecessary now, but some access funcions + differ. + + +====================================================================== +==================== New version: 0.3.0 ============================== +====================================================================== + + 14.3.2001 Boris + added file TODO + + 14.3.2001 Boris + added creation of a tar archive for distribution + replaced ir/.dummy.in by ir/Makefile.in + + 13.3.2001 Goetz + Changed equivalent_node() and copy_preds() so that the end block + is not optimized away if it has no real predecessors. This fixes + the problem with the while examples. + Added while_example in Makefile + + 12.3.2001 Goetz + Fooled around with if_while_example: Why does cse make it abort? + Cse removes path to End node, Bad remains as pred of Endblock. + The block walker can't deal with this. + Made new example with only loop: while_example. + + 12.3.2001 Boris + added auto documentation in Makefiles, configure, etc + example in ir/ir/ircons.c - much must be added + creation of documentation by 'make autodoc' in architecture directory + + 5.3.2001 Boris + added lots of #ifdef HAVE_CONFIG_G #include "config.h" #endif + replaced some C++ style comments (//) by standard C comments /**/ + added autoconf stuff + worked this night: + - configure (with some features, see --help for more) + - make [depend | tags | install] + - make [run] in testprograms + did not work: + - compilation on SunOS + - make dist + - automatic call of autoconf if required + + 5.3.2001 Goetz + More colours in vcg output. + Fixed bug: cse found that start block equals it's + first successor as both have the Start block as predecessor. + This only happens for local_optimize_graph() as during construction + the Start block is not entered in the value table. + Changed implementation: irgmod: local_optimize_graph() did not + empty the hash table with the irnodes for cse. This might cause that + cse turns up with a node that seems better but was removed from the + graph in an earlier optimization phase. + Removed old #if 1 from ircons.c + Commented in call of optimization for Block nodes in irgopt.c, copy_preds(): + Optimizes blocks that had bad predecessors. + Same for Phi nodes. + + + 27.2.2001 Goetz + Moved struct from irprog.h to irprog_t.h, same for irmode.h. + Added a module deb_info in debug.h. Adapted makefile. Added example + use in iropt.h. + Removed use of debug.h in ident.c. Now debug.c|h can be moved to + /adt/. + Removed inabled code for dead node elimination in irgopt.h. + Renamed some missnamed access routines (_of_). Macros with old names + are in old_fctnames.h. + Edited makefiles to remove #* and *.flc. + + ??.2.2001 Goetz + Some minor bugfixes... + + 25.1.2001 Goetz + After compacting of in arrays in dead_node_elimination + merge blocks and remove Phis with one pred. + + 24.1.2001 Goetz + Freeing of obstack in dead_node_elimination commented in. + Compacting in arrays of Block and Phi nodes in dead_node_ + elimination. + Some more changes... + + 15.01.2001 Goetz + added set/get_SymConst_type_or_id in irnode.h + added field offset to entity in entity.h + added field size to type_class in type.h + include "gmp.h" in tv.h with "" instead <> + + 12.01.2001 Goetz + Some changes to make the lib better portable + + 29.12.2000 Goetz + Initialize max_node_nr in irprog. + + 27.12.2000 Goetz + Now outputs warning if faulty type in irdump, dump_type_info. + Explicit string termination in irdump, vcg_open. + + 20.12.2000 Goetz + Added external to declaration of irp. + Added typedef before pns and pnc_number. + irmode.c, init_mode(): We need to memset all new modes as + tarval_vrfy reads fields before they are initialized: It + compares to min/max when tarvals for min/max are allocated! + + 18.12.2000 Goetz + Changed parameter of Methods in type.h and type.c from + class to clss. Class is a C++ keyword. + + 10.12.2000 Goetz + Changed some testprograms to accomodate Uebprakt. + + 7.9.2000 Goetz + Finished implementation of dump_all_types. + Added new testprogram inheritance_example. + + 6.9.2000 Chris + Added seven access routines in type.[hc]: + get_class_n_member, get_class_n_subtype, get_class_n_supertype, + get_strct_n_member, add_strct_member, get_strct_member and set_strct_member. + Fixed the type_walk_2 for those seven routines. + + 6.9.2000 Goetz + Added irdump routine dump_all_types. + Did changes to irprog, type, typewalk to achieve this. + typewalk needs to walk along members, sub and supertypes, this + is still missing! irdump then needs to output these edges. + +====================================================================== +==================== New version: 0.2.5 ============================== +====================================================================== + + 3.9.2000 Goetz + Made new Version: 0.2.5 + + 15.8.2000 Goetz until 3.9.00 + Separated irnode.h and many others into two files: one public + one private. + Added funcionality to extract headers for lib. + + 23.8.2000 Goetz + type_dump also dumps irg->ent + if_example: corrected nr of locals + + 16.8.2000 Goetz + irgopt: Correct copy of self pointer in start block. + irgopt: Correct treatment of loops: pre function in walker + breaks all possible loops in Phi and Block nodes. + irr_loop_example: wrong Return statement + Now I fixed all but one error: in memory_example. + This error showed a conceptual problem, so I wrote + a slightly different algorithm. This now runs for + all testprograms. + dead_node_example: cse is buggy!! merges start and the + following block! + + 15.8.2000 Goetz + looking at bug in dead_node_elimination. + Following fixes: + irnode: all get_..._arr functions changed + ircons: new_r_Block: set matured flag. + ircons: new_r_SymConst: needs mode_p for linkage_ptr_info. + adapted call_str_example to new concepts. + + 2.8.2000 Goetz + Implemented simpler Phi construction algorithm that constructs + correct code for three_cfpred_example in ircons. This algorithm + generates more Id nodes than the original algorithm and therefore + is less effective. + Also made some changes to optimizations of Not. + + 31.7.2000 Chris + Fixed a bug, caused by the recursive use in type.h and entity.h. + Deleted the _TYPE_TYPEDEF_ and inserted the _ENTITY_TYPEDEF_ instead. + Fixed a problem in if_while testprogram, so it now works. + + 20.7.2000 Goetz + Fixed bug in optimize(). Returned Null instead n if + get_optimize() == false. + + 19.7.2000 Christian + Added some access routines in type.[hc]. Solved a recursive definition + of type_class struct, entity struct and type union. + + 18.7.2000 Goetz + Separated entity header into pure functional header and header + with data types. + + Goetz + ... a bunch small changes not documented + + 12.7.2000 Goetz + Changed output of oo_prog_example: now uses the internal list + of all irgs. Had to implement some of the access routines for + that. Also fixed a bug in irdump. Main routines did not use + current_ir_graph properly. + + 12.7.2000 Goetz + Implemented some missing parts in irgopt. + Added field irg to entity. Only valid if entity is a method. + Had to resove a cyclic de[endency between irgraph.h and entity.h + for this. + Added fields sub and super to type_class for inheritance. + Added field main_irg to irprog. + + 7.7.2000 Chris + Fixed some bugs in irgopt.c + Added some missing 'get_new_node' methods, so the new obstack contains + the correct nodes. + + 6.7.2000 Chris + Renamed ir_vrfy to irn_vrfy and vrfy_graphg to irg_vrfy. + Solved some copy'n'paste problems. Deleted most debug-code! + Added comments to several files. + + 6.7.2000 Goetz + Fixed bug in _r_ constructors for all four Div operations. + Fixed bug in turn_into_tuple: didn't remember the block. + Tested transform_node. + + 5.7.2000 Goetz + Fixed some testprograms to new semantics of firm. + Added testprogram global_var_example. + Fixed a bug in irop: Size of Sel node was (entity *) instead of + sel_attr. Therefor array_heap_example aborted. + Also found a missing break in typewalk, case iro_Alloc. + Added a construct that unifies all things constructed by the lib + and needed to represent a program: irprog.ch + This contains a list of all types as well as a list of all ir graphs. + I added calls to initialization and constructors so that this is constructed + automatically. I changed firm.c, type.c, irgraph.c and ev. more. + Removed strange block struct and constructor from ircons.c. + Moved routines for automatic Phi construction from irgmod to ircons. + Sorted functions in ircons to reflect the different interfaces. + Renamed dataseg to globals to be conformant with documentation. + Added conservation of current_ir_graph to irgopt.c. + Corrected bug in Makefiles: wrong path to directory ./inlude. + + 4.7.2000 Goetz + Commented a whole bunch of stuff, e.g. in ircons.h (Procedure to construct) + We should change the naming of the Block constructor. + Removed acces routines to attr. "closed" of Block. + Removed second implementation of new_ir_node from ircons and some comments + concerned with the now resolved cyclic dependency. + Fixed some bugs in irgopt so that the compilation goes through. + + 29.6.2000 Chris + Changed the irnode attribut 'visit' into 'visited'. + Added some access functions, like get/set_irn_visit etc. + + 28.6.2000 Chris + Renamed some access funtion in irgraph.*. + Deleted two global flags (ir_visited and block_visited) from irgraph.*. + Added two attributes to the irgraph struct. The visited flags belongs + to a ir graph, not to a whole program. + + 26.6.2000 Chris + A new optimization has been finished. The dead-node-elimination copies + the existing ir graph from one opstack to another. While walking the + graph, only the reachable nodes will be copied, so the "dead-nodes" + (unreachable in the controlflow) are removed. + + 19.6.2000 Chris + Solved some problems in the 'copy_node' function. The in array was not + as easy as it seamed. + + 16.6.2000 Chris + Wrote a new 'post' funtion, for future use in 'dead-node-elimination' + optimization, which is needed in the paramter list of 'irg_walk'. + + 14.6.2000 Chris + Moved 'optimze_in_place_wrapper' from iropt.* tothe new files irgopt.*. + New functions 'local_optimze_graph' and 'dead_node_elimination' are added, + but not finished. + 31.5.2000 Chris - Removed some files from the archive, after dependences and usage are checked: + Removed some files from the archive, after dependencies and usage are + checked: - 'ir/common/strerror.c' was nowhere used; - 'ir/ident/xx_ident.h' @@ -17,7 +573,29 @@ Moved the 'new_ir_node' constructor from ircons.* to irnode.* and fixed afterwards some recursive includes, so libfirm works again. -*** Goetz has to complete this lines - several changes are not annotated yet! *** + 2+3.2000 Goetz + Did a lot of changes, which I never commented until now (4.7.00). + + * Added new result to Start node: Pointer to global data segment. + * Extended Semantics of SymConst node to represent information for the + linker. + * Added arithmeitc nodes (Shrs, Minus ...) + + Rearranged the directory structure and adjusted the makefiles. + The directories contain: + ir: everything for the intermediate representation (better: src?) + /ir: the ir itself, and standard optimizations. + /tv: the target value module + /tr: the type and entity representation + /adt: abstract data types + /common: stuff needed by all other dirs + /debug: debugging Unterstuetzung + /ident: + include: external files needen as includes + testprograms: examples to test the lib. + + The makefiles generate files with extension .d that contain the dependencies + between the files. 15.2.2000 Goetz Added access routine to attribute link of irnode in irnode.ch. @@ -34,7 +612,7 @@ 10.2.2000 Goetz Changed tests from comparing enums to comparing pointers. This is more - efficient and reads better. e.g., instead get_irn_opcode == irm_And + efficient (is it?) and reads better. e.g., instead get_irn_opcode == irm_And now get_irn_op == op_And 10.2.2000 Goetz