This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/71676] [avr] casesi won't handle switch values larger than 16 bits
- From: "gjl at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 25 Oct 2016 08:35:49 +0000
- Subject: [Bug target/71676] [avr] casesi won't handle switch values larger than 16 bits
- Auto-submitted: auto-generated
- References: <bug-71676-4@http.gcc.gnu.org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71676
--- Comment #2 from Georg-Johann Lay <gjl at gcc dot gnu.org> ---
Author: gjl
Date: Tue Oct 25 08:35:17 2016
New Revision: 241504
URL: https://gcc.gnu.org/viewcvs?rev=241504&root=gcc&view=rev
Log:
gcc/
New avt target pass to work around performance loss by PR fix.
PR target/71676
PR target/71678
* config/avr/avr.md (casesi_<mode>_sequence) [qi,hi]: New insn.
(*cmp<mode>) [qi,qq,uqq,hi,hq,uhq,ha,uha]: Rename to cmp<mode>3.
* config/avr/predicates.md (extend_operator): New.
* config/avr/avr-passes.def (avr_pass_casesi): Register new pass.
* config/avr/avr-protos.h (avr_casei_sequence_check_operands)
(make_avr_pass_casesi): New prototypes.
* config/avr/avr.c (print-rtl.h): Include it.
(pass_data avr_pass_data_casesi): Data for new pass.
(avr_pass_casesi): New class implementing rtl_opt_pass .avr-casesi.
(make_avr_pass_casesi, avr_parallel_insn_from_insns)
(avr_is_casesi_sequence, avr_casei_sequence_check_operands)
(avr_optimize_casesi): New functions.
gcc/testsuite/
PR target/71676
PR target/71678
* gcc.target/avr/pr71676-2.c: New test.
Added:
trunk/gcc/testsuite/gcc.target/avr/pr71676-2.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/avr/avr-passes.def
trunk/gcc/config/avr/avr-protos.h
trunk/gcc/config/avr/avr.c
trunk/gcc/config/avr/avr.md
trunk/gcc/config/avr/predicates.md
trunk/gcc/testsuite/ChangeLog