summaryrefslogtreecommitdiffstats
path: root/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99380.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99380.patch')
-rw-r--r--meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99380.patch516
1 files changed, 252 insertions, 264 deletions
diff --git a/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99380.patch b/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99380.patch
index c66c11f82c..b7b6d88a04 100644
--- a/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99380.patch
+++ b/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99380.patch
@@ -171,9 +171,11 @@
171 Backport from mainline: 171 Backport from mainline:
172 172
173=== modified file 'gcc/Makefile.in' 173=== modified file 'gcc/Makefile.in'
174--- old/gcc/Makefile.in 2010-08-10 13:31:21 +0000 174Index: gcc-4_5-branch/gcc/Makefile.in
175+++ new/gcc/Makefile.in 2010-09-01 13:29:58 +0000 175===================================================================
176@@ -3193,7 +3193,7 @@ 176--- gcc-4_5-branch.orig/gcc/Makefile.in 2012-03-06 12:11:29.000000000 -0800
177+++ gcc-4_5-branch/gcc/Makefile.in 2012-03-06 12:14:01.024439210 -0800
178@@ -3197,7 +3197,7 @@
177 ira-costs.o: ira-costs.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ 179 ira-costs.o: ira-costs.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
178 hard-reg-set.h $(RTL_H) $(EXPR_H) $(TM_P_H) $(FLAGS_H) $(BASIC_BLOCK_H) \ 180 hard-reg-set.h $(RTL_H) $(EXPR_H) $(TM_P_H) $(FLAGS_H) $(BASIC_BLOCK_H) \
179 $(REGS_H) addresses.h insn-config.h $(RECOG_H) $(TOPLEV_H) $(TARGET_H) \ 181 $(REGS_H) addresses.h insn-config.h $(RECOG_H) $(TOPLEV_H) $(TARGET_H) \
@@ -182,10 +184,10 @@
182 ira-conflicts.o: ira-conflicts.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ 184 ira-conflicts.o: ira-conflicts.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
183 $(TARGET_H) $(RTL_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) \ 185 $(TARGET_H) $(RTL_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) \
184 insn-config.h $(RECOG_H) $(BASIC_BLOCK_H) $(TOPLEV_H) $(TM_P_H) $(PARAMS_H) \ 186 insn-config.h $(RECOG_H) $(BASIC_BLOCK_H) $(TOPLEV_H) $(TM_P_H) $(PARAMS_H) \
185 187Index: gcc-4_5-branch/gcc/basic-block.h
186=== modified file 'gcc/basic-block.h' 188===================================================================
187--- old/gcc/basic-block.h 2010-08-16 09:41:58 +0000 189--- gcc-4_5-branch.orig/gcc/basic-block.h 2012-03-06 12:11:33.000000000 -0800
188+++ new/gcc/basic-block.h 2010-09-01 13:29:58 +0000 190+++ gcc-4_5-branch/gcc/basic-block.h 2012-03-06 12:14:01.024439210 -0800
189@@ -894,6 +894,10 @@ 191@@ -894,6 +894,10 @@
190 192
191 /* In cfgcleanup.c. */ 193 /* In cfgcleanup.c. */
@@ -197,10 +199,10 @@
197 extern bool delete_unreachable_blocks (void); 199 extern bool delete_unreachable_blocks (void);
198 200
199 extern bool mark_dfs_back_edges (void); 201 extern bool mark_dfs_back_edges (void);
200 202Index: gcc-4_5-branch/gcc/cfgcleanup.c
201=== modified file 'gcc/cfgcleanup.c' 203===================================================================
202--- old/gcc/cfgcleanup.c 2010-05-17 16:26:22 +0000 204--- gcc-4_5-branch.orig/gcc/cfgcleanup.c 2012-03-06 11:53:32.000000000 -0800
203+++ new/gcc/cfgcleanup.c 2010-09-01 13:29:58 +0000 205+++ gcc-4_5-branch/gcc/cfgcleanup.c 2012-03-06 12:14:01.028439167 -0800
204@@ -68,7 +68,6 @@ 206@@ -68,7 +68,6 @@
205 static bool try_crossjump_to_edge (int, edge, edge); 207 static bool try_crossjump_to_edge (int, edge, edge);
206 static bool try_crossjump_bb (int, basic_block); 208 static bool try_crossjump_bb (int, basic_block);
@@ -209,16 +211,15 @@
209 static bool old_insns_match_p (int, rtx, rtx); 211 static bool old_insns_match_p (int, rtx, rtx);
210 212
211 static void merge_blocks_move_predecessor_nojumps (basic_block, basic_block); 213 static void merge_blocks_move_predecessor_nojumps (basic_block, basic_block);
212@@ -972,13 +971,27 @@ 214@@ -977,13 +976,27 @@
213 be filled that clobbers a parameter expected by the subroutine. 215 be filled that clobbers a parameter expected by the subroutine.
214 216
215 ??? We take the simple route for now and assume that if they're 217 ??? We take the simple route for now and assume that if they're
216- equal, they were constructed identically. */ 218- equal, they were constructed identically. */
217- 219+ equal, they were constructed identically.
220
218- if (CALL_P (i1) 221- if (CALL_P (i1)
219- && (!rtx_equal_p (CALL_INSN_FUNCTION_USAGE (i1), 222- && (!rtx_equal_p (CALL_INSN_FUNCTION_USAGE (i1),
220+ equal, they were constructed identically.
221+
222+ Also check for identical exception regions. */ 223+ Also check for identical exception regions. */
223+ 224+
224+ if (CALL_P (i1)) 225+ if (CALL_P (i1))
@@ -243,7 +244,7 @@
243 244
244 #ifdef STACK_REGS 245 #ifdef STACK_REGS
245 /* If cross_jump_death_matters is not 0, the insn's mode 246 /* If cross_jump_death_matters is not 0, the insn's mode
246@@ -1017,6 +1030,29 @@ 247@@ -1022,6 +1035,29 @@
247 return false; 248 return false;
248 } 249 }
249 250
@@ -273,7 +274,7 @@
273 /* Look through the insns at the end of BB1 and BB2 and find the longest 274 /* Look through the insns at the end of BB1 and BB2 and find the longest
274 sequence that are equivalent. Store the first insns for that sequence 275 sequence that are equivalent. Store the first insns for that sequence
275 in *F1 and *F2 and return the sequence length. 276 in *F1 and *F2 and return the sequence length.
276@@ -1024,9 +1060,8 @@ 277@@ -1029,9 +1065,8 @@
277 To simplify callers of this function, if the blocks match exactly, 278 To simplify callers of this function, if the blocks match exactly,
278 store the head of the blocks in *F1 and *F2. */ 279 store the head of the blocks in *F1 and *F2. */
279 280
@@ -285,7 +286,7 @@
285 { 286 {
286 rtx i1, i2, last1, last2, afterlast1, afterlast2; 287 rtx i1, i2, last1, last2, afterlast1, afterlast2;
287 int ninsns = 0; 288 int ninsns = 0;
288@@ -1066,7 +1101,7 @@ 289@@ -1071,7 +1106,7 @@
289 if (i1 == BB_HEAD (bb1) || i2 == BB_HEAD (bb2)) 290 if (i1 == BB_HEAD (bb1) || i2 == BB_HEAD (bb2))
290 break; 291 break;
291 292
@@ -294,7 +295,7 @@
294 break; 295 break;
295 296
296 merge_memattrs (i1, i2); 297 merge_memattrs (i1, i2);
297@@ -1074,21 +1109,7 @@ 298@@ -1079,21 +1114,7 @@
298 /* Don't begin a cross-jump with a NOTE insn. */ 299 /* Don't begin a cross-jump with a NOTE insn. */
299 if (INSN_P (i1)) 300 if (INSN_P (i1))
300 { 301 {
@@ -317,7 +318,7 @@
317 318
318 afterlast1 = last1, afterlast2 = last2; 319 afterlast1 = last1, afterlast2 = last2;
319 last1 = i1, last2 = i2; 320 last1 = i1, last2 = i2;
320@@ -1130,6 +1151,97 @@ 321@@ -1135,6 +1156,97 @@
321 return ninsns; 322 return ninsns;
322 } 323 }
323 324
@@ -415,7 +416,7 @@
415 /* Return true iff outgoing edges of BB1 and BB2 match, together with 416 /* Return true iff outgoing edges of BB1 and BB2 match, together with
416 the branch instruction. This means that if we commonize the control 417 the branch instruction. This means that if we commonize the control
417 flow before end of the basic block, the semantic remains unchanged. 418 flow before end of the basic block, the semantic remains unchanged.
418@@ -1498,7 +1610,7 @@ 419@@ -1503,7 +1615,7 @@
419 return false; 420 return false;
420 421
421 /* ... and part the second. */ 422 /* ... and part the second. */
@@ -424,11 +425,11 @@
424 425
425 /* Don't proceed with the crossjump unless we found a sufficient number 426 /* Don't proceed with the crossjump unless we found a sufficient number
426 of matching instructions or the 'from' block was totally matched 427 of matching instructions or the 'from' block was totally matched
427 428Index: gcc-4_5-branch/gcc/cfgexpand.c
428=== modified file 'gcc/cfgexpand.c' 429===================================================================
429--- old/gcc/cfgexpand.c 2010-05-14 17:11:03 +0000 430--- gcc-4_5-branch.orig/gcc/cfgexpand.c 2012-03-06 11:53:32.000000000 -0800
430+++ new/gcc/cfgexpand.c 2010-09-01 13:29:58 +0000 431+++ gcc-4_5-branch/gcc/cfgexpand.c 2012-03-06 12:14:01.028439167 -0800
431@@ -3026,14 +3026,15 @@ 432@@ -3033,14 +3033,15 @@
432 if (SCALAR_INT_MODE_P (GET_MODE (op0)) 433 if (SCALAR_INT_MODE_P (GET_MODE (op0))
433 && SCALAR_INT_MODE_P (mode)) 434 && SCALAR_INT_MODE_P (mode))
434 { 435 {
@@ -448,11 +449,11 @@
448 return gen_rtx_MULT (mode, op0, op1); 449 return gen_rtx_MULT (mode, op0, op1);
449 } 450 }
450 return NULL; 451 return NULL;
451 452Index: gcc-4_5-branch/gcc/config/arm/arm.c
452=== modified file 'gcc/config/arm/arm.c' 453===================================================================
453--- old/gcc/config/arm/arm.c 2010-08-31 10:00:27 +0000 454--- gcc-4_5-branch.orig/gcc/config/arm/arm.c 2012-03-06 12:11:35.000000000 -0800
454+++ new/gcc/config/arm/arm.c 2010-09-01 13:29:58 +0000 455+++ gcc-4_5-branch/gcc/config/arm/arm.c 2012-03-06 12:14:01.032439183 -0800
455@@ -8116,8 +8116,6 @@ 456@@ -8096,8 +8096,6 @@
456 static bool 457 static bool
457 xscale_sched_adjust_cost (rtx insn, rtx link, rtx dep, int * cost) 458 xscale_sched_adjust_cost (rtx insn, rtx link, rtx dep, int * cost)
458 { 459 {
@@ -461,7 +462,7 @@
461 /* Some true dependencies can have a higher cost depending 462 /* Some true dependencies can have a higher cost depending
462 on precisely how certain input operands are used. */ 463 on precisely how certain input operands are used. */
463 if (REG_NOTE_KIND (link) == 0 464 if (REG_NOTE_KIND (link) == 0
464@@ -12166,6 +12164,60 @@ 465@@ -12146,6 +12144,60 @@
465 return result; 466 return result;
466 } 467 }
467 468
@@ -522,7 +523,7 @@
522 /* Gcc puts the pool in the wrong place for ARM, since we can only 523 /* Gcc puts the pool in the wrong place for ARM, since we can only
523 load addresses a limited distance around the pc. We do some 524 load addresses a limited distance around the pc. We do some
524 special munging to move the constant pool values to the correct 525 special munging to move the constant pool values to the correct
525@@ -12177,6 +12229,9 @@ 526@@ -12157,6 +12209,9 @@
526 HOST_WIDE_INT address = 0; 527 HOST_WIDE_INT address = 0;
527 Mfix * fix; 528 Mfix * fix;
528 529
@@ -532,10 +533,10 @@
532 minipool_fix_head = minipool_fix_tail = NULL; 533 minipool_fix_head = minipool_fix_tail = NULL;
533 534
534 /* The first insn must always be a note, or the code below won't 535 /* The first insn must always be a note, or the code below won't
535 536Index: gcc-4_5-branch/gcc/config/arm/arm.h
536=== modified file 'gcc/config/arm/arm.h' 537===================================================================
537--- old/gcc/config/arm/arm.h 2010-08-13 11:11:15 +0000 538--- gcc-4_5-branch.orig/gcc/config/arm/arm.h 2012-03-06 12:11:33.000000000 -0800
538+++ new/gcc/config/arm/arm.h 2010-09-01 13:29:58 +0000 539+++ gcc-4_5-branch/gcc/config/arm/arm.h 2012-03-06 12:14:01.032439183 -0800
539@@ -1133,7 +1133,11 @@ 540@@ -1133,7 +1133,11 @@
540 } 541 }
541 542
@@ -549,10 +550,10 @@
549 550
550 /* Interrupt functions can only use registers that have already been 551 /* Interrupt functions can only use registers that have already been
551 saved by the prologue, even if they would normally be 552 saved by the prologue, even if they would normally be
552 553Index: gcc-4_5-branch/gcc/config/arm/arm.md
553=== modified file 'gcc/config/arm/arm.md' 554===================================================================
554--- old/gcc/config/arm/arm.md 2010-08-31 10:00:27 +0000 555--- gcc-4_5-branch.orig/gcc/config/arm/arm.md 2012-03-06 12:11:35.000000000 -0800
555+++ new/gcc/config/arm/arm.md 2010-09-01 13:29:58 +0000 556+++ gcc-4_5-branch/gcc/config/arm/arm.md 2012-03-06 12:14:01.036439231 -0800
556@@ -4074,7 +4074,7 @@ 557@@ -4074,7 +4074,7 @@
557 558
558 (define_split 559 (define_split
@@ -562,10 +563,10 @@
562 "!TARGET_THUMB2 && !arm_arch6" 563 "!TARGET_THUMB2 && !arm_arch6"
563 [(set (match_dup 0) (ashift:SI (match_dup 2) (const_int 16))) 564 [(set (match_dup 0) (ashift:SI (match_dup 2) (const_int 16)))
564 (set (match_dup 0) (lshiftrt:SI (match_dup 0) (const_int 16)))] 565 (set (match_dup 0) (lshiftrt:SI (match_dup 0) (const_int 16)))]
565 566Index: gcc-4_5-branch/gcc/config/arm/thumb2.md
566=== modified file 'gcc/config/arm/thumb2.md' 567===================================================================
567--- old/gcc/config/arm/thumb2.md 2010-08-31 10:00:27 +0000 568--- gcc-4_5-branch.orig/gcc/config/arm/thumb2.md 2012-03-06 12:11:35.000000000 -0800
568+++ new/gcc/config/arm/thumb2.md 2010-09-01 13:29:58 +0000 569+++ gcc-4_5-branch/gcc/config/arm/thumb2.md 2012-03-06 12:14:01.036439231 -0800
569@@ -1046,29 +1046,6 @@ 570@@ -1046,29 +1046,6 @@
570 }" 571 }"
571 ) 572 )
@@ -596,10 +597,10 @@
596 (define_insn "*thumb2_alusi3_short" 597 (define_insn "*thumb2_alusi3_short"
597 [(set (match_operand:SI 0 "s_register_operand" "=l") 598 [(set (match_operand:SI 0 "s_register_operand" "=l")
598 (match_operator:SI 3 "thumb_16bit_operator" 599 (match_operator:SI 3 "thumb_16bit_operator"
599 600Index: gcc-4_5-branch/gcc/config/avr/avr.h
600=== modified file 'gcc/config/avr/avr.h' 601===================================================================
601--- old/gcc/config/avr/avr.h 2010-01-11 23:12:14 +0000 602--- gcc-4_5-branch.orig/gcc/config/avr/avr.h 2012-03-06 11:53:21.000000000 -0800
602+++ new/gcc/config/avr/avr.h 2010-09-01 13:29:58 +0000 603+++ gcc-4_5-branch/gcc/config/avr/avr.h 2012-03-06 12:14:01.036439231 -0800
603@@ -232,7 +232,7 @@ 604@@ -232,7 +232,7 @@
604 32,33,34,35 \ 605 32,33,34,35 \
605 } 606 }
@@ -609,10 +610,10 @@
609 610
610 611
611 #define HARD_REGNO_NREGS(REGNO, MODE) ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) 612 #define HARD_REGNO_NREGS(REGNO, MODE) ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
612 613Index: gcc-4_5-branch/gcc/config/i386/i386.h
613=== modified file 'gcc/config/i386/i386.h' 614===================================================================
614--- old/gcc/config/i386/i386.h 2010-04-27 19:14:19 +0000 615--- gcc-4_5-branch.orig/gcc/config/i386/i386.h 2012-03-06 11:53:19.000000000 -0800
615+++ new/gcc/config/i386/i386.h 2010-09-01 13:29:58 +0000 616+++ gcc-4_5-branch/gcc/config/i386/i386.h 2012-03-06 12:14:01.036439231 -0800
616@@ -955,7 +955,7 @@ 617@@ -955,7 +955,7 @@
617 registers listed in CALL_USED_REGISTERS, keeping the others 618 registers listed in CALL_USED_REGISTERS, keeping the others
618 available for storage of persistent values. 619 available for storage of persistent values.
@@ -636,10 +637,10 @@
636 637
637 638
638 #define OVERRIDE_ABI_FORMAT(FNDECL) ix86_call_abi_override (FNDECL) 639 #define OVERRIDE_ABI_FORMAT(FNDECL) ix86_call_abi_override (FNDECL)
639 640Index: gcc-4_5-branch/gcc/config/mips/mips.h
640=== modified file 'gcc/config/mips/mips.h' 641===================================================================
641--- old/gcc/config/mips/mips.h 2009-10-29 17:39:52 +0000 642--- gcc-4_5-branch.orig/gcc/config/mips/mips.h 2012-03-06 11:53:28.000000000 -0800
642+++ new/gcc/config/mips/mips.h 2010-09-01 13:29:58 +0000 643+++ gcc-4_5-branch/gcc/config/mips/mips.h 2012-03-06 12:14:01.040439261 -0800
643@@ -2059,12 +2059,12 @@ 644@@ -2059,12 +2059,12 @@
644 182,183,184,185,186,187 \ 645 182,183,184,185,186,187 \
645 } 646 }
@@ -655,10 +656,10 @@
655 656
656 /* True if VALUE is an unsigned 6-bit number. */ 657 /* True if VALUE is an unsigned 6-bit number. */
657 658
658 659Index: gcc-4_5-branch/gcc/config/picochip/picochip.h
659=== modified file 'gcc/config/picochip/picochip.h' 660===================================================================
660--- old/gcc/config/picochip/picochip.h 2009-11-04 11:06:36 +0000 661--- gcc-4_5-branch.orig/gcc/config/picochip/picochip.h 2012-03-06 11:53:26.000000000 -0800
661+++ new/gcc/config/picochip/picochip.h 2010-09-01 13:29:58 +0000 662+++ gcc-4_5-branch/gcc/config/picochip/picochip.h 2012-03-06 12:14:01.040439261 -0800
662@@ -261,7 +261,7 @@ 663@@ -261,7 +261,7 @@
663 /* We can dynamically change the REG_ALLOC_ORDER using the following hook. 664 /* We can dynamically change the REG_ALLOC_ORDER using the following hook.
664 It would be desirable to change it for leaf functions so we can put 665 It would be desirable to change it for leaf functions so we can put
@@ -668,10 +669,10 @@
668 669
669 /* How Values Fit in Registers */ 670 /* How Values Fit in Registers */
670 671
671 672Index: gcc-4_5-branch/gcc/config/sparc/predicates.md
672=== modified file 'gcc/config/sparc/predicates.md' 673===================================================================
673--- old/gcc/config/sparc/predicates.md 2009-02-20 15:20:38 +0000 674--- gcc-4_5-branch.orig/gcc/config/sparc/predicates.md 2012-03-06 11:53:17.000000000 -0800
674+++ new/gcc/config/sparc/predicates.md 2010-09-01 13:29:58 +0000 675+++ gcc-4_5-branch/gcc/config/sparc/predicates.md 2012-03-06 12:14:01.040439261 -0800
675@@ -1,5 +1,5 @@ 676@@ -1,5 +1,5 @@
676 ;; Predicate definitions for SPARC. 677 ;; Predicate definitions for SPARC.
677-;; Copyright (C) 2005, 2007, 2008 Free Software Foundation, Inc. 678-;; Copyright (C) 2005, 2007, 2008 Free Software Foundation, Inc.
@@ -689,11 +690,11 @@
689- (and (match_code "mem") 690- (and (match_code "mem")
690- (and (match_operand 0 "memory_operand") 691- (and (match_operand 0 "memory_operand")
691- (match_test "REG_P (XEXP (op, 0))")))) 692- (match_test "REG_P (XEXP (op, 0))"))))
692 693Index: gcc-4_5-branch/gcc/config/sparc/sparc.h
693=== modified file 'gcc/config/sparc/sparc.h' 694===================================================================
694--- old/gcc/config/sparc/sparc.h 2010-04-02 18:54:46 +0000 695--- gcc-4_5-branch.orig/gcc/config/sparc/sparc.h 2012-03-06 11:53:17.000000000 -0800
695+++ new/gcc/config/sparc/sparc.h 2010-09-01 13:29:58 +0000 696+++ gcc-4_5-branch/gcc/config/sparc/sparc.h 2012-03-06 12:14:01.040439261 -0800
696@@ -1181,7 +1181,7 @@ 697@@ -1188,7 +1188,7 @@
697 96, 97, 98, 99, /* %fcc0-3 */ \ 698 96, 97, 98, 99, /* %fcc0-3 */ \
698 100, 0, 14, 30, 31, 101} /* %icc, %g0, %o6, %i6, %i7, %sfp */ 699 100, 0, 14, 30, 31, 101} /* %icc, %g0, %o6, %i6, %i7, %sfp */
699 700
@@ -702,10 +703,10 @@
702 703
703 extern char sparc_leaf_regs[]; 704 extern char sparc_leaf_regs[];
704 #define LEAF_REGISTERS sparc_leaf_regs 705 #define LEAF_REGISTERS sparc_leaf_regs
705 706Index: gcc-4_5-branch/gcc/config/sparc/sync.md
706=== modified file 'gcc/config/sparc/sync.md' 707===================================================================
707--- old/gcc/config/sparc/sync.md 2009-02-20 15:20:38 +0000 708--- gcc-4_5-branch.orig/gcc/config/sparc/sync.md 2012-03-06 11:53:17.000000000 -0800
708+++ new/gcc/config/sparc/sync.md 2010-09-01 13:29:58 +0000 709+++ gcc-4_5-branch/gcc/config/sparc/sync.md 2012-03-06 12:14:01.040439261 -0800
709@@ -1,5 +1,5 @@ 710@@ -1,5 +1,5 @@
710 ;; GCC machine description for SPARC synchronization instructions. 711 ;; GCC machine description for SPARC synchronization instructions.
711-;; Copyright (C) 2005, 2007, 2009 712-;; Copyright (C) 2005, 2007, 2009
@@ -766,10 +767,10 @@
766 return "srlx\t%L3, 32, %H3"; 767 return "srlx\t%L3, 32, %H3";
767 } 768 }
768 [(set_attr "type" "multi") 769 [(set_attr "type" "multi")
769 770Index: gcc-4_5-branch/gcc/config/xtensa/xtensa.h
770=== modified file 'gcc/config/xtensa/xtensa.h' 771===================================================================
771--- old/gcc/config/xtensa/xtensa.h 2009-09-23 21:24:42 +0000 772--- gcc-4_5-branch.orig/gcc/config/xtensa/xtensa.h 2012-03-06 11:53:21.000000000 -0800
772+++ new/gcc/config/xtensa/xtensa.h 2010-09-01 13:29:58 +0000 773+++ gcc-4_5-branch/gcc/config/xtensa/xtensa.h 2012-03-06 12:14:01.040439261 -0800
773@@ -286,7 +286,7 @@ 774@@ -286,7 +286,7 @@
774 incoming argument in a2 is live throughout the function and 775 incoming argument in a2 is live throughout the function and
775 local-alloc decides to use a2, then the incoming argument must 776 local-alloc decides to use a2, then the incoming argument must
@@ -788,10 +789,10 @@
788 789
789 /* For Xtensa, the only point of this is to prevent GCC from otherwise 790 /* For Xtensa, the only point of this is to prevent GCC from otherwise
790 giving preference to call-used registers. To minimize window 791 giving preference to call-used registers. To minimize window
791 792Index: gcc-4_5-branch/gcc/doc/tm.texi
792=== modified file 'gcc/doc/tm.texi' 793===================================================================
793--- old/gcc/doc/tm.texi 2010-08-13 11:53:46 +0000 794--- gcc-4_5-branch.orig/gcc/doc/tm.texi 2012-03-06 12:11:33.000000000 -0800
794+++ new/gcc/doc/tm.texi 2010-09-01 13:29:58 +0000 795+++ gcc-4_5-branch/gcc/doc/tm.texi 2012-03-06 12:14:01.044439265 -0800
795@@ -2093,7 +2093,7 @@ 796@@ -2093,7 +2093,7 @@
796 the highest numbered allocable register first. 797 the highest numbered allocable register first.
797 @end defmac 798 @end defmac
@@ -817,11 +818,11 @@
817 @defmac IRA_HARD_REGNO_ADD_COST_MULTIPLIER (@var{regno}) 818 @defmac IRA_HARD_REGNO_ADD_COST_MULTIPLIER (@var{regno})
818 In some case register allocation order is not enough for the 819 In some case register allocation order is not enough for the
819 Integrated Register Allocator (@acronym{IRA}) to generate a good code. 820 Integrated Register Allocator (@acronym{IRA}) to generate a good code.
820 821Index: gcc-4_5-branch/gcc/expmed.c
821=== modified file 'gcc/expmed.c' 822===================================================================
822--- old/gcc/expmed.c 2010-03-03 22:10:17 +0000 823--- gcc-4_5-branch.orig/gcc/expmed.c 2012-03-06 11:53:32.000000000 -0800
823+++ new/gcc/expmed.c 2010-09-01 13:29:58 +0000 824+++ gcc-4_5-branch/gcc/expmed.c 2012-03-06 12:14:01.044439265 -0800
824@@ -3253,6 +3253,55 @@ 825@@ -3255,6 +3255,55 @@
825 gcc_assert (op0); 826 gcc_assert (op0);
826 return op0; 827 return op0;
827 } 828 }
@@ -877,11 +878,11 @@
877 878
878 /* Return the smallest n such that 2**n >= X. */ 879 /* Return the smallest n such that 2**n >= X. */
879 880
880 881Index: gcc-4_5-branch/gcc/expr.c
881=== modified file 'gcc/expr.c' 882===================================================================
882--- old/gcc/expr.c 2010-08-20 16:21:01 +0000 883--- gcc-4_5-branch.orig/gcc/expr.c 2012-03-06 12:11:34.000000000 -0800
883+++ new/gcc/expr.c 2010-09-01 13:29:58 +0000 884+++ gcc-4_5-branch/gcc/expr.c 2012-03-06 12:46:21.548533151 -0800
884@@ -7224,7 +7224,6 @@ 885@@ -7345,7 +7345,6 @@
885 optab this_optab; 886 optab this_optab;
886 rtx subtarget, original_target; 887 rtx subtarget, original_target;
887 int ignore; 888 int ignore;
@@ -889,7 +890,7 @@
889 bool reduce_bit_field; 890 bool reduce_bit_field;
890 gimple subexp0_def, subexp1_def; 891 gimple subexp0_def, subexp1_def;
891 tree top0, top1; 892 tree top0, top1;
892@@ -7679,13 +7678,7 @@ 893@@ -7800,13 +7799,7 @@
893 894
894 goto binop2; 895 goto binop2;
895 896
@@ -904,7 +905,7 @@
904 /* If first operand is constant, swap them. 905 /* If first operand is constant, swap them.
905 Thus the following special case checks need only 906 Thus the following special case checks need only
906 check the second operand. */ 907 check the second operand. */
907@@ -7696,96 +7689,35 @@ 908@@ -7817,96 +7810,35 @@
908 treeop1 = t1; 909 treeop1 = t1;
909 } 910 }
910 911
@@ -1015,7 +1016,7 @@
1015 enum machine_mode innermode = TYPE_MODE (op0type); 1016 enum machine_mode innermode = TYPE_MODE (op0type);
1016 bool zextend_p = TYPE_UNSIGNED (op0type); 1017 bool zextend_p = TYPE_UNSIGNED (op0type);
1017 optab other_optab = zextend_p ? smul_widen_optab : umul_widen_optab; 1018 optab other_optab = zextend_p ? smul_widen_optab : umul_widen_optab;
1018@@ -7795,24 +7727,22 @@ 1019@@ -7916,24 +7848,22 @@
1019 { 1020 {
1020 if (optab_handler (this_optab, mode)->insn_code != CODE_FOR_nothing) 1021 if (optab_handler (this_optab, mode)->insn_code != CODE_FOR_nothing)
1021 { 1022 {
@@ -1051,7 +1052,7 @@
1051 temp = expand_binop (mode, other_optab, op0, op1, target, 1052 temp = expand_binop (mode, other_optab, op0, op1, target,
1052 unsignedp, OPTAB_LIB_WIDEN); 1053 unsignedp, OPTAB_LIB_WIDEN);
1053 hipart = gen_highpart (innermode, temp); 1054 hipart = gen_highpart (innermode, temp);
1054@@ -7825,7 +7755,53 @@ 1055@@ -7946,7 +7876,53 @@
1055 } 1056 }
1056 } 1057 }
1057 } 1058 }
@@ -1106,7 +1107,7 @@
1106 return REDUCE_BIT_FIELD (expand_mult (mode, op0, op1, target, unsignedp)); 1107 return REDUCE_BIT_FIELD (expand_mult (mode, op0, op1, target, unsignedp));
1107 1108
1108 case TRUNC_DIV_EXPR: 1109 case TRUNC_DIV_EXPR:
1109@@ -8311,6 +8287,8 @@ 1110@@ -8435,6 +8411,8 @@
1110 location_t loc = EXPR_LOCATION (exp); 1111 location_t loc = EXPR_LOCATION (exp);
1111 struct separate_ops ops; 1112 struct separate_ops ops;
1112 tree treeop0, treeop1, treeop2; 1113 tree treeop0, treeop1, treeop2;
@@ -1115,7 +1116,7 @@
1115 1116
1116 type = TREE_TYPE (exp); 1117 type = TREE_TYPE (exp);
1117 mode = TYPE_MODE (type); 1118 mode = TYPE_MODE (type);
1118@@ -8423,15 +8401,17 @@ 1119@@ -8547,15 +8525,17 @@
1119 base variable. This unnecessarily allocates a pseudo, see how we can 1120 base variable. This unnecessarily allocates a pseudo, see how we can
1120 reuse it, if partition base vars have it set already. */ 1121 reuse it, if partition base vars have it set already. */
1121 if (!currently_expanding_to_rtl) 1122 if (!currently_expanding_to_rtl)
@@ -1142,22 +1143,11 @@
1142 goto expand_decl_rtl; 1143 goto expand_decl_rtl;
1143 1144
1144 case PARM_DECL: 1145 case PARM_DECL:
1145@@ -8533,15 +8513,21 @@ 1146@@ -8669,7 +8649,15 @@
1146 /* If the mode of DECL_RTL does not match that of the decl, it
1147 must be a promoted value. We return a SUBREG of the wanted mode,
1148 but mark it so that we know that it was already extended. */
1149-
1150- if (REG_P (decl_rtl)
1151- && GET_MODE (decl_rtl) != DECL_MODE (exp))
1152+ if (REG_P (decl_rtl) && GET_MODE (decl_rtl) != DECL_MODE (exp))
1153 {
1154 enum machine_mode pmode;
1155 1147
1156- /* Get the signedness used for this variable. Ensure we get the 1148 /* Get the signedness used for this variable. Ensure we get the
1157- same mode we got when the variable was declared. */ 1149 same mode we got when the variable was declared. */
1158- pmode = promote_decl_mode (exp, &unsignedp); 1150- pmode = promote_decl_mode (exp, &unsignedp);
1159+ /* Get the signedness to be used for this variable. Ensure we get
1160+ the same mode we got when the variable was declared. */
1161+ if (code == SSA_NAME 1151+ if (code == SSA_NAME
1162+ && (g = SSA_NAME_DEF_STMT (ssa_name)) 1152+ && (g = SSA_NAME_DEF_STMT (ssa_name))
1163+ && gimple_code (g) == GIMPLE_CALL) 1153+ && gimple_code (g) == GIMPLE_CALL)
@@ -1170,11 +1160,11 @@
1170 gcc_assert (GET_MODE (decl_rtl) == pmode); 1160 gcc_assert (GET_MODE (decl_rtl) == pmode);
1171 1161
1172 temp = gen_lowpart_SUBREG (mode, decl_rtl); 1162 temp = gen_lowpart_SUBREG (mode, decl_rtl);
1173 1163Index: gcc-4_5-branch/gcc/fold-const.c
1174=== modified file 'gcc/fold-const.c' 1164===================================================================
1175--- old/gcc/fold-const.c 2010-04-06 09:36:57 +0000 1165--- gcc-4_5-branch.orig/gcc/fold-const.c 2012-03-06 11:53:32.000000000 -0800
1176+++ new/gcc/fold-const.c 2010-09-01 13:29:58 +0000 1166+++ gcc-4_5-branch/gcc/fold-const.c 2012-03-06 12:14:01.052439240 -0800
1177@@ -5741,6 +5741,76 @@ 1167@@ -5749,6 +5749,76 @@
1178 const_binop (BIT_XOR_EXPR, c, temp, 0)); 1168 const_binop (BIT_XOR_EXPR, c, temp, 0));
1179 } 1169 }
1180 1170
@@ -1251,7 +1241,7 @@
1251 /* Find ways of folding logical expressions of LHS and RHS: 1241 /* Find ways of folding logical expressions of LHS and RHS:
1252 Try to merge two comparisons to the same innermost item. 1242 Try to merge two comparisons to the same innermost item.
1253 Look for range tests like "ch >= '0' && ch <= '9'". 1243 Look for range tests like "ch >= '0' && ch <= '9'".
1254@@ -12539,6 +12609,22 @@ 1244@@ -12553,6 +12623,22 @@
1255 if (0 != (tem = fold_range_test (loc, code, type, op0, op1))) 1245 if (0 != (tem = fold_range_test (loc, code, type, op0, op1)))
1256 return tem; 1246 return tem;
1257 1247
@@ -1274,10 +1264,10 @@
1274 /* Check for the possibility of merging component references. If our 1264 /* Check for the possibility of merging component references. If our
1275 lhs is another similar operation, try to merge its rhs with our 1265 lhs is another similar operation, try to merge its rhs with our
1276 rhs. Then try to merge our lhs and rhs. */ 1266 rhs. Then try to merge our lhs and rhs. */
1277 1267Index: gcc-4_5-branch/gcc/ifcvt.c
1278=== modified file 'gcc/ifcvt.c' 1268===================================================================
1279--- old/gcc/ifcvt.c 2010-04-02 18:54:46 +0000 1269--- gcc-4_5-branch.orig/gcc/ifcvt.c 2012-03-06 11:53:32.000000000 -0800
1280+++ new/gcc/ifcvt.c 2010-09-01 13:29:58 +0000 1270+++ gcc-4_5-branch/gcc/ifcvt.c 2012-03-06 12:14:01.052439240 -0800
1281@@ -385,7 +385,11 @@ 1271@@ -385,7 +385,11 @@
1282 rtx false_expr; /* test for then block insns */ 1272 rtx false_expr; /* test for then block insns */
1283 rtx true_prob_val; /* probability of else block */ 1273 rtx true_prob_val; /* probability of else block */
@@ -1395,11 +1385,11 @@
1395 merge_if_block (ce_info); 1385 merge_if_block (ce_info);
1396 cond_exec_changed_p = TRUE; 1386 cond_exec_changed_p = TRUE;
1397 return TRUE; 1387 return TRUE;
1398 1388Index: gcc-4_5-branch/gcc/ira-color.c
1399=== modified file 'gcc/ira-color.c' 1389===================================================================
1400--- old/gcc/ira-color.c 2010-04-02 18:54:46 +0000 1390--- gcc-4_5-branch.orig/gcc/ira-color.c 2012-03-06 11:53:32.000000000 -0800
1401+++ new/gcc/ira-color.c 2010-09-01 13:29:58 +0000 1391+++ gcc-4_5-branch/gcc/ira-color.c 2012-03-06 12:14:01.056439222 -0800
1402@@ -441,14 +441,18 @@ 1392@@ -447,14 +447,18 @@
1403 { 1393 {
1404 HARD_REG_SET conflicting_regs; 1394 HARD_REG_SET conflicting_regs;
1405 int i, j, k, hard_regno, best_hard_regno, class_size; 1395 int i, j, k, hard_regno, best_hard_regno, class_size;
@@ -1420,7 +1410,7 @@
1420 #ifdef STACK_REGS 1410 #ifdef STACK_REGS
1421 bool no_stack_reg_p; 1411 bool no_stack_reg_p;
1422 #endif 1412 #endif
1423@@ -586,6 +590,7 @@ 1413@@ -592,6 +596,7 @@
1424 continue; 1414 continue;
1425 cost = costs[i]; 1415 cost = costs[i];
1426 full_cost = full_costs[i]; 1416 full_cost = full_costs[i];
@@ -1428,7 +1418,7 @@
1428 if (! allocated_hardreg_p[hard_regno] 1418 if (! allocated_hardreg_p[hard_regno]
1429 && ira_hard_reg_not_in_set_p (hard_regno, mode, call_used_reg_set)) 1419 && ira_hard_reg_not_in_set_p (hard_regno, mode, call_used_reg_set))
1430 /* We need to save/restore the hard register in 1420 /* We need to save/restore the hard register in
1431@@ -598,6 +603,7 @@ 1421@@ -604,6 +609,7 @@
1432 cost += add_cost; 1422 cost += add_cost;
1433 full_cost += add_cost; 1423 full_cost += add_cost;
1434 } 1424 }
@@ -1436,10 +1426,10 @@
1436 if (min_cost > cost) 1426 if (min_cost > cost)
1437 min_cost = cost; 1427 min_cost = cost;
1438 if (min_full_cost > full_cost) 1428 if (min_full_cost > full_cost)
1439 1429Index: gcc-4_5-branch/gcc/ira-costs.c
1440=== modified file 'gcc/ira-costs.c' 1430===================================================================
1441--- old/gcc/ira-costs.c 2010-08-13 11:40:17 +0000 1431--- gcc-4_5-branch.orig/gcc/ira-costs.c 2012-03-06 12:11:33.000000000 -0800
1442+++ new/gcc/ira-costs.c 2010-09-01 13:29:58 +0000 1432+++ gcc-4_5-branch/gcc/ira-costs.c 2012-03-06 12:14:01.056439222 -0800
1443@@ -33,6 +33,7 @@ 1433@@ -33,6 +33,7 @@
1444 #include "addresses.h" 1434 #include "addresses.h"
1445 #include "insn-config.h" 1435 #include "insn-config.h"
@@ -1525,10 +1515,10 @@
1525+ else 1515+ else
1526+ regno_equiv_gains[regno] += cost; 1516+ regno_equiv_gains[regno] += cost;
1527+} 1517+}
1528 1518Index: gcc-4_5-branch/gcc/ira.c
1529=== modified file 'gcc/ira.c' 1519===================================================================
1530--- old/gcc/ira.c 2010-08-12 13:51:16 +0000 1520--- gcc-4_5-branch.orig/gcc/ira.c 2012-03-06 12:11:32.000000000 -0800
1531+++ new/gcc/ira.c 2010-09-01 13:29:58 +0000 1521+++ gcc-4_5-branch/gcc/ira.c 2012-03-06 12:14:01.056439222 -0800
1532@@ -431,9 +431,6 @@ 1522@@ -431,9 +431,6 @@
1533 HARD_REG_SET processed_hard_reg_set; 1523 HARD_REG_SET processed_hard_reg_set;
1534 1524
@@ -1564,7 +1554,7 @@
1564 { 1554 {
1565 /* It can happen that a REG_EQUIV note contains a MEM 1555 /* It can happen that a REG_EQUIV note contains a MEM
1566 that is not a legitimate memory operand. As later 1556 that is not a legitimate memory operand. As later
1567@@ -3097,8 +3093,19 @@ 1557@@ -3096,8 +3092,19 @@
1568 if (dump_file) 1558 if (dump_file)
1569 print_insn_chains (dump_file); 1559 print_insn_chains (dump_file);
1570 } 1560 }
@@ -1585,7 +1575,7 @@
1585 1575
1586 /* All natural loops. */ 1576 /* All natural loops. */
1587 struct loops ira_loops; 1577 struct loops ira_loops;
1588@@ -3203,6 +3210,8 @@ 1578@@ -3202,6 +3209,8 @@
1589 record_loop_exits (); 1579 record_loop_exits ();
1590 current_loops = &ira_loops; 1580 current_loops = &ira_loops;
1591 1581
@@ -1594,7 +1584,7 @@
1594 if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL) 1584 if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL)
1595 fprintf (ira_dump_file, "Building IRA IR\n"); 1585 fprintf (ira_dump_file, "Building IRA IR\n");
1596 loops_p = ira_build (optimize 1586 loops_p = ira_build (optimize
1597@@ -3263,13 +3272,8 @@ 1587@@ -3265,13 +3274,8 @@
1598 #endif 1588 #endif
1599 1589
1600 delete_trivially_dead_insns (get_insns (), max_reg_num ()); 1590 delete_trivially_dead_insns (get_insns (), max_reg_num ());
@@ -1609,19 +1599,19 @@
1609 1599
1610 if (max_regno != max_regno_before_ira) 1600 if (max_regno != max_regno_before_ira)
1611 { 1601 {
1612 1602Index: gcc-4_5-branch/gcc/ira.h
1613=== modified file 'gcc/ira.h' 1603===================================================================
1614--- old/gcc/ira.h 2009-09-02 17:54:25 +0000 1604--- gcc-4_5-branch.orig/gcc/ira.h 2012-03-06 11:53:32.000000000 -0800
1615+++ new/gcc/ira.h 2010-09-01 13:29:58 +0000 1605+++ gcc-4_5-branch/gcc/ira.h 2012-03-06 12:14:01.056439222 -0800
1616@@ -87,3 +87,4 @@ 1606@@ -87,3 +87,4 @@
1617 extern void ira_mark_new_stack_slot (rtx, int, unsigned int); 1607 extern void ira_mark_new_stack_slot (rtx, int, unsigned int);
1618 extern bool ira_better_spill_reload_regno_p (int *, int *, rtx, rtx, rtx); 1608 extern bool ira_better_spill_reload_regno_p (int *, int *, rtx, rtx, rtx);
1619 1609
1620+extern void ira_adjust_equiv_reg_cost (unsigned, int); 1610+extern void ira_adjust_equiv_reg_cost (unsigned, int);
1621 1611Index: gcc-4_5-branch/gcc/optabs.h
1622=== modified file 'gcc/optabs.h' 1612===================================================================
1623--- old/gcc/optabs.h 2009-11-25 10:55:54 +0000 1613--- gcc-4_5-branch.orig/gcc/optabs.h 2012-03-06 11:53:32.000000000 -0800
1624+++ new/gcc/optabs.h 2010-09-01 13:29:58 +0000 1614+++ gcc-4_5-branch/gcc/optabs.h 2012-03-06 12:14:01.056439222 -0800
1625@@ -771,6 +771,9 @@ 1615@@ -771,6 +771,9 @@
1626 /* Generate code for float to integral conversion. */ 1616 /* Generate code for float to integral conversion. */
1627 extern bool expand_sfix_optab (rtx, rtx, convert_optab); 1617 extern bool expand_sfix_optab (rtx, rtx, convert_optab);
@@ -1632,10 +1622,10 @@
1632 /* Return tree if target supports vector operations for COND_EXPR. */ 1622 /* Return tree if target supports vector operations for COND_EXPR. */
1633 bool expand_vec_cond_expr_p (tree, enum machine_mode); 1623 bool expand_vec_cond_expr_p (tree, enum machine_mode);
1634 1624
1635 1625Index: gcc-4_5-branch/gcc/passes.c
1636=== modified file 'gcc/passes.c' 1626===================================================================
1637--- old/gcc/passes.c 2010-05-19 12:14:37 +0000 1627--- gcc-4_5-branch.orig/gcc/passes.c 2012-03-06 11:53:32.000000000 -0800
1638+++ new/gcc/passes.c 2010-09-01 13:29:58 +0000 1628+++ gcc-4_5-branch/gcc/passes.c 2012-03-06 12:14:01.056439222 -0800
1639@@ -944,6 +944,7 @@ 1629@@ -944,6 +944,7 @@
1640 NEXT_PASS (pass_forwprop); 1630 NEXT_PASS (pass_forwprop);
1641 NEXT_PASS (pass_phiopt); 1631 NEXT_PASS (pass_phiopt);
@@ -1644,10 +1634,10 @@
1644 NEXT_PASS (pass_tail_calls); 1634 NEXT_PASS (pass_tail_calls);
1645 NEXT_PASS (pass_rename_ssa_copies); 1635 NEXT_PASS (pass_rename_ssa_copies);
1646 NEXT_PASS (pass_uncprop); 1636 NEXT_PASS (pass_uncprop);
1647 1637Index: gcc-4_5-branch/gcc/reload.h
1648=== modified file 'gcc/reload.h' 1638===================================================================
1649--- old/gcc/reload.h 2010-04-02 18:54:46 +0000 1639--- gcc-4_5-branch.orig/gcc/reload.h 2012-03-06 11:53:32.000000000 -0800
1650+++ new/gcc/reload.h 2010-09-01 13:29:58 +0000 1640+++ gcc-4_5-branch/gcc/reload.h 2012-03-06 12:14:01.056439222 -0800
1651@@ -347,6 +347,10 @@ 1641@@ -347,6 +347,10 @@
1652 extern rtx eliminate_regs (rtx, enum machine_mode, rtx); 1642 extern rtx eliminate_regs (rtx, enum machine_mode, rtx);
1653 extern bool elimination_target_reg_p (rtx); 1643 extern bool elimination_target_reg_p (rtx);
@@ -1659,10 +1649,10 @@
1659 /* Deallocate the reload register used by reload number R. */ 1649 /* Deallocate the reload register used by reload number R. */
1660 extern void deallocate_reload_reg (int r); 1650 extern void deallocate_reload_reg (int r);
1661 1651
1662 1652Index: gcc-4_5-branch/gcc/reload1.c
1663=== modified file 'gcc/reload1.c' 1653===================================================================
1664--- old/gcc/reload1.c 2010-03-02 18:56:50 +0000 1654--- gcc-4_5-branch.orig/gcc/reload1.c 2012-03-06 11:53:32.000000000 -0800
1665+++ new/gcc/reload1.c 2010-09-01 13:29:58 +0000 1655+++ gcc-4_5-branch/gcc/reload1.c 2012-03-06 12:14:01.060439213 -0800
1666@@ -413,6 +413,7 @@ 1656@@ -413,6 +413,7 @@
1667 static void set_label_offsets (rtx, rtx, int); 1657 static void set_label_offsets (rtx, rtx, int);
1668 static void check_eliminable_occurrences (rtx); 1658 static void check_eliminable_occurrences (rtx);
@@ -1683,7 +1673,7 @@
1683 static void spill_hard_reg (unsigned int, int); 1673 static void spill_hard_reg (unsigned int, int);
1684 static int finish_spills (int); 1674 static int finish_spills (int);
1685 static void scan_paradoxical_subregs (rtx); 1675 static void scan_paradoxical_subregs (rtx);
1686@@ -698,6 +702,9 @@ 1676@@ -697,6 +701,9 @@
1687 1677
1688 /* Global variables used by reload and its subroutines. */ 1678 /* Global variables used by reload and its subroutines. */
1689 1679
@@ -1693,7 +1683,7 @@
1693 /* Set during calculate_needs if an insn needs register elimination. */ 1683 /* Set during calculate_needs if an insn needs register elimination. */
1694 static int something_needs_elimination; 1684 static int something_needs_elimination;
1695 /* Set during calculate_needs if an insn needs an operand changed. */ 1685 /* Set during calculate_needs if an insn needs an operand changed. */
1696@@ -776,22 +783,6 @@ 1686@@ -775,22 +782,6 @@
1697 if (! call_used_regs[i] && ! fixed_regs[i] && ! LOCAL_REGNO (i)) 1687 if (! call_used_regs[i] && ! fixed_regs[i] && ! LOCAL_REGNO (i))
1698 df_set_regs_ever_live (i, true); 1688 df_set_regs_ever_live (i, true);
1699 1689
@@ -1716,7 +1706,7 @@
1716 reg_old_renumber = XCNEWVEC (short, max_regno); 1706 reg_old_renumber = XCNEWVEC (short, max_regno);
1717 memcpy (reg_old_renumber, reg_renumber, max_regno * sizeof (short)); 1707 memcpy (reg_old_renumber, reg_renumber, max_regno * sizeof (short));
1718 pseudo_forbidden_regs = XNEWVEC (HARD_REG_SET, max_regno); 1708 pseudo_forbidden_regs = XNEWVEC (HARD_REG_SET, max_regno);
1719@@ -799,115 +790,9 @@ 1709@@ -798,115 +789,9 @@
1720 1710
1721 CLEAR_HARD_REG_SET (bad_spill_regs_global); 1711 CLEAR_HARD_REG_SET (bad_spill_regs_global);
1722 1712
@@ -1833,13 +1823,11 @@
1833 /* Alter each pseudo-reg rtx to contain its hard reg number. Assign 1823 /* Alter each pseudo-reg rtx to contain its hard reg number. Assign
1834 stack slots to the pseudos that lack hard regs or equivalents. 1824 stack slots to the pseudos that lack hard regs or equivalents.
1835 Do not touch virtual registers. */ 1825 Do not touch virtual registers. */
1836@@ -1411,31 +1296,11 @@ 1826@@ -1410,31 +1295,11 @@
1837 } 1827 }
1838 } 1828 }
1839 1829
1840+ free (temp_pseudo_reg_arr); 1830- /* Indicate that we no longer have known memory locations or constants. */
1841+
1842 /* Indicate that we no longer have known memory locations or constants. */
1843- if (reg_equiv_constant) 1831- if (reg_equiv_constant)
1844- free (reg_equiv_constant); 1832- free (reg_equiv_constant);
1845- if (reg_equiv_invariant) 1833- if (reg_equiv_invariant)
@@ -1849,8 +1837,8 @@
1849- VEC_free (rtx, gc, reg_equiv_memory_loc_vec); 1837- VEC_free (rtx, gc, reg_equiv_memory_loc_vec);
1850- reg_equiv_memory_loc = 0; 1838- reg_equiv_memory_loc = 0;
1851- 1839-
1852- free (temp_pseudo_reg_arr); 1840 free (temp_pseudo_reg_arr);
1853- 1841
1854- if (offsets_known_at) 1842- if (offsets_known_at)
1855- free (offsets_known_at); 1843- free (offsets_known_at);
1856- if (offsets_at) 1844- if (offsets_at)
@@ -1862,13 +1850,14 @@
1862- free (reg_equiv_alt_mem_list); 1850- free (reg_equiv_alt_mem_list);
1863- 1851-
1864- free (reg_equiv_mem); 1852- free (reg_equiv_mem);
1853+ /* Indicate that we no longer have known memory locations or constants. */
1865+ free_reg_equiv (); 1854+ free_reg_equiv ();
1866 reg_equiv_init = 0; 1855 reg_equiv_init = 0;
1867- free (reg_equiv_address); 1856- free (reg_equiv_address);
1868 free (reg_max_ref_width); 1857 free (reg_max_ref_width);
1869 free (reg_old_renumber); 1858 free (reg_old_renumber);
1870 free (pseudo_previous_regs); 1859 free (pseudo_previous_regs);
1871@@ -1728,6 +1593,100 @@ 1860@@ -1727,6 +1592,100 @@
1872 *pprev_reload = 0; 1861 *pprev_reload = 0;
1873 } 1862 }
1874 1863
@@ -1969,7 +1958,7 @@
1969 /* Comparison function for qsort to decide which of two reloads 1958 /* Comparison function for qsort to decide which of two reloads
1970 should be handled first. *P1 and *P2 are the reload numbers. */ 1959 should be handled first. *P1 and *P2 are the reload numbers. */
1971 1960
1972@@ -2514,6 +2473,36 @@ 1961@@ -2513,6 +2472,36 @@
1973 } 1962 }
1974 } 1963 }
1975 1964
@@ -2006,7 +1995,7 @@
2006 /* Scan X and replace any eliminable registers (such as fp) with a 1995 /* Scan X and replace any eliminable registers (such as fp) with a
2007 replacement (such as sp), plus an offset. 1996 replacement (such as sp), plus an offset.
2008 1997
2009@@ -2533,6 +2522,9 @@ 1998@@ -2532,6 +2521,9 @@
2010 This means, do not set ref_outside_mem even if the reference 1999 This means, do not set ref_outside_mem even if the reference
2011 is outside of MEMs. 2000 is outside of MEMs.
2012 2001
@@ -2016,7 +2005,7 @@
2016 REG_EQUIV_MEM and REG_EQUIV_ADDRESS contain address that have had 2005 REG_EQUIV_MEM and REG_EQUIV_ADDRESS contain address that have had
2017 replacements done assuming all offsets are at their initial values. If 2006 replacements done assuming all offsets are at their initial values. If
2018 they are not, or if REG_EQUIV_ADDRESS is nonzero for a pseudo we 2007 they are not, or if REG_EQUIV_ADDRESS is nonzero for a pseudo we
2019@@ -2541,7 +2533,7 @@ 2008@@ -2540,7 +2532,7 @@
2020 2009
2021 static rtx 2010 static rtx
2022 eliminate_regs_1 (rtx x, enum machine_mode mem_mode, rtx insn, 2011 eliminate_regs_1 (rtx x, enum machine_mode mem_mode, rtx insn,
@@ -2025,7 +2014,7 @@
2025 { 2014 {
2026 enum rtx_code code = GET_CODE (x); 2015 enum rtx_code code = GET_CODE (x);
2027 struct elim_table *ep; 2016 struct elim_table *ep;
2028@@ -2589,11 +2581,12 @@ 2017@@ -2588,11 +2580,12 @@
2029 { 2018 {
2030 if (may_use_invariant || (insn && DEBUG_INSN_P (insn))) 2019 if (may_use_invariant || (insn && DEBUG_INSN_P (insn)))
2031 return eliminate_regs_1 (copy_rtx (reg_equiv_invariant[regno]), 2020 return eliminate_regs_1 (copy_rtx (reg_equiv_invariant[regno]),
@@ -2040,7 +2029,7 @@
2040 } 2029 }
2041 return x; 2030 return x;
2042 2031
2043@@ -2654,8 +2647,10 @@ 2032@@ -2653,8 +2646,10 @@
2044 operand of a load-address insn. */ 2033 operand of a load-address insn. */
2045 2034
2046 { 2035 {
@@ -2053,7 +2042,7 @@
2053 2042
2054 if (reg_renumber && (new0 != XEXP (x, 0) || new1 != XEXP (x, 1))) 2043 if (reg_renumber && (new0 != XEXP (x, 0) || new1 != XEXP (x, 1)))
2055 { 2044 {
2056@@ -2729,9 +2724,11 @@ 2045@@ -2728,9 +2723,11 @@
2057 case GE: case GT: case GEU: case GTU: 2046 case GE: case GT: case GEU: case GTU:
2058 case LE: case LT: case LEU: case LTU: 2047 case LE: case LT: case LEU: case LTU:
2059 { 2048 {
@@ -2067,7 +2056,7 @@
2067 2056
2068 if (new0 != XEXP (x, 0) || new1 != XEXP (x, 1)) 2057 if (new0 != XEXP (x, 0) || new1 != XEXP (x, 1))
2069 return gen_rtx_fmt_ee (code, GET_MODE (x), new0, new1); 2058 return gen_rtx_fmt_ee (code, GET_MODE (x), new0, new1);
2070@@ -2742,7 +2739,8 @@ 2059@@ -2741,7 +2738,8 @@
2071 /* If we have something in XEXP (x, 0), the usual case, eliminate it. */ 2060 /* If we have something in XEXP (x, 0), the usual case, eliminate it. */
2072 if (XEXP (x, 0)) 2061 if (XEXP (x, 0))
2073 { 2062 {
@@ -2077,7 +2066,7 @@
2077 if (new_rtx != XEXP (x, 0)) 2066 if (new_rtx != XEXP (x, 0))
2078 { 2067 {
2079 /* If this is a REG_DEAD note, it is not valid anymore. 2068 /* If this is a REG_DEAD note, it is not valid anymore.
2080@@ -2750,7 +2748,8 @@ 2069@@ -2749,7 +2747,8 @@
2081 REG_DEAD note for the stack or frame pointer. */ 2070 REG_DEAD note for the stack or frame pointer. */
2082 if (REG_NOTE_KIND (x) == REG_DEAD) 2071 if (REG_NOTE_KIND (x) == REG_DEAD)
2083 return (XEXP (x, 1) 2072 return (XEXP (x, 1)
@@ -2087,7 +2076,7 @@
2087 : NULL_RTX); 2076 : NULL_RTX);
2088 2077
2089 x = alloc_reg_note (REG_NOTE_KIND (x), new_rtx, XEXP (x, 1)); 2078 x = alloc_reg_note (REG_NOTE_KIND (x), new_rtx, XEXP (x, 1));
2090@@ -2765,7 +2764,8 @@ 2079@@ -2764,7 +2763,8 @@
2091 strictly needed, but it simplifies the code. */ 2080 strictly needed, but it simplifies the code. */
2092 if (XEXP (x, 1)) 2081 if (XEXP (x, 1))
2093 { 2082 {
@@ -2097,7 +2086,7 @@
2097 if (new_rtx != XEXP (x, 1)) 2086 if (new_rtx != XEXP (x, 1))
2098 return 2087 return
2099 gen_rtx_fmt_ee (GET_CODE (x), GET_MODE (x), XEXP (x, 0), new_rtx); 2088 gen_rtx_fmt_ee (GET_CODE (x), GET_MODE (x), XEXP (x, 0), new_rtx);
2100@@ -2791,7 +2791,7 @@ 2089@@ -2790,7 +2790,7 @@
2101 && XEXP (XEXP (x, 1), 0) == XEXP (x, 0)) 2090 && XEXP (XEXP (x, 1), 0) == XEXP (x, 0))
2102 { 2091 {
2103 rtx new_rtx = eliminate_regs_1 (XEXP (XEXP (x, 1), 1), mem_mode, 2092 rtx new_rtx = eliminate_regs_1 (XEXP (XEXP (x, 1), 1), mem_mode,
@@ -2106,7 +2095,7 @@
2106 2095
2107 if (new_rtx != XEXP (XEXP (x, 1), 1)) 2096 if (new_rtx != XEXP (XEXP (x, 1), 1))
2108 return gen_rtx_fmt_ee (code, GET_MODE (x), XEXP (x, 0), 2097 return gen_rtx_fmt_ee (code, GET_MODE (x), XEXP (x, 0),
2109@@ -2814,7 +2814,8 @@ 2098@@ -2813,7 +2813,8 @@
2110 case POPCOUNT: 2099 case POPCOUNT:
2111 case PARITY: 2100 case PARITY:
2112 case BSWAP: 2101 case BSWAP:
@@ -2116,7 +2105,7 @@
2116 if (new_rtx != XEXP (x, 0)) 2105 if (new_rtx != XEXP (x, 0))
2117 return gen_rtx_fmt_e (code, GET_MODE (x), new_rtx); 2106 return gen_rtx_fmt_e (code, GET_MODE (x), new_rtx);
2118 return x; 2107 return x;
2119@@ -2835,7 +2836,8 @@ 2108@@ -2834,7 +2835,8 @@
2120 new_rtx = SUBREG_REG (x); 2109 new_rtx = SUBREG_REG (x);
2121 } 2110 }
2122 else 2111 else
@@ -2126,7 +2115,7 @@
2126 2115
2127 if (new_rtx != SUBREG_REG (x)) 2116 if (new_rtx != SUBREG_REG (x))
2128 { 2117 {
2129@@ -2869,14 +2871,20 @@ 2118@@ -2868,14 +2870,20 @@
2130 /* Our only special processing is to pass the mode of the MEM to our 2119 /* Our only special processing is to pass the mode of the MEM to our
2131 recursive call and copy the flags. While we are here, handle this 2120 recursive call and copy the flags. While we are here, handle this
2132 case more efficiently. */ 2121 case more efficiently. */
@@ -2152,7 +2141,7 @@
2152 if (new_rtx != XEXP (x, 0)) 2141 if (new_rtx != XEXP (x, 0))
2153 return gen_rtx_USE (GET_MODE (x), new_rtx); 2142 return gen_rtx_USE (GET_MODE (x), new_rtx);
2154 return x; 2143 return x;
2155@@ -2900,7 +2908,8 @@ 2144@@ -2899,7 +2907,8 @@
2156 { 2145 {
2157 if (*fmt == 'e') 2146 if (*fmt == 'e')
2158 { 2147 {
@@ -2162,7 +2151,7 @@
2162 if (new_rtx != XEXP (x, i) && ! copied) 2151 if (new_rtx != XEXP (x, i) && ! copied)
2163 { 2152 {
2164 x = shallow_copy_rtx (x); 2153 x = shallow_copy_rtx (x);
2165@@ -2913,7 +2922,8 @@ 2154@@ -2912,7 +2921,8 @@
2166 int copied_vec = 0; 2155 int copied_vec = 0;
2167 for (j = 0; j < XVECLEN (x, i); j++) 2156 for (j = 0; j < XVECLEN (x, i); j++)
2168 { 2157 {
@@ -2172,7 +2161,7 @@
2172 if (new_rtx != XVECEXP (x, i, j) && ! copied_vec) 2161 if (new_rtx != XVECEXP (x, i, j) && ! copied_vec)
2173 { 2162 {
2174 rtvec new_v = gen_rtvec_v (XVECLEN (x, i), 2163 rtvec new_v = gen_rtvec_v (XVECLEN (x, i),
2175@@ -2937,7 +2947,7 @@ 2164@@ -2936,7 +2946,7 @@
2176 rtx 2165 rtx
2177 eliminate_regs (rtx x, enum machine_mode mem_mode, rtx insn) 2166 eliminate_regs (rtx x, enum machine_mode mem_mode, rtx insn)
2178 { 2167 {
@@ -2181,7 +2170,7 @@
2181 } 2170 }
2182 2171
2183 /* Scan rtx X for modifications of elimination target registers. Update 2172 /* Scan rtx X for modifications of elimination target registers. Update
2184@@ -3455,7 +3465,8 @@ 2173@@ -3454,7 +3464,8 @@
2185 /* Companion to the above plus substitution, we can allow 2174 /* Companion to the above plus substitution, we can allow
2186 invariants as the source of a plain move. */ 2175 invariants as the source of a plain move. */
2187 is_set_src = false; 2176 is_set_src = false;
@@ -2191,7 +2180,7 @@
2191 is_set_src = true; 2180 is_set_src = true;
2192 in_plus = false; 2181 in_plus = false;
2193 if (plus_src 2182 if (plus_src
2194@@ -3466,7 +3477,7 @@ 2183@@ -3465,7 +3476,7 @@
2195 substed_operand[i] 2184 substed_operand[i]
2196 = eliminate_regs_1 (recog_data.operand[i], VOIDmode, 2185 = eliminate_regs_1 (recog_data.operand[i], VOIDmode,
2197 replace ? insn : NULL_RTX, 2186 replace ? insn : NULL_RTX,
@@ -2200,7 +2189,7 @@
2200 if (substed_operand[i] != orig_operand[i]) 2189 if (substed_operand[i] != orig_operand[i])
2201 val = 1; 2190 val = 1;
2202 /* Terminate the search in check_eliminable_occurrences at 2191 /* Terminate the search in check_eliminable_occurrences at
2203@@ -3594,11 +3605,167 @@ 2192@@ -3593,11 +3604,167 @@
2204 the pre-passes. */ 2193 the pre-passes. */
2205 if (val && REG_NOTES (insn) != 0) 2194 if (val && REG_NOTES (insn) != 0)
2206 REG_NOTES (insn) 2195 REG_NOTES (insn)
@@ -2369,7 +2358,7 @@
2369 /* Loop through all elimination pairs. 2358 /* Loop through all elimination pairs.
2370 Recalculate the number not at initial offset. 2359 Recalculate the number not at initial offset.
2371 2360
2372@@ -3908,6 +4075,168 @@ 2361@@ -3907,6 +4074,168 @@
2373 ep->to_rtx = gen_rtx_REG (Pmode, ep->to); 2362 ep->to_rtx = gen_rtx_REG (Pmode, ep->to);
2374 } 2363 }
2375 } 2364 }
@@ -2547,10 +2536,10 @@
2547 return 1; 2536 return 1;
2548 return 0; 2537 return 0;
2549 } 2538 }
2550 2539Index: gcc-4_5-branch/gcc/system.h
2551=== modified file 'gcc/system.h' 2540===================================================================
2552--- old/gcc/system.h 2009-12-13 23:00:53 +0000 2541--- gcc-4_5-branch.orig/gcc/system.h 2012-03-06 11:53:32.000000000 -0800
2553+++ new/gcc/system.h 2010-09-01 13:29:58 +0000 2542+++ gcc-4_5-branch/gcc/system.h 2012-03-06 12:14:01.060439213 -0800
2554@@ -761,7 +761,8 @@ 2543@@ -761,7 +761,8 @@
2555 TARGET_ASM_EXCEPTION_SECTION TARGET_ASM_EH_FRAME_SECTION \ 2544 TARGET_ASM_EXCEPTION_SECTION TARGET_ASM_EH_FRAME_SECTION \
2556 SMALL_ARG_MAX ASM_OUTPUT_SHARED_BSS ASM_OUTPUT_SHARED_COMMON \ 2545 SMALL_ARG_MAX ASM_OUTPUT_SHARED_BSS ASM_OUTPUT_SHARED_COMMON \
@@ -2561,10 +2550,10 @@
2561 2550
2562 /* Hooks that are no longer used. */ 2551 /* Hooks that are no longer used. */
2563 #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE \ 2552 #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE \
2564 2553Index: gcc-4_5-branch/gcc/testsuite/c-c++-common/uninit-17.c
2565=== added file 'gcc/testsuite/c-c++-common/uninit-17.c' 2554===================================================================
2566--- old/gcc/testsuite/c-c++-common/uninit-17.c 1970-01-01 00:00:00 +0000 2555--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2567+++ new/gcc/testsuite/c-c++-common/uninit-17.c 2010-09-01 13:29:58 +0000 2556+++ gcc-4_5-branch/gcc/testsuite/c-c++-common/uninit-17.c 2012-03-06 12:14:01.060439213 -0800
2568@@ -0,0 +1,25 @@ 2557@@ -0,0 +1,25 @@
2569+/* { dg-do compile } */ 2558+/* { dg-do compile } */
2570+/* { dg-options "-O2 -Wuninitialized" } */ 2559+/* { dg-options "-O2 -Wuninitialized" } */
@@ -2591,10 +2580,10 @@
2591+ bar(foo(a), ptr); 2580+ bar(foo(a), ptr);
2592+} 2581+}
2593+ 2582+
2594 2583Index: gcc-4_5-branch/gcc/testsuite/gcc.target/arm/eliminate.c
2595=== added file 'gcc/testsuite/gcc.target/arm/eliminate.c' 2584===================================================================
2596--- old/gcc/testsuite/gcc.target/arm/eliminate.c 1970-01-01 00:00:00 +0000 2585--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2597+++ new/gcc/testsuite/gcc.target/arm/eliminate.c 2010-09-01 13:29:58 +0000 2586+++ gcc-4_5-branch/gcc/testsuite/gcc.target/arm/eliminate.c 2012-03-06 12:14:01.060439213 -0800
2598@@ -0,0 +1,19 @@ 2587@@ -0,0 +1,19 @@
2599+/* { dg-do compile } */ 2588+/* { dg-do compile } */
2600+/* { dg-options "-O2" } */ 2589+/* { dg-options "-O2" } */
@@ -2615,10 +2604,10 @@
2615+} 2604+}
2616+ 2605+
2617+/* { dg-final { scan-assembler-times "r0,\[\\t \]*sp" 3 } } */ 2606+/* { dg-final { scan-assembler-times "r0,\[\\t \]*sp" 3 } } */
2618 2607Index: gcc-4_5-branch/gcc/testsuite/gcc.target/arm/pr40900.c
2619=== added file 'gcc/testsuite/gcc.target/arm/pr40900.c' 2608===================================================================
2620--- old/gcc/testsuite/gcc.target/arm/pr40900.c 1970-01-01 00:00:00 +0000 2609--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2621+++ new/gcc/testsuite/gcc.target/arm/pr40900.c 2010-09-01 13:29:58 +0000 2610+++ gcc-4_5-branch/gcc/testsuite/gcc.target/arm/pr40900.c 2012-03-06 12:14:01.060439213 -0800
2622@@ -0,0 +1,12 @@ 2611@@ -0,0 +1,12 @@
2623+/* { dg-do compile } */ 2612+/* { dg-do compile } */
2624+/* { dg-options "-O2 -fno-optimize-sibling-calls" } */ 2613+/* { dg-options "-O2 -fno-optimize-sibling-calls" } */
@@ -2632,10 +2621,10 @@
2632+/* { dg-final { scan-assembler-not "lsl" } } */ 2621+/* { dg-final { scan-assembler-not "lsl" } } */
2633+/* { dg-final { scan-assembler-not "asr" } } */ 2622+/* { dg-final { scan-assembler-not "asr" } } */
2634+/* { dg-final { scan-assembler-not "sxth" } } */ 2623+/* { dg-final { scan-assembler-not "sxth" } } */
2635 2624Index: gcc-4_5-branch/gcc/testsuite/gcc.target/arm/pr42496.c
2636=== added file 'gcc/testsuite/gcc.target/arm/pr42496.c' 2625===================================================================
2637--- old/gcc/testsuite/gcc.target/arm/pr42496.c 1970-01-01 00:00:00 +0000 2626--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2638+++ new/gcc/testsuite/gcc.target/arm/pr42496.c 2010-09-01 13:29:58 +0000 2627+++ gcc-4_5-branch/gcc/testsuite/gcc.target/arm/pr42496.c 2012-03-06 12:14:01.060439213 -0800
2639@@ -0,0 +1,16 @@ 2628@@ -0,0 +1,16 @@
2640+/* { dg-options "-O2" } */ 2629+/* { dg-options "-O2" } */
2641+ 2630+
@@ -2653,10 +2642,10 @@
2653+ 2642+
2654+/* { dg-final { scan-assembler-not "strne" } } */ 2643+/* { dg-final { scan-assembler-not "strne" } } */
2655+/* { dg-final { scan-assembler-not "streq" } } */ 2644+/* { dg-final { scan-assembler-not "streq" } } */
2656 2645Index: gcc-4_5-branch/gcc/testsuite/gcc.target/arm/wmul-1.c
2657=== added file 'gcc/testsuite/gcc.target/arm/wmul-1.c' 2646===================================================================
2658--- old/gcc/testsuite/gcc.target/arm/wmul-1.c 1970-01-01 00:00:00 +0000 2647--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2659+++ new/gcc/testsuite/gcc.target/arm/wmul-1.c 2010-09-01 13:29:58 +0000 2648+++ gcc-4_5-branch/gcc/testsuite/gcc.target/arm/wmul-1.c 2012-03-06 12:14:01.060439213 -0800
2660@@ -0,0 +1,18 @@ 2649@@ -0,0 +1,18 @@
2661+/* { dg-do compile } */ 2650+/* { dg-do compile } */
2662+/* { dg-options "-O2 -march=armv6t2 -fno-unroll-loops" } */ 2651+/* { dg-options "-O2 -march=armv6t2 -fno-unroll-loops" } */
@@ -2676,10 +2665,10 @@
2676+} 2665+}
2677+ 2666+
2678+/* { dg-final { scan-assembler-times "smulbb" 2 } } */ 2667+/* { dg-final { scan-assembler-times "smulbb" 2 } } */
2679 2668Index: gcc-4_5-branch/gcc/testsuite/gcc.target/arm/wmul-2.c
2680=== added file 'gcc/testsuite/gcc.target/arm/wmul-2.c' 2669===================================================================
2681--- old/gcc/testsuite/gcc.target/arm/wmul-2.c 1970-01-01 00:00:00 +0000 2670--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2682+++ new/gcc/testsuite/gcc.target/arm/wmul-2.c 2010-09-01 13:29:58 +0000 2671+++ gcc-4_5-branch/gcc/testsuite/gcc.target/arm/wmul-2.c 2012-03-06 12:14:01.064439219 -0800
2683@@ -0,0 +1,12 @@ 2672@@ -0,0 +1,12 @@
2684+/* { dg-do compile } */ 2673+/* { dg-do compile } */
2685+/* { dg-options "-O2 -march=armv6t2 -fno-unroll-loops" } */ 2674+/* { dg-options "-O2 -march=armv6t2 -fno-unroll-loops" } */
@@ -2693,10 +2682,10 @@
2693+} 2682+}
2694+ 2683+
2695+/* { dg-final { scan-assembler-times "smulbb" 1 } } */ 2684+/* { dg-final { scan-assembler-times "smulbb" 1 } } */
2696 2685Index: gcc-4_5-branch/gcc/testsuite/gcc.target/bfin/wmul-1.c
2697=== added file 'gcc/testsuite/gcc.target/bfin/wmul-1.c' 2686===================================================================
2698--- old/gcc/testsuite/gcc.target/bfin/wmul-1.c 1970-01-01 00:00:00 +0000 2687--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2699+++ new/gcc/testsuite/gcc.target/bfin/wmul-1.c 2010-09-01 13:29:58 +0000 2688+++ gcc-4_5-branch/gcc/testsuite/gcc.target/bfin/wmul-1.c 2012-03-06 12:14:01.064439219 -0800
2700@@ -0,0 +1,18 @@ 2689@@ -0,0 +1,18 @@
2701+/* { dg-do compile } */ 2690+/* { dg-do compile } */
2702+/* { dg-options "-O2" } */ 2691+/* { dg-options "-O2" } */
@@ -2716,10 +2705,10 @@
2716+} 2705+}
2717+ 2706+
2718+/* { dg-final { scan-assembler-times "\\(IS\\)" 2 } } */ 2707+/* { dg-final { scan-assembler-times "\\(IS\\)" 2 } } */
2719 2708Index: gcc-4_5-branch/gcc/testsuite/gcc.target/bfin/wmul-2.c
2720=== added file 'gcc/testsuite/gcc.target/bfin/wmul-2.c' 2709===================================================================
2721--- old/gcc/testsuite/gcc.target/bfin/wmul-2.c 1970-01-01 00:00:00 +0000 2710--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2722+++ new/gcc/testsuite/gcc.target/bfin/wmul-2.c 2010-09-01 13:29:58 +0000 2711+++ gcc-4_5-branch/gcc/testsuite/gcc.target/bfin/wmul-2.c 2012-03-06 12:14:01.064439219 -0800
2723@@ -0,0 +1,12 @@ 2712@@ -0,0 +1,12 @@
2724+/* { dg-do compile } */ 2713+/* { dg-do compile } */
2725+/* { dg-options "-O2" } */ 2714+/* { dg-options "-O2" } */
@@ -2733,10 +2722,10 @@
2733+} 2722+}
2734+ 2723+
2735+/* { dg-final { scan-assembler-times "\\(IS\\)" 1 } } */ 2724+/* { dg-final { scan-assembler-times "\\(IS\\)" 1 } } */
2736 2725Index: gcc-4_5-branch/gcc/testsuite/gcc.target/i386/pr41442.c
2737=== added file 'gcc/testsuite/gcc.target/i386/pr41442.c' 2726===================================================================
2738--- old/gcc/testsuite/gcc.target/i386/pr41442.c 1970-01-01 00:00:00 +0000 2727--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2739+++ new/gcc/testsuite/gcc.target/i386/pr41442.c 2010-09-01 13:29:58 +0000 2728+++ gcc-4_5-branch/gcc/testsuite/gcc.target/i386/pr41442.c 2012-03-06 12:14:01.064439219 -0800
2740@@ -0,0 +1,18 @@ 2729@@ -0,0 +1,18 @@
2741+/* { dg-do compile } */ 2730+/* { dg-do compile } */
2742+/* { dg-options "-O2" } */ 2731+/* { dg-options "-O2" } */
@@ -2756,10 +2745,10 @@
2756+} 2745+}
2757+ 2746+
2758+/* { dg-final { scan-assembler-times "test|cmp" 2 } } */ 2747+/* { dg-final { scan-assembler-times "test|cmp" 2 } } */
2759 2748Index: gcc-4_5-branch/gcc/testsuite/gcc.target/i386/wmul-1.c
2760=== added file 'gcc/testsuite/gcc.target/i386/wmul-1.c' 2749===================================================================
2761--- old/gcc/testsuite/gcc.target/i386/wmul-1.c 1970-01-01 00:00:00 +0000 2750--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2762+++ new/gcc/testsuite/gcc.target/i386/wmul-1.c 2010-09-01 13:29:58 +0000 2751+++ gcc-4_5-branch/gcc/testsuite/gcc.target/i386/wmul-1.c 2012-03-06 12:14:01.064439219 -0800
2763@@ -0,0 +1,18 @@ 2752@@ -0,0 +1,18 @@
2764+/* { dg-do compile } */ 2753+/* { dg-do compile } */
2765+/* { dg-options "-O2" } */ 2754+/* { dg-options "-O2" } */
@@ -2779,10 +2768,10 @@
2779+} 2768+}
2780+ 2769+
2781+/* { dg-final { scan-assembler-times "imull" 2 } } */ 2770+/* { dg-final { scan-assembler-times "imull" 2 } } */
2782 2771Index: gcc-4_5-branch/gcc/testsuite/gcc.target/i386/wmul-2.c
2783=== added file 'gcc/testsuite/gcc.target/i386/wmul-2.c' 2772===================================================================
2784--- old/gcc/testsuite/gcc.target/i386/wmul-2.c 1970-01-01 00:00:00 +0000 2773--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2785+++ new/gcc/testsuite/gcc.target/i386/wmul-2.c 2010-09-01 13:29:58 +0000 2774+++ gcc-4_5-branch/gcc/testsuite/gcc.target/i386/wmul-2.c 2012-03-06 12:14:01.064439219 -0800
2786@@ -0,0 +1,12 @@ 2775@@ -0,0 +1,12 @@
2787+/* { dg-do compile } */ 2776+/* { dg-do compile } */
2788+/* { dg-options "-O2" } */ 2777+/* { dg-options "-O2" } */
@@ -2796,29 +2785,29 @@
2796+} 2785+}
2797+ 2786+
2798+/* { dg-final { scan-assembler-times "imull" 1 } } */ 2787+/* { dg-final { scan-assembler-times "imull" 1 } } */
2799 2788Index: gcc-4_5-branch/gcc/tree-cfg.c
2800=== modified file 'gcc/tree-cfg.c' 2789===================================================================
2801--- old/gcc/tree-cfg.c 2010-08-10 13:31:21 +0000 2790--- gcc-4_5-branch.orig/gcc/tree-cfg.c 2012-03-06 12:11:30.000000000 -0800
2802+++ new/gcc/tree-cfg.c 2010-09-01 13:29:58 +0000 2791+++ gcc-4_5-branch/gcc/tree-cfg.c 2012-03-06 12:14:01.064439219 -0800
2803@@ -3428,8 +3428,13 @@ 2792@@ -3429,8 +3429,13 @@
2804 connected to the operand types. */ 2793 connected to the operand types. */
2805 return verify_gimple_comparison (lhs_type, rhs1, rhs2); 2794 return verify_gimple_comparison (lhs_type, rhs1, rhs2);
2806 2795
2807+ case WIDEN_MULT_EXPR: 2796- case WIDEN_SUM_EXPR:
2797 case WIDEN_MULT_EXPR:
2808+ if (TREE_CODE (lhs_type) != INTEGER_TYPE) 2798+ if (TREE_CODE (lhs_type) != INTEGER_TYPE)
2809+ return true; 2799+ return true;
2810+ return ((2 * TYPE_PRECISION (rhs1_type) != TYPE_PRECISION (lhs_type)) 2800+ return ((2 * TYPE_PRECISION (rhs1_type) != TYPE_PRECISION (lhs_type))
2811+ || (TYPE_PRECISION (rhs1_type) != TYPE_PRECISION (rhs2_type))); 2801+ || (TYPE_PRECISION (rhs1_type) != TYPE_PRECISION (rhs2_type)));
2812+ 2802+
2813 case WIDEN_SUM_EXPR: 2803+ case WIDEN_SUM_EXPR:
2814- case WIDEN_MULT_EXPR:
2815 case VEC_WIDEN_MULT_HI_EXPR: 2804 case VEC_WIDEN_MULT_HI_EXPR:
2816 case VEC_WIDEN_MULT_LO_EXPR: 2805 case VEC_WIDEN_MULT_LO_EXPR:
2817 case VEC_PACK_TRUNC_EXPR: 2806 case VEC_PACK_TRUNC_EXPR:
2818 2807Index: gcc-4_5-branch/gcc/tree-inline.c
2819=== modified file 'gcc/tree-inline.c' 2808===================================================================
2820--- old/gcc/tree-inline.c 2010-08-10 13:31:21 +0000 2809--- gcc-4_5-branch.orig/gcc/tree-inline.c 2012-03-06 12:11:30.000000000 -0800
2821+++ new/gcc/tree-inline.c 2010-09-01 13:29:58 +0000 2810+++ gcc-4_5-branch/gcc/tree-inline.c 2012-03-06 12:14:01.064439219 -0800
2822@@ -229,6 +229,7 @@ 2811@@ -229,6 +229,7 @@
2823 regions of the CFG, but this is expensive to test. */ 2812 regions of the CFG, but this is expensive to test. */
2824 if (id->entry_bb 2813 if (id->entry_bb
@@ -2827,10 +2816,10 @@
2827 && TREE_CODE (SSA_NAME_VAR (name)) != PARM_DECL 2816 && TREE_CODE (SSA_NAME_VAR (name)) != PARM_DECL
2828 && (id->entry_bb != EDGE_SUCC (ENTRY_BLOCK_PTR, 0)->dest 2817 && (id->entry_bb != EDGE_SUCC (ENTRY_BLOCK_PTR, 0)->dest
2829 || EDGE_COUNT (id->entry_bb->preds) != 1)) 2818 || EDGE_COUNT (id->entry_bb->preds) != 1))
2830 2819Index: gcc-4_5-branch/gcc/tree-pass.h
2831=== modified file 'gcc/tree-pass.h' 2820===================================================================
2832--- old/gcc/tree-pass.h 2010-04-02 18:54:46 +0000 2821--- gcc-4_5-branch.orig/gcc/tree-pass.h 2012-03-06 11:53:32.000000000 -0800
2833+++ new/gcc/tree-pass.h 2010-09-01 13:29:58 +0000 2822+++ gcc-4_5-branch/gcc/tree-pass.h 2012-03-06 12:14:01.068439233 -0800
2834@@ -407,6 +407,7 @@ 2823@@ -407,6 +407,7 @@
2835 extern struct gimple_opt_pass pass_cse_reciprocals; 2824 extern struct gimple_opt_pass pass_cse_reciprocals;
2836 extern struct gimple_opt_pass pass_cse_sincos; 2825 extern struct gimple_opt_pass pass_cse_sincos;
@@ -2839,11 +2828,11 @@
2839 extern struct gimple_opt_pass pass_warn_function_return; 2828 extern struct gimple_opt_pass pass_warn_function_return;
2840 extern struct gimple_opt_pass pass_warn_function_noreturn; 2829 extern struct gimple_opt_pass pass_warn_function_noreturn;
2841 extern struct gimple_opt_pass pass_cselim; 2830 extern struct gimple_opt_pass pass_cselim;
2842 2831Index: gcc-4_5-branch/gcc/tree-ssa-math-opts.c
2843=== modified file 'gcc/tree-ssa-math-opts.c' 2832===================================================================
2844--- old/gcc/tree-ssa-math-opts.c 2010-04-02 18:54:46 +0000 2833--- gcc-4_5-branch.orig/gcc/tree-ssa-math-opts.c 2012-03-06 11:53:32.000000000 -0800
2845+++ new/gcc/tree-ssa-math-opts.c 2010-09-01 13:29:58 +0000 2834+++ gcc-4_5-branch/gcc/tree-ssa-math-opts.c 2012-03-06 12:14:01.068439233 -0800
2846@@ -1260,3 +1260,137 @@ 2835@@ -1269,3 +1269,137 @@
2847 0 /* todo_flags_finish */ 2836 0 /* todo_flags_finish */
2848 } 2837 }
2849 }; 2838 };
@@ -2981,10 +2970,10 @@
2981+ 0 /* todo_flags_finish */ 2970+ 0 /* todo_flags_finish */
2982+ } 2971+ }
2983+}; 2972+};
2984 2973Index: gcc-4_5-branch/gcc/tree-ssa.c
2985=== modified file 'gcc/tree-ssa.c' 2974===================================================================
2986--- old/gcc/tree-ssa.c 2009-12-07 22:42:10 +0000 2975--- gcc-4_5-branch.orig/gcc/tree-ssa.c 2012-03-06 11:53:32.000000000 -0800
2987+++ new/gcc/tree-ssa.c 2010-09-01 13:29:58 +0000 2976+++ gcc-4_5-branch/gcc/tree-ssa.c 2012-03-06 12:14:01.068439233 -0800
2988@@ -1671,6 +1671,8 @@ 2977@@ -1671,6 +1671,8 @@
2989 { 2978 {
2990 TREE_NO_WARNING (var) = 1; 2979 TREE_NO_WARNING (var) = 1;
@@ -2994,4 +2983,3 @@
2994 if (xloc.file != floc.file 2983 if (xloc.file != floc.file
2995 || xloc.line < floc.line 2984 || xloc.line < floc.line
2996 || xloc.line > LOCATION_LINE (cfun->function_end_locus)) 2985 || xloc.line > LOCATION_LINE (cfun->function_end_locus))
2997