diff options
author | Richard Henderson <rth@cygnus.com> | 1998-03-25 16:20:08 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 1998-03-25 16:20:08 -0800 |
commit | 6f28d3e98257593850baca079e60a59eae47bc9f (patch) | |
tree | fa5c337155be729a7812e5f418eaaf7d3d5d0442 | |
parent | 7eea64437a974d93e6a99163ecb3d1b97d1c7e0d (diff) | |
download | gcc-6f28d3e98257593850baca079e60a59eae47bc9f.zip gcc-6f28d3e98257593850baca079e60a59eae47bc9f.tar.gz gcc-6f28d3e98257593850baca079e60a59eae47bc9f.tar.bz2 |
* combine.c (make_compound_operation): Simplify (subreg (*_extend) 0).
From-SVN: r18836
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/combine.c | 17 |
2 files changed, 21 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dddc848..028e157 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +Thu Mar 26 00:19:47 1998 Richard Henderson <rth@cygnus.com> + + * combine.c (make_compound_operation): Simplify (subreg (*_extend) 0). + Wed Mar 25 23:53:11 1998 Jeffrey A Law (law@cygnus.com) * pa.c (pa_adjust_cost): Avoid redundant calls to get_attr_type. diff --git a/gcc/combine.c b/gcc/combine.c index 8cb32dc..4bef563 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -6038,6 +6038,23 @@ make_compound_operation (x, in_code) return newer; } + + /* If this is a paradoxical subreg, and the new code is a sign or + zero extension, omit the subreg and widen the extension. If it + is a regular subreg, we can still get rid of the subreg by not + widening so much, or in fact removing the extension entirely. */ + if ((GET_CODE (tem) == SIGN_EXTEND + || GET_CODE (tem) == ZERO_EXTEND) + && subreg_lowpart_p (x)) + { + if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (tem)) + || (GET_MODE_SIZE (mode) > + GET_MODE_SIZE (GET_MODE (XEXP (tem, 0))))) + tem = gen_rtx_combine (GET_CODE (tem), mode, XEXP (tem, 0)); + else + tem = gen_lowpart_for_combine (mode, XEXP (tem, 0)); + return tem; + } break; default: |