aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2008-02-19 08:23:30 +0100
committerUros Bizjak <uros@gcc.gnu.org>2008-02-19 08:23:30 +0100
commit0e93e1b4eea9bd6aca2380d0141345fea061aad8 (patch)
tree754c035b8aea596403420b9648fca9769f5e4227 /gcc
parent02d353cfc901c7d7f57376029ef89ca1a043043b (diff)
downloadgcc-0e93e1b4eea9bd6aca2380d0141345fea061aad8.zip
gcc-0e93e1b4eea9bd6aca2380d0141345fea061aad8.tar.gz
gcc-0e93e1b4eea9bd6aca2380d0141345fea061aad8.tar.bz2
re PR target/33555 (x86 missed opportunity for sbb)
PR target/33555 * config/i386/i386.md (*x86_movsicc_0_m1_se): New insn pattern. (*x86_movdicc_0_m1_se): Ditto. testsuite/ChangeLog: PR target/33555 * gcc.target/i386/pr33555.c: New test. From-SVN: r132414
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/i386/i386.md30
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr33555.c9
4 files changed, 50 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3a23574..e023878 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2008-02-19 Uros Bizjak <ubizjak@gmail.com>
+ PR target/33555
+ * config/i386/i386.md (*x86_movsicc_0_m1_se): New insn pattern.
+ (*x86_movdicc_0_m1_se): Ditto.
+
+2008-02-19 Uros Bizjak <ubizjak@gmail.com>
+
* config/i386/sfp-machine.h (__gcc_CMPtype): New typedef.
(CMPtype): Define as __gcc_CMPtype.
* config/rs6000/sfp-machine.h (__gcc_CMPtype): New typedef.
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 1724c0d..3c9c2cc 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -19402,6 +19402,21 @@
(set_attr "mode" "DI")
(set_attr "length_immediate" "0")])
+(define_insn "*x86_movdicc_0_m1_se"
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (sign_extract:DI (match_operand 1 "ix86_carry_flag_operator" "")
+ (const_int 1)
+ (const_int 0)))
+ (clobber (reg:CC FLAGS_REG))]
+ ""
+ "sbb{q}\t%0, %0"
+ [(set_attr "type" "alu")
+ (set_attr "pent_pair" "pu")
+ (set_attr "memory" "none")
+ (set_attr "imm_disp" "false")
+ (set_attr "mode" "DI")
+ (set_attr "length_immediate" "0")])
+
(define_insn "*movdicc_c_rex64"
[(set (match_operand:DI 0 "register_operand" "=r,r")
(if_then_else:DI (match_operator 1 "ix86_comparison_operator"
@@ -19445,6 +19460,21 @@
(set_attr "mode" "SI")
(set_attr "length_immediate" "0")])
+(define_insn "*x86_movsicc_0_m1_se"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (sign_extract:SI (match_operand 1 "ix86_carry_flag_operator" "")
+ (const_int 1)
+ (const_int 0)))
+ (clobber (reg:CC FLAGS_REG))]
+ ""
+ "sbb{l}\t%0, %0"
+ [(set_attr "type" "alu")
+ (set_attr "pent_pair" "pu")
+ (set_attr "memory" "none")
+ (set_attr "imm_disp" "false")
+ (set_attr "mode" "SI")
+ (set_attr "length_immediate" "0")])
+
(define_insn "*movsicc_noc"
[(set (match_operand:SI 0 "register_operand" "=r,r")
(if_then_else:SI (match_operator 1 "ix86_comparison_operator"
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 55715a6..db65ae6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-02-19 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/33555
+ * gcc.target/i386/pr33555.c: New test.
+
2008-02-18 H.J. Lu <hongjiu.lu@intel.com>
PR target/35189
diff --git a/gcc/testsuite/gcc.target/i386/pr33555.c b/gcc/testsuite/gcc.target/i386/pr33555.c
new file mode 100644
index 0000000..21c56b7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr33555.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-final { scan-assembler "sbbl" } } */
+
+int test(unsigned long a, unsigned long b)
+{
+ return -(a < b);
+}
+