i386.md (*ashl<mode>3_mask): New insn_and_split pattern.

* config/i386/i386.md (*ashl<mode>3_mask): New insn_and_split pattern.
	(*<shiftrt_insn><mode>3_mask): Ditto.
	(*<rotate_insn><mode>3_mask): Ditto.

testsuite/ChangeLog:

	* gcc.target/i386/shift_mask.c: New test.

From-SVN: r164895
This commit is contained in:
Uros Bizjak 2010-10-01 23:34:02 +02:00
parent cdb388c24a
commit c44d6c4790
4 changed files with 168 additions and 72 deletions

View File

@ -1,3 +1,9 @@
2010-10-01 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.md (*ashl<mode>3_mask): New insn_and_split pattern.
(*<shiftrt_insn><mode>3_mask): Ditto.
(*<rotate_insn><mode>3_mask): Ditto.
2010-10-01 Steve Ellcey <sje@cup.hp.com>
PR tree-optimization/44716
@ -7,8 +13,7 @@
2010-10-01 Nick Clifton <nickc@redhat.com>
* common.opt: Add -fcombine-stack-adjustments.
* opts.c (decode_options): Enable -fcombine-stack-adjustments at
-O1.
* opts.c (decode_options): Enable -fcombine-stack-adjustments at -O1.
* combine-stack-adj.c (gate_handle_stack_adjustments): Check
flag_combine_stack_adjustments.
* doc/invoke.texi: Document the new option.
@ -286,8 +291,9 @@
2010-09-30 Sebastian Pop <sebastian.pop@amd.com>
* graphite-clast-to-gimple.c (max_signed_precision_type): Remove the call
to lang_hooks.types.type_for_size. Call build_nonstandard_integer_type.
* graphite-clast-to-gimple.c (max_signed_precision_type): Remove
the call to lang_hooks.types.type_for_size. Call
build_nonstandard_integer_type.
2010-09-30 Riyadh Baghdadi <baghdadi.mr@gmail.com>
@ -304,8 +310,8 @@
(print_pdr_access_layout): Updated to support OpenScop format.
(print_pdr): Same.
(openscop_print_pbb_domain): New.
(print_pbb_body): Added a parameter to allow indicating that pbb_body is
not provided.
(print_pbb_body): Added a parameter to allow indicating that pbb_body
is not provided.
(print_pbb): Updated to call the new print_pbb_body.
(openscop_print_scop_context): New.
(print_scop_header): New.
@ -351,8 +357,7 @@
* Makefile.in (build/gen%$(build_exeext)): Move rule after all
special-casing for generators and turn into ...
((genprog:%=build/gen%$(build_exeext))): ... this static pattern
rule, for better error messages in case of toplevel dependency
errors.
rule, for better error messages in case of toplevel dependency errors.
(genprog): Add hooks, rename to ...
(genprogerr): ... this, and let genprog also contain check,
checksum, condmd.
@ -361,7 +366,7 @@
(build/genhooks$(build_exeext)): Remove now-unneeded dependency.
2010-09-30 Jonathan Wakely <jwakely.gcc@gmail.com>
Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
* doc/install.texi: Suggest using LD_LIBRARY_PATH to find libs
for GMP, MPFR and MPC.
@ -369,8 +374,7 @@
2010-09-30 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* config/sparc/sparc.opt (mimpure-text): Move ...
* config/sol2.opt: ... here.
Correct description.
* config/sol2.opt: ... here. Correct description.
* config.gcc (*-*-solaris2*): Add sol2.opt to extra_options.
* doc/invoke.texi (Option Summary, SPARC Options): Move
-mimpure-text, -mno-impure-text, -threads, -pthreads, -pthread ...
@ -460,8 +464,7 @@
* opts.c (common_handle_option, lang_handle_option,
target_handle_option): Take gcc_options parameter. Assert that it
is &global_options.
(read_cmdline_options): Pass &global_options to
read_cmdline_option.
(read_cmdline_options): Pass &global_options to read_cmdline_option.
(print_filtered_help): Use option_flag_var. Pass &global_options
to option_enabled.
(common_handle_option): Use option_flag_var.
@ -494,8 +497,7 @@
* c-parser.c (c_lex_one_token): When finding a CPP_AT_NAME
Objective-C token, map RID_CLASS to RID_AT_CLASS and similar.
(c_parser_external_declaration): Use RID_AT_CLASS
instead of RID_CLASS.
(c_parser_external_declaration): Use RID_AT_CLASS instead of RID_CLASS.
(c_parser_objc_class_declaration): Same change.
(c_parser_objc_try_catch_statement): Use RID_AT_TRY instead of
RID_TRY and RID_AT_CATCH instead of RID_CATCH.
@ -531,8 +533,7 @@
2010-09-29 Bernd Schmidt <bernds@codesourcery.com>
PR target/40457
* postreload.c (move2add_use_add2_insn): Use full_costs for
comparison.
* postreload.c (move2add_use_add2_insn): Use full_costs for comparison.
(move2add_use_add3_insn): Likewise.
(reload_cse_move2add): Likewise.
* rtlanal.c (get_full_rtx_cost): New function.
@ -553,8 +554,7 @@
2010-09-29 Jack Howarth <howarth@bromo.med.uc.edu>
* varasm.c (assemble_alias): Add error message for
unsupported ifunc.
* varasm.c (assemble_alias): Add error message for unsupported ifunc.
2010-09-29 Mike Stump <mikestump@comcast.net>
@ -589,8 +589,7 @@
2010-09-29 Joseph Myers <joseph@codesourcery.com>
* optc-gen.awk: Generate global_options initializer instead of
individual variables. Add x_ prefix to names of structure
members.
individual variables. Add x_ prefix to names of structure members.
* opth-gen.awk: Generate gcc_options structure. Add x_ prefix to
names of structure members.
* doc/tm.texi.in (HARD_FRAME_POINTER_IS_FRAME_POINTER,
@ -599,8 +598,7 @@
* alias.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER
* builtins.c: Use HARD_FRAME_POINTER_IS_ARG_POINTER.
* c-parser.c (disable_extension_diagnostics,
restore_extension_diagnostics): Update names of cpp_options
members.
restore_extension_diagnostics): Update names of cpp_options members.
* combine.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER
* common.opt (fcompare-debug-second): Don't use Var.
* config/alpha/alpha.h (target_flags): Remove.
@ -658,8 +656,8 @@
2010-09-29 Hariharan Sandanagobalane <hariharan@picochip.com>
* config/picochip/picochip.c (picochip_output_internal_label):
This function can now be called for debug CFI labels, which can come in
the middle of a vliw instruction. Postpone until end of vliw.
This function can now be called for debug CFI labels, which can come
in the middle of a vliw instruction. Postpone until end of vliw.
2010-09-29 Richard Guenther <rguenther@suse.de>
@ -771,7 +769,7 @@
(TARGET_UNWIND_INFO): Remove.
* config/pa/pa.c (pa_option_override): Use targetm.except_unwind_info.
2010-09-28 Iain Sandoe <iains@gcc.gnu.org>
* c-parser.c (c_parser_objc_class_definition): Adjust prototype.
@ -788,13 +786,12 @@
* toplev.h (save_decoded_options, save_decoded_options_count):
New global variables.
* toplev.c (save_decoded_options, save_decoded_options_count):
export variables.
Export variables.
2010-09-28 Ian Lance Taylor <iant@google.com>
* config/i386/i386.c (ix86_supports_split_stack): Test
HAVE_GAS_CFI_PERSONALITY_DIRECTIVE rather than
dwarf2out_do_cfi_asm.
HAVE_GAS_CFI_PERSONALITY_DIRECTIVE rather than dwarf2out_do_cfi_asm.
2010-09-28 Ian Lance Taylor <iant@google.com>
@ -987,7 +984,7 @@
Radar 4229905
* c-typeck.c (build_conditional_expr): Call objc_have_common_type when
looking for objective-c common pointer types.
2005-06-22 Ziemowit Laski <zlaski@apple.com>
Radar 4154928

