Commit Graph

48 Commits

Author SHA1 Message Date
Fergus Henderson
befb329aaf Add type information to the array_index operator.
Estimated hours taken: 8
Branches: main

Add type information to the array_index operator.
This is needed for both the GCC back-end and the IL back-end.

compiler/builtin_ops.m:
	In the array_index constructor for the unary_op type,
	add the array element type as a field.

compiler/ml_string_switch.m:
compiler/string_switch.m:
compiler/mlds_to_java.m:
	When generating array_index operators, generate the new field.

compiler/bytecode.m:
compiler/llds.m:
compiler/llds_out.m:
compiler/mlds_to_c.m:
compiler/mlds_to_java.m:
	When consuming array_index operators, ignore the new field.

compiler/mlds_to_gcc.m:
	When consuming array_index operators, use the array element type,
	rather than wrongly assuming the element type is always 'MR_Integer'.

compiler/mlds_to_il.m:
	Add code to handle the array_index operator,
	rather than calling `throw_unimplemented'.

compiler/bytecode.m:
	Delete the reverse mode of binop_code.  This was not used,
	it was just there to get the compiler to check that we didn't
	map two different binary operators to the same code.  This
	mode no longer works, since we map array_index operators to
	the same code regardless of the the array element type.

compiler/rtti_to_mlds.m:
compiler/ml_string_switch.m:
compiler/ml_code_util.m:
	To avoid code duplication, move ml_string_type, which was defined in
	both rtti_to_mlds.m and ml_string_switch.m, into ml_code_util.m.

compiler/ml_string_switch.m:
	Minor changes to avoid some code duplication.

compiler/mlds_to_java.m:
	Fix a bug where it was using the wrong type for the `args' variable.
	Add an XXX comment about what looks to me like another bug.
2001-07-08 16:40:11 +00:00
Peter Ross
d89afe3839 Merge changes from the reuse branch back onto the main branch.
Estimated hours taken: 0.25
Branches: main

Merge changes from the reuse branch back onto the main branch.

compiler/ml_unify_gen.m:
    Handle the case where the tag on the cell to be reused is unknown.

compiler/hlds_goal.m:
    Add a field which records what possible cons_ids the cell to be
    reused can be tagged with.

compiler/builtin_ops.m:
    Add the unary builtin operator strip_tag.

compiler/bytecode.m:
compiler/c_util.m:
compiler/java_util.m:
compiler/llds.m:
compiler/mlds_to_il.m:
compiler/opt_debug.m:
bytecode/mb_disasm.c:
bytecode/mb_exec.c:
    Handle the strip_tag operator.
