Use GET_MODE_BITSIZE to get vector natural alignment
authorH.J. Lu <hongjiu.lu@intel.com>
Mon, 19 Oct 2015 11:41:03 +0000 (11:41 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Mon, 19 Oct 2015 11:41:03 +0000 (04:41 -0700)
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.

From-SVN: r228969

gcc/ChangeLog
gcc/config/i386/i386.c

index db0aea418e498b3ccd0e343fa6b2198c721c6d32..b04f38ba0ac6cfb1a4ff98bf0624108a3159a321 100644 (file)
@@ -1,3 +1,9 @@
+2015-10-19  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * config/i386/i386.c (ix86_expand_vector_move): Use
+       GET_MODE_BITSIZE for IA MCU psABI to get vector natural
+       alignment.
+
 2015-10-19  H.J. Lu  <hongjiu.lu@intel.com>
 
        * doc/invoke.texi: Replace @optindex with @opindex.
index 1049455aa2a2512d91d1daa5c6fff4b97e86357f..a4f4b6fb8ab50b0074d8cc8566c7be80ba82a325 100644 (file)
@@ -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);