View File

@ -9151,6 +9151,29 @@
DONE;
})
;; Avoid useless masking of count operand.
(define_insn_and_split "*ashl<mode>3_mask"
[(set (match_operand:SWI48 0 "nonimmediate_operand" "=rm")
(ashift:SWI48
(match_operand:SWI48 1 "nonimmediate_operand" "0")
(subreg:QI
(and:SI
(match_operand:SI 2 "register_operand" "c")
(match_operand:SI 3 "const_int_operand" "n")) 0)))
(clobber (reg:CC FLAGS_REG))]
"ix86_binary_operator_ok (ASHIFT, <MODE>mode, operands)
&& (INTVAL (operands[3]) & (GET_MODE_BITSIZE (<MODE>mode)-1))
== GET_MODE_BITSIZE (<MODE>mode)-1"
"#"
"&& 1"
[(parallel [(set (match_dup 0)
(ashift:SWI48 (match_dup 1) (match_dup 2)))
(clobber (reg:CC FLAGS_REG))])]
"operands[2] = simplify_gen_subreg (QImode, operands[2], SImode, 0);"
[(set_attr "type" "ishift")
(set_attr "mode" "<MODE>")])
(define_insn "*ashl<mode>3_1"
[(set (match_operand:SWI48 0 "nonimmediate_operand" "=rm,r")
(ashift:SWI48 (match_operand:SWI48 1 "nonimmediate_operand" "0,l")
@ -9690,6 +9713,29 @@
""
"ix86_expand_binary_operator (<CODE>, <MODE>mode, operands); DONE;")
;; Avoid useless masking of count operand.
(define_insn_and_split "*<shiftrt_insn><mode>3_mask"
[(set (match_operand:SWI48 0 "nonimmediate_operand" "=rm")
(any_shiftrt:SWI48
(match_operand:SWI48 1 "nonimmediate_operand" "0")
(subreg:QI
(and:SI
(match_operand:SI 2 "register_operand" "c")
(match_operand:SI 3 "const_int_operand" "n")) 0)))
(clobber (reg:CC FLAGS_REG))]
"ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)
&& (INTVAL (operands[3]) & (GET_MODE_BITSIZE (<MODE>mode)-1))
== GET_MODE_BITSIZE (<MODE>mode)-1"
"#"
"&& 1"
[(parallel [(set (match_dup 0)
(any_shiftrt:SWI48 (match_dup 1) (match_dup 2)))
(clobber (reg:CC FLAGS_REG))])]
"operands[2] = simplify_gen_subreg (QImode, operands[2], SImode, 0);"
[(set_attr "type" "ishift")
(set_attr "mode" "<MODE>")])
(define_insn_and_split "*<shiftrt_insn><mode>3_doubleword"
[(set (match_operand:DWI 0 "register_operand" "=r")
(any_shiftrt:DWI (match_operand:DWI 1 "register_operand" "0")
@ -10042,6 +10088,29 @@
""
"ix86_expand_binary_operator (<CODE>, <MODE>mode, operands); DONE;")
;; Avoid useless masking of count operand.
(define_insn_and_split "*<rotate_insn><mode>3_mask"
[(set (match_operand:SWI48 0 "nonimmediate_operand" "=rm")
(any_rotate:SWI48
(match_operand:SWI48 1 "nonimmediate_operand" "0")
(subreg:QI
(and:SI
(match_operand:SI 2 "register_operand" "c")
(match_operand:SI 3 "const_int_operand" "n")) 0)))
(clobber (reg:CC FLAGS_REG))]
"ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)
&& (INTVAL (operands[3]) & (GET_MODE_BITSIZE (<MODE>mode)-1))
== GET_MODE_BITSIZE (<MODE>mode)-1"
"#"
"&& 1"
[(parallel [(set (match_dup 0)
(any_rotate:SWI48 (match_dup 1) (match_dup 2)))
(clobber (reg:CC FLAGS_REG))])]
"operands[2] = simplify_gen_subreg (QImode, operands[2], SImode, 0);"
[(set_attr "type" "rotate")
(set_attr "mode" "<MODE>")])
;; Implement rotation using two double-precision
;; shift instructions and a scratch register.

View File

@ -1,3 +1,7 @@
2010-10-01 Uros Bizjak <ubizjak@gmail.com>
* gcc.target/i386/shift_mask.c: New test.
2010-10-01 Richard Guenther <rguenther@suse.de>
PR tree-optimization/45854
@ -7,7 +11,7 @@
* gcc.c-torture/execute/cmpsf-1.c: Rename FLOAT_{MIN,MAX} to
__FLT_{MIN,MAX}__.
2010-09-30 Sebastian Pop <sebastian.pop@amd.com>
PR middle-end/45758
@ -206,8 +210,8 @@
Merge from 'apple/trunk' branch on FSF servers (test method-20.m
from the branch renamed to method-20b.m to avoid clashes).
2005-08-23 Stuart Hastings <stuart@apple.com>
Ziemowit Laski <zlaski@apple.com>
2005-08-23 Stuart Hastings <stuart@apple.com>
Ziemowit Laski <zlaski@apple.com>
Radar 4209854
* obj-c++.dg/method-23.mm: New.
@ -263,8 +267,7 @@
2010-09-27 Nicola Pero <nicola.pero@meta-innovation.com>
PR objc/45763
* objc.dg/encode-1.m: Execute the test with the GNU runtime as
well.
* objc.dg/encode-1.m: Execute the test with the GNU runtime as well.
2010-09-27 Nicola Pero <nicola.pero@meta-innovation.com>
@ -279,28 +282,25 @@
Changelogs are below.
* objc.dg/encode-6.m: Execute the test only with the GNU runtime.
* objc.dg/encode-6-next.m: New file (from encode-6.m in the
branch).
* objc.dg/encode-7-next.m: New file (from encode-7.m in the
branch).
* objc.dg/encode-6-next.m: New file (from encode-6.m in the branch).
* objc.dg/encode-7-next.m: New file (from encode-7.m in the branch).
* objc.dg/encode-7-next-64bit.m: New file (from encode-7-64bit.m
in the branch).
in the branch).
* objc.dg/proto-qual-1.m: Test the 3.3 ABI on NeXT (from
proto-qual-1.m in the branch) and the normal ABI on GNU.
* objc.dg/threedotthree-abi-1.m: New file (from the branch). Run
the test only with the NeXT runtime.
* obj-c++/encode-1.mm: Execute the test only with the GNU runtime.
* obj-c++/encode-1-next.mm: New file (from encode-1.mm in the
branch).
* obj-c++/encode-1-next.mm: New file (from encode-1.mm in the branch).
* obj-c++.dg/threedotthree-abi-1.mm: New file (from the branch).
Run the test only with the NeXT runtime.
2006-03-30 Fariborz Jahanian <fjahanian@apple.com>
Radar 4492973
* objc.dg/encode-7-64bit.m: New.
* objc.dg/encode-7.m: Skip if -m64.
2005-10-19 Fariborz Jahanian <fjahanian@apple.com>
Radar 4301047
@ -319,12 +319,12 @@
Merge from 'apple/trunk' branch on FSF servers. Renamed
const-str-12.m to constr-str-12b.m to avoid conflicts.
2005-12-15 Fariborz Jahanian <fjahanian@apple.com>
Radar 4229905
* obj-c++.dg/warn5.mm: New
2005-06-22 Ziemowit Laski <zlaski@apple.com>
Radar 4154928
@ -363,7 +363,7 @@
2010-09-24 Steven G. Kargl < kargl@gcc.gnu.org>
* testsuite/gfortran.dg/operator_c1202.f90: New test.
* gfortran.dg/operator_c1202.f90: New test.
2010-09-24 Jan Hubicka <jh@suse.cz>
@ -427,7 +427,6 @@
PR fortran/45744
* gfortran.dg/dependency_36.f90: New test.
>>>>>>> .r164755
2010-09-23 Uros Bizjak <ubizjak@gmail.com>
* gcc.target/i386/pad-1.c: Remove -S from dg-options.
@ -514,7 +513,7 @@
2010-09-22 Marcus Shawcroft <marcus.shawcroft@arm.com>
* lib/scanasm.exp(dg-function-on-line): Permit .fnstart to appear in
the regexp pattern between the expected label and location string.
the regexp pattern between the expected label and location string.
2010-09-22 Marcus Shawcroft <marcus.shawcroft@arm.com>
@ -901,8 +900,8 @@
2010-09-10 Jack Howarth <howarth@bromo.med.uc.edu>
PR target/42070
* gcc/testsuite/lib/profopt.exp: Prune warnings on execname2 compile.
* gcc/testsuite/lib/prune.exp: Prune "can't add line info" warnings.
* lib/profopt.exp: Prune warnings on execname2 compile.
* lib/prune.exp: Prune "can't add line info" warnings.
2010-09-14 Jerry DeLisle <jvdelisle@gcc.gnu.org>
@ -1026,10 +1025,10 @@
* gcc.dg/attr-ifunc-3.c: New.
* gcc.dg/attr-ifunc-4.c: New.
* gcc.dg/attr-ifunc-5.c: New.
* testsuite/g++.dg/ext/attr-ifunc-1.C: New.
* testsuite/g++.dg/ext/attr-ifunc-2.C: New.
* testsuite/g++.dg/ext/attr-ifunc-3.C: New.
* testsuite/g++.dg/ext/attr-ifunc-4.C: New.
* g++.dg/ext/attr-ifunc-1.C: New.
* g++.dg/ext/attr-ifunc-2.C: New.
* g++.dg/ext/attr-ifunc-3.C: New.
* g++.dg/ext/attr-ifunc-4.C: New.
2010-09-09 Vladimir Makarov <vmakarov@redhat.com>
@ -1129,7 +1128,7 @@
PR target/42313
PR target/44651
* gcc.target/i386/builtin-unreachable.c: Don't skip on darwin.
* gcc/testsuite/gcc.dg/stack-usage-1.c: Use default on i386/Darwin.
* gcc.dg/stack-usage-1.c: Use default on i386/Darwin.
2010-09-07 Mikael Morin <mikael@gcc.gnu.org>
@ -1580,13 +1579,13 @@
2010-08-27 Tobias Burnus <burnus@net-b.de>
PR fortran/33197
* gcc/testsuite/gfortran.dg/norm2_1.f90: New.
* gcc/testsuite/gfortran.dg/norm2_2.f90: New.
* gcc/testsuite/gfortran.dg/norm2_3.f90: New.
* gcc/testsuite/gfortran.dg/norm2_4.f90: New.
* gcc/testsuite/gfortran.dg/parity_1.f90: New.
* gcc/testsuite/gfortran.dg/parity_2.f90: New.
* gcc/testsuite/gfortran.dg/parity_3.f90: New.
* gfortran.dg/norm2_1.f90: New.
* gfortran.dg/norm2_2.f90: New.
* gfortran.dg/norm2_3.f90: New.
* gfortran.dg/norm2_4.f90: New.
* gfortran.dg/parity_1.f90: New.
* gfortran.dg/parity_2.f90: New.
* gfortran.dg/parity_3.f90: New.
2010-08-27 Janus Weil <janus@gcc.gnu.org>
@ -2387,7 +2386,7 @@
2010-07-30 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
PR c++/45112
* testsuite/g++.dg/pr45112.C: New test.
* g++.dg/pr45112.C: New test.
2010-07-30 Jakub Jelinek <jakub@redhat.com>
@ -2881,7 +2880,7 @@
2010-07-22 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/44891
* testsuite/gcc.c-torture/compile/pr44891.c: New test.
* gcc.c-torture/compile/pr44891.c: New test.
2010-07-22 Richard Guenther <rguenther@suse.de>
@ -4222,7 +4221,7 @@
2010-06-28 Martin Jambor <mjambor@suse.cz>
* testsuite/gcc.dg/ipa/ipa-sra-6.c: New test.
* gcc.dg/ipa/ipa-sra-6.c: New test.
2010-06-28 Jan Hubicka <jh@suse.cz>
@ -4340,7 +4339,7 @@
2010-06-25 Jan Hubicka <jh@suse.cz>
* testsuite/gcc.dg/tree-ssa/ipa-split-1.c
* gcc.dg/tree-ssa/ipa-split-1.c
2010-06-25 Martin Jambor <mjambor@suse.cz>
@ -4775,11 +4774,11 @@
2010-06-09 Steven G. Kargl <kargl@gcc.gnu.org>
* testsuite/gfortran.dg/mvbits_9.f90: New test.
* testsuite/gfortran.dg/ibset_1.f90: Ditto.
* testsuite/gfortran.dg/ibits_1.f90: Ditto.
* testsuite/gfortran.dg/btest_1.f90: Ditto.
* testsuite/gfortran.dg/ibclr_1.f90: Ditto.
* gfortran.dg/mvbits_9.f90: New test.
* gfortran.dg/ibset_1.f90: Ditto.
* gfortran.dg/ibits_1.f90: Ditto.
* gfortran.dg/btest_1.f90: Ditto.
* gfortran.dg/ibclr_1.f90: Ditto.
2010-06-09 Jason Merrill <jason@redhat.com>

View File

@ -0,0 +1,31 @@
/* { dg-do compile } */
/* { dg-options "-O2" } */
int test_sal (int a, int c)
{
return a << (c & 0x1f);
}
int test_sar (int a, int c)
{
return a >> (c & 0x1f);
}
unsigned int test_shr (unsigned int a, int c)
{
return a >> (c & 0x1f);
}
unsigned int test_rol (unsigned int a, int c)
{
int z = c & 0x1f;
return (a << z) | (a >> (32 - z));
}
unsigned int test_ror (unsigned int a, int c)
{
int z = c & 0x1f;
return (a >> z) | (a << (32 - z));
}
/* { dg-final { scan-assembler-not "and" } } */