------- Comment #33 from fxcoudert at gcc dot gnu dot org 2008-02-22 13:22 ------- (In reply to comment #26) >> but the Fortran front-end apparently doesn't benefit from it: > > The weird thing is that we go through the code of the patch, so I'm not sure > why it still fails.
Here is the fndecl that is given to build_call_array() when emitting code for the call to __builtin_asinl: * debug_tree (DECL_ASSEMBLER_NAME (fndecl)) gives "<identifier_node 0x40f36a80 asinl$LDBL128>" * debug_tree (addr) gives (where addr is equal to build_addr (fndecl, current_function_decl)): <addr_expr 0x40f4b140 type <pointer_type 0x40f48540 type <function_type 0x40f1ec40 type <real_type 0x40f13c40 real(kind=16)> SI size <integer_cst 0x40cbc510 constant invariant 32> unit size <integer_cst 0x40cbc180 constant invariant 4> align 32 symtab 0 alias set -1 canonical type 0x40f1ec40 arg-types <tree_list 0x40f24780 value <real_type 0x40f13c40 real(kind=16)> chain <tree_list 0x40f087a0 value <void_type 0x40f139a0 void>>> pointer_to_this <pointer_type 0x40f48540>> unsigned SI size <integer_cst 0x40cbc510 32> unit size <integer_cst 0x40cbc180 4> align 32 symtab 0 alias set -1 canonical type 0x40f48540> readonly constant invariant arg 0 <function_decl 0x40f26100 __builtin_asinl type <function_type 0x40f1ec40> readonly addressable public external built-in SI file (null) line 0 col 0 align 32 built-in BUILT_IN_NORMAL:BUILT_IN_ASINL (mem:SI (symbol_ref:SI ("asinl") [flags 0x41] <function_decl 0x40f26100 __builtin_asinl>) [0 S4 A8]) chain <function_decl 0x40f26080 __builtin_acoshf type <function_type 0x40f1e9a0> readonly public external built-in SI file (null) line 0 col 0 align 32 built-in BUILT_IN_NORMAL:BUILT_IN_ACOSHF (mem:SI (symbol_ref:SI ("acoshf") [flags 0x41] <function_decl 0x40f26080 __builtin_acoshf>) [0 S4 A8]) chain <function_decl 0x40f26000 __builtin_acosh>>>> So, the assembler name is set up correctly, and I don't see anything wrong in how we handle things. Question is: why do we still end up calling asinl and not asinl$LDBL128? In other terms, why aren't we using the assembler name of the function decl? PS: a simple testcase such as real function foo(x) real(16) :: x foo = asin(x) end generates assembly that has "bl _asinl" instead of the expected "bl _asinl$LDB128". -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25477