diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2015-04-29 22:58:25 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2015-04-29 22:58:25 +0200 |
commit | ec4c68c8d01d99d2d818496be7db5fe939b6a674 (patch) | |
tree | 8ad54ca6c0726a88af895221f33a0b6fc7107f25 | |
parent | 9f7fb685d9173285be6507805ced732d360c09be (diff) | |
download | gcc-ec4c68c8d01d99d2d818496be7db5fe939b6a674.zip gcc-ec4c68c8d01d99d2d818496be7db5fe939b6a674.tar.gz gcc-ec4c68c8d01d99d2d818496be7db5fe939b6a674.tar.bz2 |
re PR target/65871 (bzhi builtin/intrinsic wrongly assumes bzhi instruction doesn't set the ZF flag)
PR target/65871
* config/i386/i386.md (*bmi_bextr_<mode>_cczonly): New pattern.
(*bmi2_bzhi_<mode>3_1_cczonly): Ditto.
(setcc+movzbl peephole2): Check also clobbered reg.
(setcc+andl peephole2): Ditto.
From-SVN: r222592
-rw-r--r-- | gcc/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 8 |
2 files changed, 8 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3b363b0..3b1d2e7a6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -8,6 +8,8 @@ PR target/65871 * config/i386/i386.md (*bmi_bextr_<mode>_cczonly): New pattern. (*bmi2_bzhi_<mode>3_1_cczonly): Ditto. + (setcc+movzbl peephole2): Check also clobbered reg. + (setcc+andl peephole2): Ditto. 2015-04-29 Thomas Schwinge <thomas@codesourcery.com> diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 060ffa8..5cac713 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -11567,7 +11567,9 @@ (zero_extend (match_dup 1)))] "(peep2_reg_dead_p (3, operands[1]) || operands_match_p (operands[1], operands[3])) - && ! reg_overlap_mentioned_p (operands[3], operands[0])" + && ! reg_overlap_mentioned_p (operands[3], operands[0]) + && ! (GET_CODE (operands[4]) == CLOBBER + && reg_mentioned_p (operands[3], operands[4]))" [(parallel [(set (match_dup 5) (match_dup 0)) (match_dup 4)]) (set (strict_low_part (match_dup 6)) @@ -11610,7 +11612,9 @@ (clobber (reg:CC FLAGS_REG))])] "(peep2_reg_dead_p (3, operands[1]) || operands_match_p (operands[1], operands[3])) - && ! reg_overlap_mentioned_p (operands[3], operands[0])" + && ! reg_overlap_mentioned_p (operands[3], operands[0]) + && ! (GET_CODE (operands[4]) == CLOBBER + && reg_mentioned_p (operands[3], operands[4]))" [(parallel [(set (match_dup 5) (match_dup 0)) (match_dup 4)]) (set (strict_low_part (match_dup 6)) |