diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 24 | ||||
-rw-r--r-- | gcc/simplify-rtx.c | 22 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr54457.c | 11 |
4 files changed, 53 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2684193..f543b7b8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2012-10-01 Uros Bizjak <ubizjak@gmail.com> + + PR rtl-optimization/54457 + * simplify-rtx.c (simplify_subreg): + Simplify (subreg:M (op:N ((x:N) (y:N)), 0) + to (op:M (subreg:M (x:N) 0) (subreg:M (x:N) 0)), where + the outer subreg is effectively a truncation to the original mode M. + 2012-10-01 Richard Guenther <rguenther@suse.de> * builtins.def (ATTR_MATHFN_FPROUNDING): Do not use no-vops @@ -299,7 +307,8 @@ Undo r185605 (mostly): * config/avr/avr-protos.h (avr_load_lpm): Remove. - * config/avr/avr.c (avr_load_libgcc_p): Don't restrict to __flash loads. + * config/avr/avr.c (avr_load_libgcc_p): Don't restrict to __flash + loads. (avr_out_lpm): Also handle loads > 1 byte. (avr_load_lpm): Remove. (avr_find_unused_d_reg): New static function. @@ -367,8 +376,7 @@ PR target/54703 * simplify-rtx.c (simplify_binary_operation_1): Perform - (x - (x & y)) -> (x & ~y) optimization only for integral - modes. + (x - (x & y)) -> (x & ~y) optimization only for integral modes. 2012-09-27 Marc Glisse <marc.glisse@inria.fr> @@ -527,7 +535,7 @@ PR target/54641 * config/avr/t-avr: Use ALL_COMPILERFLAGS instead of ALL_CFLAGS for sources compiled with COMPILER. - + 2012-09-25 Richard Guenther <rguenther@suse.de> PR lto/54625 @@ -541,8 +549,7 @@ one bit precision properly. PR other/54692 - * configure.ac (CFLAGS, CXXFLAGS): Remove -Ofast or -Og - properly. + * configure.ac (CFLAGS, CXXFLAGS): Remove -Ofast or -Og properly. * configure: Regenerated. 2012-09-25 Georg-Johann Lay <avr@gjlay.de> @@ -564,8 +571,7 @@ 2012-09-24 Dehao Chen <dehao@google.com> - * tree-cfg.c (move_stmt_op): Reset the expr block only - when necessary. + * tree-cfg.c (move_stmt_op): Reset the expr block only when necessary. (move_block_to_fn): Reset the edge's goto block even when the goto locus is unknown. @@ -672,7 +678,7 @@ 2012-09-24 Janis Johnson <janisjo@codesourcery.com> - doc/sourcebuild.texi (Selectors): Document the use of target + * doc/sourcebuild.texi (Selectors): Document the use of target and xfail used together. 2012-09-24 Richard Guenther <rguenther@suse.de> diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index aebe6bb..c3e8a0a 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -5724,6 +5724,28 @@ simplify_subreg (enum machine_mode outermode, rtx op, return CONST0_RTX (outermode); } + /* Simplify (subreg:SI (op:DI ((x:DI) (y:DI)), 0) + to (op:SI (subreg:SI (x:DI) 0) (subreg:SI (x:DI) 0)), where + the outer subreg is effectively a truncation to the original mode. */ + if ((GET_CODE (op) == PLUS + || GET_CODE (op) == MINUS + || GET_CODE (op) == MULT) + && SCALAR_INT_MODE_P (outermode) + && SCALAR_INT_MODE_P (innermode) + && GET_MODE_PRECISION (outermode) < GET_MODE_PRECISION (innermode) + && byte == subreg_lowpart_offset (outermode, innermode)) + { + rtx op0 = simplify_gen_subreg (outermode, XEXP (op, 0), + innermode, byte); + if (op0) + { + rtx op1 = simplify_gen_subreg (outermode, XEXP (op, 1), + innermode, byte); + if (op1) + return simplify_gen_binary (GET_CODE (op), outermode, op0, op1); + } + } + /* Simplify (subreg:QI (lshiftrt:SI (sign_extend:SI (x:QI)) C), 0) into to (ashiftrt:QI (x:QI) C), where C is a suitable small constant and the outer subreg is effectively a truncation to the original mode. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0cd1176..89d7eeb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-10-01 Uros Bizjak <ubizjak@gmail.com> + + PR rtl-optimization/54457 + * gcc.target/i386/pr54457.c: New test. + 2012-10-01 Ulrich Weigand <ulrich.weigand@linaro.org> * gcc.dg/lower-subreg-1.c: Disable on arm*-*-* targets. diff --git a/gcc/testsuite/gcc.target/i386/pr54457.c b/gcc/testsuite/gcc.target/i386/pr54457.c new file mode 100644 index 0000000..d27f899 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr54457.c @@ -0,0 +1,11 @@ +/* { dg-do compile { target { ! { ia32 } } } } */ +/* { dg-options "-O2 -mx32 -maddress-mode=short" } */ + +extern char array[40]; + +char foo (long long position) +{ + return array[position + 1]; +} + +/* { dg-final { scan-assembler-not "add\[lq\]?\[^\n\]*1" } } */ |