[llvm-commits] [llvm-gcc-4.2] r62486 - in /llvm-gcc-4.2/trunk/gcc: ChangeLog.apple Makefile.in config.gcc config/darwin.c config/i386/i386.c config/i386/i386.h config/i386/predicates.md cp/ChangeLog.apple cp/name-lookup.c dwarf2out.c fold-const.c libgcov.c var-tracking.c

Bill Wendling isanbard at gmail.com
Sun Jan 18 18:35:27 PST 2009


Author: void
Date: Sun Jan 18 20:35:27 2009
New Revision: 62486

URL: http://llvm.org/viewvc/llvm-project?rev=62486&view=rev
Log:
Merging with Apple GCC 5636.

Modified:
    llvm-gcc-4.2/trunk/gcc/ChangeLog.apple
    llvm-gcc-4.2/trunk/gcc/Makefile.in
    llvm-gcc-4.2/trunk/gcc/config.gcc
    llvm-gcc-4.2/trunk/gcc/config/darwin.c
    llvm-gcc-4.2/trunk/gcc/config/i386/i386.c
    llvm-gcc-4.2/trunk/gcc/config/i386/i386.h
    llvm-gcc-4.2/trunk/gcc/config/i386/predicates.md
    llvm-gcc-4.2/trunk/gcc/cp/ChangeLog.apple
    llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c
    llvm-gcc-4.2/trunk/gcc/dwarf2out.c
    llvm-gcc-4.2/trunk/gcc/fold-const.c
    llvm-gcc-4.2/trunk/gcc/libgcov.c
    llvm-gcc-4.2/trunk/gcc/var-tracking.c

Modified: llvm-gcc-4.2/trunk/gcc/ChangeLog.apple
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/ChangeLog.apple?rev=62486&r1=62485&r2=62486&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/ChangeLog.apple (original)
+++ llvm-gcc-4.2/trunk/gcc/ChangeLog.apple Sun Jan 18 20:35:27 2009
@@ -1,3 +1,42 @@
+2009-01-12  Caroline Tice  <ctice at apple.com>
+
+        Radar 6476836
+        * dwarf2out.c(struct die_struct):  New field, "dead".
+	(size_of_inlined):  Don't count entries whose "dead" field is marked.
+	(output_debug_inlined_section):  Remove code that was commented out; 
+	don't output info for dies whose "dead" field is marked.
+	(prune_unused_types_cleanup_inlining):  New function.
+	(prune_unused_types):  Call prune_unused_types_cleanup_inlining  before
+ 	calling prune_unused_types_prune.
+
+2008-12-21  Caroline Tice  <ctice at apple.com>
+
+        Radar 6455678
+        * cp/typeck.c (original_type):  Stop if the type
+	and its DECL_ORIGINAL_TYPE are the same.
+
+2008-12-18  Bill Wendling  <wendling at apple.com>
+
+        Radar 6457359
+        * c-parser.c (build_block_struct_initlist): Changed type.
+        * cp/parser.c (build_block_struct_initlist): Ditto.
+
+2008-12-18  Stuart Hastings  <stuart at apple.com>
+
+	Radar 6440204
+	* config/i386/sse.md (sse2_ashlti3): Moved from here...
+	* config/i386/i386.md (sse2_ashlti3): ...to here.
+
+2008-12-11  Caroline Tice  <ctice at apple.com>
+
+       Radars 5964438, 6007135
+       * cp/name-lookup.c (pushdecl_maybe_friend):   Copy
+       type decl info to DECL_ORIGINAL_TYPE if the type
+       decl was anonymous.
+       * dwarf2out.c  (gen_variable_die):  Don't attempt to
+       reference an abstract origin unless the die actually
+       exists.
+
 2008-12-10   Jim Grosbach <grosbach at applecom>
 
 	Radar 6387939
@@ -5,6 +44,90 @@
 	the code snipped to prevent the rtl template from adding an
 	extraneous "use" insn into the instruction list.
 
+2008-12-09  Stuart Hastings  <stuart at apple.com>
+
+	Radar 6414738
+	* var-tracking.c (clobber_variable_part): Update anextp for
+          next iteration.
+
+2008-12-05  Fariborz Jahanian <fjahanian at apple.com>
+
+        Radar 6413140
+	* c-parser.c (c_parser_block_literal_expr): Warn on use of explicit 
+	block return type.
+
+2008-12-05  Stuart Hastings  <stuart at apple.com>
+
+	Radar 6382081
+	* config/i386/i386.md (floatdisf2): Replace SSE code
+	  with x87 code.
+
+2008-12-02  Caroline Tice  <ctice at apple.com>
+
+       Radar 6386976
+       * objcp/objcp-decl.h (TYPE_HAS_OBJCXX_INFO):  New macro.
+       * objcp/objcp-lang.c  (objcp-decl.h):  New include statement, with
+       required define.      
+       (LANG_HOOKS_IS_RUNTIME_SPECIFIC_TYPE):  Redefine for
+       obj-c++.
+       (objcxx_is_runtime_type):  New function.
+
+2008-12-02  Fariborz Jahanian <fjahanian at apple.com>
+
+        Radar 6411649
+	* funciton.h: Added new field.
+	* c-common.c (build_block_helper_name): Produce a unique
+          block number per each enclosing function when building
+          the block helper function name.
+
+2008-12-02  Fariborz Jahanian <fjahanian at apple.com>
+
+        Radar 6396238
+	* c-typeck.c (build_block_call): Handle case of a block
+	expression tree with side-effect when envoking the block.
+
+2008-12-01  Caroline Tice  <ctice at apple.com>
+
+	Radar 6386976
+	* objc/objc-lang.c (objc_is_runtime_type):  New function.
+	(LANG_HOOKS_IS_RUNTIME_SPECIFIC_TYPE):  Re-define new constant.
+	* dwarf2out.c (dwarf_attr_name):  Add case statements for
+	DW_AT_APPLE_major_runtime_vers and DW_AT_APPLE_runtime_class.
+	( gen_struct_or_union_type_die):  Call
+       lang_hooks.types.is_runtime_specific_type, and add runtime attribute
+       if appropriate.
+       (dwarf2out_finish):  Add DW_AT_APPLE_major_runtime_vers to comp_unit
+       die if appropriate.
+       * dwarf2.h (enum dwarf_attribute):  Add two new Apple dwarf attributes:
+       DW_AT_APPLE_major_runtime_vers and DW_AT_APPLE_runtime_class.
+       * langhooks.c (lhd_is_runtime_specific_type):  New generic function.
+       * langhooks.h (struct lang_hooks_for_types):  Add new function field,
+       is_runtime_specific_type.
+       * langhooks-def.h (lhd_is_runtime_specific_type):  New extern decl.
+       (LANG_HOOKS_IS_RUNTIME_SPECIFIC_TYPE):  New constant definition.
+       (LANG_HOOKS_FOR_TYPES_INITIALIZER):  Use new constant definition to
+       initialize new field.
+
+
+2008-12-01  Fariborz Jahanian <fjahanian at apple.com>
+
+        Radar 6404979
+	* c-decl.c (block_build_prologue): Use an internal name for
+	block helper's hidden argument.
+	* c-parser.c (c_parser_block_literal_expr): Ditto.
+
+2008-12-01  Stuart Hastings  <stuart at apple.com>
+
+	Radar 6382081
+	* config/i386/i386.md (floatdisf2): Add SSE code for
+          conversion on x86_32.
+	* config/i386/i386.c (ix86_expand_convert_sign_DI2DF_sse): Typo.
+
+2008-11-24  Stuart Hastings  <stuart at apple.com>
+
+	* config/i386/i386.c (ix86_expand_convert_uns_SI2DF_sse): Fix
+          comment.
+
 2008-11-18  Stuart Hastings  <stuart at apple.com>
 
 	Radar 6353006

