[m-rev.] for review: More robust compile-time evaluation of `int' operations.

Julien Fischer jfischer at opturion.com
Wed Mar 18 22:14:48 AEDT 2015


Hi Peter,

On Tue, 17 Mar 2015, Peter Wang wrote:

> More robust compile-time evaluation of `int' operations.
>
> Compile-time evaluation of `int' operations previously required that
> the target have the same number of bits per int as the host compiler.
> In other cases, the user would have to pass `--cross-compiling' to avoid
> the compiler silently producing a different result at compile time to
> what would be produced at run time.
>
> This change makes the compiler aware of the target's `int' width when
> evaluating operations at compile-time.
>
> Passing `--cross-compiling' is no longer required to avoid the problems
> that this change addresses, but it MAY still be required for other reasons.
> As of now, the one problem it would avoid is generating incorrect trie
> string switches containing non-ASCII strings when targeting a high-level
> C grade from a compiler built in Java or C# grades (not really
> supported, but something we can fix anyway).

Modulo a bunch of build system issues and a (probably) incorrect stack
size setting a compiler built in the Java grade should be able to target
the high-level C grade.

> I have not removed any
> references to the `--cross-compiling' option in the documentation.
>
> compiler/libs.m:
> compiler/int_emu.m:
> 	Add new module to emulate `int' operations for the target
> 	bits-per-int.  The predicates will only succeed if the result
> 	would be well-defined (including no overflow), and the result
> 	fits in the host's `int' type (no truncation).
>
> compiler/const_prop.m:
> 	Evaluate `int' operations at compile time using `int_emu'
> 	predicates.
>
> 	Delete now unnecessary checks for cross_compiling=no.
>
> 	Delete comment about checking for overflow, now done.
>
> compiler/simplify_goal_call.m:
> 	Use the target's value of bits-per-int in relevant
> 	simplifications.
>
> 	Delete check for cross_compiling=no.
>
> compiler/handle_options.m:
> 	Don't imply `--cross-compiling' when targeting java, csharp and
> 	erlang grades.  This was a temporary workaround in case the
> 	Mercury compiler itself uses 64-bit ints.
>
> tests/hard_coded/Mercury.options:
> tests/hard_coded/Mmakefile:
> tests/hard_coded/constant_prop_int.exp:
> tests/hard_coded/constant_prop_int.exp2:
> tests/hard_coded/constant_prop_int.m:
> 	Add test case.
>
> diff --git a/compiler/int_emu.m b/compiler/int_emu.m

...

> new file mode 100644
> index 0000000..d0562c5
> --- /dev/null
> +++ b/compiler/int_emu.m
> @@ -0,0 +1,180 @@
> +%----------------------------------------------------------------------------%
> +% vim: ft=mercury ts=4 sw=4 et
> +%----------------------------------------------------------------------------%
> +% Copyright (C) 2015 The University of Melbourne.

s/The University of Melbourne/The Mercury team/

The diff looks fine otherwise.

Cheers,
Julien.



More information about the reviews mailing list