From b21d5608cd35a17a3a7abb37277f712f0345a7a2 Mon Sep 17 00:00:00 2001
From: rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 22 May 2006 13:18:15 +0000
Subject: [PATCH] 2006-05-22  Richard Guenther  <rguenther@suse.de>

 	Revert
 	2006-01-31  Richard Guenther  <rguenther@suse.de>

 	* doc/invoke.texi (-msselibm): Document.
 	* target.h (expand_library_builtin): New target hook.
 	* builtins.c (expand_builtin): Use expand_library_builtin.
 	(default_expand_library_builtin): New function.
 	* gcc.c (LINK_GCC_MATH_SPEC): Define.
 	(LINK_COMMAND_SPEC): Handle %(link_gcc_math).
 	(link_gcc_math_spec): Declare.
 	(static_specs): Add link_gcc_math_spec.
 	* expr.h (default_expand_library_builtin): Declare.
 	* target-def.h (TARGET_EXPAND_LIBRARY_BUILTIN): Define.
 	(TARGET_INITIALIZER): Add TARGET_EXPAND_LIBRARY_BUILTIN.
 	* config/i386/i386.h: Provide LINK_GCC_MATH_SPEC.
 	* config/i386/i386.opt (msselibm): New target option.
 	* config/i386/i386.c (ix86_builtin_function_variants): New array.
 	(ix86_init_sse_abi_builtins): New function.
 	(ix86_expand_library_builtin): Likewise.
 	(TARGET_EXPAND_LIBRARY_BUILTIN): Define.
 	(override_options): Handle error conditions wrt -msselibm.
 	(ix86_builtins): Add function codes for SSE2 ABI builtins.
 	(ix86_init_builtins): Call ix86_init_sse_abi_builtins.
 	* doc/extend.texi (__builtin_sse2_*): Document new target specific
 	builtins.

 	* gcc.target/i386/sselibm-1.c: New testcase.
 	* gcc.target/i386/sselibm-2.c: Likewise.
 	* gcc.target/i386/sselibm-3.c: Likewise.
 	* gcc.target/i386/sselibm-4.c: Likewise.
 	* gcc.target/i386/sselibm-5.c: Likewise.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@113977 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog                             |  28 +++++
 gcc/builtins.c                            |  20 ----
 gcc/config/i386/i386.c                    | 120 ----------------------
 gcc/config/i386/i386.h                    |   2 -
 gcc/config/i386/i386.opt                  |   4 -
 gcc/doc/extend.texi                       |  29 ------
 gcc/doc/invoke.texi                       |   8 +-
 gcc/expr.h                                |   1 -
 gcc/gcc.c                                 |   8 +-
 gcc/target-def.h                          |   2 -
 gcc/target.h                              |   4 -
 gcc/testsuite/ChangeLog                   |  11 ++
 gcc/testsuite/gcc.target/i386/sselibm-1.c |  12 ---
 gcc/testsuite/gcc.target/i386/sselibm-2.c |  12 ---
 gcc/testsuite/gcc.target/i386/sselibm-3.c |  19 ----
 gcc/testsuite/gcc.target/i386/sselibm-4.c |  22 ----
 gcc/testsuite/gcc.target/i386/sselibm-5.c |  30 ------
 17 files changed, 41 insertions(+), 291 deletions(-)
 delete mode 100644 gcc/testsuite/gcc.target/i386/sselibm-1.c
 delete mode 100644 gcc/testsuite/gcc.target/i386/sselibm-2.c
 delete mode 100644 gcc/testsuite/gcc.target/i386/sselibm-3.c
 delete mode 100644 gcc/testsuite/gcc.target/i386/sselibm-4.c
 delete mode 100644 gcc/testsuite/gcc.target/i386/sselibm-5.c

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 222772d854ae..f2595b06524f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,31 @@
+2006-05-22  Richard Guenther  <rguenther@suse.de>
+
+	Revert
+	2006-01-31  Richard Guenther  <rguenther@suse.de>
+
+	* doc/invoke.texi (-msselibm): Document.
+	* target.h (expand_library_builtin): New target hook.
+	* builtins.c (expand_builtin): Use expand_library_builtin.
+	(default_expand_library_builtin): New function.
+	* gcc.c (LINK_GCC_MATH_SPEC): Define.
+	(LINK_COMMAND_SPEC): Handle %(link_gcc_math).
+	(link_gcc_math_spec): Declare.
+	(static_specs): Add link_gcc_math_spec.
+	* expr.h (default_expand_library_builtin): Declare.
+	* target-def.h (TARGET_EXPAND_LIBRARY_BUILTIN): Define.
+	(TARGET_INITIALIZER): Add TARGET_EXPAND_LIBRARY_BUILTIN.
+	* config/i386/i386.h: Provide LINK_GCC_MATH_SPEC.
+	* config/i386/i386.opt (msselibm): New target option.
+	* config/i386/i386.c (ix86_builtin_function_variants): New array.
+	(ix86_init_sse_abi_builtins): New function.
+	(ix86_expand_library_builtin): Likewise.
+	(TARGET_EXPAND_LIBRARY_BUILTIN): Define.
+	(override_options): Handle error conditions wrt -msselibm.
+	(ix86_builtins): Add function codes for SSE2 ABI builtins.
+	(ix86_init_builtins): Call ix86_init_sse_abi_builtins.
+	* doc/extend.texi (__builtin_sse2_*): Document new target specific
+	builtins.
+
 2006-05-22  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
 
 	PR c/27420
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 181f7c1cc5d2..b9d94ebcda97 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -5598,14 +5598,6 @@ expand_builtin (tree exp, rtx target, rtx subtarget, enum machine_mode mode,
 
   if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD)
     return targetm.expand_builtin (exp, target, subtarget, mode, ignore);