Modified: llvm-gcc-4.2/trunk/gcc/Makefile.in
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/Makefile.in?rev=62486&r1=62485&r2=62486&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/Makefile.in (original)
+++ llvm-gcc-4.2/trunk/gcc/Makefile.in Sun Jan 18 20:35:27 2009
@@ -730,6 +730,8 @@
 GCC_INSTALL_NAME := $(shell echo gcc|sed '$(program_transform_name)')
 GCC_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo gcc|sed '$(program_transform_name)')
 CPP_INSTALL_NAME := $(shell echo cpp|sed '$(program_transform_name)')
+# APPLE LOCAL 6024929
+CPP_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo cpp|sed '$(program_transform_name)')
 PROTOIZE_INSTALL_NAME := $(shell echo protoize|sed '$(program_transform_name)')
 UNPROTOIZE_INSTALL_NAME := $(shell echo unprotoize|sed '$(program_transform_name)')
 GCOV_INSTALL_NAME := $(shell echo gcov|sed '$(program_transform_name)')
@@ -3986,6 +3988,17 @@
 install-cpp: installdirs cpp$(exeext)
 	-rm -f $(DESTDIR)$(bindir)/$(CPP_INSTALL_NAME)$(exeext)
 	-$(INSTALL_PROGRAM) -m 755 cpp$(exeext) $(DESTDIR)$(bindir)/$(CPP_INSTALL_NAME)$(exeext)
+	# APPLE LOCAL begin 6024929
+	-rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-cpp-$(version)$(exeext)
+	-( cd $(DESTDIR)$(bindir) && \
+	   $(LN) $(CPP_INSTALL_NAME)$(exeext) $(target_noncanonical)-cpp-$(version)$(exeext) )
+	-if [ \! -f gcc-cross$(exeext) ] ; then \
+	  rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-cpp-tmp$(exeext); \
+	  ( cd $(DESTDIR)$(bindir) && \
+	    $(LN) $(CPP_INSTALL_NAME)$(exeext) $(target_noncanonical)-cpp-tmp$(exeext) && \
+	    mv -f $(target_noncanonical)-cpp-tmp$(exeext) $(CPP_TARGET_INSTALL_NAME)$(exeext) ); \
+	fi
+	# APPLE LOCAL end 6024929
 	-if [ x$(cpp_install_dir) != x ]; then \
 	  rm -f $(DESTDIR)$(prefix)/$(cpp_install_dir)/$(CPP_INSTALL_NAME)$(exeext); \
 	  $(INSTALL_PROGRAM) -m 755 cpp$(exeext) $(DESTDIR)$(prefix)/$(cpp_install_dir)/$(CPP_INSTALL_NAME)$(exeext); \

Modified: llvm-gcc-4.2/trunk/gcc/config.gcc
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config.gcc?rev=62486&r1=62485&r2=62486&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config.gcc (original)
+++ llvm-gcc-4.2/trunk/gcc/config.gcc Sun Jan 18 20:35:27 2009
@@ -404,10 +404,14 @@
 *-*-darwin*)
   tm_file="${tm_file} darwin.h"
   case ${target} in
-  # APPLE LOCAL darwin10 5810054
-  *-*-darwin[912]*)
+  *-*-darwin9*)
     tm_file="${tm_file} darwin9.h"
     ;;
+    # APPLE LOCAL begin .file/.loc 6349436
+  *-*-darwin[12][0-9]*)
+    tm_file="${tm_file} darwin9.h darwin10.h"
+    ;;
+    # APPLE LOCAL end .file/.loc 6349436
   esac
   tm_file="${tm_file} ${cpu_type}/darwin.h"
   tm_p_file="${tm_p_file} darwin-protos.h"

Modified: llvm-gcc-4.2/trunk/gcc/config/darwin.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/darwin.c?rev=62486&r1=62485&r2=62486&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/darwin.c (original)
+++ llvm-gcc-4.2/trunk/gcc/config/darwin.c Sun Jan 18 20:35:27 2009
@@ -280,7 +280,8 @@
    permit the runtime to rebind new instances of the translation unit
    to the original instance of the data.  */
 
-static int
+/* APPLE LOCAL fix-and-continue 6227434 */
+int
 indirect_data (rtx sym_ref)
 {
   int lprefix;
@@ -298,8 +299,12 @@
   name = XSTR (sym_ref, 0);
 
   lprefix = (((name[0] == '*' || name[0] == '&')
-              && (name[1] == 'L' || (name[1] == '"' && name[2] == 'L')))
-             || (strncmp (name, "_OBJC_", 6) == 0));
+              && (name[1] == 'L'
+		  || (name[1] == '"' && name[2] == 'L')
+		  /* Don't indirect writable strings.  */
+		  || (name[1] == 'l' && name[2] == 'C')))
+             || (strncmp (name, "_OBJC_", 6) == 0)
+	     || objc_anonymous_local_objc_name (name));
 
   return ! lprefix;
 }
@@ -1542,7 +1547,8 @@
             return darwin_sections[objc_v2_nonlazy_class_section];
           else if (!strncmp (name, "_OBJC_LABEL_NONLAZY_CATEGORY_", 29))
             return darwin_sections[objc_v2_nonlazy_category_section];
-          else if (!strncmp (name, "_OBJC_PROTOCOL_REFERENCE_", 25))
+          /* APPLE LOCAL radar 6351990 */
+          else if (!strncmp (name, "l_OBJC_PROTOCOL_REFERENCE_", 26))
             return darwin_sections[objc_v2_protocolrefs_section];
           else if (!strncmp (name, "_OBJC_SELECTOR_REFERENCES", 25))
             return darwin_sections[objc_v2_selector_refs_section];

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/i386.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/i386.c?rev=62486&r1=62485&r2=62486&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/i386/i386.c (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/i386.c Sun Jan 18 20:35:27 2009
@@ -6884,10 +6884,11 @@
 #if TARGET_MACHO
 	  if (machopic_data_defined_p (op0))
 	    return true;
+
 	  /* Under -mfix-and-continue, even local storage is
 	     addressed via the GOT, so that the value of local
 	     statics is preserved when a function is "fixed."  */
-	  if (TARGET_FIX_AND_CONTINUE)
+	  if (indirect_data (op0))
 	    return false;
 #endif
 	  /* APPLE LOCAL end fix-and-continue 6227434 */
@@ -10545,7 +10546,7 @@
   return "";
 }
 
