Estimated hours taken: 6
Branches: main
Fix a performance bug where dead_pred_elim was taking a significant
amount of time to delete entries from the predicate_table. With this
change dead_pred_elim goes from 12 minutes to 55 seconds CPU time in
the IL grade when compiling accumulator.m with
--intermodule-optimization turned on.
compiler/hlds_module.m:
Implement a new predicate, predicate_table_restrict, which
restricts the predicate_table to include only a subset of the
predicates.
Rather than deleting all the non-needed entries, this
predicate builds the predicate_table from scratch again, hence
this predicate is only useful when the number of predicates to
keep is significantly less than the number of predicates to
delete.
Change predicate_table_do_insert so that it records in the
pred_info whether or not a predicate can only be accessed by
its fully qualified name, this is needed so that the
predicate_table can be rebuilt correctly.
compiler/dead_proc_elim.m:
Use predicate_table_restrict to restrict the set of pred_ids
in the predicate_table rather than module_info_remove_predicate
as the amount of predicates to keep is in general
significantly smaller than the number of predicates to keep.
compiler/hlds_pred.m:
Add a new pred_marker which indicates whether or not a
predicate can only be accessed by its fully qualified name.
compiler/hlds_out.m:
compiler/intermod.m:
Handle the new pred_marker.
Estimated hours taken: 2
compiler/globals.m:
compiler/mode_errors.m:
compiler/mode_info.m:
compiler/transform_llds.m:
compiler/vn_order.m:
compiler/vn_verify.m:
samples/diff/globals.m:
Add missing `import_module' statements in the interface section.
(The current version of the compiler doesn't detect these errors.
I have a fix for that bug, but I plan to commit it separately.)
Estimated hours taken: 0.25
samples/diff/Mmakefile:
Fix a bug: it was passing `-O0' in MGNUCFLAGS, rather than CFLAGS.
This broke things if you tried to pass an mgnuc option such as
`--inline-alloc' in EXTRA_MGNUCFLAGS on the command-line.
Estimated hours taken: 30
Modified files
--------------
samples/diff/Mmakefile:
Minor documentation update.
samples/diff/README:
samples/diff/TODO:
Update stuff that's now done, do a couple of minor wording
changes.
samples/diff/diff.m:
Fix case of identical filenames (which implicitly assumed
no_diff_implies_no_output). Add new match pass, call the
new diff algorithm.
samples/diff/diff_out.m:
Add --cvs-merge-conflict output style. Slight reorganisation
of top-level predicate. Lots of small fixes to use better
syntax (e.g. functional style for integer maths operations).
samples/diff/difftype.m:
Added first_mentioned_positions/3, last_mentioned_positions/3,
add_edit/4.
samples/diff/file.m:
Use io__read_line_as_string.
samples/diff/filter.m:
Minor syntax/wording changes.
samples/diff/options.m:
Update all the newly handled options.
New files
---------
samples/diff/myers.m:
New diff algorithm.
samples/diff/match.m:
New pass to match common lines in the files to be diffed.
Removed file
------------
samples/diff/lcss.m:
Functionality replaced by myers.m.
Estimated hours taken: 30
Modified files
--------------
samples/diff/README:
Info about this new version. Put the existing READMEs in
reverse order, so that they'll be in the most sensible order
for someone reading top-down.
samples/diff/Mmakefile:
Supply more detail about which bit of this program GCC 2.7.2
under Digital Unix 3.2 doesn't compile properly.
samples/diff/diff.m:
Slight reorganisation. Accept options, remove some high
coupling betweem diff__do_diff and lcss.m.
samples/diff/file.m:
Add support for attaching a filename to a file.
samples/diff/lcss.m:
Add more documentation, one slight performance improvement.
lcss__to_diff now works on the reversed LCSS, to avoid going
to the trouble of reversing it.
New files
---------
samples/diff/TODO:
Meaning should be obvious.
samples/diff/diff_out.m:
Replacement for diffs.m (which was never a very good name).
Now contains code to display a diff in lots more output
styles than previously supported.
samples/diff/difftype.m:
Replacement for lcsstype.m. Contains the type of a diff (but
not of an lcss, which is now local to lcss.m, hence the
renaming).
samples/diff/filter.m:
Contains code to filter a diff before being displayed. This
is only required if the user specified that they didn't want
to see part of the diff (e.g. with --ignore-blank-lines).
samples/diff/globals.m:
samples/diff/options.m:
Support for option handling.
Removed files
-------------
samples/diff/diffs.m:
Functionality moved to diff_out.m.
samples/diff/lcsstype.m:
Functionality moved to difftype.m.
Estimated hours taken: 0.05
Minor documentation fix.
samples/diff/README:
It was, of course, not the fix which caused diff to bomb out,
it was the problem solved by the fix.
Estimated hours taken: 4
General cleanup and bug fix for diff. Features of this diff:
- Changed indenting so it more closely matches the
coding standard.
- Bug fix which was causing it to bomb out if the two
files were identical.
- Update to use unique arrays (array.m).
samples/diff/README:
Added something which resembles this log message.
samples/diff/Mmakefile:
Turned C optimisation off to get around a gcc 2.7.2 bug.
samples/diff/diff.m:
samples/diff/diffs.m:
samples/diff/file.m:
samples/diff/lcss.m:
samples/diff/lcsstype.m:
Changes detailed above.
Estimated hours taken: 0.25
samples/diff/lcss.m:
Fix a couple of singleton variable warnings by prepending `_'
to the name of a couple of unused variable.
Estimated hours taken: 0.5
Rename all the `Mmake' files as `Mmakefile'. This is necessary to
avoid confusion between `Mmake' and `mmake' on case-insensitive file
systems.
Estimated hours taken: 0.5
samples/diff:
Committed the changes sent by Marnix Klooster <marnix@worldonline.nl>.
His description of the changes:
The major changes I made were
* Moved code for manipulating and displaying diffs to a separate
module called diffs.m (and changed their calls in diff.m). The type
'lcss,' needed both by the rest of lcss.m and by diffs.m, was moved
to a new module lcsstype.m.
* Made lcss.m independent of files, and allowed it to process any kind
of list by adding polymorphism. (The file processing calls have
been moved to diff.m.)
* Added type synonyms 'pos' and 'segment' in diffs.m to clarify the
types. Renamed 'single_diff' to 'edit'.
* Added end-of-file match to the generated lcss, thereby allowing the
to_diff predicate to be simplified considerably.
* Numbered lists from 0 internally in the lcss-algorithm. This made
to_diff simpler still, but also forced changes in the diff-printing
part.
* Removed the swapping in find_lcss, because it doesn't seem to help.
* The array(string) representing a file in file.m was also renumbered
to begin with 0.
* Added and corrected comments.
Have fun,
<><
Marnix
--
Marnix Klooster
marnix@worldonline.nl