On Mon, Oct 19, 2015 at 4:12 AM, Uros Bizjak <ubiz...@gmail.com> wrote: > On Mon, Oct 19, 2015 at 1:12 PM, H.J. Lu <hjl.to...@gmail.com> wrote: >> On Mon, Oct 19, 2015 at 4:05 AM, Uros Bizjak <ubiz...@gmail.com> wrote: >>> On Fri, Oct 16, 2015 at 7:42 PM, H.J. Lu <hongjiu...@intel.com> wrote: >>>> Since GET_MODE_ALIGNMENT is defined by psABI and the biggest alignment >>>> is 4 byte for IA MCU psABI, we should use GET_MODE_BITSIZE to get >>>> vector natural alignment to check misaligned vector move. >>>> >>>> OK for trunk? >>>> >>>> Thanks. >>>> >>>> H.J. >>>> --- >>>> * config/i386/i386.c (ix86_expand_vector_move): Use >>>> GET_MODE_BITSIZE to get vector natural alignment. >>>> --- >>>> gcc/config/i386/i386.c | 4 +++- >>>> 1 file changed, 3 insertions(+), 1 deletion(-) >>>> >>>> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c >>>> index ebe2b0a..d0e1f4c 100644 >>>> --- a/gcc/config/i386/i386.c >>>> +++ b/gcc/config/i386/i386.c >>>> @@ -18650,7 +18650,9 @@ void >>>> ix86_expand_vector_move (machine_mode mode, rtx operands[]) >>>> { >>>> rtx op0 = operands[0], op1 = operands[1]; >>>> - unsigned int align = GET_MODE_ALIGNMENT (mode); >>>> + /* Use GET_MODE_BITSIZE instead of GET_MODE_ALIGNMENT since the >>>> + biggest alignment is 4 byte for IA MCU psABI. */ >>>> + unsigned int align = GET_MODE_BITSIZE (mode); >>> >>> How about using TARGET_IAMCU condition here and using bitsize only for >>> TARGET_IAMCU? >>> >> >> Works for me. Is it OK with that change? > > Yes. >
This is what I checked in. Thanks. -- H.J. --- [PATCH] Use GET_MODE_BITSIZE to get vector natural alignment Since GET_MODE_ALIGNMENT is defined by psABI and the biggest alignment is 4 byte for IA MCU psABI, we should use GET_MODE_BITSIZE for IA MCU psABI to get vector natural alignment to check misaligned vector move. * config/i386/i386.c (ix86_expand_vector_move): Use GET_MODE_BITSIZE for IA MCU psABI to get vector natural alignment. --- gcc/config/i386/i386.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 1049455..a4f4b6f 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -18645,7 +18645,11 @@ void ix86_expand_vector_move (machine_mode mode, rtx operands[]) { rtx op0 = operands[0], op1 = operands[1]; - unsigned int align = GET_MODE_ALIGNMENT (mode); + /* Use GET_MODE_BITSIZE instead of GET_MODE_ALIGNMENT for IA MCU + psABI since the biggest alignment is 4 byte for IA MCU psABI. */ + unsigned int align = (TARGET_IAMCU + ? GET_MODE_BITSIZE (mode) + : GET_MODE_ALIGNMENT (mode)); if (push_operand (op0, VOIDmode)) op0 = emit_move_resolve_push (mode, op0); -- 2.4.3