From f70308d411efebfce8f15b54fedd21c17d44740c Mon Sep 17 00:00:00 2001 From: Georg-Johann Lay Date: Mon, 8 Oct 2012 08:32:46 +0000 Subject: [PATCH] re PR target/54815 ([avr] missed optimization with operations with constant operands) PR target/54815 * config/avr/avr.md (*add3, add3, addpsi3): Make constraint alternative "r,0,r" slighly more expensive. (sub3, (andqi3, andhi3, andpsi3, andsi3): Ditto. (iorqi3, iorhi3, iorpsi3, iorsi3): Ditto. (xorhi3, xorpsi3, xorsi3): Ditto. From-SVN: r192198 --- gcc/ChangeLog | 10 ++++++++++ gcc/config/avr/avr.md | 34 +++++++++++++++++----------------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d3835a3f437..e8790318452 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2012-10-08 Georg-Johann Lay + + PR target/54815 + * config/avr/avr.md (*add3, add3, addpsi3): Make + constraint alternative "r,0,r" slighly more expensive. + (sub3, + (andqi3, andhi3, andpsi3, andsi3): Ditto. + (iorqi3, iorhi3, iorpsi3, iorsi3): Ditto. + (xorhi3, xorpsi3, xorsi3): Ditto. + 2012-10-08 Oleg Endo PR target/54760 diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md index 19424b688fd..8b071f02af1 100644 --- a/gcc/config/avr/avr.md +++ b/gcc/config/avr/avr.md @@ -1177,7 +1177,7 @@ ;; "*addhq3" "*adduhq3" ;; "*addha3" "*adduha3" (define_insn "*add3" - [(set (match_operand:ALL2 0 "register_operand" "=?r,d,!w ,d") + [(set (match_operand:ALL2 0 "register_operand" "=??r,d,!w ,d") (plus:ALL2 (match_operand:ALL2 1 "register_operand" "%0,0,0 ,0") (match_operand:ALL2 2 "nonmemory_or_const_operand" "r,s,IJ YIJ,n Ynn")))] "" @@ -1244,7 +1244,7 @@ ;; "addsq3" "addusq3" ;; "addsa3" "addusa3" (define_insn "add3" - [(set (match_operand:ALL4 0 "register_operand" "=r,d ,r") + [(set (match_operand:ALL4 0 "register_operand" "=??r,d ,r") (plus:ALL4 (match_operand:ALL4 1 "register_operand" "%0,0 ,0") (match_operand:ALL4 2 "nonmemory_operand" "r,i ,n Ynn"))) (clobber (match_scratch:QI 3 "=X,X ,&d"))] @@ -1302,7 +1302,7 @@ (set_attr "cc" "set_n")]) (define_insn "addpsi3" - [(set (match_operand:PSI 0 "register_operand" "=r,d ,d,r") + [(set (match_operand:PSI 0 "register_operand" "=??r,d ,d,r") (plus:PSI (match_operand:PSI 1 "register_operand" "%0,0 ,0,0") (match_operand:PSI 2 "nonmemory_operand" "r,s ,n,n"))) (clobber (match_scratch:QI 3 "=X,X ,X,&d"))] @@ -1356,7 +1356,7 @@ ;; "subqi3" ;; "subqq3" "subuqq3" (define_insn "sub3" - [(set (match_operand:ALL1 0 "register_operand" "=r,d ,r ,r ,r ,r") + [(set (match_operand:ALL1 0 "register_operand" "=??r,d ,r ,r ,r ,r") (minus:ALL1 (match_operand:ALL1 1 "register_operand" "0,0 ,0 ,0 ,0 ,0") (match_operand:ALL1 2 "nonmemory_or_const_operand" "r,n Ynn,Y01,Ym1,Y02,Ym2")))] "" @@ -1374,7 +1374,7 @@ ;; "subhq3" "subuhq3" ;; "subha3" "subuha3" (define_insn "sub3" - [(set (match_operand:ALL2 0 "register_operand" "=r,d ,*r") + [(set (match_operand:ALL2 0 "register_operand" "=??r,d ,*r") (minus:ALL2 (match_operand:ALL2 1 "register_operand" "0,0 ,0") (match_operand:ALL2 2 "nonmemory_or_const_operand" "r,i Ynn,Ynn"))) (clobber (match_scratch:QI 3 "=X,X ,&d"))] @@ -1411,7 +1411,7 @@ ;; "subsq3" "subusq3" ;; "subsa3" "subusa3" (define_insn "sub3" - [(set (match_operand:ALL4 0 "register_operand" "=r,d ,r") + [(set (match_operand:ALL4 0 "register_operand" "=??r,d ,r") (minus:ALL4 (match_operand:ALL4 1 "register_operand" "0,0 ,0") (match_operand:ALL4 2 "nonmemory_or_const_operand" "r,n Ynn,Ynn"))) (clobber (match_scratch:QI 3 "=X,X ,&d"))] @@ -2932,7 +2932,7 @@ ; and (define_insn "andqi3" - [(set (match_operand:QI 0 "register_operand" "=r,d") + [(set (match_operand:QI 0 "register_operand" "=??r,d") (and:QI (match_operand:QI 1 "register_operand" "%0,0") (match_operand:QI 2 "nonmemory_operand" "r,i")))] "" @@ -2943,7 +2943,7 @@ (set_attr "cc" "set_zn,set_zn")]) (define_insn "andhi3" - [(set (match_operand:HI 0 "register_operand" "=r,d,d,r ,r") + [(set (match_operand:HI 0 "register_operand" "=??r,d,d,r ,r") (and:HI (match_operand:HI 1 "register_operand" "%0,0,0,0 ,0") (match_operand:HI 2 "nonmemory_operand" "r,s,n,Ca2,n"))) (clobber (match_scratch:QI 3 "=X,X,X,X ,&d"))] @@ -2961,7 +2961,7 @@ (set_attr "cc" "set_n,set_n,clobber,clobber,clobber")]) (define_insn "andpsi3" - [(set (match_operand:PSI 0 "register_operand" "=r,d,r ,r") + [(set (match_operand:PSI 0 "register_operand" "=??r,d,r ,r") (and:PSI (match_operand:PSI 1 "register_operand" "%0,0,0 ,0") (match_operand:PSI 2 "nonmemory_operand" "r,n,Ca3,n"))) (clobber (match_scratch:QI 3 "=X,X,X ,&d"))] @@ -2979,7 +2979,7 @@ (set_attr "cc" "set_n,clobber,clobber,clobber")]) (define_insn "andsi3" - [(set (match_operand:SI 0 "register_operand" "=r,d,r ,r") + [(set (match_operand:SI 0 "register_operand" "=??r,d,r ,r") (and:SI (match_operand:SI 1 "register_operand" "%0,0,0 ,0") (match_operand:SI 2 "nonmemory_operand" "r,n,Ca4,n"))) (clobber (match_scratch:QI 3 "=X,X,X ,&d"))] @@ -3014,7 +3014,7 @@ ;; ior (define_insn "iorqi3" - [(set (match_operand:QI 0 "register_operand" "=r,d") + [(set (match_operand:QI 0 "register_operand" "=??r,d") (ior:QI (match_operand:QI 1 "register_operand" "%0,0") (match_operand:QI 2 "nonmemory_operand" "r,i")))] "" @@ -3025,7 +3025,7 @@ (set_attr "cc" "set_zn,set_zn")]) (define_insn "iorhi3" - [(set (match_operand:HI 0 "register_operand" "=r,d,d,r ,r") + [(set (match_operand:HI 0 "register_operand" "=??r,d,d,r ,r") (ior:HI (match_operand:HI 1 "register_operand" "%0,0,0,0 ,0") (match_operand:HI 2 "nonmemory_operand" "r,s,n,Co2,n"))) (clobber (match_scratch:QI 3 "=X,X,X,X ,&d"))] @@ -3043,7 +3043,7 @@ (set_attr "cc" "set_n,set_n,clobber,clobber,clobber")]) (define_insn "iorpsi3" - [(set (match_operand:PSI 0 "register_operand" "=r,d,r ,r") + [(set (match_operand:PSI 0 "register_operand" "=??r,d,r ,r") (ior:PSI (match_operand:PSI 1 "register_operand" "%0,0,0 ,0") (match_operand:PSI 2 "nonmemory_operand" "r,n,Co3,n"))) (clobber (match_scratch:QI 3 "=X,X,X ,&d"))] @@ -3061,7 +3061,7 @@ (set_attr "cc" "set_n,clobber,clobber,clobber")]) (define_insn "iorsi3" - [(set (match_operand:SI 0 "register_operand" "=r,d,r ,r") + [(set (match_operand:SI 0 "register_operand" "=??r,d,r ,r") (ior:SI (match_operand:SI 1 "register_operand" "%0,0,0 ,0") (match_operand:SI 2 "nonmemory_operand" "r,n,Co4,n"))) (clobber (match_scratch:QI 3 "=X,X,X ,&d"))] @@ -3092,7 +3092,7 @@ (set_attr "cc" "set_zn")]) (define_insn "xorhi3" - [(set (match_operand:HI 0 "register_operand" "=r,r ,r") + [(set (match_operand:HI 0 "register_operand" "=??r,r ,r") (xor:HI (match_operand:HI 1 "register_operand" "%0,0 ,0") (match_operand:HI 2 "nonmemory_operand" "r,Cx2,n"))) (clobber (match_scratch:QI 3 "=X,X ,&d"))] @@ -3108,7 +3108,7 @@ (set_attr "cc" "set_n,clobber,clobber")]) (define_insn "xorpsi3" - [(set (match_operand:PSI 0 "register_operand" "=r,r ,r") + [(set (match_operand:PSI 0 "register_operand" "=??r,r ,r") (xor:PSI (match_operand:PSI 1 "register_operand" "%0,0 ,0") (match_operand:PSI 2 "nonmemory_operand" "r,Cx3,n"))) (clobber (match_scratch:QI 3 "=X,X ,&d"))] @@ -3126,7 +3126,7 @@ (set_attr "cc" "set_n,clobber,clobber")]) (define_insn "xorsi3" - [(set (match_operand:SI 0 "register_operand" "=r,r ,r") + [(set (match_operand:SI 0 "register_operand" "=??r,r ,r") (xor:SI (match_operand:SI 1 "register_operand" "%0,0 ,0") (match_operand:SI 2 "nonmemory_operand" "r,Cx4,n"))) (clobber (match_scratch:QI 3 "=X,X ,&d"))]