aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2015-04-29 22:58:25 +0200
committerUros Bizjak <uros@gcc.gnu.org>2015-04-29 22:58:25 +0200
commitec4c68c8d01d99d2d818496be7db5fe939b6a674 (patch)
tree8ad54ca6c0726a88af895221f33a0b6fc7107f25
parent9f7fb685d9173285be6507805ced732d360c09be (diff)
downloadgcc-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/ChangeLog2
-rw-r--r--gcc/config/i386/i386.md8
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))