-/* Convert an unsigned SImode value into a DFmode, using only SSE.
+/* Convert a signed DImode value into a DFmode, using only SSE.
    Result returned in an %xmm register.  For x86_32, -mfpmath=sse,
    !optimize_size only.  */
 const char *
@@ -22590,8 +22591,25 @@
   if (opcode[0] == ' ' && iasm_is_pseudo (opcode+1))
     e->pseudo = true;
 
-  if (strcasecmp (opcode, "movs") == 0)
-    args = NULL_TREE;
+  if (strcasecmp (opcode, "movs") == 0
+      || strcasecmp (opcode, "scas") == 0
+      || strcasecmp (opcode, "stos") == 0
+      || strcasecmp (opcode, "xlat") == 0)
+      args = NULL_TREE;
+  else if (strcasecmp (opcode, "cmovpo") == 0)
+    opcode = "cmovnp";
+  else if (strcasecmp (opcode, "cmovpe") == 0)
+    opcode = "cmovp";
+  else if (strcasecmp (opcode, "outs") == 0
+	   && TREE_CHAIN (args))
+    {
+      e->mod[0] = e->mod[1];
+    }
+  else if (strcasecmp (opcode, "ins") == 0
+	   && TREE_CHAIN (args))
+    {
+      e->mod[1] = 0;
+    }
   /* movsx isn't part of the AT&T syntax, they spell it movs.  */
   else if (strcasecmp (opcode, "movsx") == 0)
     opcode = "movs";
@@ -22676,6 +22694,8 @@
 	   || strcasecmp (opcode, "js") == 0
 	   || strcasecmp (opcode, "jz") == 0
 	   || strcasecmp (opcode, "ldmxcsr") == 0
+	   || strcasecmp (opcode, "lgdt") == 0
+	   || strcasecmp (opcode, "lidt") == 0
 	   || strcasecmp (opcode, "lldt") == 0
 	   || strcasecmp (opcode, "lmsw") == 0
 	   || strcasecmp (opcode, "ltr") == 0
@@ -22733,7 +22753,8 @@
 	   || strcasecmp (opcode, "sldt") == 0
 	   || strcasecmp (opcode, "smsw") == 0
 	   || strcasecmp (opcode, "stmxcsr") == 0
-	   || strcasecmp (opcode, "str") == 0)
+	   || strcasecmp (opcode, "str") == 0
+	   || strcasecmp (opcode, "xlat") == 0)
     e->mod[0] = 0;
   else if (strcasecmp (opcode, "rcr") == 0
 	   || strcasecmp (opcode, "rcl") == 0
@@ -22752,7 +22773,14 @@
     {
       if (e->mod[0] == 'q'
 	  && !(strcasecmp (opcode, "inc") == 0
-	       || strcasecmp (opcode, "dec") == 0))
+	       || strcasecmp (opcode, "or") == 0
+	       || strcasecmp (opcode, "idiv") == 0
+	       || strcasecmp (opcode, "movs") == 0
+	       || strcasecmp (opcode, "scas") == 0
+	       || strcasecmp (opcode, "dec") == 0
+	       || strcasecmp (opcode, "push") == 0
+	       || strcasecmp (opcode, "pop") == 0
+	       || strcasecmp (opcode, "mov") == 0))
 	sprintf (buf, "%s%s", opcode, "ll");
       else
 	sprintf (buf, "%s%c", opcode, e->mod[0]);
@@ -22878,7 +22906,7 @@
 
 	e->as_immediate = true;
 	iasm_print_operand (buf, op1, argnum, uses,
-			      must_be_reg, must_not_be_reg, e);
+			    must_be_reg, must_not_be_reg, e);
 	e->as_immediate = false;
 
 	/* Just an immediate.  */
@@ -22898,7 +22926,7 @@
 	    iasm_force_constraint ("R", e);
 	    iasm_warn_extra_reg (op2);
 	    iasm_print_operand (buf, op2, argnum, uses,
-				  must_be_reg, must_not_be_reg, e);
+				must_be_reg, must_not_be_reg, e);
 	    iasm_force_constraint (0, e);
 	  }
 	if (op3)
@@ -22912,14 +22940,14 @@
 	    iasm_force_constraint ("l", e);
 	    iasm_warn_extra_reg (op3);
 	    iasm_print_operand (buf, op3, argnum, uses,
-				  must_be_reg, must_not_be_reg, e);
+				must_be_reg, must_not_be_reg, e);
 	    iasm_force_constraint (0, e);
 	    if (scale)
 	      {
 		strcat (buf, ",");
 		e->as_immediate = true;
 		iasm_print_operand (buf, scale, argnum, uses,
-				      must_be_reg, must_not_be_reg, e);
+				    must_be_reg, must_not_be_reg, e);
 		e->as_immediate = false;
 	      }
 	  }
@@ -22941,16 +22969,16 @@
       if (! e->as_immediate)
 	e->as_offset = true;
       iasm_print_operand (buf, TREE_OPERAND (arg, 0), argnum, uses,
-			    must_be_reg, must_not_be_reg, e);
+			  must_be_reg, must_not_be_reg, e);
       e->as_offset = false;
       break;
 
     case MULT_EXPR:
       iasm_print_operand (buf, TREE_OPERAND (arg, 0), argnum, uses,
-			    must_be_reg, must_not_be_reg, e);
+			  must_be_reg, must_not_be_reg, e);
       strcat (buf, "*");
       iasm_print_operand (buf, TREE_OPERAND (arg, 1), argnum, uses,
-			    must_be_reg, must_not_be_reg, e);
+			  must_be_reg, must_not_be_reg, e);
       break;
     default:
       return false;

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/i386.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/i386.h?rev=62486&r1=62485&r2=62486&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/i386/i386.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/i386.h Sun Jan 18 20:35:27 2009
@@ -2541,8 +2541,8 @@
   { "andpd", 2, "xm"},		\
   { "andps", 1, "+x"},		\
   { "andps", 2, "xm"},		\
-  { "arpl", 1, "+" rm16},	\
-  { "arpl", 2, r16},		\
+  { NX "arpl", 1, "+" rm16},	\
+  { NX "arpl", 2, r16},		\
   { "bound", 1, U("r")},	\
   { "bound", 2, U("m")},	\
   { "bsf", 1, "=r"},		\
@@ -2557,9 +2557,10 @@
   { "btr", 2, "ri"},		\
   { "bts", 1, "rm"},		\
   { "bts", 2, "ri"},		\
-  { "call", 1, "rsm"},		\
+  { NX "call", 1, "rsm"},	\
   { "clflush", 1, "=m"},       	\
-  { "cmova", 2, "rm"},		\
+  { "cmova", 1, r16 "," r32 C R64},\
+  { "cmova", 2, rm16 "," rm32 C RM64},\
   { "cmovae", 2, "rm"},		\
   { "cmovb", 2, "rm"},		\
   { "cmovbe", 2, "rm"},		\
@@ -2585,10 +2586,10 @@
   { "cmovnz", 2, "rm"},		\
   { "cmovo", 2, "rm"},		\
   { "cmovp", 2, "rm"},		\
