diff options
| author | aoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-05-09 17:16:54 +0000 | 
|---|---|---|
| committer | aoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-05-09 17:16:54 +0000 | 
| commit | 291ee89df99af129659f365849e613a27928e033 (patch) | |
| tree | a45f9fe5c6841a2561bee0d8369feff64fbea99c | |
| parent | ee7cbe0eb1a1f34f7cf6913e9455adb67cb9d261 (diff) | |
| download | ppe42-gcc-291ee89df99af129659f365849e613a27928e033.tar.gz ppe42-gcc-291ee89df99af129659f365849e613a27928e033.zip  | |
* reload1.c (reload_cse_move2add): Don't turn an implicit
truncation into a self-set in the narrow mode.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@66638 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/reload1.c | 21 | 
2 files changed, 22 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 01bc7fff725..d7ac8d830a7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-05-09  Alexandre Oliva  <aoliva@redhat.com> + +	* reload1.c (reload_cse_move2add): Don't turn an implicit +	truncation into a self-set in the narrow mode. +  2003-05-09  Richard Earnshaw  <rearnsha@arm.com>  	* arm.md (clzsi2): The CLZ instruction is predicable. diff --git a/gcc/reload1.c b/gcc/reload1.c index 792dd467e89..adae5c8a162 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -9166,7 +9166,14 @@ reload_cse_move2add (first)  		     value flag.  jump2 already knows how to get rid of  		     no-op moves.  */  		  if (new_src == const0_rtx) -		    validate_change (insn, &SET_SRC (pat), reg, 0); +		    { +		      /* If the constants are different, this is a +			 truncation, that, if turned into (set (reg) +			 (reg)), would be discarded.  Maybe we should +			 try a truncMN pattern?  */ +		      if (INTVAL (src) == reg_offset [regno]) +			validate_change (insn, &SET_SRC (pat), reg, 0); +		    }  		  else if (rtx_cost (new_src, PLUS) < rtx_cost (src, SET)  			   && have_add2_insn (reg, new_src))  		    { @@ -9252,9 +9259,15 @@ reload_cse_move2add (first)  		      int success = 0;  		      if (new_src == const0_rtx) -			/* See above why we create (set (reg) (reg)) here.  */ -			success -			  = validate_change (next, &SET_SRC (set), reg, 0); +			{ +			  if (INTVAL (src) == reg_offset [regno]) +			    /* See above why we create (set (reg) +			       (reg)) here.  */ +			    success +			      = validate_change (next, &SET_SRC (set), reg, 0); +			  else +			    success = 0; +			}  		      else if ((rtx_cost (new_src, PLUS)  				< COSTS_N_INSNS (1) + rtx_cost (src3, SET))  			       && have_add2_insn (reg, new_src))  | 

