Oops, now attach the correct patch and change log.

Thanks,
Yufeng

gcc/

        * config/aarch64/aarch64-builtins.c (aarch64_simd_expand_args):
        Call aarch64_simd_expand_args to update op[argc].


On 09/10/13 18:08, Yufeng Zhang wrote:
This patch fixes a number of test failures in gcc.target/aarch64/v*.c in
ILP32.

The corresponding RTL patterns for some load/store builtins have Pmode
(i.e. DImode) specified for their address operands.  However, coming
from a pointer-typed function argument, op[argc] will have SImode in
ILP32.  Instead of duplicating these RTL patterns to cope with SImode
operand (which e.g. would complicate arm_neon.h), we explicitly convert
the operand to Pmode here; an address operand in a RTL shall have Pmode
anyway.  Note that if op[argc] already has DImode,
convert_memory_address will simply return it
diff --git a/gcc/config/aarch64/aarch64-builtins.c 
b/gcc/config/aarch64/aarch64-builtins.c
index 6816b9c..0df5b3b 100644
--- a/gcc/config/aarch64/aarch64-builtins.c
+++ b/gcc/config/aarch64/aarch64-builtins.c
@@ -989,6 +989,8 @@ aarch64_simd_expand_args (rtx target, int icode, int 
have_retval,
          switch (thisarg)
            {
            case SIMD_ARG_COPY_TO_REG:
+             if (POINTER_TYPE_P (TREE_TYPE (arg[argc])))
+               op[argc] = convert_memory_address (Pmode, op[argc]);
              /*gcc_assert (GET_MODE (op[argc]) == mode[argc]); */
              if (!(*insn_data[icode].operand[argc + have_retval].predicate)
                  (op[argc], mode[argc]))

Reply via email to