-  { "cmovpe", 2, U("rm")},	\
-  { "cmovpo", 2, U("rm")},	\
+  { "cmovpe", 2, "rm"},		\
+  { "cmovpo", 2, "rm"},		\
   { "cmovs", 2, "rm"},		\
-  { "cmovz", 2, U("rm")},	\
+  { "cmovz", 2, "rm"},		\
   { "cmp", 1, "rm,r"},    	\
   { "cmp", 2, "ir,m"},    	\
   { "cmpeqpd", 1, "=x"},	\
@@ -2693,14 +2694,14 @@
   { "cvtps2pd", 2, "xm"},	\
   { "cvtps2pi", 1, "=y"},	\
   { "cvtps2pi", 2, "xm"},	\
-  { "cvtsd2si", 1, "=r"},	\
+  { "cvtsd2si", 1, "=" r32R64},	\
   { "cvtsd2si", 2, "xm"},	\
   { "cvtsd2ss", 1, "=x"},	\
   { "cvtsd2ss", 2, "xm"},	\
   { "cvtsi2sd", 1, "=x"},	\
-  { "cvtsi2sd", 2, U("r") "m"},	\
+  { "cvtsi2sd", 2, rm32RM64},	\
   { "cvtsi2ss", 1, "=x"},	\
-  { "cvtsi2ss", 2, U("r") "m"},	\
+  { "cvtsi2ss", 2, rm32RM64},	\
   { "cvtss2sd", 1, "=x"},	\
   { "cvtss2sd", 2, "xm"},	\
   { "cvtss2si", 1, "=r"},	\
@@ -2818,15 +2819,15 @@
   { "hsubpd", 2, "xm"},		\
   { "hsubps", 1, "+x"},		\
   { "hsubps", 2, "xm"},		\
-  { "idiv", 1, rm8rm16rm32 U(rm64)},\
+  { "idiv", 1, rm8rm16rm32RM64},\
   { "imul", 1, "+r"},		\
   { "imul", 2, "rm"},		\
   { "imul", 3, "i"},		\
   { "in", 1, "=a"},		\
   { "in", 2, "i"},		\
-  { "inc", 1, "+" rm8rm16rm32 U(rm64)},\
-  { "ins", 1, U("=m")},		\
-  { "ins", 2, U("d")},		\
+  { "inc", 1, "+" rm8rm16rm32RM64},\
+  { NX "ins", 1, "=" m8m16m32},	\
+  { NX "ins", 2, "d"},		\
   { "int", 1, "i"},		\
   { "invlpg", 1, "m"},		\
   { "ja", 1, "s"},		\
@@ -2834,14 +2835,14 @@
   { "jb", 1, "s"},		\
   { "jbe", 1, "s"},		\
   { "jc", 1, "s"},		\
-  { "jcxz", 1, rel8},		\
+  { NX "jcxz", 1, rel8},		\
   { "je", 1, "s"},		\
   { "jecxz", 1, rel8},		\
   { "jg", 1, "s"},		\
   { "jge", 1, "s"},		\
   { "jl", 1, "s"},		\
   { "jle", 1, "s"},		\
-  { "jmp", 1, "s" rm32},	\
+  { NX "jmp", 1, "s" rm32},	\
   { "jna", 1, "s"},		\
   { "jnae", 1, "s"},		\
   { "jnb", 1, "s"},		\
@@ -2866,21 +2867,21 @@
   { "lddqu", 1, "=x"},		\
   { "lddqu", 2, "m"},		\
   { "ldmxcsr", 1, "m"},		\
-  { "lds", 1, "=" U(r16 ",") r32},\
-  { "lds", 2, U(m16 ",") m32},	\
+  { NX "lds", 1, "=" r16 "," r32 C R64},\
+  { NX "lds", 2, m16 "," m32 C M64},\
   { "lea", 1, "=r"},		\
   { "lea", 2, "m"},		\
-  { "les", 1, "=" U(r16 ",") r32},\
-  { "les", 2, U(m16 ",") m32},	\
-  { "lfs", 1, "=" U(r16 ",") r32 U("," r64)},\
-  { "lfs", 2, U(m16 ",") m32 U("," m64)},\
+  { NX "les", 1, "=" r16 "," r32 C R64},\
+  { NX "les", 2, m16 "," m32 C M64},\
+  { "lfs", 1, "=" r16 "," r32 C R64},\
+  { "lfs", 2, m16 "," m32 C M64},\
   { "lgdt", 1, "m"},		\
-  { "lgs", 1, "=" U(r16 ",") r32 U("," r64)},\
-  { "lgs", 2, U(m16 ",") m32 U("," m64)},\
+  { "lgs", 1, "=" r16 "," r32 C R64},\
+  { "lgs", 2, m16 "," m32 C M64},\
   { "lidt", 1, "m"},		\
   { "lldt", 1, rm16},		\
   { "lmsw", 1, "m"},		\
-  { "lods", 1, U("m")},		\
+  { NX "lods", 1, m8m16m32M64},	\
   { "loop", 1, rel8},		\
   { "loope", 1, rel8},		\
   { "loopne", 1, rel8},		\
@@ -2888,8 +2889,8 @@
   { "loopz", 1, rel8},		\
   { "lsl", 1, "=" r16 "," r32},	\
   { "lsl", 2, rm16 "," rm32},	\
-  { "lss", 1, "=" U(r16 ",") r32 U("," r64)},\
-  { "lss", 2, U(m16 ",") m32 U("," m64)},\
+  { "lss", 1, "=" r16 "," r32 C R64},\
+  { "lss", 2, m16 "," m32 C M64},\
   { "ltr", 1, rm16},		\
   { "maskmovdqu", 1, "x"},	\
   { "maskmovdqu", 2, "x"},	\
@@ -2957,8 +2958,8 @@
   { "movq", 2, "xm,x,ym,y"},	\
   { "movq2dq", 1, "=x"},	\
   { "movq2dq", 2, "y"},		\
-  { "movs", 1, U("=m")},	\
-  { "movs", 2, U("m")},		\
+  { "movs", 1, "=" m8 "," m16 "," m32 C M64},\
+  { "movs", 2, m8 "," m16 "," m32 C M64},\
   { "movsd", 1, "=xm,x"},	\
   { "movsd", 2, "x,xm"},	\
   { "movshdup", 1, "=x"},	\
@@ -2986,16 +2987,16 @@
   { "mulss", 2, "xm"},		\
   { "neg", 1, "+" rm8rm16rm32},	\
   { "not", 1, "+" rm8rm16rm32},	\
-  { "or", 1, "+" rm8 "," rm16 "," rm32 "," r8 "," r16 "," r32},\
-  { "or", 2, r8  "i," r16 "i," r32 "i," m8 "," m16 "," m32},\
+  { "or", 1, "+" rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32},\
+  { "or", 2, ri8 "," ri16 "," ri32 C RI64 "," m8 "," m16 "," m32},\
   { "orpd", 1, "+x"},		\
   { "orpd", 2, "xm"},		\
   { "orps", 1, "+x"},		\
   { "orps", 2, "xm"},		\
   { "out", 1, "id"},		\
   { "out", 2, a8 a16 a32},	\
