Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/trunk/HISTORY
ViewVC logotype

Diff of /sml/trunk/HISTORY

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1148, Fri Mar 15 21:38:57 2002 UTC revision 1335, Tue May 27 21:54:23 2003 UTC
# Line 13  Line 13 
13  Description:  Description:
14    
15  ----------------------------------------------------------------------  ----------------------------------------------------------------------
16    Name: Matthias Blume (blume@tti-c.org)
17    Date: 2003/05/27 16:55:00 CDT
18    Tag: blume-20030527-polyeq
19    Description:
20    
21    Tried to eliminated most cases of polymorphic equality.
22    
23    ----------------------------------------------------------------------
24    Name: Matthias Blume (blume@tti-c.org)
25    Date: 2003/05/21 17:45:00 CDT
26    Tag: blume-20030517-complete
27    Description:
28    
29    Two changes:
30    
31      1. Added a flag for controlling whether non-exhaustive bindings will
32         be treated as errors (default is false).
33      2. Cleaned up the *entire* source tree so that CMB.make goes through
34         without a single non-exhaustive match- or bind warning.
35    
36    ----------------------------------------------------------------------
37    Name: Matthias Blume (blume@tti-c.org)
38    Date: 2003/05/17 10:20:00 CDT
39    Tag: blume-20030517-absyn
40    Description:
41    
42    1. Added cases for IF, WHILE, ANDALSO, and ORELSE to Absyn.
43    
44       This mainly affects the quality of error messages.  However, some
45       of the code is now more straightforward than before. (Treatment of
46       the above four constructs in translate.sml is much simpler than
47       the "macro-expansion" that was going on before.  Plus, the mach-
48       compiler no longer gets invoked just to be able to compile an
49       if-expression.)
50    
51    2. The ErrorMsg.Error exception is now caught and absorbed by the
52       interactive loop.
53    
54    ----------------------------------------------------------------------
55    Name: Allen Leung
56    Date: 2003/05/16 13:05:00 CDT
57    Tag: leunga-20030516-cygwin-runtime
58    Description:
59    
60        Ported the runtime system to cygwin, which uses the unix
61    x86-unix bin files.  Missing/buggy features:
62    
63       o getnetbyname, getnetbyaddr: these functions seem to be missing in
64         the Cygwin library.
65       o Ctrl-C handling may be flaky.
66       o Windows system calls and Windows I/O are not supported.
67    
68       A new set of binfiles is located at:
69    
70         http://www.dorsai.org/~leunga/boot.x86-unix.tgz
71    
72       This is only needed for bootstrapping the cygwin version of smlnj.
73       Other x86 versions can use the existing binfiles.
74    
75    ----------------------------------------------------------------------
76    Name: Matthias Blume
77    Date: 2003/04/08 15:42:00 CDT
78    Tag: blume-20030408-listpair
79    Description:
80    
81    1. Added a target 'mlrisc' to installer.
82    
83    2. Added missing elements to structure ListPair.
84    
85    ----------------------------------------------------------------------
86    Name: Allen Leung
87    Date: 2003/01/07 10:40:00 EST
88    Tag: leunga-20030107-int-rem
89    Description:
90    
91    Fixed a bug in Int.rem(x,y) where y is a power of 2 on x86.
92    The arguments to the SUBL instruction were swapped.
93    
94    ----------------------------------------------------------------------
95    Name: Matthias Blume
96    Date: 2002/12/12 16:25:00 EST
97    Tag: blume-20021212-risc-ra
98    Description:
99    
100    Fixed a serious bug in the rewrite code for FP spilling/reloading that
101    sent the RA into an infinite loop when floating point registers get
102    spilled.  (Because of this bug, e.g., nucleic stopped compiling between
103    110.37 and 110.38.)
104    There was another set of potential problems related to the handling of
105    MLRISC annotations (but those did not yet cause real problems, apparently).
106    
107    ----------------------------------------------------------------------
108    Name: Matthias Blume
109    Date: 2002/12/06 22:40:00 EST
110    Tag: blume-20021206-cm-fileid
111    Description:
112    
113    Added a call of SrcPath.sync at the beginning of Parse.parse (in CM).
114    This fixes the problem of CM getting confused by files that suddenly
115    change their identity (e.g., by getting unlinked and recreated by some
116    text editor such as vi).  There might be a better/cheaper/cleaner way
117    of doing this, but for now this will have to do.
118    
119    ----------------------------------------------------------------------
120    Name: Matthias Blume
121    Date: 2002/10/28 09:50:00 EST
122    Tag: blume-20021028-typecheck
123    Description:
124    
125    Exported structure Typecheck from $smlnj/viscomp/core.cm.
126    
127    ----------------------------------------------------------------------
128    Name: Matthias Blume
129    Date: 2002/10/17 09:10:00 EDT
130    Tag: Release_110_42
131    Description:
132    
133    In good old tradition, there has been a slight hiccup so that we have
134    to patch 110.42 after the fact.   The old release tag has been replaced
135    (see below).
136    
137    The change solves a problem with two competing approaches the
138    configuration problem regarding MacOS 10.1 vs. MacOS 10.2 which got in
139    each other's way.
140    
141    This change only affects the runtime system code and the installer script.
142    (No new bootfiles.)
143    
144    ----------------------------------------------------------------------
145    Name: Matthias Blume
146    Date: 2002/10/16 12:00:00 EDT
147    Tag: Release_110_42_removed
148    Description:
149    
150    New working release.  New bootfiles.
151    
152    ----------------------------------------------------------------------
153    Name: Matthias Blume
154    Date: 2002/10/10 13:10:00 EDT
155    Tag: blume-20021010-ppc-divs
156    Description:
157    
158    The mltree operator DIVS must be implemented with an overflow check on
159    the PPC because the hardware indicates divide-by-zero using "overflow" as
160    well.
161    
162    ----------------------------------------------------------------------
163    Name: Matthias Blume
164    Date: 2002/07/23 11:45:00
165    Tag: blume-20020723-smlnj-home
166    Description:
167    
168    Sml now senses the SMLNJ_HOME environment variable.  If this is set,
169    then the bin dir is assumed to be in $SMLNJ_HOME/bin and (unless
170    CM_PATHCONFIG is also set), the path configuration file is assumed
171    to be in $SMLNJ_HOME/lib/pathconfig.  This way one can easily move
172    the entire tree to some other place and everything will "just work".
173    
174    (Companion commands such as ml-build and ml-makedepend also sense this
175    variable.)
176    
177    ----------------------------------------------------------------------
178    Name: Matthias Blume
179    Date: 2002/07/12 21:19:00 EDT
180    Tag: blume-20020712-liveness
181    Description:
182    
183    Exported two useful "step" functions from liveness module (MLRISC).
184    
185    ----------------------------------------------------------------------
186    Name: Matthias Blume
187    Date: 2002/07/05 16:00 EDT
188    Tag: Release_110_41
189    Description:
190    
191    New working release.  New bootfiles.
192    
193    ----------------------------------------------------------------------
194    Name: Matthias Blume
195    Date: 2002/07/05 10:25:00 EDT
196    Tag: blume-20020705-btimp
197    Description:
198    
199    Exported structure BTImp from $smlnj/viscomp/debugprof.cm so that
200    other clients can set up backtracing support.
201    
202    ----------------------------------------------------------------------
203    Name: Matthias Blume
204    Date: 2002/06/25 17:23:00 EDT
205    Tag: blume-20020625-fpmax
206    Description:
207    
208    Fixed a bug in translation of INLMAX (and INLMIN) for the floating-point
209    case.  (The sense of the isNaN test was reversed -- which made min and
210    max always return their first argument.)
211    
212    ----------------------------------------------------------------------
213    Name: Matthias Blume
214    Date: 2002/06/11
215    Tag: blume-20020611-unixpath
216    Description:
217    
218    Back-ported OS.Path.{from,to}UnixPath from idlbasis-devel branch.
219    
220    ----------------------------------------------------------------------
221    Name: Matthias Blume
222    Date: 2002/06/10 16:35:00 EDT
223    Tag: blume-20020610-ieeereal
224    Description:
225    
226    I back-ported my implementation of IEEEReal.fromString from the
227    idlbasis-devel branch so that we can test it.
228    
229    Another small change is that ppDec tries to give more information
230    than just "<sig>" in the case of functors.  However, this code is
231    broken in some mysterious way if the functor's body's signature
232    has not been declared by ascription but gets inferred from the
233    implementation.  This needs fixing...
234    
235    ----------------------------------------------------------------------
236    Name: Matthias Blume
237    Date: 2002/05/31
238    Tag: blume-20020531-btrace-mode
239    Description:
240    
241    Resurrected SMLofNJ.Internals.BTrace.mode.  (It accidentally fell by
242    the wayside when I switched over to using Controls everywhere.)
243    
244    ----------------------------------------------------------------------
245    Name: Lal George
246    Date: 2002/05/23 12:21:40 EDT
247    Tag: george-20020523-visual-labels
248    Description:
249    
250    Labels are now displayed in the graphical output to make
251    the fall-through and target blocks obvious.
252    
253    ----------------------------------------------------------------------
254    Name: Matthias Blume
255    Date: 2002/05/22 11:03:00 EDT
256    Tag: blume-20020522-shrink
257    Description:
258    
259    John tweaked yesterday's fix for 1131 to handle an out-of-memory
260    situation that comes up when allocating huge arrays.
261    
262    ----------------------------------------------------------------------
263    Name: Matthias Blume
264    Date: 2002/05/21 16:00:00 EDT
265    Tag: Release_110_40
266    Description:
267    
268    New working release (110.40).  New bootfiles.
269    
270    [Also: John Reppy fixed GC bug 1131.]
271    
272    ----------------------------------------------------------------------
273    Name: Matthias Blume
274    Date: 2002/05/21 12:35:00 EDT
275    Tag: blume-20020521-cmdoc
276    Description:
277    
278    CM documentation update.
279    
280    ----------------------------------------------------------------------
281    Name: Matthias Blume
282    Date: 2002/05/21 10:55:00 EDT
283    Tag: blume-20020521-misc
284    Description:
285    
286    - John tweaked runtime to be silent on heap export (except when
287      GC messages are on).
288    - I added a few more things (cross-compiling versions of CMB) to
289      config/preloads (as suggestions).
290    
291    ----------------------------------------------------------------------
292    Name: Matthias Blume
293    Date: 2002/05/20 22:25:00 EDT
294    Tag: blume-20020520-controls
295    Description:
296    
297    - Added ControlUtil structure to control-lib.cm.
298    - Use it throughout.
299    - Used Controls facility to define MLRISC controls (as opposed to
300      registering MLRISC control ref cells with Controls after the fact)
301    - Fixed messed-up controls priorities.
302    
303    * Removed again all the stuff from config/preloads that one wouldn't
304      be able to preload at the time the initial heap image is built.
305      (Many libraries, e.g., CML, do not exist yet at this time.  The
306       only libraries that can be preloaded via config/preloads are those
307       that come bundled with the bootfiles.)
308    
309    ----------------------------------------------------------------------
310    Name: Matthias Blume
311    Date: 2002/05/20 10:59:00 EDT
312    Tag: blume-20020520-preloads
313    Description:
314    
315    Added a lot of commented-out suggestions for things to be included
316    in config/preloads.
317    
318    ----------------------------------------------------------------------
319    Name: Allen Leung
320    Date: 2002/05/18 14:20:00 EDT
321    Tag: leunga-20020518-mdl
322    Description:
323    
324    o Made the mdl tool stuff compile and run again.
325    o I've disabled all the stuff that depends on RTL specifications; they
326      are all badly broken anyway.
327    
328    ----------------------------------------------------------------------
329    Name: Matthias Blume
330    Date: 2002/05/17 16:49:00 EDT
331    Tag: blume-20020517-controls
332    Description:
333    
334    0. John Reppy made several modifications to the SML/NJ library.
335       In particular, there is a shiny new controls-lib.cm.
336    
337    1. Pushed new controls interface through compiler so that everything
338       compiles again.
339    
340    2. Added FormatComb and FORMAT_COMB to the CML version of the
341       SML/NJ library (so that CML compiles again).
342    
343    3. Modified init scripts because XXX_DEFAULT environment variables
344       are no longer with us.  (Boot-time initialization is now done
345       using the same environment variables that are also used for
346       startup-time initialization of controls.)
347    
348    ----------------------------------------------------------------------
349    Name: Lal George
350    Date: 2002/05/15 09:20:10 EDT
351    Tag: george-20020515-pseudo-op-decls
352    Description:
353    
354            All pseudo-ops emitted before the first segment declaration
355    such as TEXT, DATA, and BSS directives are assumed to be global
356    declarations and are emitted first in the assembly file. This is
357    useful in a number of situations where one has pseudo-ops that are not
358    specific to any segment, and also works around the constraint that one
359    cannot have client pseudo-ops in the TEXT segment.
360    
361            Because no segment is associated with these declarations it is
362    an error to allocate any space or objects before the first segment
363    directive and an exception will be raised. However, we cannot make
364    this check for client pseudo-ops.
365    
366            These top level declarations are a field in the CFG graph_info.
367    In theory you can continue to add to this field after the CFG has been
368    built -- provided you know what you are doing;-)
369    
370    ----------------------------------------------------------------------
371    Name: Matthias Blume
372    Date: 2002/05/13 16:40:00 EDT
373    Tag: blume-20020513-pp-etc
374    Description:
375    
376    A few minor bugfixes:
377    
378      - Stopgap measure for bug recently reported by Elsa Gunter (ppDec).
379        (Bogus printouts for redefined bindings still occur.  Compiler
380        bug should no longer occur now.  We need to redo the prettyprinter
381        from scratch.)
382    
383      - CM pathname printer now also adds escape sequences for ( and )
384    
385      - commend and docu fixes for ml-nlffi
386    
387    ----------------------------------------------------------------------
388    Name: Matthias Blume
389    Date: 2002/05/10 16:40:00 EDT
390    Tag: blume-20020510-erg-textio
391    Description:
392    
393    Applied the following bugfix provided by Emden Gansner:
394    
395        Output is corrupted when outputSubstr is used rather than output.
396    
397        The problem occurs when a substring
398    
399            ss = (s, dataStart, dataLen)
400    
401        where dataStart > 0, fills a stream buffer with avail bytes left.
402        avail bytes of s, starting at index dataStart, are copied into the
403        buffer, the buffer is flushed, and then the remaining dataLen-avail
404        bytes of ss are copied into the beginning of the buffer. Instead of
405        starting this copy at index dataStart+avail in s, the current code
406        starts the copy at index avail.
407    
408        Fix:
409        In text-io-fn.sml, change line 695 from
410             val needsFlush = copyVec(v, avail, dataLen-avail, buf, 0)
411        to
412             val needsFlush = copyVec(v, dataStart+avail, dataLen-avail, buf, 0)
413    
414    ----------------------------------------------------------------------
415    Name: Matthias Blume
416    Date: 2002/04/12 13:55:00 EDT
417    Tag: blume-20020412-assyntax
418    Description:
419    
420    1. Grabbed newer assyntax.h from the XFree86 project.
421    2. Fiddled with how to compile X86.prim.asm without warnings.
422    3. (Very) Minor cleanup in CM.
423    
424    ----------------------------------------------------------------------
425    Name: Matthias Blume
426    Date: 2002/04/01 (no joke!) 17:07:00 EST
427    Tag: blume-20020401-x86div
428    Description:
429    
430    Added full support for div/mod/rem/quot on the x86, using the machine
431    instruction's two results (without clumsily recomputing the remainder)
432    directly where appropriate.
433    
434    Some more extensive power-of-two support was added to the x86 instruction
435    selector (avoiding expensive divs, mods, and muls where they can be
436    replaced with cheaper shifts and masks).  However, this sort of thing
437    ought to be done earlier, e.g., within the CPS optimizer so that
438    all architectures benefit from it.
439    
440    The compiler compiles to a fixed point, but changes might be somewhat
441    fragile nevertheless.  Please, report any strange things that you might
442    see wrt. div/mod/quot/rem...
443    
444    ----------------------------------------------------------------------
445    Name: Matthias Blume
446    Date: 2002/03/29 17:22:00
447    Tag: blume-20020329-div
448    Description:
449    
450    Fixed my broken div/mod logic.  Unfortunately, this means that the
451    inline code for div/mod now has one more comparison than before.
452    Fast paths (quotient > 0 or remainder = 0) are not affected, though.
453    The problem was with quotient = 0, because that alone does not tell
454    us which way the rounding went.  One then has to look at whether
455    remainder and divisor have the same sign...  :(
456    
457    Anyway, I replaced the bootfiles with fresh ones...
458    
459    ----------------------------------------------------------------------
460    Name: Matthias Blume
461    Date: 2002/03/29 14:10:00 EST
462    Tag: blume-20020329-inlprims
463    Description:
464    
465    NEW BOOTFILES!!!    Version number bumped to 110.39.3.
466    
467    Primops have changed. This means that the bin/boot-file formats have
468    changed as well.
469    
470    To make sure that there is no confusion, I made a new version.
471    
472    
473    CHANGES:
474    
475    * removed REMT from mltree (remainder should never overflow).
476    
477    * added primops to deal with divisions of all flavors to the frontend
478    
479    * handled these primops all the way through so they map to their respective
480      MLRISC support
481    
482    * used these primops in the implementation of Int, Int32, Word, Word32
483    
484    * removed INLDIV, INLMOD, and INLREM as they are no longer necessary
485    
486    * parameterized INLMIN, INLMAX, and INLABS by a numkind
487    
488    * translate.sml now deals with all flavors of INL{MIN,MAX,ABS}, including
489      floating point
490    
491    * used INL{MIN,MAX,ABS} in the implementation of Int, Int32, Word, Word32,
492      and Real (but Real.abs maps to a separate floating-point-only primop)
493    
494    
495    TODO items:
496    
497    * Hacked Alpha32 instruction selection, disabling the selection of REMx
498      instructions because the machine instruction encoder cannot handle
499      them.  (Hppa, PPC, and Sparc instruction selection did not handle
500      REM in the first place, and REM is supported by the x86 machine coder.)
501    
502    * Handle DIV and MOD with DIV_TO_NEGINF directly in the x86 instruction
503      selection phase.  (The two can be streamlined because the hardware
504      delivers both quotient and remainder at the same time anyway.)
505    
506    * Think about what to do with "valOf(Int32.minInt) div ~1" and friends.
507      (Currently the behavior is inconsistent both across architectures and
508      wrt. the draft Basis spec.)
509    
510    * Word8 should eventually be handled natively, too.
511    
512    * There seems to be one serious bug in mltree-gen.sml.  It appears, though,
513      as if there currently is no execution path that could trigger it in
514      SML/NJ.  (The assumptions underlying functions arith and promotable do not
515      hold for things like multiplication and division.)
516    
517    ----------------------------------------------------------------------
518    Name: Matthias Blume
519    Date: 2002/03/27 16:27:00 EST
520    Tag: blume-20020327-mlrisc-divisions
521    Description:
522    
523    Added support for all four division operations (ML's div, mod, quot,
524    and rem) to MLRISC.  In the course of doing so, I also rationalized
525    the naming (no more annoying switch-around of DIV and QUOT), by
526    parameterizing the operation by div_rounding_mode (which can be either
527    DIV_TO_ZERO or DIV_TO_NEGINF).
528    
529    The generic MLTreeGen functor takes care of compiling all four
530    operations down to only round-to-zero div.
531    
532    Missing pieces:
533    
534      * Doing something smarter than relying on MLTreeGen on architectures
535        like, e.g., the x86 where hardware division delivers both quotient and
536        remainder at the same time.  With this, the implementation of the
537        round-to-neginf operations could be further streamlined.
538    
539      * Remove inlining support for div/mod/rem from the frontend and replace it
540        with primops that get carried through to the backend.  Do this for all
541        int and word types.
542    
543    ----------------------------------------------------------------------
544    Name: Matthias Blume
545    Date: 2002/03/25 17:25:00 EST
546    Tag: blume-20020325-divmod
547    Description:
548    
549    I improved (hopefully without breaking them) the implementation of Int.div,
550    Int.mod, and Int.rem.   For this, the code in translate.sml now takes
551    advantage of the following observations:
552    
553      Let  q = x quot y      r = x rem y
554           d = x div  y      m = x mod y
555    
556    where "quot" is the round-to-zero version of integer division that
557    hardware usually provides.  Then we have:
558    
559         r = x - q * y        where neither the * nor the - will overflow
560         d = if q >= 0 orelse x = q * y then q else q - 1
561                              where neither the * nor the - will overflow
562         m = if q >= 0 orelse r = 0 then r else r + y
563                              where the + will not overflow
564    
565    This results in substantial simplification of the generated code.
566    The following table shows the number of CFG nodes and edges generated
567    for
568            fun f (x, y) = x OPER y
569            (* with OPER \in div, mod, quot, rem *)
570    
571    
572        OPER | nodes(old) | edges(old) | nodes(new) | edges(new)
573        --------------------------------------------------------
574         div |         24 |         39 |         12 |         16
575         mod |         41 |         71 |         12 |         16
576        quot |          8 |         10 |          8 |         10
577         rem |         10 |         14 |          8 |         10
578    
579    
580    ----------------------------------------------------------------------
581    Name: Matthias Blume
582    Date: 2002/03/25 22:06:00 EST
583    Tag: blume-20020325-cprotobug
584    Description:
585    
586    Fixed a bug in cproto (c prototype decoder).
587    
588    ----------------------------------------------------------------------
589    Name: Matthias Blume
590    Date: 2002/03/25 16:00:00 EST
591    Tag: blume-20020325-raw-primops
592    Description:
593    
594    I did some cleanup to Allen's new primop code and
595    replaced yesterday's bootfiles with new ones.
596    (But they are stored in the same place.)
597    
598    ----------------------------------------------------------------------
599    Name: Matthias Blume
600    Date: 2002/03/24 22:40:00 EST
601    Tag: blume-20020324-bootfiles
602    Description:
603    
604    Made the bootfiles that Allen asked for.
605    
606    ----------------------------------------------------------------------
607    Name: Allen Leung
608    Date: 2002/03/23 15:50:00 EST
609    Tag: leunga-20020323-flint-cps-rcc-primops
610    Description:
611    
612      1. Changes to FLINT primops:
613    
614        (* make a call to a C-function;
615         * The primop carries C function prototype information and specifies
616         * which of its (ML-) arguments are floating point. C prototype
617         * information is for use by the backend, ML information is for
618         * use by the CPS converter. *)
619      | RAW_CCALL of { c_proto: CTypes.c_proto,
620                       ml_args: ccall_type list,
621                       ml_res_opt: ccall_type option,
622                       reentrant : bool
623                     } option
624       (* Allocate uninitialized storage on the heap.
625        * The record is meant to hold short-lived C objects, i.e., they
626        * are not ML pointers.  With the tag, the representation is
627        * the same as RECORD with tag tag_raw32 (sz=4), or tag_fblock (sz=8)
628        *)
629      | RAW_RECORD of {tag:bool,sz:int}
630      and ccall_type = CCALL_INT32 | CCALL_REAL64 | CCALL_ML_PTR
631    
632      2.  These CPS primops are now overloaded:
633    
634           rawload of {kind:numkind}
635           rawstore of {kind:numkind}
636    
637          The one argument form is:
638    
639             rawload {kind} address
640    
641          The two argument form is:
642    
643             rawload {kind} [ml object, byte-offset]
644    
645      3. RAW_CCALL/RCC now takes two extra arguments:
646    
647         a. The first is whether the C call is reentrant, i.e., whether
648            ML state should be saved and restored.
649         b. The second argument is a string argument specifying the name of
650            library and the C function.
651    
652         These things are currently not handled in the code generator, yet.
653    
654      4. In CProto,
655    
656         An encoding type of "bool" means "ml object" and is mapped into
657         C prototype of PTR.  Note that "bool" is different than "string",
658         even though "string" is also mapped into PTR, because "bool"
659         is assigned an CPS type of BOGt, while "string" is assigned INT32t.
660    
661      5. Pickler/unpicker
662    
663         Changed to handle RAW_RECORD and newest RAW_CCALL
664    
665      6. MLRiscGen,
666    
667         1. Changed to handle the new rawload/rawstore/rawrecord operators.
668         2. Code for handling C Calls has been moved to a new module CPSCCalls,
669            in the file CodeGen/cpscompile/cps-c-calls.sml
670    
671      7. Added the conditional move operator
672    
673             condmove of branch
674    
675         to cps.  Generation of this is still buggy so it is currently
676         disabled.
677    
678    ----------------------------------------------------------------------
679    Name: Lal George
680    Date: 2002/03/22 14:18:25 EST
681    Tag: george-20020322-cps-branch-prob
682    Description:
683    
684    Implemented the Ball-Larus branch prediction-heuristics, and
685    incorporated graphical viewers for control flow graphs.
686    
687    Ball-Larus Heuristics:
688    ---------------------
689    See the file compiler/CodeGen/cpscompile/cpsBranchProb.sml.
690    
691    By design it uses the Dempster-Shafer theory for combining
692    probabilities.  For example, in the function:
693    
694        fun f(n,acc) = if n = 0 then acc else f(n-1, n*acc)
695    
696    the ball-larus heuristics predicts that the n=0 is unlikely
697    (OH-heuristic), and the 'then' branch is unlikely because of the
698    RH-heuristic -- giving the 'then' branch an even lower combined
699    probability using the Dempster-Shafer theory.
700    
701    Finally, John Reppy's loop analysis in MLRISC, further lowers the
702    probability of the 'then' branch because of the loop in the else
703    branch.
704    
705    
706    Graphical Viewing:
707    ------------------
708    I merely plugged in Allen's graphical viewers into the compiler. The
709    additional code is not much. At the top level, saying:
710    
711            Control.MLRISC.getFlag "cfg-graphical-view" := true;
712    
713    will display the graphical view of the control flow graph just before
714    back-patching.  daVinci must be in your path for this to work. If
715    daVinci is not available, then the default viewer can be changed
716    using:
717    
718            Control.MLRISC.getString "viewer"
719    
720    which can be set to "dot" or "vcg" for the corresponding viewers. Of
721    course, these viewers must be in your path.
722    
723    The above will display the compilation unit at the level of clusters,
724    many of which are small, boring, and un-interesting. Also setting:
725    
726            Control.MLRISC.getInt "cfg-graphical-view_size"
727    
728    will display clusters that are larger than the value set by the above.
729    
730    
731    ----------------------------------------------------------------------
732    Name: Matthias Blume
733    Date: 2002/03/21 22:20:00 EST
734    Tag: blume-20020321-kmp-bugfix
735    Description:
736    
737    Changed the interface to the KMP routine in PreString and fixed
738    a minor bug in one place where it was used.
739    
740    ----------------------------------------------------------------------
741    Name: Allen Leung
742    Date: 2002/03/21 20:30:00 EST
743    Tag: leunga-20020321-cfg
744    Description:
745    
746      Fixed a potential problem in cfg edge splitting.
747    
748    ----------------------------------------------------------------------
749    Name: Allen Leung
750    Date: 2002/03/21 17:15:00 EST
751    Tag: leunga-20020321-x86-fp-cfg
752    Description:
753    
754      1. Recoded the buggy parts of x86-fp.
755    
756         a. All the block reordering code has been removed.
757            We now depend on the block placement phases to do this work.
758    
759         b. Critical edge splitting code has been simplified and moved into the
760            CFG modules, as where they belong.
761    
762         Both of these were quite buggy and complex.  The code is now much, much
763         simpler.
764    
765      2. X86 backend.
766    
767         a. Added instructions for 64-bit support.  Instruction selection for
768            64-bit has not been committed, however, since that
769            requires changes to MLTREE which haven't been approved by
770            Lal and John.
771    
772         b. Added support for FUCOMI and FUCOMIP when generating code for
773            PentiumPro and above.  We only generate these instructions in
774            the fast-fp mode.
775    
776         c. Added cases for JP and JNP in X86FreqProps.
777    
778      3. CFG
779    
780         CFG now has a bunch of methods for edge splitting and merging.
781    
782      4. Machine description.
783    
784         John's simplification of MLTREE_BASIS.fcond broke a few machine
785         description things:
786    
787         rtl-build.{sig,sml} and hppa.mdl fixed.
788    
789         NOTE: the machine description stuff in the repository is still broken.
790               Again, I can't put my fixes in because that involves
791               changes to MLTREE.
792    
793    ----------------------------------------------------------------------
794    Name: Matthias Blume
795    Date: 2002/03/20 15:55:00 EST
796    Tag: blume-20020320-kmp
797    Description:
798    
799    Implemented Knuth-Morris-Pratt string matching in PreString and used
800    it for String.isSubstring, Substring.isSubstring, and
801    Substring.position.
802    
803    (Might need some stress-testing.  Simple examples worked fine.)
804    
805    ----------------------------------------------------------------------
806    Name: Matthias Blume
807    Date: 2002/03/19 16:37:00 EST
808    Tag: blume-20020319-witnesses
809    Description:
810    
811    Added a structure C.W and functions convert/Ptr.convert to ml-nlffi-lib.
812    
813    This implements a generic mechanism for changing constness qualifiers
814    anywhere within big C types without resorting to outright "casts".
815    (So far, functions such as C.rw/C.ro or C.Ptr.rw/C.Ptr.ro only let you
816    modify the constness at the outermost level.)
817    The implementation of "convert" is based on the idea of "witness"
818    values -- values that are not used by the operation but whose types
819    "testify" to their applicability.  On the implementation side, "convert"
820    is simply a projection (returning its second curried argument).  With
821    cross-module inlining, it should not result in any machine code being
822    generated.
823    
824    ----------------------------------------------------------------------
825  Name: Matthias Blume  Name: Matthias Blume
826  Date: 2002/03/15 16:40:00 EST  Date: 2002/03/15 16:40:00 EST
827  Tag: blume-20020315-basis  Tag: blume-20020315-basis

Legend:
Removed from v.1148  
changed lines
  Added in v.1335

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0