svn commit: r260194 - in head/contrib/gcc: . cp

Pedro F. Giffuni pfg at FreeBSD.org
Thu Jan 2 13:53:55 UTC 2014


Author: pfg
Date: Thu Jan  2 13:53:53 2014
New Revision: 260194
URL: http://svnweb.freebsd.org/changeset/base/260194

Log:
  Revert r260073; small diff reduction wrt gcc43 and Apple GCC.
  
  Unfortunately this causes ICE on powerpc and sparc64.
  
  Reducing these differences against upstream is not important
  anymore so hopefully I have finished breaking the compiler
  occasionally.

Modified:
  head/contrib/gcc/ChangeLog.gcc43
  head/contrib/gcc/cp/ChangeLog
  head/contrib/gcc/cp/g++spec.c
  head/contrib/gcc/libgcc2.c
  head/contrib/gcc/libgcc2.h
  head/contrib/gcc/loop-init.c
  head/contrib/gcc/toplev.c
  head/contrib/gcc/tree-ssa-address.c

Modified: head/contrib/gcc/ChangeLog.gcc43
==============================================================================
--- head/contrib/gcc/ChangeLog.gcc43	Thu Jan  2 13:48:54 2014	(r260193)
+++ head/contrib/gcc/ChangeLog.gcc43	Thu Jan  2 13:53:53 2014	(r260194)
@@ -156,15 +156,6 @@
 	* reload1.c (merge_assigned_reloads) : Do not merge a RELOAD_OTHER
 	instruction with a RELOAD_FOR_OPERAND_ADDRESS instruction.
 
-2007-04-24  Richard Henderson  <rth at redhat.com> (r124106)
-
-	* libgcc2.h (AVOID_FP_TYPE_CONVERSION): Rename from 
-	IS_IBM_EXTENDED.  Also define in terms of WIDEST_HARDWARE_FP_SIZE.
-	* libgcc2.c (__floatdisf): Avoid double-word arithmetic when
-	looking for non-zero bits shifted out.  Avoid a recursive call
-	when constructing the scalar.
-	(__floatundisf): Likewise.
-
 2007-04-16  Lawrence Crowl  <crowl at google.com> (r123909)
 
 	* doc/invoke.texi (Debugging Options): Add documentation for the
@@ -257,11 +248,6 @@
 	* tree-vrp.c (vrp_int_const_binop): Handle PLUS_EXPR and
 	the *_DIV_EXPR codes correctly with overflow infinities.
 
-2007-03-04  Zdenek Dvorak  <dvorakz at suse.cz> (r122528)
-
-	* tree-ssa-address.c (create_mem_ref): Do not put an expression
-	containing a cast to the base of TARGET_MEM_REF.
-
 2007-02-09  Dwarakanath Rajagopal <dwarak.rajagopal at amd.com> (r121763)
 
 	* config/i386/driver-i386.c: Turn on -mtune=native for AMDFAM10.
@@ -438,11 +424,6 @@
 	and amdfam10.
 	* doc/extend.texi: Add documentation for SSE4A builtins.
 
-2007-02-01  Zdenek Dvorak <dvorakz at suse.cz> (r121464)
-
-	* toplev.c (lang_dependent_init): Call init_set_costs.
-	* loop-init.c (loop_optimizer_init): Do not call init_set_costs.
-
 2007-01-24  Jakub Jelinek  <jakub at redhat.com> (r121140)
 
 	* config/i386/i386.h (x86_cmpxchg16b): Remove const.

Modified: head/contrib/gcc/cp/ChangeLog
==============================================================================
--- head/contrib/gcc/cp/ChangeLog	Thu Jan  2 13:48:54 2014	(r260193)
+++ head/contrib/gcc/cp/ChangeLog	Thu Jan  2 13:53:53 2014	(r260194)
@@ -314,12 +314,6 @@
 	PR c++/30895
 	* tree.c (cp_tree_equal): Properly handle COMPLEX_CST trees.
 
-2007-03-02  Geoffrey Keating  <geoffk at apple.com> (r122488)
-
-	* g++spec.c (lang_specific_driver): Add -lstdc++ when compiling
-	Objective-C++.  Don't exit early if -shared-libgcc needs to be
-	added.
-
 2007-02-22  Simon Martin  <simartin at users.sourceforge.net>
 
 	PR c++/29475

Modified: head/contrib/gcc/cp/g++spec.c
==============================================================================
--- head/contrib/gcc/cp/g++spec.c	Thu Jan  2 13:48:54 2014	(r260193)
+++ head/contrib/gcc/cp/g++spec.c	Thu Jan  2 13:53:53 2014	(r260194)
@@ -159,19 +159,11 @@ lang_specific_driver (int *in_argc, cons
 		arg = "";
 	      if (library == 0
 		  && (strcmp (arg, "c++") == 0
-		      || strcmp (arg, "c++-cpp-output") == 0
-		      || strcmp (arg, "objective-c++") == 0
-		      || strcmp (arg, "objective-c++-cpp-output") == 0))
+		      || strcmp (arg, "c++-cpp-output") == 0))
 		library = 1;
 		
 	      saw_speclang = 1;
 	    }