-  { "outs", 1, U("d")},		\
-  { "outs", 2, U("m")},		\
+  { NX "outs", 1, "d"},	\
+  { NX "outs", 2, m8m16m32},	\
   { "packssdw", 1, "+x,y"},	\
   { "packssdw", 2, "xm,ym"},	\
   { "packsswb", 1, "+x,y"},	\
@@ -3024,8 +3025,8 @@
   { "pandn", 2, "xm,ym"},	\
   { "pavgb", 1, "+x,y"},	\
   { "pavgb", 2, "xm,ym"},	\
-  { "pavgw", 1, "+x,y"},		\
-  { "pavgw", 2, "xm,ym"},		\
+  { "pavgw", 1, "+x,y"},	\
+  { "pavgw", 2, "xm,ym"},	\
   { "pcmpeqb", 1, "+x,y"},	\
   { "pcmpeqb", 2, "xm,ym"},	\
   { "pcmpeqd", 1, "+x,y"},	\
@@ -3038,11 +3039,11 @@
   { "pcmpgtd", 2, "xm,ym"},	\
   { "pcmpgtw", 1, "+x,y"},	\
   { "pcmpgtw", 2, "xm,ym"},	\
-  { "pextrw", 1, "=" r32r64},	\
+  { "pextrw", 1, "=" r32R64},	\
   { "pextrw", 2, "xy"},		\
   { "pextrw", 3, "i"},		\
   { "pinsrw", 1, "=xy"},	\
-  { "pinsrw", 2, r32r64 "m"},	\
+  { "pinsrw", 2, r32R64 "m"},	\
   { "pinsrw", 3, "i"},		\
   { "pmaddwd", 1, "+x,y"},	\
   { "pmaddwd", 2, "xm,ym"},	\
@@ -3054,7 +3055,7 @@
   { "pminsw", 2, "xm,ym"},	\
   { "pminub", 1, "+x,y"},	\
   { "pminub", 2, "xm,ym"},	\
-  { "pmovmskb", 1, "+" r32r64},	\
+  { "pmovmskb", 1, "+" r32R64},	\
   { "pmovmskb", 2, "xy"},	\
   { "pmulhuw", 1, "+x,y"},	\
   { "pmulhuw", 2, "xm,ym"},	\
@@ -3064,7 +3065,7 @@
   { "pmullw", 2, "xm,ym"},	\
   { "pmuludq", 1, "+x,y"},	\
   { "pmuludq", 2, "xm,ym"},	\
-  { "pop", 1, "rm"},		\
+  { "pop", 1, rm16 T(rm32) RM64},\
   { "por", 1, "+x,y"},		\
   { "por", 2, "xm,ym"},		\
   { "prefetchnta", 1, "m"},	\
@@ -3110,17 +3111,17 @@
   { "psubd", 1, "+x,y"},	\
   { "psubd", 2, "xm,ym"},	\
   { "psubq", 1, "+x,y"},	\
-  { "psubq", 2, "xm,ym"},		\
-  { "psubsb", 1, "+x,y"},       	\
-  { "psubsb", 2, "xm,ym"},       	\
-  { "psubsw", 1, "+x,y"},       	\
-  { "psubsw", 2, "xm,ym"},       	\
+  { "psubq", 2, "xm,ym"},	\
+  { "psubsb", 1, "+x,y"},	\
+  { "psubsb", 2, "xm,ym"},	\
+  { "psubsw", 1, "+x,y"},	\
+  { "psubsw", 2, "xm,ym"},	\
   { "psubusb", 1, "+x,y"},	\
   { "psubusb", 2, "xm,ym"},	\
   { "psubusw", 1, "+x,y"},	\
   { "psubusw", 2, "xm,ym"},	\
-  { "psubw", 1, "+x,y"},		\
-  { "psubw", 2, "xm,ym"},		\
+  { "psubw", 1, "+x,y"},	\
+  { "psubw", 2, "xm,ym"},	\
   { "punpckhbw", 1, "+x,y"},	\
   { "punpckhbw", 2, "xm,ym"},	\
   { "punpckhdq", 1, "+x,y"},	\
@@ -3137,7 +3138,7 @@
   { "punpcklqdq", 2, "xm"},	\
   { "punpcklwd", 1, "+x,y"},	\
   { "punpcklwd", 2, "xm,ym"},	\
-  { "push", 1, "rmi"},		\
+  { "push", 1, rm16 T(rm32) RM64 "i"},\
   { "pxor", 1, "+x,y"},		\
   { "pxor", 2, "xm,ym"},	\
   { "rcl", 1, "+" rm8rm16rm32},	\
@@ -3163,7 +3164,7 @@
   { "sar", 2, "ic"},		\
   { "sbb", 1, "+" rm8 "," rm16 "," rm32 "," r8 "," r16 "," r32},\
   { "sbb", 2, ri8 "," ri16 "," ri32 "," m8 "," m16 "," m32},\
-  { "scas", 1, U("m")},		\
+  { "scas", 1, m8m16m32M64},	\
   { "seta", 1, "=qm"},		\
   { "setae", 1, "=qm"},		\
   { "setb", 1, "=qm"},		\
@@ -3194,24 +3195,24 @@
   { "setpo", 1, "=qm"},		\
   { "sets", 1, "=qm"},		\
   { "setz", 1, "=qm"},		\
-  { "sgdt", 1, "=m"},		\
+  { NY "sgdt", 1, "=m"},	\
   { "shl", 1, "+" rm8rm16rm32},	\
   { "shl", 2, "ic"},		\
-  { "shld", 1, "+" rm16 "," rm32 "," rm64},\
-  { "shld", 2, r16 "," r32 "," r64},\
-  { "shld", 3, "ic,ic,ic"},	\
+  { "shld", 1, "+" rm16 "," rm32 C RM64},\
+  { "shld", 2, r16 "," r32 C R64},\
+  { "shld", 3, "ic,ic" X(",ic")},\
   { "shr", 1, "+" rm8rm16rm32},	\
   { "shr", 2, "ic"},		\
-  { "shrd", 1, "+" rm16 "," rm32 "," rm64},\
-  { "shrd", 2, r16 "," r32 "," r64},\
-  { "shrd", 3, "ic,ic,ic"},	\
+  { "shrd", 1, "+" rm16 "," rm32 C RM64},\
+  { "shrd", 2, r16 "," r32 C R64},\
+  { "shrd", 3, "ic,ic" X(",ic")}, \
   { "shufpd", 1, "+x"},		\
   { "shufpd", 2, "xm"},		\
   { "shufpd", 3, "i"},		\
   { "shufps", 1, "+x"},		\
   { "shufps", 2, "xm"},		\
   { "shufps", 3, "i"},		\
-  { "sidt", 1, "=m"},		\
+  { NY "sidt", 1, "=m"},	\
   { "sldt", 1, "=q" S("2") "m"},\
   { "smsw", 1, "=q" S("2") "m"},\
   { "sqrtpd", 1, "=x"},		\