2001-03-13 12:40:19 +00:00
Levi Cameron
0921310ca5 More work on the bytecode interpreter.
With these changes, it now passes all tests/general/* test cases
  except those with floats.

  Changes to the compiler:
  - Added extra argument to test instruction (string comparisons were
    being treated as integer comparisons; properly deals with different
    atomic type unifications now)
  - Changed bytecode stub functions

  Changes to the bytecode interpreter:
  - Cleaned up comments
  - Forked part of mb_machine to mb_exec
  - Added support for submodules
  - Added support for nondet procedures
  - Added support for cc_xxx procedures
  - Finished higher order calls
  - Added (very basic) debug interface
  - Added support for type information
  - Added memory corruption checking
  - Changed machine state dump formatting
  - Fixed bug in nested switches
  - Resolved builtin__unify and builtin_compare failures
  - Modified bytecode tags generation so .c & .m tag files are separate
  - Header usage rationalised

  Changes to test suite:
  - Added test cases for the bytecode interpreter.
  - More work on the bytecode interpreter.

bytecode/Mmakefile:
        Modified bytecode tags generation so .c & .m tag files are separate.
        mb_machine split into mb_exec.
        test file renamed to simple.m (copy over tests/simple??.m to test).

bytecode/TODO:
        Updated.

bytecode/mb_basetypes.h:
        Removed redundant MB_WORD_BITS (use MR_WORDBITS instead).

bytecode/mb_bytecode.h:
bytecode/mpb_bytecode.c:
        Formatting changes
        Third test instruction argument added.

bytecode/mb_disasm.h:
bytecode/mb_disasm.c:
        Formatting changes.
        Third test instruction argument added.
        Added MB_FMT_INTWIDE.

bytecode/mb_exec.h:
bytecode/mb_exec.c:
bytecode/mb_machine.h:
bytecode/mb_machine.c:
        mb_machine* split into mb_exec* and mb_machine*.
        Almost all instructions now work (see important changes above).

bytecode/mb_interface.h:
bytecode/mb_interface.c:
        Added nondet stub functions.
        Added functions to lookup builtin compiler procedures:
                do_redo, do_fail, __unify, __compare.
        Removed old debugging code.
        Stack layout changed to support nondet procedures.

bytecode/mb_interface_stub.c:
bytecode/mb_interface_stub.h:
        Split off bare minimum of includes for bytecode stubs.
        Added nondet stubs.

bytecode/mb_machine_show.c:
        Made code cleaner (added subfunctions for MB_show_state).
        Added variable names to machine state dump.

bytecode/mb_mem.h:
bytecode/mb_mem.c:
        Added limited memory corruption checking.

bytecode/mb_module.h:
bytecode/mb_module.c:
        Swapped order of temps & vars on stack.
        Fixed nested switches causing random crashes.
        Added nested module support.

bytecode/test/simple??.m:
        Various test files - just to check that it doesn't crash.
        (Most do not output anything & must be verified by stepping through
        manually).

compiler/bytecode.m:
compiler/bytecode_gen.m:
        Added extra argument to test instruction (otherwise
        string comparisons would be treated as integer comparisons).

compiler/code_gen.m:
        Changed call structure name in bytecode stub to resolve
        issues with illegal characters in C structure names.
        Changed bytecode stub header file name.
2001-02-19 02:05:59 +00:00
Fergus Henderson
9d453c5a7b Delete the `cast_to_unsigned' unary operator from builtin_ops, and
Estimated hours taken: 4

Delete the `cast_to_unsigned' unary operator from builtin_ops, and
replace it with an `unsigned_le' binary operator for doing unsigned
less-then-or-equal comparisons.

This change makes the semantics and typing of the builtin operators
more consistent.

compiler/builtin_ops.m:
	Delete the `cast_to_unsigned' unary_op.
	Add a new `unsigned_le' binary_op.

compiler/dense_switch.m:
compiler/lookup_switch.m:
compiler/ml_simplify_switch.m:
	Use `binop(unsigned_le, X, Y)' rather than
	`binop(<=, unop(cast_to_unsigned, X), Y)'.

compiler/bytecode.m:
compiler/c_util.m:
compiler/llds.m:
compiler/llds_out.m:
compiler/mlds_to_gcc.m:
compiler/mlds_to_il.m:
compiler/opt_debug.m:
compiler/vn_util.m:
compiler/vn_cost.m:
	Delete code for handling `cast_to_unsigned'
	and instead add code for handling `unsigned_le'.

compiler/vn_cost.m:
	Also add `mktag' and `unmktag' as zero_cost_unops.

compiler/c_util.m:
	Add a new procedure `c_util__unsigned_comparison_op',
	for use by llds_out.m.
2001-01-20 15:42:48 +00:00
Levi Cameron
17e28f03e1 Added predicate vs function distinction in some bytecodes
Estimated hours taken: 0.3

Added predicate vs function distinction in some bytecodes

compiler/bytecode.m
compiler/bytecode_gen.m
        Fixed where it was not specified whether a predicate
        or function was being referred to.
2001-01-18 03:51:26 +00:00
Levi Cameron
c87d491da8 Various changes to bytecode format & generator
Estimated hours taken: 0.5

Various changes to bytecode format & generator

compiler/bytecode_gen.m
compiler/bytecode.m
       Added temp slot for semidet procedures
       (to store success indicator, needed because the same fail
       bytecode is used whenever there is a redo needed in any part
       of the program)

       Added label to each enter_proc indicating where the corresponding
       endof_proc is (needed for semidet failure and also used for
       endof_proc to work out the attributes [temp slots, vars etc]
       of the procedure it is in)

       Added enter_negation_goal bytecode so that negations can be
       handled; enter_negation and endof_negation is not enough. Also
       added a temporary stack slot for each negation.
2001-01-08 00:11:47 +00:00
Levi Cameron
307c502aec Added an enter_else bytecode.
Estimated hours taken: 0.25

Added an enter_else bytecode.

compiler/bytecode.m
        added enter_else bytecode. This is needed so that the temp
        frame generated by enter_if can be removed.
2000-12-20 00:07:58 +00:00
Peter Ross
35d1d914e7 Update the MLDS backend to handle structure reuse and compile time gc.
Estimated hours taken: 20

Update the MLDS backend to handle structure reuse and compile time gc.
Note that currently no pass on the main branch currently generates this
information yet.

mlds.m:
    Add a new instruction delete_object which is to be inserted
    whenever a lval can be compile time garbage collected.

ml_unify_gen.m:
    Handle the case where the HowToConstruct field of a construction
    is reuse_cell(_).
    Handle the case where a deconstruction can be compile time gc'd.

hlds_goal.m:
    Add a new field, can_cgc, to deconstruction unifications.  This
    field is `yes' if the deconstruction unification can be compile time
    garbage collected.

hlds_out.m:
    Output the can_cgc field.  Output unification information if we
    request the structure reuse information.

ml_elim_nested.m:
mlds_to_c.m:
    Handle the delete_object instruction.

builtin_ops.m:
    Fix a bug where body was an unary op instead of a binary op.

bytecode.m:
c_util.m:
llds.m:
opt_debug.m:
vn_cost.m:
    Changes to reflect that body is a binary op.

bytecode_gen.m:
code_aux.m:
common.m:
cse_detection.m:
dependency_graph.m:
det_analysis.m:
goal_util.m:
higher_order.m:
mark_static_terms.m:
mode_util.m:
modecheck_unify.m:
pd_cost.m:
pd_util.m:
prog_rep.m:
rl_exprn.m:
rl_key.m:
simplify.m:
switch_detection.m:
term_traversal.m:
unify_gen.m:
unused_args.m:
    Handle the can compile time gc field in deconstruction unifications.
2000-10-06 10:18:39 +00:00
Fergus Henderson
10c0c7f36f Eliminate a dependency on the LLDS: use c_util__output_quoted_string
Estimated hours taken: 0.25

compiler/bytecode.m:
	Eliminate a dependency on the LLDS: use c_util__output_quoted_string
	rather than llds_out__output_c_quoted_string (which just calls
	c_util__output_quoted_string anyway).
2000-04-17 10:51:52 +00:00
Fergus Henderson
773bd702cc Some more changes to minimize the complexity of the intermodule dependencies.
Estimated hours taken: 2.5

Some more changes to minimize the complexity of the intermodule dependencies.
In particular, ensure that bytecode.m does not need to import llds.m.

compiler/llds.m:
compiler/builtin_ops.m:
	Move the definitions of the unary_op and binary_op types into
	a new module `builtin_ops'.  These types are used by three of the
	different back-ends (bytecode, llds, and mlds) and therefore deserve
	to be in their own module.

compiler/bytecode.m:
	Define a type `byte_reg_type' and use that instead of llds__reg_type.
	Delete the import of module llds.

compiler/notes/compiler_design.html:
	Document the new module builtin_ops.

compiler/rl_exprn.m:
	Add a comment explaining why we need to import llds (and builtin_ops).

compiler/base_type_layout.m:
compiler/bytecode.m:
compiler/code_util.m:
compiler/dense_switch.m:
compiler/ite_gen.m:
compiler/jumpopt.m:
compiler/llds_out.m:
compiler/lookup_switch.m:
compiler/middle_rec.m:
compiler/opt_debug.m:
compiler/opt_util.m:
compiler/rl_exprn.m:
compiler/string_switch.m:
compiler/tag_switch.m:
compiler/transform_llds.m:
compiler/unify_gen.m:
compiler/value_number.m:
compiler/vn_block.m:
compiler/vn_cost.m:
compiler/vn_flush.m:
compiler/vn_type.m:
compiler/vn_util.m:
compiler/vn_verify.m:
	Add imports of module builtin_ops to lots of modules that
	imported llds.
1999-07-10 07:20:09 +00:00
Tyson Dowd
6cb525f6bc This change does some renaming to match the new nomenclature introduced
Estimated hours taken: 5

This change does some renaming to match the new nomenclature introduced
in the RTTI paper.

Rename simple tags as unshared tags, complicated tags as shared
remote tags and complicated constant tags as shared local.
Also rename "simple vector" as "functor descriptor",
"functors vector" as "enum vector".

compiler/base_type_layout.m:
compiler/bytecode.m:
compiler/bytecode_gen.m:
compiler/hlds_data.m:
compiler/make_tags.m:
compiler/switch_gen.m:
compiler/tag_switch.m:
compiler/unify_gen.m:
	Perform these renamings in the compiler, renaming a few
	functors and data structures.

library/std_util.m:
runtime/mercury_deep_copy_body.h:
runtime/mercury_tabling.c:
runtime/mercury_type_info.c:
runtime/mercury_type_info.h:
	Perform these renamings in the library and runtime, renaming
	macros and variables.
1999-04-22 01:04:32 +00:00
Tyson Dowd
1f312b45e9 During the writing of the RTTI paper, we decided that type_ctor_info
Estimated hours taken: 8

During the writing of the RTTI paper, we decided that type_ctor_info
was a much better name than base_type_info.

Rename base_type* as type_ctor*, except we don't rename the modules
base_type_info and base_type_layout just yet.

Most of these changes were made using the following sed patterns:

s/base_type_info/type_ctor_info/g
s/base_type_layout/type_ctor_layout/g
s/base_type_functors/type_ctor_functors/g
s/BASETYPE_INFO/TYPE_CTOR_INFO/g
s/TYPEFUNCTORS/TYPE_CTOR_FUNCTORS/g
s/TYPELAYOUT/TYPE_CTOR_LAYOUT/g
s/BASE_TYPEINFO/TYPE_CTOR_INFO/g
s/BASE_TYPE_INFO/TYPE_CTOR_INFO/g
s/BaseTypeInfo/TypeCtorInfo/g
s/BaseTypeLayout/TypeCtorLayout/g
s/base_type(/type_ctor(/g
s/:- module type_ctor_info/:- module base_type_info/g
s/:- module type_ctor_layout/:- module base_type_layout/g
s/type_ctor_info__/base_type_info__/g
s/type_ctor_layout__/base_type_layout__/g
/import_module/s/type_ctor_info/base_type_info/g
/import_module/s/type_ctor_layout/base_type_layout/g

compiler/*.m:
library/*.m:
runtime/*.{c,h}:
profiler/demangle.m:
util/mdemangle.c:
	Applied the above sed commands.

runtime/mercury_bootstrap.h:
	Add bootstrapping #defines so the type_ctor_* substitutions in
	the library don't cause link problems.

	Delete some redundant bootstrapping definitions.
1999-03-22 08:09:08 +00:00
Simon Taylor
65780aaf5d Fix bugs in the Aditi bytecode output routines.
Estimated hours taken: 2

Fix bugs in the Aditi bytecode output routines.

compiler/bytecode.m:
compiler/bytecode_data.m:
	Move the data conversion predicates from bytecode.m to a new module
	so they can be used by for output of Aditi-RL bytecode in the
	compiler and in the RL bytecode assembler in the Aditi distribution.
	Add new predicates to convert integers and floats to lists of
	bytes rather than writing them out immediately.

compiler/rl_code.m:
	Use the same data conversion predicates for Aditi-RL
	bytecodes as for Mercury bytecodes.
	This fixes a bug with the output of integers on 32 bit machines
	(integers were being shifted by more than the width of the type,
	the result of which is undefined) and endianness problems with
	floating point numbers.
1999-03-08 06:09:38 +00:00
Fergus Henderson
11d8161692 Add support for nested modules.
Estimated hours taken: 50

Add support for nested modules.

- module names may themselves be module-qualified
- modules may contain `:- include_module' declarations
  which name sub-modules
- a sub-module has access to all the declarations in the
  parent module (including its implementation section).

This support is not yet complete; see the BUGS and LIMITATIONS below.

LIMITATIONS
- source file names must match module names
	(just as they did previously)
- mmc doesn't allow path names on the command line any more
	(e.g. `mmc --make-int ../library/foo.m').
- import_module declarations must use the fully-qualified module name
- module qualifiers must use the fully-qualified module name
- no support for root-qualified module names
	(e.g. `:parent:child' instead of `parent:child').
- modules may not be physically nested (only logical nesting, via
  `include_module').

BUGS
- doesn't check that the parent module is imported/used before allowing
	import/use of its sub-modules.
- doesn't check that there is an include_module declaration in the
	parent for each module claiming to be a child of that parent
- privacy of private modules is not enforced

-------------------

NEWS:
	Mention that we support nested modules.

library/ops.m:
library/nc_builtin.nl:
library/sp_builtin.nl:
compiler/mercury_to_mercury.m:
	Add `include_module' as a new prefix operator.
	Change the associativity of `:' from xfy to yfx
	(since this made parsing module qualifiers slightly easier).

compiler/prog_data.m:
	Add new `include_module' declaration.
	Change the `module_name' and `module_specifier' types
	from strings to sym_names, so that module names can
	themselves be module qualified.

compiler/modules.m:
	Add predicates module_name_to_file_name/2 and
	file_name_to_module_name/2.
	Lots of changes to handle parent module dependencies,
	to create parent interface (`.int0') files, to read them in,
	to output correct dependencies information for them to the
	`.d' and `.dep' files, etc.
	Rewrite a lot of the code to improve the readability
	(add comments, use subroutines, better variable names).
	Also fix a couple of bugs:
	- generate_dependencies was using the transitive implementation
	  dependencies rather than the transitive interface dependencies
	  to compute the `.int3' dependencies when writing `.d' files
	  (this bug was introduced during crs's changes to support
	  `.trans_opt' files)
	- when creating the `.int' file, it was reading in the
	  interfaces for modules imported in the implementation section,
	  not just those in the interface section.
	  This meant that the compiler missed a lot of errors.

library/graph.m:
library/lexer.m:
library/term.m:
library/term_io.m:
library/varset.m:
compiler/*.m:
	Add `:- import_module' declarations to the interface needed
	by declarations in the interface.  (The previous version
	of the compiler did not detect these missing interface imports,
	due to the above-mentioned bug in modules.m.)

compiler/mercury_compile.m:
compiler/intermod.m:
	Change mercury_compile__maybe_grab_optfiles and
	intermod__grab_optfiles so that they grab the opt files for
	parent modules as well as the ones for imported modules.

compiler/mercury_compile.m:
	Minor changes to handle parent module dependencies.
	(Also improve the wording of the warning about trans-opt
	dependencies.)

compiler/make_hlds.m:
compiler/module_qual.m:
	Ignore `:- include_module' declarations.

compiler/module_qual.m:
	A couple of small changes to handle nested module names.

compiler/prog_out.m:
compiler/prog_util.m:
	Add new predicates string_to_sym_name/3 (prog_util.m) and
	sym_name_to_string/{2,3} (prog_out.m).

compiler/*.m:
	Replace many occurrences of `string' with `module_name'.
	Change code that prints out module names or converts
	them to strings or filenames to handle the fact that
	module names are now sym_names intead of strings.
	Also change a few places (e.g. in intermod.m, hlds_module.m)
	where the code assumed that any qualified symbol was
	fully-qualified.

compiler/prog_io.m:
compiler/prog_io_goal.m:
	Move sym_name_and_args/3, parse_qualified_term/4 and
	parse_qualified_term/5 preds from prog_io_goal.m to prog_io.m,
	since they are very similar to the parse_symbol_name/2 predicate
	already in prog_io.m.  Rewrite these predicates, both
	to improve maintainability, and to handle the newly
	allowed syntax (module-qualified module names).
	Rename parse_qualified_term/5 as `parse_implicit_qualified_term'.

compiler/prog_io.m:
	Rewrite the handling of `:- module' and `:- end_module'
	declarations, so that it can handle nested modules.
	Add code to parse `include_module' declarations.

compiler/prog_util.m:
compiler/*.m:
	Add new predicates mercury_public_builtin_module/1 and
	mercury_private_builtin_module/1 in prog_util.m.
	Change most of the hard-coded occurrences of "mercury_builtin"
	to call mercury_private_builtin_module/1 or
	mercury_public_builtin_module/1 or both.

compiler/llds_out.m:
	Add llds_out__sym_name_mangle/2, for mangling module names.

compiler/special_pred.m:
compiler/mode_util.m:
compiler/clause_to_proc.m:
compiler/prog_io_goal.m:
compiler/lambda.m:
compiler/polymorphism.m:
	Move the predicates in_mode/1, out_mode/1, and uo_mode/1
	from special_pred.m to mode_util.m, and change various
	hard-coded definitions to instead call these predicates.

compiler/polymorphism.m:
	Ensure that the type names `type_info' and `typeclass_info' are
	module-qualified in the generated code.  This avoids a problem
	where the code generated by polymorphism.m was not considered
	type-correct, due to the type `type_info' not matching
	`mercury_builtin:type_info'.

compiler/check_typeclass.m:
	Simplify the code for check_instance_pred and
	get_matching_instance_pred_ids.

compiler/mercury_compile.m:
compiler/modules.m:
	Disallow directory names in command-line arguments.

compiler/options.m:
compiler/handle_options.m:
compiler/mercury_compile.m:
compiler/modules.m:
	Add a `--make-private-interface' option.
	The private interface file `<module>.int0' contains
	all the declarations in the module; it is used for
	compiling sub-modules.

scripts/Mmake.rules:
scripts/Mmake.vars.in:
	Add support for creating `.int0' and `.date0' files
	by invoking mmc with `--make-private-interface'.

doc/user_guide.texi:
	Document `--make-private-interface' and the `.int0'
	and `.date0' file extensions.

doc/reference_manual.texi:
	Document nested modules.

util/mdemangle.c:
profiler/demangle.m:
	Demangle names with multiple module qualifiers.

tests/general/Mmakefile:
tests/general/string_format_test.m:
tests/general/string_format_test.exp:
tests/general/string__format_test.m:
tests/general/string__format_test.exp:
tests/general/.cvsignore:
	Change the `:- module string__format_test' declaration in
	`string__format_test.m' to `:- module string_format_test',
	because with the original declaration the `__' was taken
	as a module qualifier, which lead to an error message.
	Hence rename the file accordingly, to avoid the warning
	about file name not matching module name.

tests/invalid/Mmakefile:
tests/invalid/missing_interface_import.m:
tests/invalid/missing_interface_import.err_exp:
	Regression test to check that the compiler reports
	errors for missing `import_module' in the interface section.

tests/invalid/*.err_exp:
tests/warnings/unused_args_test.exp:
tests/warnings/unused_import.exp:
	Update the expected diagnostics output for the test cases to
	reflect a few minor changes to the warning messages.

tests/hard_coded/Mmakefile:
tests/hard_coded/parent.m:
tests/hard_coded/parent.child.m:
tests/hard_coded/parent.exp:
tests/hard_coded/parent2.m:
tests/hard_coded/parent2.child.m:
tests/hard_coded/parent2.exp:
	Two simple tests case for the use of nested modules with
	separate compilation.
1998-03-03 17:48:14 +00:00
Fergus Henderson
f76e85394f Miscellaneous minor clean-ups.
Estimated hours taken: 0.5

Miscellaneous minor clean-ups.

compiler/bytecode.m:
	Use the new syntax `pragma c_code(..., will_not_call_mercury, ...)'
	rather than the obsolete syntax `pragma(c_code, ...)'.

compiler/llds.m:
compiler/hlds_out.m:
compiler/hlds_goal.m:
compiler/hlds_pred.m:
compiler/llds_out.m:
compiler/mercury_compile.m:
compiler/module_qual.m:
compiler/unused_args.m:
	Trivial changes to the comments (either in the source code or
	in the output C code or HLDS dump), e.g. replace the obsolete
	syntax `pragma(c_code, ...)' with `pragma c_code(...)'.
1998-01-25 06:05:30 +00:00
Fergus Henderson
968b084fbe Delete all the obsolete code using magic numbers (e.g. 10000)
Estimated hours taken: 0.75

compiler/bytecode.m:
compiler/code_util.m:
compiler/const_prop.m:
compiler/hlds_out.m:
compiler/intermod.m:
compiler/llds_out.m:
compiler/make_hlds.m:
compiler/mercury_to_c.m:
compiler/modes.m:
compiler/special_pred.m:
compiler/term_errors.m:
compiler/trace.m:
	Delete all the obsolete code using magic numbers (e.g. 10000)
	for proc_ids.  This old hack, whereby make_hlds.m assigned
	mode numbers based on the priority given to the determinism of
	each mode, is not needed anymore.  It is no longer needed
	because modecheck_call.m now chooses the mode that is the best
	fit (based on a variety of factors) rather than just picking
	the first allowable mode.

tests/invalid/duplicate_modes.err_exp:
	The output for this test changed, in insignificant ways:
	the order in which it reported the duplicates modes changed,
	because the mode numbers had changed.
1998-01-24 05:44:33 +00:00
Fergus Henderson
73131e8df3 Undo Zoltan's bogus update of all the copyright dates.
Estimated hours taken: 0.75

library/*.m:
compiler/*.m:
	Undo Zoltan's bogus update of all the copyright dates.
	The dates in the copyright header should reflect the years
	in which the file was modified (and no, changes to the
	copyright header itself don't count as modifications).
1998-01-23 12:57:08 +00:00
Zoltan Somogyi
bb4442ddc1 Update copyright dates for 1998.
Estimated hours taken: 0.5

compiler/*.m:
	Update copyright dates for 1998.
1998-01-13 10:06:08 +00:00
David Jeffery
7406335105 This change implements typeclasses. Included are the necessary changes to
Estimated hours taken: 500 or so

This change implements typeclasses. Included are the necessary changes to
the compiler, runtime and library.

compiler/typecheck.m:
	Typecheck the constraints on a pred by adding constraints for each
	call to a pred/func with constraints, and eliminating constraints
	by applying context reduction.

	While reducing the constraints, keep track of the proofs so that
	polymorphism can produce the tyepclass_infos for eliminated
	constraints.

compiler/polymorphism.m:
	Perform the source-to-source transformation which turns code with
	typeclass constraints into code without constraints, but with extra
	"typeclass_info", or "dictionary" parameters.

	Also, rather than always having a type_info directly for each type
	variable, sometimes the type_info is hidden inside a typeclass_info.

compiler/bytecode*.m:
	Insert some code to abort if bytecode generation is used when
	typeclasses are used.
compiler/call_gen.m:
	Generate code for a class_method_call, which forms the body of a class
	method (by selecting the appropriate proc from the typeclass_info).
compiler/dead_proc_elim.m:
	Don't eliminate class methods if they are potentially used outside
	the module
compiler/hlds_data.m:
	Define data types to store:
		- the typeclass definitions
		- the instances of a class
		- "constraint_proof". ie. the proofs of redundancy of a
		  constraint. This info is used by polymorphism to construct the
		  typeclass_infos for a constraint.
		- the "base_tyepclass_info_constant", which is analagous the
		  the base_type_info_constant
compiler/hlds_data.m:
	Define the class_method_call goal. This goal is inserted into the
	body of class method procs, and is responsible for selecting the
	appropriate part of the typeclass_info to call.
compiler/hlds_data.m:
	Add the class table and instance table to the module_info.
compiler/hlds_out.m:
	Output info about base_typeclass_infos and class_method_calls
compiler/hlds_pred.m:
	Change the representation of the locations of type_infos from "var"
	to type_info_locn, which is either a var, or part of a typeclass_info,
	since now the typeclass_infos contain the type_infos for the type that
	they constrain.

	Add constraints to the pred_info.

	Add constraint_proofs to the pred_info (so that typeclass.m can
	annotate the pred_info with the reasons that constraints were
	eliminated, so that polymorphism.m can in turn generate the
	typeclass_infos for the constraints).

	Add the "class_method" marker.

compiler/lambda.m:
	A feable attempt at adding class ontexts to lambda expressions,
	untested and almost certainly not working.
compiler/llds_out.m:
	Output the code addresses for do_*det_class_method, and output
	appropriately mangled symbol names for base_typeclass_infos.
compiler/make_hlds.m:
	Add constraints to the types on pred and func decls, and add
	class and instance declarations to the class_table and instance_table
	respectively.
compiler/mercury_compile.m:
	Add the check_typeclass pass.
compiler/mercury_to_mercury.m:
	Output constraints of pred and funcs, and output typeclass and instance
	declarations.
compiler/module_qual.m:
	Module qualify typeclass names in pred class contexts, and qualify the
	typeclass and instance decls themselves.
compiler/modules.m:
	Output typeclass declarations in the short interface too.
compiler/prog_data.m:
	Add the "typeclass" and "instance" items. Define the types to store
	information about the declarations, including class contexts on pred
	and func decls.
compiler/prog_io.m:
	Parse constraints on pred and func declarations.
compiler/prod_out.m:
	Output class contexts on pred and func decls.
compiler/type_util.m:
	Add preds to apply a substitution to a class_constraint, and to
	a list of class constraints. Add type_list_matches_exactly/2. Also
	add typeclass_info and base_typeclass_info as types which should not
	be optimised as no_tag types (seeing that we cheat a bit about their
	representation).
compiler/notes/compiler_design.html:
	Add notes on module qualification of class contexts. Needs expansion
	to include more stuff on typeclasses.
compiler/*.m:
	Various minor changes.

New Files:
compiler/base_typeclass_info.m:
	Produce one base_typeclass_info for each instance declaration.
compiler/prog_io_typeclass.m:
	Parse typeclass and instance declarations.
compiler/check_typeclass.m:
	Check the conformance of an instance declaration to the typeclass
	declaration, including building up a proof of how superclass
	constraints are satisfied so that polymorphism.m is able to construct
	the typeclass_info, including the superclass typeclass_infos.

library/mercury_builtin.m:
	Implement that base_typeclass_info and typeclass_info types, as
	well as the predicates type_info_from_typeclass_info/3 to extract
	a type_info from a typeclass_info, and superclass_from_typeclass_info/3
	for extracting superclasses.
library/ops.m:
	Add "typeclass" and "instance" as operators.
library/string.m:
	Add a (in, uo) mode for string__length/3.

runtime/mercury_ho_call.c:
	Implement do_call_*det_class_method, which are the pieces of code
	responsible for extracting the correct code address from the
	typeclass_info, setting up the arguments correctly, then executing
	the code.
runtime/mercury_type_info.h:
	Macros for accessing the typeclass_info structure.
1997-12-19 03:10:47 +00:00
Fergus Henderson
04b720630b Update the copyright messages so that (a) they contain the correct years
and (b) they say "Copyright (C) ... _The_ University of Melbourne".
1997-07-27 15:09:59 +00:00
Simon Taylor
27d156bbb5 Implemented a :- use_module directive. This is the same as
Estimated hours taken: 14

Implemented a :- use_module directive. This is the same as
:- import_module, except all uses of the imported items
must be explicitly module qualified.

:- use_module is implemented by ensuring that unqualified versions
of items only get added to the HLDS symbol tables if they were imported
using import_module.

Indirectly imported items (from `.int2' files) and items declared in `.opt'
files are treated as if they were imported with use_module, since all uses
of them should be module qualified.

compiler/module_qual.m
	Keep two sets of type, mode and inst ids, those which can
	be used without qualifiers and those which can't.

	Renamed some predicates which no longer have unique names since
	'__' became a synonym for ':'.

	Made mq_info_set_module_used check whether the current item is in
	the interface, rather than relying on its caller to do the check.

	Removed init_mq_info_module, since make_hlds.m now uses the
	mq_info built during the module qualification pass.

compiler/prog_data.m
	Added a pseudo-declaration `used', same as `imported' except uses of
	the following items must be module qualified.

	Added a type need_qualifier to describe whether uses of an item
	need to be module qualified.

compiler/make_hlds.m
	Keep with the import_status whether current item was imported
	using a :- use_module directive.

	Use the mq_info structure passed in instead of building a new one.

	Ensure unqualified versions of constructors only get added to the
	cons_table if they can be used without qualification.

compiler/hlds_module.m
	Added an extra argument to predicate_table_insert of type
	need_qualifier.

	Only add predicates to the name and name-arity indices if they
	can be used without qualifiers.

	Changed the structure of the module-name-arity index, so that
	lookups can be made without an arity, such as when type-checking
	module qualified higher-order predicate constants. This does not
	change the interface to the module_name_arity index.

	Factored out some common code in predicate_table_insert which
	applies to both predicates and functions.

compiler/hlds_pred.m
	Removed the opt_decl import_status. It isn't needed any more
	since all uses of items declared in .opt files must now be
	module qualified.

	Added some documentation about when the clauses_info is valid.

compiler/intermod.m
	Ensure that predicate and function calls in the `.opt' file are
	module qualified. Use use_module instead of import_module in
	`.opt' files.

compiler/modules.m
	Handle use_module directives.

	Report a warning if both use_module and import_module declarations
	exist for the same module.

compiler/mercury_compile.m
	Collect inter-module optimization information before module
	qualification, since it can't cause conflicts any more. This means
	that the mq_info structure built in module_qual.m can be reused in
	make_hlds.m, instead of building a new one.

compiler/prog_out.m
	Add a predicate prog_out__write_module_list, which was moved
	here from module_qual.m.

compiler/typecheck.m
	Removed code to check that predicates declared in `.opt' files
	were being used appropriately, since this is now handled by
	use_module.

compiler/*.m
	Added missing imports, mostly for prog_data and term.

NEWS
compiler/notes/todo.html
doc/reference_manual.texi
	Document `:- use_module'.

tests/valid/intermod_lambda_test.m
tests/valid/intermod_lambda_test2.m
tests/invalid/errors.m
tests/invalid/errors2.m
	Test cases.
1997-06-29 23:11:42 +00:00
Bert Thompson
055274bf6c The `enter_pred' bytecode needed some extra arguments in order to
Estimated hours taken: 0.2

The `enter_pred' bytecode needed some extra arguments in order to
fully disambiguate some cases. The augmentations are:
	- its arity
	- whether it is a function or a predicate

compiler/bytecode.m:
compiler/bytecode_gen.m:
	Two extra arguments added to the `enter_pred' functor, which
	comes from the `byte_code' type.
1997-06-05 06:54:00 +00:00
Tyson Dowd
cbcb23d17b Enable --warn-interface-imports by default.
Estimated hours taken: 3

Enable --warn-interface-imports by default. This was turned off while
list and term were defined in mercury_builtin.m, since it caused many
warnings.

Fix all the unused interface imports that have been added since then.

compiler/options.m:
	Enable --warn-interface-imports by default.

compiler/module_qual.m:
	Fix formatting inconsistencies with module names in warning
	messages. (".m" was not appended to module names if there was
	only one module).

compiler/*.m:
library/*.m:
tests/invalid/type_loop.m:
tests/warnings/*.m:
	Remove usused interface imports, or move them into
	implementation (mostly bool, list and std_util).
1997-05-21 02:16:53 +00:00
Fergus Henderson
204270c7a3 s/BIG_ENDIAN/MR_BIG_ENDIAN/ and s/LITTLE_ENDIAN/MR_LITTLE_ENDIAN/,
Estimated hours taken: 0.1

compiler/bytecode.m:
	s/BIG_ENDIAN/MR_BIG_ENDIAN/ and s/LITTLE_ENDIAN/MR_LITTLE_ENDIAN/,
	to match my recent change to runtime/conf.h.in.
1997-04-26 16:39:17 +00:00
Bert Thompson
964d8e7a1b Made changes so that the compiler dumps numeric constants to the
Estimated hours taken: 5

Made changes so that the compiler dumps numeric constants to the
bytecode stream in a portable and sane manner.
The Mercury numeric types have the following formats in bytecode:
	- int
		- 64-bit
		- 2's-complement
		- big-endian (big end is read first)
	- float
		- 64-bit
		- IEEE-754
		- big-endian

configure.in
	Added tests:
	- Test the endianness of the platform.
		We need this in order to dump a float to bytecode
		in a manner portable between all platforms on which
		we're interested in running Mercury.
	- Find a C type for a 64-bit floating point.
		We need this also to dump a float to bytecode
		portably.

runtime/conf.h.in
	Added #define variables correponding to the new tests in
	configure.in.

runtime/mercury_types.h
	Added the type Float64, which is a 64-bit IEEE-754
	floating point type that may be either big-endian or little-endian.

compiler/bytecode.m
	Changed output_float and output_int in compiler/bytecode.m to dump
	floats and ints respectively in a portable way.

	Also gratuitously renamed output_two_byte() to output_short().
	All uses of output_two_byte() were effectively to dump a short.
1997-04-15 05:58:13 +00:00
Bert Thompson
9dd329d64a In .bytedebug files, strings literals are not delimited by double
Estimated hours taken: 0.5

In .bytedebug files, strings literals are not delimited by double
quotes and special characters such as backslash and newline are not
escaped.

compiler/bytecode.m:
	String literals in symbolic bytecode output are now quoted
	correctly.
1997-03-24 06:00:57 +00:00
Bert Thompson
64803a1823 In the .bytedebug file, "enter_negation" was printed incorrectly when
Estimated hours taken: 0.1

In the .bytedebug file, "enter_negation" was printed incorrectly when
"endof_negation" should have been.

compiler/bytecode.m:
	Changed "enter_negation" to "endof_negation".
1997-03-24 01:43:13 +00:00
Bert Thompson
f2d9616b96 When emitting bytecode in symbolic form, we print tags as
Estimated hours taken: 0.1

When emitting bytecode in symbolic form, we print tags as
"simple_tag", "complicated_tag", "complicated_constant_tag", "enum"
or "no_tag".

compiler/bytecode.m:
	Changed "enum" to "enum_tag" for consistency.
1997-03-21 05:36:54 +00:00
Simon Taylor
742b31c3d0 Fix handling of module qualified cons_ids.
Estimated hours taken: 0.5

compiler/bytecode.m
compiler/bytecode_gen.m
	Fix handling of module qualified cons_ids.
1997-03-20 00:33:30 +00:00
Fergus Henderson
23be706189 Explicitly parenthesize X >> Y mod Z' as (X >> Y) mod Z',
Estimated hours taken: 0.25

compiler/bytecode.m:
	Explicitly parenthesize `X >> Y mod Z' as `(X >> Y) mod Z',
	to avoid a syntax error with the new (ISO Prolog) precedences.
1997-03-19 16:56:55 +00:00
Bert Thompson
09228ad545 Typo: bytecode debugging output was incorrect for endof_commit.
Estimated hours taken: 0.1

Typo: bytecode debugging output was incorrect for endof_commit.
1997-02-04 08:51:06 +00:00
Zoltan Somogyi
b748f88d6c Implement the bytecode changes suggested by yesterday's meeting (plus some
Estimated hours taken: 1

Implement the bytecode changes suggested by yesterday's meeting (plus some
others).

bytecode:
	Each procedure invocation may now have some temporaries as well
	as variables associated with it. These temporaries are used to
	hold the addresses of choice point frames in the interpreter,
	in two places. First, enter_commit puts the current top of stack
	into a temporary, and endof_commit restores this: this is how we
	cut away any choice points left by the goal we are committing
	across. Second, enter_if records the address of the choice point
	it creates in a temporary; enter_then sets the redoip of the
	choice points indicated by this temporary to dofail. (This is
	necessary only when the condition can cucceed more than once,
	but it is probably faster to do it for all if-then-elses than
	to check at runtime whether we need to do it.)

	Add two new bytecodes, semidet_succeed and semidet_success_check.
	Semidet_succeed is emitted at the end of the code for semidet
	procedures; it sets r1 to indicate success. semidet_success_check
	is emitted after calls to semidet procedures; it fails if r1 does
	not indicate success. This change makes it easier to interface
	between interpreted and compiled code.

	Fix a bug in the binary operator table.

bytecode_gen:
	Generate the modified bytecode format.
1997-01-24 07:39:33 +00:00
Zoltan Somogyi
0810596918 Add a new explicit bytecode for fail; the previous representation
Estimated hours taken: 0.75

bytecode:
	Add a new explicit bytecode for fail; the previous representation
	as an empty disjunction is not all that useful.

	Add an argument to the endof_disjunct and endof_switch_arm bytecodes.
	This argument is the id of the label following the disjunction or
	switch, i.e. the id of the label to go to when execution reaches
	those bytecodes.

	Rename the endof_else bytecode to endof_if.

bytecode_gen:
	Generate the modified bytecode format.
1997-01-23 23:44:51 +00:00
Zoltan Somogyi
ab9fd69942 Put back some accidentally left-commented-out code in my last checkin.
Estimated hours taken: 0.1

Put back some accidentally left-commented-out code in my last checkin.
1997-01-23 02:40:12 +00:00
Zoltan Somogyi
035f4b98d6 Complete the code for generating bytecodes.
Estimated hours taken: 2

Complete the code for generating bytecodes. We now handle complex construction
unifications (those that create partially instantiated data structures or
closures), noop-type builtins (e.g. unary plus), the output of floats,
and procedures with unused variables.

We can now generate bytecode for every module in the library and the compiler.

bytecode, bytecode_gen:
	Implement the above.

code_util:
	Fix a comment.

mercury_compile:
	Fix a spelling error in a progress message. Write the .bytedebug file
	before the .bytecode file. Because the .bytecode file is not text,
	it has a higher than usual chance of breaking the I/O system.
1997-01-22 08:59:21 +00:00
Zoltan Somogyi
65ad3af153 Generate bytecodes for higher order calls and for unifications involving
Estimated hours taken: 1.5

Generate bytecodes for higher order calls and for unifications involving
enumerations.

bytecode:
	Add new bytecodes for higher order calls and for enum tags.

bytecode_gen:
	Generate the new bytecodes.

call_gen:
	Export an internal predicate for use by bytecode_gen after modifying
	its interface slightly to remove a gratuitous incompatibility with
	the data structures used by other, similar predicates in the module.
1997-01-21 22:09:14 +00:00
Zoltan Somogyi
54bb1c4a67 Move the code that generates code for pragma_c_codes to a new module.
Estimated hours taken: 3

code_gen, pragma_c_code:
	Move the code that generates code for pragma_c_codes to a new module.

llds:
	Change the representation of reg and temp lvals, in order to create
	the concept of a "register type" and to reduce memory requirements.

	Also add a comment indicating a possible future extension dealing with
	model_non pragma_c_codes.

code_exprn, code_info:
	Add the ability to request registers of a given type, or a specific
	register, when acquiring registers.

bytecode, bytecode_gen, call_gen, dupelim, exprn_aux, follow_vars, frameopt,
garbage_out, jumpopt, llds_out, middle_rec, opt_debug, opt_util, store_alloc,
string_switch, tag_switch, unify_gen, vn_block, vn_cost, vn_filter, vn_flush,
vn_order, vn_temploc, vn_type, vn_util, vn_verify:
	Small changes to accommodate the new register representation.

hlds_goal:
	Add a comment indicating a possible future extension dealing with
	model_non pragma_c_codes.

inlining:
	Add a comment indicating a how to deal with a possible future extension
	dealing with model_non pragma_c_codes.
1996-12-31 09:58:59 +00:00
Fergus Henderson
7665aa92e9 When inferring determinism, start with `erroneous' rather than with
Estimated hours taken: 2

When inferring determinism, start with `erroneous' rather than with
`det', so that we can infer determinisms `erroneous' and `failure'.

hlds_pred.m:
	Change pred_info__init to initialize the determinism
	as described above.

byte_code.m, call_gen.m:
	Change the declarations of a couple of predicates from
	`det' to `erroneous' to avoid determinism warnings.
1996-11-17 17:45:50 +00:00
Zoltan Somogyi
8bd1aaa9de Rename address_const to code_addr_const, and add base_type_info_const
Estimated hours taken: 15

hlds_data:
	Rename address_const to code_addr_const, and add base_type_info_const
	as a new alternative in cons_id, and make corresponding changes
	to cons_tag.

	Make hlds_type__defn an abstract type.

llds:
	Rename address_const to code_addr_const, and add data_addr_const
	as a new alternative in rval_const.

	Change type "label" to have four alternatives, not three:
	local/2 (for internal labels),  c_local (local to a C module),
	local/1 (local a Mercury module but not necessarily to a C module,
	and exported.

llds_out:
	Keep track of the things declared previously, and don't declare them
	again unnecessarily. Associate indentation with the following item
	rather than the previous item (the influence of 244); this results
	in braces being put in different places than previously, but should be
	easier to maintain. Handle the new forms of addresses and labels.
	Refer to c_local labels as STATIC when not using --split-c-files.

code_info:
	Use a presently junk field to store a cell counter, which is used
	to allocate distinguishing numbers to create'd cells. Previously
	we used the label counter, which meant that label numbers changed
	when we optimized away some creates. Handle the new forms of
	addresses and labels.

exprn_aux:
	Handle the new forms of addresses and labels. We are now more
	precise in figuring out what label address forms will be considered
	constants by the C compilers.

others:
	Changes to handle the new forms of addresses and labels, and/or to
	access hlds_type__defn as an abstract type.
1996-08-05 12:05:14 +00:00
Zoltan Somogyi
a15c032df7 Flesh out the code already here for traversing module_infos,
Estimated hours taken: 4

passes_aux:
	Flesh out the code already here for traversing module_infos,
	making it suitable to handle all the passes of the back end.

mercury_compile:
	Use the traversal code in passes_aux to invoke the back end passes
	over each procvedure in turn. Print a one-line message for each
	predicate if -v is given (this fixes a long-standing bug).

excess.m, follow_code.m, follow_vars.m, live_vars.m, lveness.m, store_alloc.m:
	Remove the code to traverse module_infos, since it is now unnecessary.

export.m:
	Remove an unused argument from export__produce_header_file_2.

others:
	Move imports from interfaces to implementations, or in some cases
	remove them altogether.
1996-08-03 12:06:26 +00:00
Zoltan Somogyi
cac7d6a246 Fix allocation to work properly for --args compact.
Estimated hours taken: 30+

arg_info:
	Fix allocation to work properly for --args compact.

bytecode*:
	Handle complex deconstruction unifications. Not really tested because
	I can't find a test case.

bytecode_gen, call_gen, code_util:
	Use the new method to handle builtin predicates/functions. We now
	handle reverse mode arithmetic and unary plus/minus as builtins.

code_gen, code_init, follow_vars, hlds_pred:
	Put back the initial follow_vars field of the proc_info, since this
	may allow the code generator to emit better code at the starts of
	of predicates.

inlining:
	Don't inline recursive predicates.

goals_util:
	Add a predicate to find out if a goal calls a particular predicate.
	Used in inlining to find out if a predicate is recursive.

unused_args:
	Remove code that used to set the mode of unused args to free->free.
	Since this changes the arg from top_in to top_unused *without* code
	in other modules being aware of the change, this screws up --args
	compact.

llds, llds_out, garbage_out:
	Prepare for the move to the new type_info structure by adding a new
	"module" type for defining structures holding type_infos. Not
	currently generated or output.

llds, opt_debug, opt_util, vn_type, vn_cost, vn_temploc:
	Change the argument of temp to be a reg, not an int, allowing
	floating point temporaries.

vn_type:
	Add information about the number of floating point registers and
	temporaries to the parameter structure (these are currently unused).

llds, dupelim, frameopt, livemap, middle_rec, value_number, vn_filter,
vn_verify:
	Add an extra field to blocks giving the number of float temporaries.

options:
	Add parameters to configure the number of floating point registers
	and temporaries.

mercury_compile:
	Add an extra excess assign phase at the start of the middle pass.
	This should reduce the size of the code manipulated by the other
	phases, and gives more accurate size information to inlining.
	(The excess assign phase before code generation is I think still
	needed since optimizations can introduce such assignments.)

value_number:
	Optimize code sequences before and after assignments to curfr
	separately, since such assignments change the meaning of framevars.
	This fixes the bug that caused singleton variable warnings to contain
	garbage.

vn_block, vn_flush, vn_order, vn_util:
	Add special handling of assignments to curfr. This is probably
	unnecessary after my change to value_number, and will be removed
	again shortly :-(

vn_flush:
	Improve the code generated by value numbering (1) by computing values
	into the place that needs them in some special circumstances, and
	(2) by fixing a bug that did not consider special registers to be
	as fast as r1 etc.

vn_util:
	Improve the code generated by value numbering by removing duplicates
	from the list of uses of a value before trying to find out if there
	is more than one use.

simplify:
	Avoid overzealous optimization of main --> { ..., error(...) }.

handle_options:
	Fix an error message.

code_aux:
	Break an excessive long line.
1996-05-29 10:56:45 +00:00
Zoltan Somogyi
aa96a68f4c Print out information about the variables within each procedure.
Estimated hours taken: 3

bytecode*:
	Print out information about the variables within each procedure.

vn_type, vn_block:
	Change the name of a predicate to more accurately reflect its meaning.

value_number, vn_flush:
	Fix a bug that caused value numbered code to allocate double the
	required storage on the Alpha.
1996-05-17 08:39:53 +00:00
Zoltan Somogyi
23ea5df346 First working versions.
Estimated hours taken: 8

bytecode*.m:
	First working versions.

code_info:
	Move the translation of cons_ids to tags to code_util, since it is
	now needed in bytecode_gen, which doesn't have a code_info structure.

code_util:
	Change the way we handle builtins in order to eventually allow
	unary plus/minus operators to be builtins, and to allow the arithmetic
	operators to be run backwards. (The changes aren't yet enabled since
	they are not trivial to bootstrap check.)

call_gen:
	Use new way of handling builtins.

mercury_compile:
	Fix formatting.
1996-05-15 07:22:01 +00:00
Zoltan Somogyi
140ff7c9ff These now compile without errors. No other promises are made :-)
Estimated hours taken: 5

bytecode*.m:
	These now compile without errors. No other promises are made :-)

options:
	Adda new option, --generate-bytecode.

mercury_compile:
	Generate bytecode if the option is set.

goal_util:
	Add a predicate to find all the variables in a goal, even the ones
	that have been quantified. Used by the bytecode generator.

call_gen:
	Add a predicate and export another for use by the bytecode generator.

hlds_module:
	Add a predicate to look up full naming details on a PredId.
	Used by the bytecode generator.

hlds_pred:
	Remove the follow_vars field from proc_infos, since it is not needed
	any more.

hlds_goal:
	Remove the store_map field from goal_infos, since it is not needed
	any more.

code_gen, code_info, follow_vars, goal_util, hlds_out, middle_rec, store_alloc:
	Accommodate the changes in hlds_goal and hlds_pred

vn_block:
	Fix an oversight in my previous change.
1996-05-14 02:56:50 +00:00
Zoltan Somogyi
616676f48e Almost to first draft.
Estimated hours taken: 4

bytecode*.m:
	Almost to first draft.

optimize:
	When --debug-opt is given, print each instruction sequence only
	if it differs from the previous sequence.

vn_block:
	Do not create parallels for backward jumps. Without this precaution,
	pred-value-number may create incorrect code. For example, given the
	code L1: r1 = detstackvar(1), ... goto L1, it may create a specialized
	variant of L1 which assumes detstackvar(1) is in r1. This is true
	the first time around, but false on later times.

	With this fix, the compiler now passes bootcheck at -O5. (It still
	causes misreporting of singleton variables, and my changes to binary
	can't track it down. Arrrrgghh.)

options:
	Add a (deliberately) undocumented option --vn-fudge <n>, to try to
	make up for the inadequacy of the value numbering cost function.

value_number, vn_debug:
	Changes to accommodate --vn-fudge.
1996-05-13 07:52:35 +00:00
Zoltan Somogyi
e177f05e0d Closer to a first working version.
Estimated hours taken: 3

Closer to a first working version.
1996-05-12 12:48:05 +00:00
Zoltan Somogyi
40022648ec A large step towards a first working version of these modules.
Estimated hours taken: 5

A large step towards a first working version of these modules.
1996-05-12 11:52:21 +00:00
Zoltan Somogyi
94d39e031b An early draft of the bytecode generator.
Estimated hours taken: 4

An early draft of the bytecode generator.

bytecode:
	Defines the bytecode data type and the predicates for printing it out.

bytecode_gen:
	The code to convert HLDS to bytecode.
1996-04-29 05:03:02 +00:00