-	  else if (strcmp (argv[i], "-ObjC++") == 0)
-	    {
-	      if (library == 0)
-		library = 1;
-	      saw_speclang = 1;
-	    }
 	  /* Arguments that go directly to the linker might be .o files,
 	     or something, and so might cause libstdc++ to be needed.  */
 	  else if (strcmp (argv[i], "-Xlinker") == 0)
@@ -245,6 +237,13 @@ lang_specific_driver (int *in_argc, cons
   if (quote)
     fatal ("argument to '%s' missing\n", quote);
 
+  /* If we know we don't have to do anything, bail now.  */
+  if (! added && library <= 0)
+    {
+      free (args);
+      return;
+    }
+
   /* There's no point adding -shared-libgcc if we don't have a shared
      libgcc.  */
 #ifndef ENABLE_SHARED_LIBGCC

Modified: head/contrib/gcc/libgcc2.c
==============================================================================
--- head/contrib/gcc/libgcc2.c	Thu Jan  2 13:48:54 2014	(r260193)
+++ head/contrib/gcc/libgcc2.c	Thu Jan  2 13:53:53 2014	(r260194)
@@ -1420,7 +1420,11 @@ __floatunditf (UDWtype u)
 #define F_MODE_OK(SIZE) \
   (SIZE < DI_SIZE							\
    && SIZE > (DI_SIZE - SIZE + FSSIZE)					\
-   && !AVOID_FP_TYPE_CONVERSION(SIZE))
+   /* Don't use IBM Extended Double TFmode for TI->SF calculations.	\
+      The conversion from long double to float suffers from double	\
+      rounding, because we convert via double.  In any case, the	\
+      fallback code is faster.  */					\
+   && !IS_IBM_EXTENDED (SIZE))
 #if defined(L_floatdisf)
 #define FUNC __floatdisf
 #define FSTYPE SFtype
@@ -1511,21 +1515,13 @@ FUNC (DWtype u)
   hi = u >> shift;
 
   /* If we lost any nonzero bits, set the lsb to ensure correct rounding.  */
-  if ((UWtype)u << (W_TYPE_SIZE - shift))
+  if (u & (((DWtype)1 << shift) - 1))
     hi |= 1;
 
   /* Convert the one word of data, and rescale.  */
-  FSTYPE f = hi, e;
-  if (shift == W_TYPE_SIZE)
-    e = Wtype_MAXp1_F;
-  /* The following two cases could be merged if we knew that the target
-     supported a native unsigned->float conversion.  More often, we only
-     have a signed conversion, and have to add extra fixup code.  */
-  else if (shift == W_TYPE_SIZE - 1)
-    e = Wtype_MAXp1_F / 2;
-  else
-    e = (Wtype)1 << shift;
-  return f * e;
+  FSTYPE f = hi;
+  f *= (UDWtype)1 << shift;
+  return f;
 #endif
 }
 #endif
@@ -1536,7 +1532,11 @@ FUNC (DWtype u)
 #define F_MODE_OK(SIZE) \
   (SIZE < DI_SIZE							\
    && SIZE > (DI_SIZE - SIZE + FSSIZE)					\
-   && !AVOID_FP_TYPE_CONVERSION(SIZE))
+   /* Don't use IBM Extended Double TFmode for TI->SF calculations.	\
+      The conversion from long double to float suffers from double	\
+      rounding, because we convert via double.  In any case, the	\
+      fallback code is faster.  */					\
+   && !IS_IBM_EXTENDED (SIZE))
 #if defined(L_floatundisf)
 #define FUNC __floatundisf
 #define FSTYPE SFtype
@@ -1620,21 +1620,13 @@ FUNC (UDWtype u)
   hi = u >> shift;
 
   /* If we lost any nonzero bits, set the lsb to ensure correct rounding.  */
-  if ((UWtype)u << (W_TYPE_SIZE - shift))
+  if (u & (((UDWtype)1 << shift) - 1))
     hi |= 1;
 
   /* Convert the one word of data, and rescale.  */
-  FSTYPE f = hi, e;
-  if (shift == W_TYPE_SIZE)
-    e = Wtype_MAXp1_F;
-  /* The following two cases could be merged if we knew that the target
-     supported a native unsigned->float conversion.  More often, we only
-     have a signed conversion, and have to add extra fixup code.  */
-  else if (shift == W_TYPE_SIZE - 1)
-    e = Wtype_MAXp1_F / 2;
-  else
-    e = (Wtype)1 << shift;
-  return f * e;
+  FSTYPE f = hi;
+  f *= (UDWtype)1 << shift;
+  return f;
 #endif
 }
 #endif

