aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>2015-12-20 21:49:02 -0700
committerJeff Law <law@gcc.gnu.org>2015-12-20 21:49:02 -0700
commit091534a9f44229b2643d84a0bfe0f07e678a3772 (patch)
tree814ab378430a168deedc959e3060adb489ed13ec /gcc
parent58688a4ec04a2e3d73e2a381f0003f888ad305d1 (diff)
downloadgcc-091534a9f44229b2643d84a0bfe0f07e678a3772.zip
gcc-091534a9f44229b2643d84a0bfe0f07e678a3772.tar.gz
gcc-091534a9f44229b2643d84a0bfe0f07e678a3772.tar.bz2
re PR tree-optimization/64910 (tree reassociation results in poor code)
PR tree-optimization/64910 * config/i386/i386.md (testqi_ext_3): Allow HImode. PR tree-optimization/64910 * gcc.target/i386/bittest.c: New test. From-SVN: r231871
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/i386.md2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/bittest.c22
4 files changed, 33 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f77d391..733c2898 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2015-12-20 Jeff Law <law@redhat.com>
+
+ PR tree-optimization/64910
+ * config/i386/i386.md (testqi_ext_3): Allow HImode.
+
2015-12-20 Andrew Pinsi <apinski@cavium.com>
* config/aarch64/atomics.md
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 49b2216..e8178f3 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -7868,7 +7868,7 @@
;; Combine likes to form bit extractions for some tests. Humor it.
(define_insn "*testqi_ext_3"
[(set (reg FLAGS_REG)
- (compare (zero_extract:SWI48
+ (compare (zero_extract:SWI248
(match_operand 0 "nonimmediate_operand" "rm")
(match_operand 1 "const_int_operand" "n")
(match_operand 2 "const_int_operand" "n"))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6a3e044..725ddef 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-12-20 Jeff Law <law@redhat.com>
+
+ PR tree-optimization/64910
+ * gcc.target/i386/bittest.c: New test.
+
2015-12-20 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/complex1.adb: New test.
diff --git a/gcc/testsuite/gcc.target/i386/bittest.c b/gcc/testsuite/gcc.target/i386/bittest.c
new file mode 100644
index 0000000..7b7ce9e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/bittest.c
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+extern int dbg_cnt (void);
+
+struct function
+{
+ unsigned int calls_setjmp:1;
+};
+extern struct function *cfun;
+unsigned char
+gate_rtl_cprop (void)
+{
+ return !(cfun + 0)->calls_setjmp && dbg_cnt ();
+}
+
+/* This should be implementable without performing a bitmask as we can
+ just use a test imm,mem. So instructions which load the object from
+ memory and mask off bits are unnecessary. In theory we can just count
+ the move-with-extension, and and testb instructions. There should be
+ only one. */
+/* { dg-final { scan-assembler-times "movzbl|and|testb" 1 { target { i?86-*-* x86_64-*-*} } } } */