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

Reply via email to