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.
This commit is contained in:
parent
22c24ba48a
commit
5face32b7f
@ -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);
|
||||
|
||||
|
12
gcc/testsuite/gcc.target/i386/pr105367.c
Normal file
12
gcc/testsuite/gcc.target/i386/pr105367.c
Normal file
@ -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);
|
||||
}
|
Loading…
Reference in New Issue
Block a user