diff options
author | Alan Modra <amodra@gmail.com> | 2016-07-11 19:58:48 +0930 |
---|---|---|
committer | Alan Modra <amodra@gcc.gnu.org> | 2016-07-11 19:58:48 +0930 |
commit | a442a050ad11c772f865980d578709af38d876e8 (patch) | |
tree | 741e8888fadc39a8f1130b282bd8b7a5ae8df31a /gcc/config | |
parent | 7352723b9e9a7f04d68aca3f09386d1a14c87f7e (diff) | |
download | gcc-a442a050ad11c772f865980d578709af38d876e8.zip gcc-a442a050ad11c772f865980d578709af38d876e8.tar.gz gcc-a442a050ad11c772f865980d578709af38d876e8.tar.bz2 |
[RS6000] Don't allow combine to form doloop pattern
* config/rs6000/rs6000.md (UNSPEC_DOLOOP): New unspec.
(ctr<mode>): Add unspec.
(ctr<mode>_internal*): Likewise.
From-SVN: r238207
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 7d9c660..5d212dd 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -148,6 +148,7 @@ UNSPEC_IEEE128_MOVE UNSPEC_IEEE128_CONVERT UNSPEC_SIGNBIT + UNSPEC_DOLOOP ]) ;; @@ -12185,6 +12186,7 @@ (set (match_dup 0) (plus:P (match_dup 0) (const_int -1))) + (unspec [(const_int 0)] UNSPEC_DOLOOP) (clobber (match_scratch:CC 2 "")) (clobber (match_scratch:P 3 ""))])] "" @@ -12195,6 +12197,7 @@ ;; JUMP_INSNs. ;; For the length attribute to be calculated correctly, the ;; label MUST be operand 0. +;; The UNSPEC is present to prevent combine creating this pattern. (define_insn "*ctr<mode>_internal1" [(set (pc) @@ -12205,6 +12208,7 @@ (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*wi*c*l") (plus:P (match_dup 1) (const_int -1))) + (unspec [(const_int 0)] UNSPEC_DOLOOP) (clobber (match_scratch:CC 3 "=X,&x,&x,&x")) (clobber (match_scratch:P 4 "=X,X,&r,r"))] "" @@ -12229,6 +12233,7 @@ (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*wi*c*l") (plus:P (match_dup 1) (const_int -1))) + (unspec [(const_int 0)] UNSPEC_DOLOOP) (clobber (match_scratch:CC 3 "=X,&x,&x,&x")) (clobber (match_scratch:P 4 "=X,X,&r,r"))] "" @@ -12255,6 +12260,7 @@ (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*wi*c*l") (plus:P (match_dup 1) (const_int -1))) + (unspec [(const_int 0)] UNSPEC_DOLOOP) (clobber (match_scratch:CC 3 "=X,&x,&x,&x")) (clobber (match_scratch:P 4 "=X,X,&r,r"))] "" @@ -12279,6 +12285,7 @@ (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*wi*c*l") (plus:P (match_dup 1) (const_int -1))) + (unspec [(const_int 0)] UNSPEC_DOLOOP) (clobber (match_scratch:CC 3 "=X,&x,&x,&x")) (clobber (match_scratch:P 4 "=X,X,&r,r"))] "" @@ -12305,6 +12312,7 @@ (match_operand 6 "" ""))) (set (match_operand:P 0 "int_reg_operand" "") (plus:P (match_dup 1) (const_int -1))) + (unspec [(const_int 0)] UNSPEC_DOLOOP) (clobber (match_scratch:CC 3 "")) (clobber (match_scratch:P 4 ""))] "reload_completed" @@ -12330,6 +12338,7 @@ (match_operand 6 "" ""))) (set (match_operand:P 0 "nonimmediate_operand" "") (plus:P (match_dup 1) (const_int -1))) + (unspec [(const_int 0)] UNSPEC_DOLOOP) (clobber (match_scratch:CC 3 "")) (clobber (match_scratch:P 4 ""))] "reload_completed && ! gpc_reg_operand (operands[0], SImode)" |