-  else
-    {
-      /* Try expanding the builtin via the generic target hook.  */
-      rtx tmp = targetm.expand_library_builtin (exp, target, subtarget,
-						mode, ignore);
-      if (tmp != NULL_RTX)
-	return tmp;
-    }
 
   /* When not optimizing, generate calls to library functions for a certain
      set of builtins.  */
@@ -8959,18 +8951,6 @@ default_expand_builtin (tree exp ATTRIBUTE_UNUSED,
   return NULL_RTX;
 }
 
-/* Default target-specific library builtin expander that does nothing.  */
-
-rtx
-default_expand_library_builtin (tree exp ATTRIBUTE_UNUSED,
-			rtx target ATTRIBUTE_UNUSED,
-			rtx subtarget ATTRIBUTE_UNUSED,
-			enum machine_mode mode ATTRIBUTE_UNUSED,
-			int ignore ATTRIBUTE_UNUSED)
-{
-  return NULL_RTX;
-}
-
 /* Returns true is EXP represents data that would potentially reside
    in a readonly section.  */
 
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index cfdcb2fc9264..d1f087c9d153 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -1067,9 +1067,6 @@ int ix86_section_threshold = 65536;
 /* Prefix built by ASM_GENERATE_INTERNAL_LABEL.  */
 char internal_label_prefix[16];
 int internal_label_prefix_len;
-
-/* Table for BUILT_IN_NORMAL to BUILT_IN_MD mapping.  */
-static GTY(()) tree ix86_builtin_function_variants[(int) END_BUILTINS];
 
 static bool ix86_handle_option (size_t, const char *, int);
 static void output_pic_addr_const (FILE *, rtx, int);
@@ -1104,7 +1101,6 @@ static int ix86_issue_rate (void);
 static int ix86_adjust_cost (rtx, rtx, rtx, int);
 static int ia32_multipass_dfa_lookahead (void);
 static void ix86_init_mmx_sse_builtins (void);
-static void ix86_init_sse_abi_builtins (void);
 static rtx x86_this_parameter (tree);
 static void x86_output_mi_thunk (FILE *, tree, HOST_WIDE_INT,
 				 HOST_WIDE_INT, tree);
@@ -1162,7 +1158,6 @@ static bool ix86_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode,
 				    tree, bool);
 static void ix86_init_builtins (void);
 static rtx ix86_expand_builtin (tree, rtx, rtx, enum machine_mode, int);
-static rtx ix86_expand_library_builtin (tree, rtx, rtx, enum machine_mode, int);
 static const char *ix86_mangle_fundamental_type (tree);
 static tree ix86_stack_protect_fail (void);
 static rtx ix86_internal_arg_pointer (void);
