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