Modified: head/contrib/gcc/libgcc2.h
==============================================================================
--- head/contrib/gcc/libgcc2.h	Thu Jan  2 13:48:54 2014	(r260193)
+++ head/contrib/gcc/libgcc2.h	Thu Jan  2 13:53:53 2014	(r260194)
@@ -119,16 +119,10 @@ extern short int __get_eh_table_version 
 
 /* FIXME: This #ifdef probably should be removed, ie. enable the test
    for mips too.  */
-/* Don't use IBM Extended Double TFmode for TI->SF calculations.
-   The conversion from long double to float suffers from double
-   rounding, because we convert via double.  In other cases, going
-   through the software fp routines is much slower than the fallback.  */
 #ifdef __powerpc__
-#define AVOID_FP_TYPE_CONVERSION(SIZE) (SIZE == 106)
-#elif defined(WIDEST_HARDWARE_FP_SIZE)
-#define AVOID_FP_TYPE_CONVERSION(SIZE) (SIZE > WIDEST_HARDWARE_FP_SIZE)
+#define IS_IBM_EXTENDED(SIZE) (SIZE == 106)
 #else
-#define AVOID_FP_TYPE_CONVERSION(SIZE) 0
+#define IS_IBM_EXTENDED(SIZE) 0
 #endif
 
 /* In the first part of this file, we are interfacing to calls generated

Modified: head/contrib/gcc/loop-init.c
==============================================================================
--- head/contrib/gcc/loop-init.c	Thu Jan  2 13:48:54 2014	(r260193)
+++ head/contrib/gcc/loop-init.c	Thu Jan  2 13:53:53 2014	(r260194)
@@ -43,6 +43,13 @@ loop_optimizer_init (unsigned flags)
   struct loops *loops = XCNEW (struct loops);
   edge e;
   edge_iterator ei;
+  static bool first_time = true;
+
+  if (first_time)
+    {
+      first_time = false;
+      init_set_costs ();
+    }
 
   /* Avoid annoying special cases of edges going to exit
      block.  */

Modified: head/contrib/gcc/toplev.c
==============================================================================
--- head/contrib/gcc/toplev.c	Thu Jan  2 13:48:54 2014	(r260193)
+++ head/contrib/gcc/toplev.c	Thu Jan  2 13:53:53 2014	(r260194)
@@ -1948,11 +1948,6 @@ lang_dependent_init (const char *name)
      provide a dummy function context for them.  */
   init_dummy_function_start ();
   init_expr_once ();
-
-  /* Although the actions of init_set_costs are language-independent,
-     it uses optabs, so we cannot call it from backend_init.  */
-  init_set_costs ();
-
   expand_dummy_function_end ();
 
   /* If dbx symbol table desired, initialize writing it and output the

Modified: head/contrib/gcc/tree-ssa-address.c
==============================================================================
--- head/contrib/gcc/tree-ssa-address.c	Thu Jan  2 13:48:54 2014	(r260193)
+++ head/contrib/gcc/tree-ssa-address.c	Thu Jan  2 13:53:53 2014	(r260194)
@@ -569,7 +569,7 @@ create_mem_ref (block_stmt_iterator *bsi
 		struct affine_tree_combination *addr)
 {
   tree mem_ref, tmp;
-  tree atype;
+  tree addr_type = build_pointer_type (type), atype;
   struct mem_address parts;
 
   addr_to_parts (addr, &parts);
@@ -597,23 +597,18 @@ create_mem_ref (block_stmt_iterator *bsi
 
   if (parts.symbol)
     {
-      tmp = build_addr (parts.symbol, current_function_decl);
-      gcc_assert (is_gimple_val (tmp));
+      tmp = fold_convert (addr_type,
+			  build_addr (parts.symbol, current_function_decl));
     
       /* Add the symbol to base, eventually forcing it to register.  */
       if (parts.base)
 	{
-	  gcc_assert (TREE_TYPE (parts.base) == sizetype);
-
 	  if (parts.index)
-	    {
-	      atype = TREE_TYPE (tmp);
-	      parts.base = force_gimple_operand_bsi (bsi,
-			fold_build2 (PLUS_EXPR, atype,
-				     fold_convert (atype, parts.base),
+	    parts.base = force_gimple_operand_bsi (bsi,
+			fold_build2 (PLUS_EXPR, addr_type,
+				     fold_convert (addr_type, parts.base),
 				     tmp),
 			true, NULL_TREE);
-	    }
 	  else
 	    {
 	      parts.index = parts.base;


More information about the svn-src-all mailing list