public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-8261] i386: Fix up ICE with -mveclibabi={acml, svml} [PR105367]
@ 2022-04-26  7:40 Jakub Jelinek
  0 siblings, 0 replies; only message in thread
From: Jakub Jelinek @ 2022-04-26  7:40 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:5face32b7f439bba283e2eeb2a50f192d605bf57

commit r12-8261-g5face32b7f439bba283e2eeb2a50f192d605bf57
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Tue Apr 26 09:40:03 2022 +0200

    i386: Fix up ICE with -mveclibabi={acml,svml} [PR105367]
    
    The following testcase ICEs, because conversion between scalar float types
    which have the same mode are useless in GIMPLE, but for mathfn_built_in the
    exact type matters (it treats say double and _Float64 or float and _Float32
    differently, using different suffixes and for the _Float* sometimes
    returning NULL when float/double do have a builtin).
    
    In ix86_veclibabi_{svml,acml} we are using mathfn_built_in just so that
    we don't have to translate the combined_fn and SFmode vs. DFmode into
    strings ourselfs, and we already earlier punt on anything but SFmode and
    DFmode.  So, this patch just uses the double or float types depending
    on the modes, rather than the types we actually got and which might be
    _Float64 or _Float32 etc.
    
    2022-04-26  Jakub Jelinek  <jakub@redhat.com>
    
            PR target/105367
            * config/i386/i386.cc (ix86_veclibabi_svml, ix86_veclibabi_acml): Pass
            el_mode == DFmode ? double_type_node : float_type_node instead of
            TREE_TYPE (type_in) as first arguments to mathfn_built_in.
    
            * gcc.target/i386/pr105367.c: New test.

Diff:
---
 gcc/config/i386/i386.cc                  |  6 ++++--
 gcc/testsuite/gcc.target/i386/pr105367.c | 12 ++++++++++++
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc
index 8d8b094889f..52040da8c47 100644
--- a/gcc/config/i386/i386.cc
+++ b/gcc/config/i386/i386.cc
@@ -18807,7 +18807,8 @@ ix86_veclibabi_svml (combined_fn fn, tree type_out, tree type_in)
       return NULL_TREE;
     }
 
-  tree fndecl = mathfn_built_in (TREE_TYPE (type_in), fn);
+  tree fndecl = mathfn_built_in (el_mode == DFmode
+				 ? double_type_node : float_type_node, fn);
   bname = IDENTIFIER_POINTER (DECL_NAME (fndecl));
 
   if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_LOGF)
@@ -18899,7 +18900,8 @@ ix86_veclibabi_acml (combined_fn fn, tree type_out, tree type_in)
       return NULL_TREE;
     }
 
-  tree fndecl = mathfn_built_in (TREE_TYPE (type_in), fn);
+  tree fndecl = mathfn_built_in (el_mode == DFmode
+				 ? double_type_node : float_type_node, fn);
   bname = IDENTIFIER_POINTER (DECL_NAME (fndecl));
   sprintf (name + 7, "%s", bname+10);
 
diff --git a/gcc/testsuite/gcc.target/i386/pr105367.c b/gcc/testsuite/gcc.target/i386/pr105367.c
new file mode 100644
index 00000000000..558e3e58e4e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr105367.c
@@ -0,0 +1,12 @@
+/* PR target/105367 */
+/* { dg-do compile } */
+/* { dg-options "-Ofast -mveclibabi=acml" } */
+
+_Float64 g;
+
+void
+foo (void)
+{
+  _Float64 f = __builtin_sin (g);
+  g = __builtin_fmax (__builtin_sin (f), f);
+}


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-04-26  7:40 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-26  7:40 [gcc r12-8261] i386: Fix up ICE with -mveclibabi={acml, svml} [PR105367] Jakub Jelinek

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).