[m-rev.] for review: Fix lookup switches on subtype enums.

Julien Fischer jfischer at opturion.com
Fri Apr 9 17:12:36 AEST 2021


Hi Peter,

On Thu, 8 Apr 2021, Peter Wang wrote:

> compiler/switch_util.m:
>    Rename dont_need_bit_vec_check variant of need_bit_vec_check to
>    dont_need_bit_vec_check_no_gaps.
>
>    Add dont_need_bit_vec_check_with_gaps (see below).
>
>    Make type_range return the correct min and max values used by a
>    subtype enum type. For now, it fails unless the range of values
>    is contiguous.
>
>    Make find_int_lookup_switch_params use the min and max values for a
>    type returned by type_range, not assuming 0 to the max value.
>
>    Make find_int_lookup_switch_params return
>    dont_need_bit_vec_check_with_gaps when a bit vector check is not
>    required before a table lookup, yet the table is expected to contain
>    dummy rows. This is the case for a cannot_fail switch on a subtype
>    enum type type, where the subtype does not use some values between
>    the min and max values.
>
> compiler/dense_switch.m:
>    Make tagged_case_list_is_dense_switch use the min and max values for
>    a type returned by type_range, not assuming 0 to the max value.
>
> compiler/ml_lookup_switch.m:
>    Expect generated lookup table to contain dummy rows or not

    *the* generated lookup

>    depending on on dont_need_bit_vec_check_{with_gaps,no_gaps}.

Doubled-up "on" there.

>
>    Conform to change to need_bit_vec_check.
>
> compiler/lookup_switch.m:
> compiler/ml_string_switch.m:
>    Conform to change to need_bit_vec_check.

...

> diff --git a/compiler/switch_util.m b/compiler/switch_util.m
> index 720fc9241..85cb53cb8 100644
> --- a/compiler/switch_util.m
> +++ b/compiler/switch_util.m
> @@ -176,7 +176,8 @@
> 
> :- type need_bit_vec_check
>     --->    need_bit_vec_check
> -    ;       dont_need_bit_vec_check.
> +    ;       dont_need_bit_vec_check_no_gaps
> +    ;       dont_need_bit_vec_check_with_gaps.

It would be good to have a comment on this type describing the
distinction between the latter two cases.

That's fine otherwise.

Julien.


More information about the reviews mailing list