On Mon, Nov 2, 2015 at 8:41 PM, Jeff Law <l...@redhat.com> wrote: > On 10/29/2015 07:08 AM, Ilya Enkovich wrote: >> >> On 28 Oct 22:37, Ilya Enkovich wrote: >>> >>> Seems the problem occurs in this check in expand_vector_operations_1: >>> >>> /* A scalar operation pretending to be a vector one. */ >>> if (VECTOR_BOOLEAN_TYPE_P (type) >>> && !VECTOR_MODE_P (TYPE_MODE (type)) >>> && TYPE_MODE (type) != BLKmode) >>> return; >>> >>> This is to filter out scalar operations on boolean vectors. >>> The problem here is that TYPE_MODE (type) doesn't return >>> V4SImode assigned to the type but calls vector_type_mode >>> instead which tries to find an integer mode for it and returns >>> TImode. This causes function exit and we don't expand vector >>> comparison. >>> >>> Suppose simple option to fix it is to change default get_mask_mode >>> hook to return BLKmode in case chosen integer vector mode is not >>> vector_mode_supported_p. >>> >>> Thanks, >>> Ilya >>> >> >> Here is a patch which fixes the problem on ARM (and on i386 with -mno-sse >> also). I checked it fixes the problem on ARM and also bootstrapped and >> checked it on x86_64-unknown-linux-gnu. Is it OK? >> >> Thanks, >> Ilya >> -- >> gcc/ >> >> 2015-10-29 Ilya Enkovich <enkovich....@gmail.com> >> >> * targhooks.c (default_get_mask_mode): Use BLKmode in >> case target doesn't support required vector mode. >> * stor-layout.c (layout_type): Check for BLKmode. > > VOIDmode would probably be a better choice than BLKmode to signal when the > target doesn't support the required vector mode.
Though we're using BLKmode vectors in all other cases to signal that. Richard. > > Jeff >