@@ -1227,8 +1222,6 @@ static section *x86_64_elf_select_section (tree decl, int reloc,
 #define TARGET_INIT_BUILTINS ix86_init_builtins
 #undef TARGET_EXPAND_BUILTIN
 #define TARGET_EXPAND_BUILTIN ix86_expand_builtin
-#undef TARGET_EXPAND_LIBRARY_BUILTIN
-#define TARGET_EXPAND_LIBRARY_BUILTIN ix86_expand_library_builtin
 
 #undef TARGET_ASM_FUNCTION_EPILOGUE
 #define TARGET_ASM_FUNCTION_EPILOGUE ix86_output_function_epilogue
@@ -1920,16 +1913,6 @@ override_options (void)
       && ! TARGET_SSE)
     error ("-msseregparm used without SSE enabled");
 
-  /* Accept -msselibm only if at least SSE support is enabled.  */
-  if (TARGET_SSELIBM
-      && ! TARGET_SSE2)
-    error ("-msselibm used without SSE2 enabled");
-
-  /* Ignore -msselibm on 64bit targets.  */
-  if (TARGET_SSELIBM
-      && TARGET_64BIT)
-    error ("-msselibm used on a 64bit target");
-
   ix86_fpmath = TARGET_FPMATH_DEFAULT;
 
   if (ix86_fpmath_string != 0)
@@ -14378,28 +14361,6 @@ enum ix86_builtins
   IX86_BUILTIN_VEC_SET_V8HI,
   IX86_BUILTIN_VEC_SET_V4HI,
 
-  /* SSE2 ABI functions.  */
-  IX86_BUILTIN_SSE2_ACOS,
-  IX86_BUILTIN_SSE2_ACOSF,
-  IX86_BUILTIN_SSE2_ASIN,
-  IX86_BUILTIN_SSE2_ASINF,
-  IX86_BUILTIN_SSE2_ATAN,
-  IX86_BUILTIN_SSE2_ATANF,
-  IX86_BUILTIN_SSE2_ATAN2,
-  IX86_BUILTIN_SSE2_ATAN2F,
-  IX86_BUILTIN_SSE2_COS,
-  IX86_BUILTIN_SSE2_COSF,
-  IX86_BUILTIN_SSE2_EXP,
-  IX86_BUILTIN_SSE2_EXPF,
-  IX86_BUILTIN_SSE2_LOG10,
-  IX86_BUILTIN_SSE2_LOG10F,
-  IX86_BUILTIN_SSE2_LOG,
-  IX86_BUILTIN_SSE2_LOGF,
-  IX86_BUILTIN_SSE2_SIN,
-  IX86_BUILTIN_SSE2_SINF,
-  IX86_BUILTIN_SSE2_TAN,
-  IX86_BUILTIN_SSE2_TANF,
-
   IX86_BUILTIN_MAX
 };
 