@@ -3223,7 +3224,7 @@
   { "sqrtss", 1, "=x"},		\
   { "sqrtss", 2, "xm"},		\
   { "stmxcsr", 1, "m"},		\
-  { "stos", 1, U("=m")},	\
+  { "stos", 1, "=m"},		\
   { "str", 1, "=q" S("2") "m"},\
   { "sub", 1, "=rm,r"},		\
   { "sub", 2, "ir,m"},		\
@@ -3255,7 +3256,7 @@
   { "xadd", 2, r8 "," r16 "," r32},\
   { "xchg", 1, "+rm,r"},	\
   { "xchg", 2, "+r,m"},		\
-  { "xlat", 1, U("m")},		\
+  { "xlat", 1, "m"},		\
   { "xor", 1, "+rm,r"},		\
   { "xor", 2, "ri,m"},		\
   { "xorpd", 1, "+x"},		\

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/predicates.md
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/predicates.md?rev=62486&r1=62485&r2=62486&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/i386/predicates.md (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/predicates.md Sun Jan 18 20:35:27 2009
@@ -469,11 +469,11 @@
     {
 /* LLVM LOCAL begin non-Darwin hack. */
 #ifdef TARGET_FIX_AND_CONTINUE
-      if (!TARGET_FIX_AND_CONTINUE
+      if (!indirect_data (op)
           || machopic_data_defined_p (op))
 #endif
 /* LLVM LOCAL end non-Darwin hack */
-        return 1;
+      return 1;
     }
 /* APPLE LOCAL end fix-and-continue 6358507 */
 

Modified: llvm-gcc-4.2/trunk/gcc/cp/ChangeLog.apple
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/cp/ChangeLog.apple?rev=62486&r1=62485&r2=62486&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/cp/ChangeLog.apple (original)
+++ llvm-gcc-4.2/trunk/gcc/cp/ChangeLog.apple Sun Jan 18 20:35:27 2009
@@ -1,3 +1,21 @@
+2008-12-05  Fariborz Jahanian <fjahanian at apple.com>
+
+        Radar 6413140
+        * parser.c (cp_parser_block_literal_expr): Warn on use of explicit
+        block return type.
+
+2008-12-02  Fariborz Jahanian <fjahanian at apple.com>
+
+        Radar 6396238
+        * typeck.c (build_block_call): Handle case of a block
+        expression tree with side-effect when envoking the block.
+
+2008-12-01  Fariborz Jahanian <fjahanian at apple.com>
+
+        Radar 6404979
+        * parser.c (cp_parser_block_literal_expr): Use an internal name for
+        block helper's hidden argument.
+
 008-11-07  Fariborz Jahanian <fjahanian at apple.com>
 
         Radar 5847976

Modified: llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c?rev=62486&r1=62485&r2=62486&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c (original)
+++ llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c Sun Jan 18 20:35:27 2009
@@ -813,7 +813,12 @@
 	      if (TYPE_NAME (type) == 0)
 		TYPE_NAME (type) = x;
 	    }
-	  else if (type != error_mark_node && TYPE_NAME (type) != x
+	  /* APPLE LOCAL begin radar 6007135, typedef of anonymous struct  */
+	  /* Make sure to do the copying if the type was anonymous  */
+	  else if (type != error_mark_node 
+		   && ((TYPE_NAME (type) != x) 
+		       || (TYPE_LANG_SPECIFIC (type) && TYPE_WAS_ANONYMOUS (type)))
+	  /* APPLE LOCAL end radar 6007135, typedef of anonymous struct  */
 		   /* We don't want to copy the type when all we're
 		      doing is making a TYPE_DECL for the purposes of
 		      inlining.  */

Modified: llvm-gcc-4.2/trunk/gcc/dwarf2out.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/dwarf2out.c?rev=62486&r1=62485&r2=62486&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/dwarf2out.c (original)
+++ llvm-gcc-4.2/trunk/gcc/dwarf2out.c Sun Jan 18 20:35:27 2009
@@ -3768,6 +3768,10 @@
   /* Die is used and must not be pruned as unused.  */
   int die_perennial_p;
   unsigned int decl_id;
+  /* APPLE LOCAL begin radar 6476836  */
+  /* Mark inlined subroutine dies that are part of "eliminated" types. */
+  bool dead;
+  /* APPLE LOCAL end radar 6476836  */
 }
 die_node;
 
@@ -4835,6 +4839,12 @@
     case DW_AT_APPLE_block:
       return "DW_AT_APPLE_block";
     /* APPLE LOCAL end radar 5811943 - Fix type of pointers to Blocks  */
+    /* APPLE LOCAL begin radar 6386976  */
+    case DW_AT_APPLE_major_runtime_vers:
+      return "DW_AT_APPLE_major_runtime_vers";
+    case DW_AT_APPLE_runtime_class:
+      return "DW_AT_APPLE_runtime_class";
+    /* APPLE LOCAL end radar 6386976  */
     default:
       return "DW_AT_<unknown>";
     }
@@ -6989,6 +6999,10 @@
 {
   unsigned long size;
   unsigned i;
+  /* APPLE LOCAL begin radar 6476836  */
+  unsigned j;
+  dw_die_ref *diep;
+  /* APPLE LOCAL end radar 6476836  */
   unsigned num_entries;
   inlined_ref iptr;
 
@@ -6996,7 +7010,15 @@
   
   for (i = 0; VEC_iterate (inlined_entry, inlined_dies, i, iptr); i++)
     {
-      num_entries = VEC_length (dw_die_ref, iptr->inlined_instances);
+      /* APPLE LOCAL begin radar 6476836  */
+      /* Don't count or output entries that were eliminated as part of
+	 unused types.  */
+      num_entries = 0;
+      for (j = 0; VEC_iterate (dw_die_ref, iptr->inlined_instances, j, diep);
+	   j++)
+	if (! (*diep)->dead)
+	  num_entries++;
+      /* APPLE LOCAL end radar 6476836  */
       size += (2 * DWARF_OFFSET_SIZE) + (num_entries * DWARF2_ADDR_SIZE)
 	+ (num_entries * DWARF_OFFSET_SIZE) + size_of_uleb128 (num_entries);
     }
@@ -7692,13 +7714,7 @@
   dw2_asm_output_data (DWARF_OFFSET_SIZE, inlined_length,
 		       "Length of Inlined Subroutines Info");
   dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
-  /*
-    dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
-			 debug_info_section,
-			 "Offset of Compilation Unit Info");
-    dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
-		       "Compilation Unit Length");
-  */
+  /* APPLE LOCAL radar 6476836 - eliminate some dead code.  */
   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
 
   for (i = 0; VEC_iterate (inlined_entry, inlined_dies, i, iptr); i++)
@@ -7707,9 +7723,23 @@
       dw_attr_ref mips_name_attr;
       dw_die_ref *diep;
       unsigned j;
-      unsigned num_entries = VEC_length (dw_die_ref, iptr->inlined_instances);
+      /* APPLE LOCAL radar 6476836  */
+      unsigned num_entries = 0;
       dw_die_ref origin_die = iptr->origin_die;
 
+      /* APPLE LOCAL begin radar 6476836  */
+      /* Don't count or output dies that were eliminated as part of 
+	 unused types.  */
+      for (j = 0; VEC_iterate (dw_die_ref, iptr->inlined_instances, j, diep);
+	   j++)
+	if (! (*diep)->dead)
+	  num_entries++;
+
+      /* If all the entries were eliminated, move to next origin die.  */
+      if (num_entries == 0)
+	continue;
+      /* APPLE LOCAL end radar 6476836  */
+
       mips_name_attr = get_AT (origin_die, DW_AT_MIPS_linkage_name);
       name_attr = get_AT (origin_die, DW_AT_name);
 
@@ -7723,10 +7753,7 @@
       gcc_assert (AT_string_form (name_attr) == DW_FORM_strp);
       gcc_assert (AT_string_form (mips_name_attr) == DW_FORM_strp);
 
-      /*
-	dw2_asm_output_data (DWARF_OFFSET_SIZE, origin_die->die_offset,
-			     "Origin die offset");
-      */
+      /* APPLE LOCAL radar 6476836 - eliminate some dead code.  */
 
       dw2_asm_output_offset (DWARF_OFFSET_SIZE,
 			     mips_name_attr->dw_attr_val.v.val_str->label,
@@ -7748,11 +7775,17 @@
 
 	  gcc_assert (low_pc != NULL);
 
-	  dw2_asm_output_data (DWARF_OFFSET_SIZE, (*diep)->die_offset,
-			       "inlined subroutine die offset");
-	  dw2_asm_output_addr (DWARF2_ADDR_SIZE, low_pc, "%s", 
-			       "Low PC address");
-
+	  /* APPLE LOCAL begin radar 6476836  */
+	  /* Don't output dies that were eliminated as part of unused
+	     types.  */
+	  if (! (*diep)->dead)
+	    {
+	      dw2_asm_output_data (DWARF_OFFSET_SIZE, (*diep)->die_offset,
+				   "inlined subroutine die offset");
+	      dw2_asm_output_addr (DWARF2_ADDR_SIZE, low_pc, "%s", 
+				   "Low PC address");
+	    }
+	  /* APPLE LOCAL end radar 6476836  */
 	}
     }
 }
