new
[libfirm] / Changes
1   14.3.2001 Boris
2   added file TODO
3
4   14.3.2001 Boris
5   added creation of a tar archive for distribution
6   replaced ir/.dummy.in by ir/Makefile.in
7
8   13.3.2001 Goetz
9   Changed equivalent_node() and copy_preds() so that the end block
10   is not optimized away if it has no real predecessors.  This fixes
11   the problem with the while examples.
12   Added while_example in Makefile
13
14   12.3.2001 Goetz
15   Fooled around with if_while_example: Why does cse make it abort?
16   Cse removes path to End node, Bad remains as pred of Endblock.
17   The block walker can't deal with this.
18   Made new example with only loop:  while_example.
19
20   12.3.2001 Boris
21   added auto documentation in Makefiles, configure, etc
22   example in ir/ir/ircons.c - much must be added
23   creation of documentation by 'make autodoc' in architecture directory
24
25   5.3.2001 Boris
26   added lots of #ifdef HAVE_CONFIG_G #include "config.h" #endif
27   replaced some C++ style comments (//) by standard C comments /**/
28   added autoconf stuff
29   worked this night:
30         - configure (with some features, see --help for more)
31         - make [depend | tags | install]
32         - make [run] in testprograms
33   did not work:
34         - compilation on SunOS
35         - make dist
36         - automatic call of autoconf if required
37
38   5.3.2001 Goetz
39   More colours in vcg output.
40   Fixed bug:  cse found that start block equals it's
41   first successor as both have the Start block as predecessor.
42   This only happens for local_optimize_graph() as during construction
43   the Start block is not entered in the value table.
44   Changed implementation:  irgmod:  local_optimize_graph() did not
45   empty the hash table with the irnodes for cse.  This might cause that
46   cse turns up with a node that seems better but was removed from the
47   graph in an earlier optimization phase.
48   Removed old #if 1 from ircons.c
49   Commented in call of optimization for Block nodes in irgopt.c, copy_preds():
50   Optimizes blocks that had bad predecessors.
51   Same for Phi nodes.
52
53
54   27.2.2001 Goetz
55   Moved struct from irprog.h to irprog_t.h, same for irmode.h.
56   Added a module deb_info in debug.h.  Adapted makefile.  Added example
57   use in iropt.h.
58   Removed use of debug.h in ident.c. Now debug.c|h can be moved to
59   /adt/.
60   Removed inabled code for dead node elimination in irgopt.h.
61   Renamed some missnamed access routines (_of_).  Macros with old names
62   are in old_fctnames.h.
63   Edited makefiles to remove #* and *.flc.
64
65   ??.2.2001 Goetz
66   Some minor bugfixes...
67
68   25.1.2001 Goetz
69   After compacting of in arrays in dead_node_elimination
70   merge blocks and remove Phis with one pred.
71
72   24.1.2001 Goetz
73   Freeing of obstack in dead_node_elimination commented in.
74   Compacting in arrays of Block and Phi nodes in dead_node_
75   elimination.
76   Some more changes...
77
78   15.01.2001 Goetz
79   added set/get_SymConst_type_or_id in irnode.h
80   added field offset to entity in entity.h
81   added field size to type_class in type.h
82   include "gmp.h" in tv.h with "" instead <>
83
84   12.01.2001 Goetz
85   Some changes to make the lib better portable
86
87   29.12.2000 Goetz
88   Initialize max_node_nr in irprog.
89
90   27.12.2000 Goetz
91   Now outputs warning if faulty type in irdump, dump_type_info.
92   Explicit string termination in irdump, vcg_open.
93
94   20.12.2000 Goetz
95   Added external to declaration of irp.
96   Added typedef before pns and pnc_number.
97   irmode.c, init_mode(): We need to memset all new modes as
98   tarval_vrfy reads fields before they are initialized: It
99   compares to min/max when tarvals for min/max are allocated!
100
101   18.12.2000 Goetz
102   Changed parameter of Methods in type.h and type.c from
103   class to clss.  Class is a C++ keyword.
104
105   10.12.2000 Goetz
106   Changed some testprograms to accomodate Uebprakt.
107
108   7.9.2000 Goetz
109   Finished implementation of dump_all_types.
110   Added new testprogram inheritance_example.
111
112   6.9.2000 Chris
113   Added seven access routines in type.[hc]:
114   get_class_n_member, get_class_n_subtype, get_class_n_supertype,
115   get_strct_n_member, add_strct_member, get_strct_member and set_strct_member.
116   Fixed the type_walk_2 for those seven routines.
117
118   6.9.2000 Goetz
119   Added irdump routine dump_all_types.
120   Did changes to irprog, type, typewalk to achieve this.
121   typewalk needs to walk along members, sub and supertypes, this
122   is still missing!  irdump then needs to output these edges.
123
124 ======================================================================
125 ==================== New version: 0.2.5 ==============================
126 ======================================================================
127
128   3.9.2000 Goetz
129   Made new Version: 0.2.5
130
131   15.8.2000 Goetz until 3.9.00
132   Separated irnode.h and many others into two files: one public
133   one private.
134   Added funcionality to extract headers for lib.
135
136   23.8.2000 Goetz
137   type_dump also dumps irg->ent
138   if_example: corrected nr of locals
139
140   16.8.2000 Goetz
141   irgopt: Correct copy of self pointer in start block.
142   irgopt: Correct treatment of loops: pre function in walker
143     breaks all possible loops in Phi and Block nodes.
144   irr_loop_example: wrong Return statement
145   Now I fixed all but one error: in memory_example.
146   This error showed a conceptual problem, so I wrote
147   a slightly different algorithm.  This now runs for
148   all testprograms.
149   dead_node_example: cse is buggy!! merges start and the
150   following block!
151
152   15.8.2000 Goetz
153   looking at bug in dead_node_elimination.
154   Following fixes:
155   irnode:  all get_..._arr functions changed
156   ircons:  new_r_Block: set matured flag.
157   ircons:  new_r_SymConst: needs mode_p for linkage_ptr_info.
158   adapted call_str_example to new concepts.
159
160   2.8.2000 Goetz
161   Implemented simpler Phi construction algorithm that constructs
162   correct code for three_cfpred_example in ircons.  This algorithm
163   generates more Id nodes than the original algorithm and therefore
164   is less effective.
165   Also made some changes to optimizations of Not.
166
167   31.7.2000 Chris
168   Fixed a bug, caused by the recursive use in type.h and entity.h.
169   Deleted the _TYPE_TYPEDEF_ and inserted the _ENTITY_TYPEDEF_ instead.
170   Fixed a problem in if_while testprogram, so it now works.
171
172   20.7.2000 Goetz
173   Fixed bug in optimize(). Returned Null instead n if
174   get_optimize() == false.
175
176   19.7.2000 Christian
177   Added some access routines in type.[hc]. Solved a recursive definition
178   of type_class struct, entity struct and type union.
179
180   18.7.2000 Goetz
181   Separated entity header into pure functional header and header
182   with data types.
183
184   Goetz
185   ... a bunch small changes not documented
186
187   12.7.2000 Goetz
188   Changed output of oo_prog_example: now uses the internal list
189   of all irgs.  Had to implement some of the access routines for
190   that.  Also fixed a bug in irdump.  Main routines did not use
191   current_ir_graph properly.
192
193   12.7.2000 Goetz
194   Implemented some missing parts in irgopt.
195   Added field irg to entity. Only valid if entity is a method.
196   Had to resove a cyclic de[endency between irgraph.h and entity.h
197   for this.
198   Added fields sub and super to type_class for inheritance.
199   Added field main_irg to irprog.
200
201   7.7.2000 Chris
202   Fixed some bugs in irgopt.c
203   Added some missing 'get_new_node' methods, so the new obstack contains
204   the correct nodes.
205
206   6.7.2000 Chris
207   Renamed ir_vrfy to irn_vrfy and vrfy_graphg to irg_vrfy.
208   Solved some copy'n'paste problems. Deleted most debug-code!
209   Added comments to several files.
210
211   6.7.2000 Goetz
212   Fixed bug in _r_ constructors for all four Div operations.
213   Fixed bug in turn_into_tuple: didn't remember the block.
214   Tested transform_node.
215
216   5.7.2000 Goetz
217   Fixed some testprograms to new semantics of firm.
218   Added testprogram global_var_example.
219   Fixed a bug in irop:  Size of Sel node was (entity *) instead of
220   sel_attr.  Therefor array_heap_example aborted.
221   Also found a missing break in typewalk, case iro_Alloc.
222   Added a construct that unifies all things constructed by the lib
223   and needed to represent a program:  irprog.ch
224   This contains a list of all types as well as a list of all ir graphs.
225   I added calls to initialization and constructors so that this is constructed
226   automatically.  I changed firm.c, type.c, irgraph.c and ev. more.
227   Removed strange block struct and constructor from ircons.c.
228   Moved routines for automatic Phi construction from irgmod to ircons.
229   Sorted functions in ircons to reflect the different interfaces.
230   Renamed dataseg to globals to be conformant with documentation.
231   Added conservation of current_ir_graph to irgopt.c.
232   Corrected bug in Makefiles: wrong path to directory ./inlude.
233
234   4.7.2000 Goetz
235   Commented a whole bunch of stuff, e.g. in ircons.h  (Procedure to construct)
236   We should change the naming of the Block constructor.
237   Removed acces routines to attr. "closed" of Block.
238   Removed second implementation of new_ir_node from ircons and some comments
239   concerned with the now resolved cyclic dependency.
240   Fixed some bugs in irgopt so that the compilation goes through.
241
242   29.6.2000 Chris
243   Changed the irnode attribut 'visit' into 'visited'.
244   Added some access functions, like get/set_irn_visit etc.
245
246   28.6.2000 Chris
247   Renamed some access funtion in irgraph.*.
248   Deleted two global flags (ir_visited and block_visited) from irgraph.*.
249   Added two attributes to the irgraph struct. The visited flags belongs
250   to a ir graph, not to a whole program.
251
252   26.6.2000 Chris
253   A new optimization has been finished. The dead-node-elimination copies
254   the existing ir graph from one opstack to another. While walking the
255   graph, only the reachable nodes will be copied, so the "dead-nodes"
256   (unreachable in the controlflow) are removed.
257
258   19.6.2000 Chris
259   Solved some problems in the 'copy_node' function. The in array was not
260   as easy as it seamed.
261
262   16.6.2000 Chris
263   Wrote a new 'post' funtion, for future use in 'dead-node-elimination'
264   optimization, which is needed in the paramter list of 'irg_walk'.
265
266   14.6.2000 Chris
267   Moved 'optimze_in_place_wrapper' from iropt.* tothe new files irgopt.*.
268   New functions 'local_optimze_graph' and 'dead_node_elimination' are added,
269   but not finished.
270
271   31.5.2000 Chris
272   Removed some files from the archive, after dependencies and usage are
273   checked:
274   - 'ir/common/strerror.c'
275   was nowhere used;
276   - 'ir/ident/xx_ident.h'
277   an empty file, only included by 'ident.c', but never used;
278   - 'ir/tv/label.c' and
279   - 'ir/tv/label.h'
280   contained a numeric counter;
281   The files were included in 'tv.h' and implemented in 'tarval.c'. The two
282   functions 'tarval_label' and 'tarval_forall_labeled' were also never used.
283   In the old fiasco compiler, the label thing is used in the backend.
284   Search for 'babil' to see the usage.
285   Also removed the two attributes 'lab' and 'used' in the tarval struct.
286
287   26.5.2000 Chris
288   Moved the 'new_ir_node' constructor from ircons.* to irnode.* and fixed
289   afterwards some recursive includes, so libfirm works again.
290
291   2+3.2000 Goetz
292   Did a lot of changes, which I never commented until now (4.7.00).
293
294   * Added new result to Start node: Pointer to global data segment.
295   * Extended Semantics of SymConst node to represent information for the
296     linker.
297   * Added arithmeitc nodes (Shrs, Minus ...)
298
299   Rearranged the directory structure and adjusted the makefiles.
300   The directories contain:
301   ir:       everything for the intermediate representation (better: src?)
302     /ir:    the ir itself, and standard optimizations.
303     /tv:    the target value module
304     /tr:    the type and entity representation
305     /adt:   abstract data types
306     /common:  stuff needed by all other dirs
307     /debug: debugging Unterstuetzung
308     /ident:
309   include:  external files needen as includes
310   testprograms: examples to test the lib.
311
312   The makefiles generate files with extension .d that contain the dependencies
313   between the files.
314
315   15.2.2000 Goetz
316   Added access routine to attribute link of irnode in irnode.ch.
317   Added get_negated_pnc to irnode.ch.
318
319   14.2.2000 Goetz
320   Added an iterator in iropt that calls the optimization for all nodes.
321   Copied optimize's code to optimize_in_place and removed deallocations.
322   Made set_irn_n in irnode.c public.
323   Added Bad as possible cfg predecessor in is_cfg_node in irnode.  Bads
324   are allowded as cfgpredecessors to represent dead "incoming" control
325   flow.
326   Added call to optimize_in_place in mature_block. Is this useful?
327
328   10.2.2000 Goetz
329   Changed tests from comparing enums to comparing pointers. This is more
330   efficient (is it?) and reads better.  e.g., instead get_irn_opcode == irm_And
331   now get_irn_op == op_And
332
333   10.2.2000 Goetz
334   Compared equivalent_value to the one in the original fiasco.
335   Added a test in case iro_And.
336   Changed implementation of iro_Div. Added routines turn_into_tuple
337     and set_irn_op() in irgmod/irnode.
338   Changed implementation of irn_Minus (although commented out).
339   Now all features are ported or documented for this function.
340
341   10.2.2000 Goetz
342   Compared computed_value to the one in the original fiasco.
343   Added one further optimization in case iro_Proj.
344   Now all features are ported for this function.
345
346   9.2.2000 Goetz
347   Updated comments in ircons.h.
348
349   9.2.2000 Goetz
350   Changed possible attribute of SymConst from type_class to type.
351   SymConst size could be the size of a union, array, ...
352
353   9.2.2000 Goetz
354   Implemented two dumpers that dump type information and a graph with
355   type information.
356
357   9.2.2000 Goetz
358   Implemented a walker that walks over the type informatin that can
359   be reached from an ir node.
360   Added routine get_kind(firm_thing) in common.h, Added file common.c.
361   Added files typewalk.ch and routines to irdump.
362   Added visited flags and initialization to entity and all types.
363   Implemented some of the missing access routines in type.c, entity.c
364
365   9.2.2000 Goetz
366   Implemented constructor for ShrA.
367   Added type struct.
368   Added routine that iterates the graph and verifies all nodes.
369   Added Phi_in stack to irgraph.  This allows to build several
370     graphs at once with respect to the Phi building algorithm.
371
372   9.2.2000 Goetz
373   Implemented dumper for control flow graphs.  Changed irr_* and dead_*
374   examples to dump cfg.
375
376   8.2.2000 Goetz
377   Implemeted explicit stack for the Phi node generation.  See ircons.c.
378
379   8.2.2000 Goetz
380   added include string.h in xoprintf.c to get rid of warning:
381   implicit declaration of function `bcopy'
382
383   7.2.2000 Goetz
384   Worked on iropt.c:
385   Added more cases to equivalent_node.
386   Portet gigo, identify, identify_remember.
387   The set/pset library can not handle several hash tables.  At least,
388   compiling several procedures causes a segmentation fault during access
389   to the tables (oo_program_example).  Need to work on this.
390   transform_node still needs to be ported.
391   some cases in equivalent_node are still missing.
392
393   To get it running I had to remove the call to optimize in the
394   new_Block constructor. It can only be called when the Block is
395   mature.
396
397   7.2.2000 Goetz
398   Introduced a walker that walks only over blocks.  The asserts
399   might be too strict for general graphs, but so far it works.
400   For the walker I introduced an additional flag in the attribute
401   of Blocks, an a global block_visited variable (in irgraph.h).
402   Furhter I modularized dump_ir_node, implemented dump_ir_graph
403   with the existing walker, and added new routines to output a
404   basic block graph.
405   Changed the examples to call the new dump routine.
406
407   7.2.2000 Goetz
408   Added auxiliary routines to ir_node:
409   skip_Proj, skip_Nop, is_Bad ...
410   Changed access routines to use get_irn_n instead of explicit array
411   accesses. Changed get_irn_n to call skip_Id, so that the access routines
412   never will return Id nodes.
413
414   3.2.2000 Goetz
415   Repaired Phi computation, changed new_r_Phi_in.  Added test program to
416   test irregular controlflow.
417
418   2.2.2000 Goetz
419   Updated optimizations computed_value and equivalent_node to new
420   Syntax of FIRM nodes and to use access routines.
421   Added routine skip_Proj in irnode.
422
423   2.2.2000 Boris Boesler
424   Added files irgwalk.c and irgwalk.h. They include a simple function to
425   traverse an ir graph and execute pre and post functions to current node.
426
427   1.2.2000 Goetz
428   Added arrays with parameters and result types to the type informtion
429   of a procedure.  This is needed for the code generation.  Also added
430   the corresponding access routines.
431   Adapted the testprograms.
432
433   1.2.2000 Goetz
434   Found a bug / complication:  the call order
435     get_value   (makes Phi0, put's it into graph_arr)
436     set_value   (overwrites Phi0 in graph_arr)
437     mature_block (upgrades Phi0, puts it again into graph_arr, overwriting
438                   the proper value.)
439   fails.  Added test wether graph_arr is already set in phi_merge.
440
441   Added tons of comments to explain Phi generation -- the stack hack.
442
443
444   27.1.2000 Goetz
445   irdump now outputs the pnc_number for projs of Cmp nodes.
446   Added routine to access the pnc_string.
447
448   27.1.2000 Goetz
449   Added result "dataseg" to Start node, with all it's consequences.
450   We need this for the compiler lab to translate global variables.
451   Now they can be selected from the data segment, and the start
452   node supplies the pointer to this segment.
453   These changes are guarded by preprocessor variable UEBPRAKT in
454   common.h
455   Changed files: common.h, irgraph.ch, irnode.h
456
457   26.1.2000 Goetz
458   Testprograms:
459   removed array_example, added array-heap_example and
460   array-stack_example and adapted makefile.
461   ir_lib:
462   Entity now also allows type_method as owner. This is to model
463   the stack, Sel nodes that select a variable (array) from the
464   stack need an entity that describes what they select.  This
465   entity gets the type of the enclosing procedure as owner.
466
467   24.1.2000 Chris
468   Added future access routines in `irmode.[ch]' as comments,
469     that all attributes in the ir_mode struct can be user-defined.
470   Added access routines in `irgraph.[ch]', for all attributes.
471
472   22.1.2000 Chris
473   Moved verify routines from `irgraph.[ch]' to own files `irvrfy.[ch]'.
474   Added `irvrfy.[ch]' to MAKEFILE
475   Added "inline" before access routines in `irnode.h', that no warnings
476     will appear furthermore.
477   Added three more access routines in `irmode.[ch]':
478         struct tarval *get_min_of_mode (ir_mode *mode);
479         struct tarval *get_max_of_mode (ir_mode *mode);
480         struct tarval *get_null_of_mode (ir_mode *mode);
481
482   21.1.2000 Goetz
483   Adaption of Alloc, Sel and Entity to new types:
484     Changed array_example to use type instead of type_class.
485     Changed entity to allow all types as owner instead of
486       only type_class.  Added routine "assert_legal_owner_of_ent(type* type)".
487     Changed alloc to allow allocating variables of any type instead of
488       only type_class.
489     Adapted all testprograms to avoid warnings.
490
491   removed dtest ... from Makefile, replaced by test.
492
493   20.1.2000 Goetz
494   Added "run" to makefile, added array_example to makefile of testprograms.
495   Corrected testprogram array
496   Changed assert in irvrfy -- Conv.
497   Started Change log.
498   Started TODO log.