@@ -14781,8 +14742,6 @@ ix86_init_builtins (void)
 {
   if (TARGET_MMX)
     ix86_init_mmx_sse_builtins ();
-  if (TARGET_SSE2)
-    ix86_init_sse_abi_builtins ();
 }
 
 /* Set up all the MMX/SSE builtins.  This is not called if TARGET_MMX
@@ -15422,52 +15381,6 @@ ix86_init_mmx_sse_builtins (void)
   def_builtin (MASK_SSE | MASK_3DNOW_A, "__builtin_ia32_vec_set_v4hi",
 	       ftype, IX86_BUILTIN_VEC_SET_V4HI);
 }
-#undef def_builtin
-
-/* Set up all the SSE ABI builtins that we may use to override
-   the normal builtins.  */
-static void
-ix86_init_sse_abi_builtins (void)
-{
-  tree flt, flt2;
-
-  /* Bail out in case the template definitions are not available.  */
-  if (! built_in_decls [BUILT_IN_SIN]
-      || ! built_in_decls [BUILT_IN_SINF]
-      || ! built_in_decls [BUILT_IN_ATAN2]
-      || ! built_in_decls [BUILT_IN_ATAN2F])
-    return;
-
-  /* Build the function types as variants of the existing ones.  */
-  flt = build_variant_type_copy (TREE_TYPE (built_in_decls [BUILT_IN_SINF]));
-  TYPE_ATTRIBUTES (flt)
-    = tree_cons (get_identifier ("sseregparm"),
-                 NULL_TREE, TYPE_ATTRIBUTES (flt));
-  flt2 = build_variant_type_copy (TREE_TYPE (built_in_decls [BUILT_IN_ATAN2F]));
-  TYPE_ATTRIBUTES (flt2)
-    = tree_cons (get_identifier ("sseregparm"),
-                 NULL_TREE, TYPE_ATTRIBUTES (flt2));
-
-#define def_builtin(capname, name, type) \
-  ix86_builtin_function_variants [BUILT_IN_ ## capname]			\
-    = lang_hooks.builtin_function ("__builtin_sse2_" # name, type,	\
-				   IX86_BUILTIN_SSE2_ ## capname,	\
-				   BUILT_IN_NORMAL,			\
-				   "__libm_sse2_" # name, NULL_TREE)
- 
-  def_builtin (ACOSF, acosf, flt);
-  def_builtin (ASINF, asinf, flt);
-  def_builtin (ATANF, atanf, flt);
-  def_builtin (ATAN2F, atan2f, flt2);
-  def_builtin (COSF, cosf, flt);
-  def_builtin (EXPF, expf, flt);
-  def_builtin (LOG10F, log10f, flt);
-  def_builtin (LOGF, logf, flt);
-  def_builtin (SINF, sinf, flt);
-  def_builtin (TANF, tanf, flt);
-
-#undef def_builtin
-}
 
 /* Errors in the source file can cause expand_expr to return const0_rtx
    where we expect a vector.  To avoid crashing, use one of the vector
@@ -16302,39 +16215,6 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
   gcc_unreachable ();
 }
 
-/* Expand an expression EXP that calls a built-in library function,
-   with result going to TARGET if that's convenient
-   (and in mode MODE if that's convenient).
-   SUBTARGET may be used as the target for computing one of EXP's operands.
-   IGNORE is nonzero if the value is to be ignored.  */
-
-static rtx
-ix86_expand_library_builtin (tree exp, rtx target,
-			     rtx subtarget ATTRIBUTE_UNUSED,
-			     enum machine_mode mode ATTRIBUTE_UNUSED,
-			     int ignore)
-{
-  enum built_in_function fncode;
-  tree fndecl, newfn, call;
-
-  /* Try expanding builtin math functions to the SSE2 ABI variants.  */
-  if (!TARGET_SSELIBM)
-      return NULL_RTX;
-
-  fncode = builtin_mathfn_code (exp);
-  if (!ix86_builtin_function_variants [(int)fncode])
-    return NULL_RTX;
-
-  fndecl = get_callee_fndecl (exp);
-  if (DECL_RTL_SET_P (fndecl))
-    return NULL_RTX;
-
-  /* Build the redirected call and expand it.  */
-  newfn = ix86_builtin_function_variants [(int)fncode];
-  call = build_function_call_expr (newfn, TREE_OPERAND (exp, 1));
-  return expand_call (call, target, ignore);
-}
-
 /* Store OPERAND to the memory after reload is completed.  This means
    that we can't easily use assign_stack_local.  */
 rtx
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index a3a1129a5e3c..df1ba2472b67 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -513,8 +513,6 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
 #define EXTRA_SPECS							\
   { "cc1_cpu",  CC1_CPU_SPEC },						\
   SUBTARGET_EXTRA_SPECS
-
-#define LINK_GCC_MATH_SPEC "%{msselibm:-lgcc-math}"
 
 /* target machine storage layout */
 
diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt
index 6581291208d2..2922f5d2fe0a 100644
--- a/gcc/config/i386/i386.opt
+++ b/gcc/config/i386/i386.opt
@@ -201,10 +201,6 @@ msseregparm
 Target RejectNegative Mask(SSEREGPARM)
 Use SSE register passing conventions for SF and DF mode
 
-msselibm
-Target Mask(SSELIBM)
-Use SSE2 ABI libgcc-math routines if using SSE math
-
 mstackrealign
 Target Report Var(ix86_force_align_arg_pointer)
 Realign stack in prologue
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index a281f92cbc9b..08e94434eded 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -6856,35 +6856,6 @@ v2sf __builtin_ia32_pswapdsf (v2sf)
 v2si __builtin_ia32_pswapdsi (v2si)
 @end smallexample
 
-The following built-in functions are available when @option{-msse2}
-is used.  All of them generate calls to an SSE2 ABI IEEE754 math intrinsic
-that is part of the name.  Rather than using these directly you may
-want them automatically substituted for calls to the regular intrinsics
-using the @option{-msselibm}.
-
-@smallexample
-double __builtin_sse2_acos (double)
-float __builtin_sse2_acosf (float)
-double __builtin_sse2_asin (double)
-float __builtin_sse2_asinf (float)
-double __builtin_sse2_atan (double)
-float __builtin_sse2_atanf (float)
-double __builtin_sse2_atan2 (double, double)
-float __builtin_sse2_atan2f (float, float)
-double __builtin_sse2_cos (double)
-float __builtin_sse2_cosf (float)
-double __builtin_sse2_exp (double)
-float __builtin_sse2_expf (float)
-double __builtin_sse2_log10 (double)
-float __builtin_sse2_log10f (float)
-double __builtin_sse2_log (double)
-float __builtin_sse2_logf (float)
-double __builtin_sse2_sin (double)
-float __builtin_sse2_sinf (float)
-double __builtin_sse2_tan (double)
-float __builtin_sse2_tanf (float)
-@end smallexample
-
 @node MIPS DSP Built-in Functions
 @subsection MIPS DSP Built-in Functions
 
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 9ac49e999ebd..c8f5b35743d8 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -533,7 +533,7 @@ Objective-C and Objective-C++ Dialects}.
 -mno-fp-ret-in-387  -msoft-float  -msvr3-shlib @gol
 -mno-wide-multiply  -mrtd  -malign-double @gol
 -mpreferred-stack-boundary=@var{num} @gol
--mmmx  -msse  -msse2 -msse3 -m3dnow -msselibm @gol
+-mmmx  -msse  -msse2 -msse3 -m3dnow @gol
 -mthreads  -mno-align-stringops  -minline-all-stringops @gol
 -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double @gol
 -m96bit-long-double  -mregparm=@var{num}  -msseregparm @gol
@@ -9538,12 +9538,6 @@ supported architecture, using the appropriate flags.  In particular,
 the file containing the CPU detection code should be compiled without
 these options.
 
-@item -msselibm
-@opindex msselibm
-Use special versions of certain libm routines that come with an SSE
-ABI and an SSE implementation.  Useful together with @option{-mfpmath=sse}
-to avoid moving values between SSE registers and the x87 FP stack.
-
 @item -mpush-args
 @itemx -mno-push-args
 @opindex mpush-args
diff --git a/gcc/expr.h b/gcc/expr.h
index 9ba5d4e7da9b..42b98937a824 100644
--- a/gcc/expr.h
+++ b/gcc/expr.h
@@ -338,7 +338,6 @@ extern rtx expand_builtin (tree, rtx, rtx, enum machine_mode, int);
 extern tree std_build_builtin_va_list (void);
 extern void std_expand_builtin_va_start (tree, rtx);
 extern rtx default_expand_builtin (tree, rtx, rtx, enum machine_mode, int);
-extern rtx default_expand_library_builtin (tree, rtx, rtx, enum machine_mode, int);
 extern void expand_builtin_setjmp_setup (rtx, rtx);
 extern void expand_builtin_setjmp_receiver (rtx);
 extern rtx expand_builtin_saveregs (void);
diff --git a/gcc/gcc.c b/gcc/gcc.c
index 4c917aae1761..380f16561bff 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -682,10 +682,6 @@ proper position among the other output files.  */
 #endif
 #endif
 
-#ifndef LINK_GCC_MATH_SPEC
-#define LINK_GCC_MATH_SPEC ""
-#endif
-
 #ifndef LINK_PIE_SPEC
 #ifdef HAVE_LD_PIE
 #define LINK_PIE_SPEC "%{pie:-pie} "
@@ -708,7 +704,7 @@ proper position among the other output files.  */
     %{static:} %{L*} %(mfwrap) %(link_libgcc) %o\
     %{fopenmp:%:include(libgomp.spec)%(link_gomp)} %(mflib)\
     %{fprofile-arcs|fprofile-generate|coverage:-lgcov}\
-    %{!nostdlib:%{!nodefaultlibs:%(link_gcc_math) %(link_ssp) %(link_gcc_c_sequence)}}\
+    %{!nostdlib:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}\
     %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}"
 #endif
 