@@ -13144,8 +13177,12 @@
       /* APPLE LOCAL end radar 6237086  */
     }
   /* APPLE LOCAL end radar 6048397 handle block byref variables  */
-  if (origin != NULL)
+  /* APPLE LOCAL begin radar 5964438  */
+  /* Don't try to add a reference to the abstract origin die if the
+     die hasn't been created.  */
+  if ((origin != NULL) && lookup_decl_die (origin))
     add_abstract_origin_attribute (var_die, origin);
+  /* APPLE LOCAL end radar 5964438  */
 
   /* Loop unrolling can create multiple blocks that refer to the same
      static variable, so we must test for the DW_AT_declaration flag.
@@ -13652,6 +13689,22 @@
       if (TYPE_BLOCK_IMPL_STRUCT (type))
 	add_AT_flag (type_die, DW_AT_APPLE_block, 1);
       /* APPLE LOCAL end radar 5811943 - Fix type of pointers to Blocks  */
+      /* APPLE LOCAL begin radar 6386976  */
+      if (TYPE_LANG_SPECIFIC (type)
+	  && (type_die->die_tag == DW_TAG_structure_type)
+	  && lang_hooks.types.is_runtime_specific_type (type))
+	{
+	  if (is_objcxx ())
+	    add_AT_unsigned (type_die, DW_AT_APPLE_runtime_class, 
+			     DW_LANG_ObjC_plus_plus);
+	  else if (is_objc ())
+	    add_AT_unsigned (type_die, DW_AT_APPLE_runtime_class, 
+			     DW_LANG_ObjC);
+	  else if (is_cxx())
+	    add_AT_unsigned (type_die, DW_AT_APPLE_runtime_class, 
+			     DW_LANG_C_plus_plus);
+	}
+      /* APPLE LOCAL end radar 6386976  */
     }
   else
     remove_AT (type_die, DW_AT_declaration);
@@ -15478,6 +15531,40 @@
   } while (c != die->die_child);
 }
 
+/* APPLE LOCAL begin radar 6476836  */
+/* If an inlined subroutine occurs in a struct or class that's going
+   to be eliminated, we need to mark it as dead so it doesn't get
+   output in the inlined debug section.  */
+
+static void
+prune_unused_types_cleanup_inlining (dw_die_ref die, bool should_be_dead)
+{
+  dw_die_ref c;
+
+  /* Mark inlined subroutine die as dead if appropriate.  */
+
+  if (die->die_tag == DW_TAG_inlined_subroutine
+      && should_be_dead)
+    die->dead = 1;
+
+  /* If a struct or class is not marked, then any inlined subroutine
+     descendant of it ought to be marked as dead.  */
+
+  if (die->die_tag == DW_TAG_class_type
+      || die->die_tag == DW_TAG_structure_type)
+    {
+      if (die->die_mark)
+	should_be_dead = 0;
+      else
+	should_be_dead = 1;
+    }
+
+  /* Call function recursively walking the die tree.  */
+
+  FOR_EACH_CHILD (die, c, 
+		  prune_unused_types_cleanup_inlining (c, should_be_dead));
+}
+/* APPLE LOCAL end radar 6476836  */
 
 /* Remove dies representing declarations that we never use.  */
 
@@ -15514,9 +15601,16 @@
   /* Get rid of nodes that aren't marked; and update the string counts.  */
   if (debug_str_hash)
     htab_empty (debug_str_hash);
+  /* APPLE LOCAL radar 6476836  */
+  prune_unused_types_cleanup_inlining (comp_unit_die, false);
   prune_unused_types_prune (comp_unit_die);
   for (node = limbo_die_list; node; node = node->next)
-    prune_unused_types_prune (node->die);
+  /* APPLE LOCAL begin radar 6476836  */
+    {
+      prune_unused_types_cleanup_inlining (node->die, false);
+      prune_unused_types_prune (node->die);
+    }
+  /* APPLE LOCAL end radar 6476836  */
 
   /* Leave the marks clear.  */
   prune_unmark_dies (comp_unit_die);
@@ -15563,6 +15657,11 @@
 	add_comp_dir_attribute (comp_unit_die);
     }
 
+  /* APPLE LOCAL begin radar 6386976  */
+  if (flag_objc_abi > 0)
+    add_AT_unsigned (comp_unit_die, DW_AT_APPLE_major_runtime_vers, 
+		     flag_objc_abi);
+  /* APPLE LOCAL end radar 6386976  */
   /* APPLE LOCAL begin option verifier 4957887 */
   /* Add the options for this compilation now, so that the options
      are from the final compilation not the PCH.

Modified: llvm-gcc-4.2/trunk/gcc/fold-const.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/fold-const.c?rev=62486&r1=62485&r2=62486&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/fold-const.c (original)
+++ llvm-gcc-4.2/trunk/gcc/fold-const.c Sun Jan 18 20:35:27 2009
@@ -5842,6 +5842,9 @@
 	 (C * 8) % 4 since we know that's zero.  */
       if ((code == TRUNC_MOD_EXPR || code == CEIL_MOD_EXPR
 	   || code == FLOOR_MOD_EXPR || code == ROUND_MOD_EXPR)
+	  && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (t))
+	      || (TREE_CODE (TREE_TYPE (t)) == INTEGER_TYPE
+		  && TYPE_IS_SIZETYPE (TREE_TYPE (t))))
 	  && TREE_CODE (TREE_OPERAND (t, 1)) == INTEGER_CST
 	  && integer_zerop (const_binop (TRUNC_MOD_EXPR, op1, c, 0)))
 	return omit_one_operand (type, integer_zero_node, op0);

