Merge lp:~ams-codesourcery/gcc-linaro/lp641397-4.6 into lp:gcc-linaro/4.6

Proposed by Andrew Stubbs
Status: Work in progress
Proposed branch: lp:~ams-codesourcery/gcc-linaro/lp641397-4.6
Merge into: lp:gcc-linaro/4.6
Diff against target: 80 lines (+30/-6)
3 files modified
ChangeLog.linaro (+8/-0)
gcc/cse.c (+21/-5)
gcc/passes.c (+1/-1)
To merge this branch: bzr merge lp:~ams-codesourcery/gcc-linaro/lp641397-4.6
Reviewer Review Type Date Requested Status
Linaro Toolchain Developers Pending
Review via email: mp+48007@code.launchpad.net

Description of the change

This patch has been posted for upstream review here:
 http://old.nabble.com/-patch,-CSE--Bit-field-insertion-optimization-to30418376.html

The patch needs follow up. It's not obvious that it will ever be acceptable. I'm posting this merge request so as not to lose it.

To post a comment you must log in.

Unmerged revisions

105757. By Andrew Stubbs

Fix a missed optimization in bitfield initialization.

LP:641397

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added file 'ChangeLog.linaro'
--- ChangeLog.linaro 1970-01-01 00:00:00 +0000
+++ ChangeLog.linaro 2011-01-31 15:39:37 +0000
@@ -0,0 +1,8 @@
12010-12-09 Andrew Stubbs <ams@codesourcery.com>
2
3 gcc/
4 * cse.c (cse_insn): Add support for ZERO_EXTRACT with a register
5 source operand.
6 * passes.c (init_optimization_passes): Move initialize_regs
7 before cse2.
8
09
=== modified file 'gcc/cse.c'
--- gcc/cse.c 2010-10-14 07:17:54 +0000
+++ gcc/cse.c 2011-01-31 15:39:37 +0000
@@ -5036,7 +5036,6 @@
5036 (set (zero_extract:M2 (reg:M N) (const_int C) (const_int D))5036 (set (zero_extract:M2 (reg:M N) (const_int C) (const_int D))
5037 (reg:M2 O)). */5037 (reg:M2 O)). */
5038 if (GET_CODE (SET_DEST (sets[i].rtl)) == ZERO_EXTRACT5038 if (GET_CODE (SET_DEST (sets[i].rtl)) == ZERO_EXTRACT
5039 && CONST_INT_P (trial)
5040 && CONST_INT_P (XEXP (SET_DEST (sets[i].rtl), 1))5039 && CONST_INT_P (XEXP (SET_DEST (sets[i].rtl), 1))
5041 && CONST_INT_P (XEXP (SET_DEST (sets[i].rtl), 2))5040 && CONST_INT_P (XEXP (SET_DEST (sets[i].rtl), 2))
5042 && REG_P (XEXP (SET_DEST (sets[i].rtl), 0))5041 && REG_P (XEXP (SET_DEST (sets[i].rtl), 0))
@@ -5052,9 +5051,26 @@
5052 unsigned int dest_hash = HASH (dest_reg, GET_MODE (dest_reg));5051 unsigned int dest_hash = HASH (dest_reg, GET_MODE (dest_reg));
5053 struct table_elt *dest_elt5052 struct table_elt *dest_elt
5054 = lookup (dest_reg, dest_hash, GET_MODE (dest_reg));5053 = lookup (dest_reg, dest_hash, GET_MODE (dest_reg));
5055 rtx dest_cst = NULL;5054 rtx dest_cst = NULL, src_cst = NULL;
50565055
5057 if (dest_elt)5056 if (CONST_INT_P (trial))
5057 src_cst = trial;
5058 else if (REG_P (trial))
5059 {
5060 unsigned int src_hash = HASH (trial, GET_MODE (trial));
5061 struct table_elt *src_elt
5062 = lookup (trial, src_hash, GET_MODE (trial));
5063
5064 if (src_elt)
5065 for (p = src_elt->first_same_value; p; p = p->next_same_value)
5066 if (p->is_const && CONST_INT_P (p->exp))
5067 {
5068 src_cst = p->exp;
5069 break;
5070 }
5071 }
5072
5073 if (src_cst && dest_elt)
5058 for (p = dest_elt->first_same_value; p; p = p->next_same_value)5074 for (p = dest_elt->first_same_value; p; p = p->next_same_value)
5059 if (p->is_const && CONST_INT_P (p->exp))5075 if (p->is_const && CONST_INT_P (p->exp))
5060 {5076 {
@@ -5076,7 +5092,7 @@
5076 else5092 else
5077 mask = ((HOST_WIDE_INT) 1 << INTVAL (width)) - 1;5093 mask = ((HOST_WIDE_INT) 1 << INTVAL (width)) - 1;
5078 val &= ~(mask << shift);5094 val &= ~(mask << shift);
5079 val |= (INTVAL (trial) & mask) << shift;5095 val |= (INTVAL (src_cst) & mask) << shift;
5080 val = trunc_int_for_mode (val, GET_MODE (dest_reg));5096 val = trunc_int_for_mode (val, GET_MODE (dest_reg));
5081 validate_unshare_change (insn, &SET_DEST (sets[i].rtl),5097 validate_unshare_change (insn, &SET_DEST (sets[i].rtl),
5082 dest_reg, 1);5098 dest_reg, 1);
50835099
=== modified file 'gcc/passes.c'
--- gcc/passes.c 2010-11-29 14:09:41 +0000
+++ gcc/passes.c 2011-01-31 15:39:37 +0000
@@ -990,11 +990,11 @@
990 }990 }
991 NEXT_PASS (pass_web);991 NEXT_PASS (pass_web);
992 NEXT_PASS (pass_rtl_cprop);992 NEXT_PASS (pass_rtl_cprop);
993 NEXT_PASS (pass_initialize_regs);
993 NEXT_PASS (pass_cse2);994 NEXT_PASS (pass_cse2);
994 NEXT_PASS (pass_rtl_dse1);995 NEXT_PASS (pass_rtl_dse1);
995 NEXT_PASS (pass_rtl_fwprop_addr);996 NEXT_PASS (pass_rtl_fwprop_addr);
996 NEXT_PASS (pass_inc_dec);997 NEXT_PASS (pass_inc_dec);
997 NEXT_PASS (pass_initialize_regs);
998 NEXT_PASS (pass_ud_rtl_dce);998 NEXT_PASS (pass_ud_rtl_dce);
999 NEXT_PASS (pass_combine);999 NEXT_PASS (pass_combine);
1000 NEXT_PASS (pass_if_after_combine);1000 NEXT_PASS (pass_if_after_combine);

Subscribers

People subscribed via source and target branches