@@ -739,7 +735,6 @@ static const char *cc1_spec = CC1_SPEC;
 static const char *cc1plus_spec = CC1PLUS_SPEC;
 static const char *link_gcc_c_sequence_spec = LINK_GCC_C_SEQUENCE_SPEC;
 static const char *link_ssp_spec = LINK_SSP_SPEC;
-static const char *link_gcc_math_spec = LINK_GCC_MATH_SPEC;
 static const char *asm_spec = ASM_SPEC;
 static const char *asm_final_spec = ASM_FINAL_SPEC;
 static const char *link_spec = LINK_SPEC;
@@ -1547,7 +1542,6 @@ static struct spec_list static_specs[] =
   INIT_STATIC_SPEC ("cc1plus",			&cc1plus_spec),
   INIT_STATIC_SPEC ("link_gcc_c_sequence",	&link_gcc_c_sequence_spec),
   INIT_STATIC_SPEC ("link_ssp",			&link_ssp_spec),
-  INIT_STATIC_SPEC ("link_gcc_math",		&link_gcc_math_spec),
   INIT_STATIC_SPEC ("endfile",			&endfile_spec),
   INIT_STATIC_SPEC ("link",			&link_spec),
   INIT_STATIC_SPEC ("lib",			&lib_spec),
diff --git a/gcc/target-def.h b/gcc/target-def.h
index b1630a67d667..ff2ce03969a2 100644
--- a/gcc/target-def.h
+++ b/gcc/target-def.h
@@ -348,7 +348,6 @@ Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 /* In builtins.c.  */
 #define TARGET_INIT_BUILTINS hook_void_void
 #define TARGET_EXPAND_BUILTIN default_expand_builtin
