[AArch64] Fix FAIL: gcc.target/aarch64/target_attr_crypto_ice_1.c (internal compiler error)
* config/aarch64/aarch64.c (aarch64_set_current_function): Re-layout any vector parameters have non-simd layout. * config/aarch64/aarch64-builtins.c (aarch64_relayout_simd_param): Delete. (aarch64_simd_expand_args): Delete call to the above. * gcc.target/aarch64/target_attr_crypto_ice_2.c: New test. From-SVN: r227363
This commit is contained in:
parent
6853b04cdd
commit
6e17a23b53
@ -1,3 +1,11 @@
|
||||
2015-09-01 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||
|
||||
* config/aarch64/aarch64.c (aarch64_set_current_function):
|
||||
Re-layout any vector parameters have non-simd layout.
|
||||
* config/aarch64/aarch64-builtins.c (aarch64_relayout_simd_param):
|
||||
Delete.
|
||||
(aarch64_simd_expand_args): Delete call to the above.
|
||||
|
||||
2015-08-31 Mike Frysinger <vapier@gentoo.org>
|
||||
|
||||
* doc/invoke.texi (asan-stack): Add space before option.
|
||||
|
@ -886,30 +886,6 @@ typedef enum
|
||||
SIMD_ARG_STOP
|
||||
} builtin_simd_arg;
|
||||
|
||||
/* Relayout the decl of a function arg. Keep the RTL component the same,
|
||||
as varasm.c ICEs. It doesn't like reinitializing the RTL
|
||||
on PARM decls. Something like this needs to be done when compiling a
|
||||
file without SIMD and then tagging a function with +simd and using SIMD
|
||||
intrinsics in there. The types will have been laid out assuming no SIMD,
|
||||
so we want to re-lay them out. */
|
||||
|
||||
static void
|
||||
aarch64_relayout_simd_param (tree arg)
|
||||
{
|
||||
tree argdecl = arg;
|
||||
if (TREE_CODE (argdecl) == SSA_NAME)
|
||||
argdecl = SSA_NAME_VAR (argdecl);
|
||||
|
||||
if (argdecl
|
||||
&& (TREE_CODE (argdecl) == PARM_DECL
|
||||
|| TREE_CODE (argdecl) == VAR_DECL))
|
||||
{
|
||||
rtx rtl = NULL_RTX;
|
||||
rtl = DECL_RTL_IF_SET (argdecl);
|
||||
relayout_decl (argdecl);
|
||||
SET_DECL_RTL (argdecl, rtl);
|
||||
}
|
||||
}
|
||||
|
||||
static rtx
|
||||
aarch64_simd_expand_args (rtx target, int icode, int have_retval,
|
||||
@ -940,7 +916,6 @@ aarch64_simd_expand_args (rtx target, int icode, int have_retval,
|
||||
{
|
||||
tree arg = CALL_EXPR_ARG (exp, opc - have_retval);
|
||||
enum machine_mode mode = insn_data[icode].operand[opc].mode;
|
||||
aarch64_relayout_simd_param (arg);
|
||||
op[opc] = expand_normal (arg);
|
||||
|
||||
switch (thisarg)
|
||||
|
@ -8111,6 +8111,23 @@ aarch64_set_current_function (tree fndecl)
|
||||
= save_target_globals_default_opts ();
|
||||
}
|
||||
}
|
||||
|
||||
if (!fndecl)
|
||||
return;
|
||||
|
||||
/* If we turned on SIMD make sure that any vector parameters are re-laid out
|
||||
so that they use proper vector modes. */
|
||||
if (TARGET_SIMD)
|
||||
{
|
||||
tree parms = DECL_ARGUMENTS (fndecl);
|
||||
for (; parms && parms != void_list_node; parms = TREE_CHAIN (parms))
|
||||
{
|
||||
if (TREE_CODE (parms) == PARM_DECL
|
||||
&& VECTOR_TYPE_P (TREE_TYPE (parms))
|
||||
&& DECL_MODE (parms) != TYPE_MODE (TREE_TYPE (parms)))
|
||||
relayout_decl (parms);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Enum describing the various ways we can handle attributes.
|
||||
|
@ -1,3 +1,7 @@
|
||||
2015-09-01 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||
|
||||
* gcc.target/aarch64/target_attr_crypto_ice_2.c: New test.
|
||||
|
||||
2015-09-01 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/61753
|
||||
|
20
gcc/testsuite/gcc.target/aarch64/target_attr_crypto_ice_2.c
Normal file
20
gcc/testsuite/gcc.target/aarch64/target_attr_crypto_ice_2.c
Normal file
@ -0,0 +1,20 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mcpu=thunderx+nofp" } */
|
||||
|
||||
/* Make sure that we don't ICE when dealing with vector parameters
|
||||
in a simd-tagged function within a non-simd translation unit. */
|
||||
|
||||
#pragma GCC push_options
|
||||
#pragma GCC target ("+nothing+simd")
|
||||
typedef unsigned int __uint32_t;
|
||||
typedef __uint32_t uint32_t ;
|
||||
typedef __Uint32x4_t uint32x4_t;
|
||||
#pragma GCC pop_options
|
||||
|
||||
|
||||
__attribute__ ((target ("cpu=cortex-a57")))
|
||||
uint32x4_t
|
||||
foo (uint32x4_t a, uint32_t b, uint32x4_t c)
|
||||
{
|
||||
return c;
|
||||
}
|
Loading…
Reference in New Issue
Block a user