[PATCH][LTO,ARM] Fix vector TYPE_MODE in streaming-out

Bernd Schmidt bschmidt@redhat.com
Tue Dec 15 16:14:00 GMT 2015


On 12/15/2015 04:09 PM, Christian Bruel wrote:
> in "normal" mode, the TYPE_MODE for vector_type __simd64_int8_t is set
> to V8QImode by arm_vector_mode_supported_p during the builtins type
> initializations, thanks to TARGET_NEON set bu the global flag.
>
> Now, in LTO mode the streamer writes the information for this
> vector_type as a scalar DImode, causing ICEs during arm_expand_builtin.
> The root cause of this is that the streamer-out uses TYPE_MODE in a
> context where the target_flags are not known return false for TARGET_NEON.
>
> The streamer-in then will then read the wrong mode that propagates to
> the back-end.

>  static void
>  pack_ts_type_common_value_fields (struct bitpack_d *bp, tree expr)
>  {
> -  bp_pack_machine_mode (bp, TYPE_MODE (expr));
> +  bp_pack_machine_mode (bp, expr->type_common.mode);

This looks sensible given that tree-streamer-in uses SET_TYPE_MODE, 
which just writes expr->type_common.mode.

Make a new macro TYPE_MODE_RAW for this and I think the patch is ok 
(although there's precedent for direct access in vector_type_mode, but I 
think that's just bad).


Bernd



More information about the Gcc-patches mailing list