-#define TARGET_EXPAND_LIBRARY_BUILTIN default_expand_library_builtin
 #define TARGET_RESOLVE_OVERLOADED_BUILTIN NULL
 #define TARGET_FOLD_BUILTIN hook_tree_tree_tree_bool_null
 
@@ -619,7 +618,6 @@ Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
   TARGET_NARROW_VOLATILE_BITFIELD,		\
   TARGET_INIT_BUILTINS,				\
   TARGET_EXPAND_BUILTIN,			\
-  TARGET_EXPAND_LIBRARY_BUILTIN,		\
   TARGET_RESOLVE_OVERLOADED_BUILTIN,		\
   TARGET_FOLD_BUILTIN,				\
   TARGET_MANGLE_FUNDAMENTAL_TYPE,		\
diff --git a/gcc/target.h b/gcc/target.h
index f0287545d7ec..c18fd62b0e64 100644
--- a/gcc/target.h
+++ b/gcc/target.h
@@ -430,10 +430,6 @@ struct gcc_target
   rtx (* expand_builtin) (tree exp, rtx target, rtx subtarget,
 			  enum machine_mode mode, int ignore);
 
-  /* Expand a target-specific library builtin.  */
-  rtx (* expand_library_builtin) (tree exp, rtx target, rtx subtarget,
-			  enum machine_mode mode, int ignore);
-
   /* Select a replacement for a target-specific builtin.  This is done
      *before* regular type checking, and so allows the target to implement
      a crude form of function overloading.  The result is a complete
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4d24c93e0c36..a341aadbb951 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,14 @@
+2006-05-22  Richard Guenther  <rguenther@suse.de>
+
+	Revert
+	2006-01-31  Richard Guenther  <rguenther@suse.de>
+
+	* gcc.target/i386/sselibm-1.c: New testcase.
+	* gcc.target/i386/sselibm-2.c: Likewise.
+	* gcc.target/i386/sselibm-3.c: Likewise.
+	* gcc.target/i386/sselibm-4.c: Likewise.
+	* gcc.target/i386/sselibm-5.c: Likewise.
+
 2006-05-22  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
 
 	PR c/27420
diff --git a/gcc/testsuite/gcc.target/i386/sselibm-1.c b/gcc/testsuite/gcc.target/i386/sselibm-1.c
deleted file mode 100644
index 82f553ba9468..000000000000
--- a/gcc/testsuite/gcc.target/i386/sselibm-1.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-msse2 -mfpmath=sse" } */
-/* { dg-require-effective-target ilp32 } */
-
-float sinf(float);
-
-float foo(float x)
-{
-  return sinf(x);
-}
-
-/* { dg-final { scan-assembler-not "__libm_sse2_sinf" } } */
diff --git a/gcc/testsuite/gcc.target/i386/sselibm-2.c b/gcc/testsuite/gcc.target/i386/sselibm-2.c
deleted file mode 100644
index 9c479b65c7ff..000000000000
--- a/gcc/testsuite/gcc.target/i386/sselibm-2.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-msse2 -mfpmath=sse -msselibm" } */
-/* { dg-require-effective-target ilp32 } */
-
-float sinf(float);
-
-float foo(float x)
-{
-  return sinf(x);
-}
-
-/* { dg-final { scan-assembler "__libm_sse2_sinf" } } */
diff --git a/gcc/testsuite/gcc.target/i386/sselibm-3.c b/gcc/testsuite/gcc.target/i386/sselibm-3.c
deleted file mode 100644
index eaa8d8fcf452..000000000000
--- a/gcc/testsuite/gcc.target/i386/sselibm-3.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-O1 -msse2 -mfpmath=sse -msselibm" } */
-/* { dg-require-effective-target ilp32 } */
-
-float sinf(float);
-float (*mysin)(float) = sinf;
-
-float f1(float x)
-{
-  return sinf(x);
-}
-
-float f2(float x)
-{
-  /* Verify we do not expand the following call to __libm_sse2_sinf.  */
-  return (*mysin)(x);
-}
-
-/* { dg-final { scan-assembler-times "__libm_sse2_sinf" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/sselibm-4.c b/gcc/testsuite/gcc.target/i386/sselibm-4.c
deleted file mode 100644
index 152672a61032..000000000000
--- a/gcc/testsuite/gcc.target/i386/sselibm-4.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-O1 -msse2 -mfpmath=sse -msselibm" } */
-/* { dg-require-effective-target ilp32 } */
-
-extern float acosf(float);
-extern float asinf(float);
-extern float atanf(float);
-extern float atan2f(float, float);
-extern float cosf(float);
-extern float expf(float);
-extern float log10f(float);
-extern float logf(float);
-extern float sinf(float);
-extern float tanf(float);
-
-float foof(float x)
-{
-  return acosf(x) + asinf(x) + atanf(x) + atan2f(x, x) + cosf(x) + expf(x)
-	+ log10f(x) + logf(x) + sinf(x) + tanf(x);
-}
-
-/* { dg-final { scan-assembler-times "__libm_sse2" 10 } } */
diff --git a/gcc/testsuite/gcc.target/i386/sselibm-5.c b/gcc/testsuite/gcc.target/i386/sselibm-5.c
deleted file mode 100644
index b7e4690f7742..000000000000
--- a/gcc/testsuite/gcc.target/i386/sselibm-5.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-O1 -msse2 -mfpmath=sse -msselibm" } */
-/* { dg-require-effective-target ilp32 } */
-
-extern float acosf(float);
-extern float asinf(float);
-extern float atanf(float);
-extern float atan2f(float, float);
-extern float cosf(float);
-extern float expf(float);
-extern float log10f(float);
-extern float logf(float);
-extern float sinf(float);
-extern float tanf(float);
-
-float foof(float x)
-{
-  return __builtin_sse2_acosf(x)
-	+ __builtin_sse2_asinf(x)
-	+ __builtin_sse2_atanf(x)
-	+ __builtin_sse2_atan2f(x, x)
-	+ __builtin_sse2_cosf(x)
-	+ __builtin_sse2_expf(x)
-	+ __builtin_sse2_log10f(x)
-	+ __builtin_sse2_logf(x)
-	+ __builtin_sse2_sinf(x)
-	+ __builtin_sse2_tanf(x);
-}
-
-/* { dg-final { scan-assembler-times "__libm_sse2" 10 } } */
-- 
GitLab