* [PING][PATCH, rs6000, C/C++] Fix PR target/86324: divkc3-1.c FAILs when compiling with -mabi=ieeelongdouble
@ 2018-07-02 21:50 Peter Bergner
2018-07-05 19:36 ` Jeff Law
0 siblings, 1 reply; 4+ messages in thread
From: Peter Bergner @ 2018-07-02 21:50 UTC (permalink / raw)
To: Segher Boessenkool, Joseph Myers
Cc: GCC Patches, Jonathan Wakely, Michael Meissner, Bill Schmidt
I'd like to PING:
https://gcc.gnu.org/ml/gcc-patches/2018-06/msg01713.html
I've included the entire patch below, since I missed the test cases in
the original submission and Segher asked for some updated text for the
hook documentation which I've included below.
Peter
gcc/
PR target/86324
* target.def (translate_mode_attribute): New hook.
* targhooks.h (default_translate_mode_attribute): Declare.
* targhooks.c (default_translate_mode_attribute): New function.
* doc/tm.texi.in (TARGET_TRANSLATE_MODE_ATTRIBUTE): New hook.
* doc/tm.texi: Regenerate.
* config/rs6000/rs6000.c (TARGET_TRANSLATE_MODE_ATTRIBUTE): Define.
(rs6000_translate_mode_attribute): New function.
gcc/c-family/
PR target/86324
* c-attribs.c (handle_mode_attribute): Call new translate_mode_attribute
target hook.
gcc/testsuite/
PR target/86324
gcc.target/powerpc/pr86324-1.c: New test.
gcc.target/powerpc/pr86324-2.c: Likewise.
Index: gcc/target.def
===================================================================
--- gcc/target.def (revision 262159)
+++ gcc/target.def (working copy)
@@ -3310,6 +3310,16 @@ constants can be done inline. The funct
HOST_WIDE_INT, (const_tree constant, HOST_WIDE_INT basic_align),
default_constant_alignment)
+DEFHOOK
+(translate_mode_attribute,
+ "Define this hook if during mode attribute processing, the port should\n\
+translate machine_mode @var{mode} to another mode. For example, rs6000's\n\
+@code{KFmode}, when it is the same as @code{TFmode}.\n\
+\n\
+The default version of the hook returns that mode that was passed in.",
+ machine_mode, (machine_mode mode),
+ default_translate_mode_attribute)
+
/* True if MODE is valid for the target. By "valid", we mean able to
be manipulated in non-trivial ways. In particular, this means all
the arithmetic is supported. */
Index: gcc/targhooks.c
===================================================================
--- gcc/targhooks.c (revision 262159)
+++ gcc/targhooks.c (working copy)
@@ -393,6 +393,14 @@ default_mangle_assembler_name (const cha
return get_identifier (stripped);
}
+/* The default implementation of TARGET_TRANSLATE_MODE_ATTRIBUTE. */
+
+machine_mode
+default_translate_mode_attribute (machine_mode mode)
+{
+ return mode;
+}
+
/* True if MODE is valid for the target. By "valid", we mean able to
be manipulated in non-trivial ways. In particular, this means all
the arithmetic is supported.
Index: gcc/targhooks.h
===================================================================
--- gcc/targhooks.h (revision 262159)
+++ gcc/targhooks.h (working copy)
@@ -72,6 +72,7 @@ extern void default_print_operand_addres
extern bool default_print_operand_punct_valid_p (unsigned char);
extern tree default_mangle_assembler_name (const char *);
+extern machine_mode default_translate_mode_attribute (machine_mode);
extern bool default_scalar_mode_supported_p (scalar_mode);
extern bool default_libgcc_floating_mode_supported_p (scalar_float_mode);
extern opt_scalar_float_mode default_floatn_mode (int, bool);
Index: gcc/doc/tm.texi.in
===================================================================
--- gcc/doc/tm.texi.in (revision 262159)
+++ gcc/doc/tm.texi.in (working copy)
@@ -3336,6 +3336,8 @@ stack.
@hook TARGET_REF_MAY_ALIAS_ERRNO
+@hook TARGET_TRANSLATE_MODE_ATTRIBUTE
+
@hook TARGET_SCALAR_MODE_SUPPORTED_P
@hook TARGET_VECTOR_MODE_SUPPORTED_P
Index: gcc/doc/tm.texi
===================================================================
--- gcc/doc/tm.texi (revision 262159)
+++ gcc/doc/tm.texi (working copy)
@@ -4255,6 +4255,14 @@ hook returns true for both @code{ptr_mod
Define this to return nonzero if the memory reference @var{ref} may alias with the system C library errno location. The default version of this hook assumes the system C library errno location is either a declaration of type int or accessed by dereferencing a pointer to int.
@end deftypefn
+@deftypefn {Target Hook} machine_mode TARGET_TRANSLATE_MODE_ATTRIBUTE (machine_mode @var{mode})
+Define this hook if during mode attribute processing, the port should
+translate machine_mode @var{mode} to another mode. For example, rs6000's
+@code{KFmode}, when it is the same as @code{TFmode}.
+
+The default version of the hook returns that mode that was passed in.
+@end deftypefn
+
@deftypefn {Target Hook} bool TARGET_SCALAR_MODE_SUPPORTED_P (scalar_mode @var{mode})
Define this to return nonzero if the port is prepared to handle
insns involving scalar mode @var{mode}. For a scalar mode to be
Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c (revision 262159)
+++ gcc/config/rs6000/rs6000.c (working copy)
@@ -1802,6 +1802,9 @@ static const struct attribute_spec rs600
#undef TARGET_EH_RETURN_FILTER_MODE
#define TARGET_EH_RETURN_FILTER_MODE rs6000_eh_return_filter_mode
+#undef TARGET_TRANSLATE_MODE_ATTRIBUTE
+#define TARGET_TRANSLATE_MODE_ATTRIBUTE rs6000_translate_mode_attribute
+
#undef TARGET_SCALAR_MODE_SUPPORTED_P
#define TARGET_SCALAR_MODE_SUPPORTED_P rs6000_scalar_mode_supported_p
@@ -35677,6 +35680,18 @@ rs6000_eh_return_filter_mode (void)
return TARGET_32BIT ? SImode : word_mode;
}
+/* Target hook for translate_mode_attribute. */
+static machine_mode
+rs6000_translate_mode_attribute (machine_mode mode)
+{
+ if ((FLOAT128_IEEE_P (mode)
+ && ieee128_float_type_node == long_double_type_node)
+ || (FLOAT128_IBM_P (mode)
+ && ibm128_float_type_node == long_double_type_node))
+ return COMPLEX_MODE_P (mode) ? E_TCmode : E_TFmode;
+ return mode;
+}
+
/* Target hook for scalar_mode_supported_p. */
static bool
rs6000_scalar_mode_supported_p (scalar_mode mode)
Index: gcc/c-family/c-attribs.c
===================================================================
--- gcc/c-family/c-attribs.c (revision 262159)
+++ gcc/c-family/c-attribs.c (working copy)
@@ -1517,6 +1517,10 @@ handle_mode_attribute (tree *node, tree
return NULL_TREE;
}
+ /* Allow the target a chance to translate MODE into something supported.
+ See PR86324. */
+ mode = targetm.translate_mode_attribute (mode);
+
valid_mode = false;
switch (GET_MODE_CLASS (mode))
{
Index: gcc/testsuite/gcc.target/powerpc/pr86324-1.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/pr86324-1.c (nonexistent)
+++ gcc/testsuite/gcc.target/powerpc/pr86324-1.c (working copy)
@@ -0,0 +1,10 @@
+/* { dg-do compile { target { powerpc*-*-linux* } } } */
+/* { dg-options "-mlong-double-128 -mabi=ieeelongdouble -Wno-psabi" } */
+
+typedef __complex float cflt_t __attribute__((mode(KC)));
+
+cflt_t
+divide (cflt_t *ptr)
+{
+ return *ptr;
+}
Index: gcc/testsuite/gcc.target/powerpc/pr86324-2.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/pr86324-2.c (nonexistent)
+++ gcc/testsuite/gcc.target/powerpc/pr86324-2.c (working copy)
@@ -0,0 +1,10 @@
+/* { dg-do compile { target { powerpc*-*-linux* } } } */
+/* { dg-options "-mlong-double-128 -mabi=ibmlongdouble -Wno-psabi" } */
+
+typedef __complex float cflt_t __attribute__((mode(IC)));
+
+cflt_t
+divide (cflt_t *ptr)
+{
+ return *ptr;
+}
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PING][PATCH, rs6000, C/C++] Fix PR target/86324: divkc3-1.c FAILs when compiling with -mabi=ieeelongdouble
2018-07-02 21:50 [PING][PATCH, rs6000, C/C++] Fix PR target/86324: divkc3-1.c FAILs when compiling with -mabi=ieeelongdouble Peter Bergner
@ 2018-07-05 19:36 ` Jeff Law
2018-07-06 20:59 ` Peter Bergner
0 siblings, 1 reply; 4+ messages in thread
From: Jeff Law @ 2018-07-05 19:36 UTC (permalink / raw)
To: Peter Bergner, Segher Boessenkool, Joseph Myers
Cc: GCC Patches, Jonathan Wakely, Michael Meissner, Bill Schmidt
On 07/02/2018 03:50 PM, Peter Bergner wrote:
> I'd like to PING:
>
> https://gcc.gnu.org/ml/gcc-patches/2018-06/msg01713.html
>
> I've included the entire patch below, since I missed the test cases in
> the original submission and Segher asked for some updated text for the
> hook documentation which I've included below.
>
> Peter
>
>
> gcc/
> PR target/86324
> * target.def (translate_mode_attribute): New hook.
> * targhooks.h (default_translate_mode_attribute): Declare.
> * targhooks.c (default_translate_mode_attribute): New function.
> * doc/tm.texi.in (TARGET_TRANSLATE_MODE_ATTRIBUTE): New hook.
> * doc/tm.texi: Regenerate.
> * config/rs6000/rs6000.c (TARGET_TRANSLATE_MODE_ATTRIBUTE): Define.
> (rs6000_translate_mode_attribute): New function.
>
> gcc/c-family/
> PR target/86324
> * c-attribs.c (handle_mode_attribute): Call new translate_mode_attribute
> target hook.
>
> gcc/testsuite/
> PR target/86324
> gcc.target/powerpc/pr86324-1.c: New test.
> gcc.target/powerpc/pr86324-2.c: Likewise.
OK.
jeff
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PING][PATCH, rs6000, C/C++] Fix PR target/86324: divkc3-1.c FAILs when compiling with -mabi=ieeelongdouble
2018-07-05 19:36 ` Jeff Law
@ 2018-07-06 20:59 ` Peter Bergner
2018-07-09 21:10 ` Jeff Law
0 siblings, 1 reply; 4+ messages in thread
From: Peter Bergner @ 2018-07-06 20:59 UTC (permalink / raw)
To: Jeff Law
Cc: Segher Boessenkool, Joseph Myers, GCC Patches, Jonathan Wakely,
Michael Meissner, Bill Schmidt
On 7/5/18 2:36 PM, Jeff Law wrote:
> On 07/02/2018 03:50 PM, Peter Bergner wrote:
>> I'd like to PING:
>>
>> https://gcc.gnu.org/ml/gcc-patches/2018-06/msg01713.html
>>
>> I've included the entire patch below, since I missed the test cases in
>> the original submission and Segher asked for some updated text for the
>> hook documentation which I've included below.
>
> OK.
Is that an ok for GCC 8 as well which I asked for in the initial patch
submission?
Peter
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PING][PATCH, rs6000, C/C++] Fix PR target/86324: divkc3-1.c FAILs when compiling with -mabi=ieeelongdouble
2018-07-06 20:59 ` Peter Bergner
@ 2018-07-09 21:10 ` Jeff Law
0 siblings, 0 replies; 4+ messages in thread
From: Jeff Law @ 2018-07-09 21:10 UTC (permalink / raw)
To: Peter Bergner
Cc: Segher Boessenkool, Joseph Myers, GCC Patches, Jonathan Wakely,
Michael Meissner, Bill Schmidt
On 07/06/2018 02:59 PM, Peter Bergner wrote:
> On 7/5/18 2:36 PM, Jeff Law wrote:
>> On 07/02/2018 03:50 PM, Peter Bergner wrote:
>>> I'd like to PING:
>>>
>>> https://gcc.gnu.org/ml/gcc-patches/2018-06/msg01713.html
>>>
>>> I've included the entire patch below, since I missed the test cases in
>>> the original submission and Segher asked for some updated text for the
>>> hook documentation which I've included below.
>>
>> OK.
>
> Is that an ok for GCC 8 as well which I asked for in the initial patch
> submission?
Well, I think that's more up to Jakub and Richi -- it doesn't seem to me
like it fixes a regression, so ISTM they'd need to agree to an exception
here.
I don't think it's risky at all. BUt I don't want to step on their toes
since they're the release managers.
jeff
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-07-09 21:10 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-02 21:50 [PING][PATCH, rs6000, C/C++] Fix PR target/86324: divkc3-1.c FAILs when compiling with -mabi=ieeelongdouble Peter Bergner
2018-07-05 19:36 ` Jeff Law
2018-07-06 20:59 ` Peter Bergner
2018-07-09 21:10 ` Jeff Law
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).