[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