This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH, ARM] (commited) attribute target (thumb,arm) [6/6] respin (5th)
- From: Christian Bruel <christian dot bruel at st dot com>
- To: Kyrill Tkachov <kyrylo dot tkachov at foss dot arm dot com>, "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>, Ramana Radhakrishnan <Ramana dot Radhakrishnan at arm dot com>
- Date: Mon, 22 Jun 2015 09:57:25 +0200
- Subject: Re: [PATCH, ARM] (commited) attribute target (thumb,arm) [6/6] respin (5th)
- Authentication-results: sourceware.org; auth=none
- References: <554A253A dot 4080905 at st dot com> <5559A5B4 dot 7050007 at st dot com> <5576BA3C dot 2020101 at foss dot arm dot com>
Hello,
How about adding 'Undocumented' to the properties here?
Can we also get a test or two just to sanity check the option?
Otherwise the patch looks ok to me.
Thanks,
Kyrill
I've committed the attached patch. Sorry for the delay sorting out the
false failures.
Christian
Index: ChangeLog
===================================================================
--- ChangeLog (revision 224720)
+++ ChangeLog (revision 224722)
@@ -1,3 +1,11 @@
+2015-06-22 Christian Bruel <christian.bruel@st.com>
+
+ PR target/52144
+ * config/arm/arm.c (add_attribute, arm_insert_attributes): New functions
+ (TARGET_INSERT_ATTRIBUTES): Define.
+ (thumb_flipper): New var.
+ * config/arm/arm.opt (-mflip-thumb): New switch.
+
2015-06-22 Jan Hubicka <hubicka@ucw.cz>
Martin Liska <mliska@suse.cz>
Index: testsuite/gcc.target/arm/flip-thumb.c
===================================================================
--- testsuite/gcc.target/arm/flip-thumb.c (revision 0)
+++ testsuite/gcc.target/arm/flip-thumb.c (revision 224722)
@@ -0,0 +1,24 @@
+/* Check -mflip-thumb. */
+/* { dg-do compile } */
+/* { dg-options "-O2 -mflip-thumb -mno-restrict-it" } */
+/* { dg-final { scan-assembler ".arm" } } */
+/* { dg-final { scan-assembler-times ".thumb_func" 1} } */
+
+int
+foo(int a)
+{
+ return a ? 1 : 5;
+}
+
+int
+bar(int a)
+{
+ return a ? 1 : 5;
+}
+
+/* { dg-final { scan-assembler-times "ite" 1 { target { arm_thumb2_ok } } } } */
+
+
+
+
+
Index: testsuite/ChangeLog
===================================================================
--- testsuite/ChangeLog (revision 224720)
+++ testsuite/ChangeLog (revision 224722)
@@ -1,3 +1,8 @@
+2015-06-22 Christian Bruel <christian.bruel@st.com>
+
+ PR target/52144
+ * gcc.target/arm/flip-thumb.c: New test.
+
2015-06-22 Jan Hubicka <hubicka@ucw.cz>
Martin Liska <mliska@suse.cz>
Index: config/arm/arm.c
===================================================================
--- config/arm/arm.c (revision 224720)
+++ config/arm/arm.c (revision 224722)
@@ -84,6 +84,7 @@
#include "tm-constrs.h"
#include "rtl-iter.h"
#include "sched-int.h"
+#include "tree.h"
/* Forward definitions of types. */
typedef struct minipool_node Mnode;
@@ -218,6 +219,7 @@
static void arm_file_end (void);
static void arm_file_start (void);
+static void arm_insert_attributes (tree, tree *);
static void arm_setup_incoming_varargs (cumulative_args_t, machine_mode,
tree, int *, int);
@@ -376,6 +378,9 @@
#undef TARGET_ATTRIBUTE_TABLE
#define TARGET_ATTRIBUTE_TABLE arm_attribute_table
+#undef TARGET_INSERT_ATTRIBUTES
+#define TARGET_INSERT_ATTRIBUTES arm_insert_attributes
+
#undef TARGET_ASM_FILE_START
#define TARGET_ASM_FILE_START arm_file_start
#undef TARGET_ASM_FILE_END
@@ -2792,6 +2797,10 @@
? 1 : current_tune->max_insns_skipped;
}
+/* True if -mflip-thumb should next add an attribute for the default
+ mode, false if it should next add an attribute for the opposite mode. */
+static GTY(()) bool thumb_flipper;
+
/* Options after initial target override. */
static GTY(()) tree init_optimize;
@@ -3369,6 +3378,9 @@
options. */
target_option_default_node = target_option_current_node
= build_target_option_node (&global_options);
+
+ /* Init initial mode for testing. */
+ thumb_flipper = TARGET_THUMB;
}
static void
@@ -29459,6 +29471,52 @@
return build_target_option_node (opts);
}
+static void
+add_attribute (const char * mode, tree *attributes)
+{
+ size_t len = strlen (mode);
+ tree value = build_string (len, mode);
+
+ TREE_TYPE (value) = build_array_type (char_type_node,
+ build_index_type (size_int (len)));
+
+ *attributes = tree_cons (get_identifier ("target"),
+ build_tree_list (NULL_TREE, value),
+ *attributes);
+}
+
+/* For testing. Insert thumb or arm modes alternatively on functions. */
+
+static void
+arm_insert_attributes (tree fndecl, tree * attributes)
+{
+ const char *mode;
+
+ if (! TARGET_FLIP_THUMB)
+ return;
+
+ if (TREE_CODE (fndecl) != FUNCTION_DECL || DECL_EXTERNAL(fndecl)
+ || DECL_BUILT_IN (fndecl) || DECL_ARTIFICIAL (fndecl))
+ return;
+
+ /* Nested definitions must inherit mode. */
+ if (current_function_decl)
+ {
+ mode = TARGET_THUMB ? "thumb" : "arm";
+ add_attribute (mode, attributes);
+ return;
+ }
+
+ /* If there is already a setting don't change it. */
+ if (lookup_attribute ("target", *attributes) != NULL)
+ return;
+
+ mode = thumb_flipper ? "thumb" : "arm";
+ add_attribute (mode, attributes);
+
+ thumb_flipper = !thumb_flipper;
+}
+
/* Hook to validate attribute((target("string"))). */
static bool
Index: config/arm/arm.opt
===================================================================
--- config/arm/arm.opt (revision 224720)
+++ config/arm/arm.opt (revision 224722)
@@ -122,6 +122,10 @@
EnumValue
Enum(float_abi_type) String(hard) Value(ARM_FLOAT_ABI_HARD)
+mflip-thumb
+Target Report Var(TARGET_FLIP_THUMB) Undocumented
+Switch ARM/Thumb modes on alternating functions for compiler testing
+
mfp16-format=
Target RejectNegative Joined Enum(arm_fp16_format_type) Var(arm_fp16_format) Init(ARM_FP16_FORMAT_NONE)
Specify the __fp16 floating-point format