Modified: llvm-gcc-4.2/trunk/gcc/libgcov.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/libgcov.c?rev=62486&r1=62485&r2=62486&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/libgcov.c (original)
+++ llvm-gcc-4.2/trunk/gcc/libgcov.c Sun Jan 18 20:35:27 2009
@@ -34,6 +34,16 @@
 #include "coretypes.h"
 #include "tm.h"
 
+/* APPLE LOCAL begin instant off 6414141 */
+#if defined(__APPLE__) && !defined(__STATIC__) && !defined(__ppc__) && !defined(__ppc64__)
+#include <vproc.h>
+#if defined(VPROC_HAS_TRANSACTIONS)
+vproc_transaction_t vproc_transaction_begin(vproc_t virtual_proc) __attribute__((weak));
+void vproc_transaction_end(vproc_t virtual_proc, vproc_transaction_t handle) __attribute__((weak));
+#endif
+#endif
+/* APPLE LOCAL end instant off 6414141 */
+
 #if defined(inhibit_libc)
 #define IN_LIBGCOV (-1)
 #else
@@ -149,6 +159,14 @@
   return 1;
 }
 
+/* APPLE LOCAL begin instant off 6414141 */
+#if defined(__APPLE__) && !defined(__STATIC__) && !defined(__ppc__) && !defined(__ppc64__)
+#if defined(VPROC_HAS_TRANSACTIONS)
+static vproc_transaction_t gcov_trans;
+#endif
+#endif
+/* APPLE LOCAL end instant off 6414141 */
+
 /* Dump the coverage counts. We merge with existing counts when
    possible, to avoid growing the .da files ad infinitum. We use this
    program's checksum to make sure we only accumulate whole program
@@ -529,6 +547,16 @@
 		   "profiling:%s:Error writing\n",
 		   gi_filename);
     }
+  /* APPLE LOCAL begin instant off 6414141 */
+#if defined(__APPLE__) && !defined(__STATIC__) && !defined(__ppc__) && !defined(__ppc64__)
+#if defined(VPROC_HAS_TRANSACTIONS)
+  if (vproc_transaction_end)
+    {
+      vproc_transaction_end (0, gcov_trans);
+    }
+#endif
+#endif
+  /* APPLE LOCAL end instant off 6414141 */
 }
 
 /* Add a new object file onto the bb chain.  Invoked automatically
@@ -567,6 +595,21 @@
       
       gcov_crc32 = crc32;
       
+      /* APPLE LOCAL begin instant off 6414141 */
+#if defined(__APPLE__) && !defined(__STATIC__) && !defined(__ppc__) && !defined(__ppc64__)
+#if defined(VPROC_HAS_TRANSACTIONS)
+      if (!gcov_list
+	  && vproc_transaction_begin)
+	{
+	  /* Arrange for gcov data collection to turn off instant off,
+	     so that we record the collected data from an instant off
+	     app instead of loosing it.  */
+	  gcov_trans = vproc_transaction_begin (0);
+	}
+#endif
+#endif
+      /* APPLE LOCAL end instant off 6414141 */
+
       if (!gcov_list)
 	atexit (gcov_exit);
       

Modified: llvm-gcc-4.2/trunk/gcc/var-tracking.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/var-tracking.c?rev=62486&r1=62485&r2=62486&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/var-tracking.c (original)
+++ llvm-gcc-4.2/trunk/gcc/var-tracking.c Sun Jan 18 20:35:27 2009
@@ -106,6 +106,8 @@
 #include "expr.h"
 #include "timevar.h"
 #include "tree-pass.h"
+/* APPLE LOCAL 6414738 */
+#include "langhooks.h"
 
 /* Type of micro operation.  */
 enum micro_operation_type
@@ -2279,6 +2281,63 @@
     }
 }
 
+/* APPLE LOCAL begin 6414738 */
+/* Compare variable *SLOT with the same variable in hash table DATA;
+   if not identical, print difference on file _F.  */
+static const char *_set_name;
+static FILE *_f;
+static int
+dump_dataflow_set_difference_1 (void **slot, void *data)
+{
+  htab_t htab = (htab_t) data;
+  variable var1, var2;
+
+  var1 = *(variable *) slot;
+  var2 = htab_find_with_hash (htab, var1->decl,
+			      VARIABLE_HASH_VAL (var1->decl));
+  if (!var2)
+    fprintf (_f, "%s only in %s set\n", lang_hooks.decl_printable_name (var1->decl, 0), _set_name);
+  else if (variable_different_p (var1, var2, false))
+    fprintf (_f, "%s present but not identical in sets\n", lang_hooks.decl_printable_name (var1->decl, 0));
+  /* Continue traversing the hash table.  */
+  return 1;
+}
+
+/* Print dataflow set difference to stderr.  Plagiarized from
+   dataflow_set_different.  Never called; intended for use from
+   GDB.  */
+void debug_dataflow_set_difference (dataflow_set *, dataflow_set *);
+void
+debug_dataflow_set_difference (dataflow_set *left_set, dataflow_set *right_set)
+{
+  _f = stderr;
+  _set_name = "left";
+  htab_traverse (left_set->vars, dump_dataflow_set_difference_1, right_set->vars);
+  _set_name = "right";
+  htab_traverse (right_set->vars, dump_dataflow_set_difference_1, left_set->vars);
+}
+
+void debug_dataflow_set (dataflow_set *);
+void
+debug_dataflow_set (dataflow_set *set)
+{
+  FILE *saved_dump_file = dump_file;
+  dump_file = stderr;
+  dump_dataflow_set (set);
+  dump_file = saved_dump_file;
+}
+void debug_var_tracking (void);
+void
+debug_var_tracking (void)
+{
+  FILE *saved_dump_file = dump_file;
+  dump_file = stderr;
+  dump_dataflow_sets ();
+  dump_flow_info (stderr, dump_flags);
+  dump_file = saved_dump_file;
+}
+/* APPLE LOCAL end 6414738 */
+
 /* Add variable VAR to the hash table of changed variables and
    if it has no locations delete it from hash table HTAB.  */
 
@@ -2556,6 +2615,10 @@
 			      pool_free (attrs_pool, anode);
 			      *anextp = anext;
 			    }
+			  /* APPLE LOCAL begin 6414738 */
+			  else
+			    anextp = &anode->next;
+			  /* APPLE LOCAL end 6414738 */
 			}
 		    }
 





More information about the llvm-commits mailing list