Commit 00c02a70 by Christian Bruel Committed by Christian Bruel

re PR target/65837 ([arm-linux-gnueabihf] lto1 target specific builtin not available)

2015-11-16  Christian Bruel  <christian.bruel@st.com>

	PR target/65837
	* config/arm/arm-protos.h (arm_init_neon_builtins): Declare.
	* config/arm/arm.c (arm_valid_target_attribute_tree): Call
	arm_init_neon_builtins.
	* config/arm/arm-builtins.c (arm_init_neon_builtins): Split into...
	(arm_init_neon_builtins_internal)
	(arm_init_crypto_builtins_internal):
	Test and set neon_set_p, neon_crypto_set_p.
	(neon_set_p, neon_crypto_set_p): New static booleans.

From-SVN: r230406
parent da225f53
2015-11-16 Christian Bruel <christian.bruel@st.com> 2015-11-16 Christian Bruel <christian.bruel@st.com>
PR target/65837 PR target/65837
* config/arm/arm-protos.h (arm_init_neon_builtins): Declare.
* config/arm/arm.c (arm_valid_target_attribute_tree): Call
arm_init_neon_builtins.
* config/arm/arm-builtins.c (arm_init_neon_builtins): Split into...
(arm_init_neon_builtins_internal)
(arm_init_crypto_builtins_internal):
Test and set neon_set_p, neon_crypto_set_p.
(neon_set_p, neon_crypto_set_p): New static booleans.
2015-11-16 Christian Bruel <christian.bruel@st.com>
PR target/65837
* config/arm/arm.c (arm_fpu_desc): Remove. * config/arm/arm.c (arm_fpu_desc): Remove.
(all_fpus): Make global. (all_fpus): Make global.
(arm_option_override): Use FPU TARGET accessors. (arm_option_override): Use FPU TARGET accessors.
...@@ -893,7 +893,7 @@ arm_init_simd_builtin_scalar_types (void) ...@@ -893,7 +893,7 @@ arm_init_simd_builtin_scalar_types (void)
} }
static void static void
arm_init_neon_builtins (void) arm_init_neon_builtins_internal (void)
{ {
unsigned int i, fcode = ARM_BUILTIN_NEON_PATTERN_START; unsigned int i, fcode = ARM_BUILTIN_NEON_PATTERN_START;
...@@ -1014,16 +1014,16 @@ arm_init_neon_builtins (void) ...@@ -1014,16 +1014,16 @@ arm_init_neon_builtins (void)
NULL, NULL_TREE); NULL, NULL_TREE);
arm_builtin_decls[fcode] = fndecl; arm_builtin_decls[fcode] = fndecl;
} }
}
if (TARGET_CRYPTO && TARGET_HARD_FLOAT) static void
{ arm_init_crypto_builtins_internal (void)
tree V16UQI_type_node = arm_simd_builtin_type (V16QImode, {
true, tree V16UQI_type_node
false); = arm_simd_builtin_type (V16QImode, true, false);
tree V4USI_type_node = arm_simd_builtin_type (V4SImode, tree V4USI_type_node
true, = arm_simd_builtin_type (V4SImode, true, false);
false);
tree v16uqi_ftype_v16uqi tree v16uqi_ftype_v16uqi
= build_function_type_list (V16UQI_type_node, V16UQI_type_node, = build_function_type_list (V16UQI_type_node, V16UQI_type_node,
...@@ -1095,6 +1095,24 @@ arm_init_neon_builtins (void) ...@@ -1095,6 +1095,24 @@ arm_init_neon_builtins (void)
#undef FT1 #undef FT1
#undef FT2 #undef FT2
#undef FT3 #undef FT3
}
static bool neon_set_p = false;
static bool neon_crypto_set_p = false;
void
arm_init_neon_builtins (void)
{
if (! neon_set_p)
{
neon_set_p = true;
arm_init_neon_builtins_internal ();
}
if (!neon_crypto_set_p && TARGET_CRYPTO && TARGET_HARD_FLOAT)
{
neon_crypto_set_p = true;
arm_init_crypto_builtins_internal ();
} }
} }
......
...@@ -214,6 +214,7 @@ extern void arm_mark_dllimport (tree); ...@@ -214,6 +214,7 @@ extern void arm_mark_dllimport (tree);
extern bool arm_change_mode_p (tree); extern bool arm_change_mode_p (tree);
#endif #endif
extern void arm_init_neon_builtins (void);
extern tree arm_valid_target_attribute_tree (tree, struct gcc_options *, extern tree arm_valid_target_attribute_tree (tree, struct gcc_options *,
struct gcc_options *); struct gcc_options *);
extern void arm_pr_long_calls (struct cpp_reader *); extern void arm_pr_long_calls (struct cpp_reader *);
......
...@@ -29846,6 +29846,9 @@ arm_valid_target_attribute_tree (tree args, struct gcc_options *opts, ...@@ -29846,6 +29846,9 @@ arm_valid_target_attribute_tree (tree args, struct gcc_options *opts,
/* Do any overrides, such as global options arch=xxx. */ /* Do any overrides, such as global options arch=xxx. */
arm_option_override_internal (opts, opts_set); arm_option_override_internal (opts, opts_set);
if (TARGET_NEON)
arm_init_neon_builtins ();
return build_target_option_node (opts); return build_target_option_node (opts);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment