aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <uros@gcc.gnu.org>2010-06-11 23:58:31 +0200
committerUros Bizjak <uros@gcc.gnu.org>2010-06-11 23:58:31 +0200
commitb79a08f6c4b57f701b6a879365b5506003cefba7 (patch)
tree0018d742cb5a16c65f66b16a0f90e1cd47d47c2e /gcc
parentd5568f03cda87e0e877d957f9613990e75bec269 (diff)
downloadgcc-b79a08f6c4b57f701b6a879365b5506003cefba7.zip
gcc-b79a08f6c4b57f701b6a879365b5506003cefba7.tar.gz
gcc-b79a08f6c4b57f701b6a879365b5506003cefba7.tar.bz2
re PR target/44481 (__builtin_parity() causes ICE in trunc_int_for_mode())
PR target/44481 * config/i386/i386.md (UNSPEC_PARITY): New unspec. (paritydi2_cmp): Use UNSPEC_PARITY unspec insted of parity RTX. (partiysi2_cmp): Ditto. (*partiyhi2_cmp): Ditto. (*parityqi2_cmp): Remove. testsuite/ChangeLog: PR target/44481 * gcc.target/i386/pr44481.c: New test. From-SVN: r160638
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog14
-rw-r--r--gcc/config/i386/i386.md22
-rw-r--r--gcc/testsuite/ChangeLog9
-rw-r--r--gcc/testsuite/gcc.target/i386/pr44481.c14
4 files changed, 41 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fa404da..7b5980b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,8 +1,16 @@
+2010-06-11 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/44481
+ * config/i386/i386.md (UNSPEC_PARITY): New unspec.
+ (paritydi2_cmp): Use UNSPEC_PARITY unspec insted of parity RTX.
+ (partiysi2_cmp): Ditto.
+ (*partiyhi2_cmp): Ditto.
+ (*parityqi2_cmp): Remove.
+
2010-06-11 Jan Hubicka <jh@suse.cz>
- * bitmap.h (+bmp_iter_next_bit): New.
- (bmp_iter_set, bmp_iter_and, bmp_iter_and_compl):
- Use it.
+ * bitmap.h (bmp_iter_next_bit): New.
+ (bmp_iter_set, bmp_iter_and, bmp_iter_and_compl): Use it.
2010-06-11 Sandra Loosemore <sandra@codesourcery.com>
Eric Botcazou <ebotcazou@adacore.com>
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index c1613e6..675b8c9 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -97,6 +97,7 @@
UNSPEC_SCAS
UNSPEC_FNSTSW
UNSPEC_SAHF
+ UNSPEC_PARITY
UNSPEC_FSTCW
UNSPEC_ADD_CARRY
UNSPEC_FLDCW
@@ -12186,7 +12187,8 @@
(define_insn_and_split "paritydi2_cmp"
[(set (reg:CC FLAGS_REG)
- (parity:CC (match_operand:DI 3 "register_operand" "0")))
+ (unspec:CC [(match_operand:DI 3 "register_operand" "0")]
+ UNSPEC_PARITY))
(clobber (match_scratch:DI 0 "=r"))
(clobber (match_scratch:SI 1 "=&r"))
(clobber (match_scratch:HI 2 "=Q"))]
@@ -12199,7 +12201,7 @@
(clobber (reg:CC FLAGS_REG))])
(parallel
[(set (reg:CC FLAGS_REG)
- (parity:CC (match_dup 1)))
+ (unspec:CC [(match_dup 1)] UNSPEC_PARITY))
(clobber (match_dup 1))
(clobber (match_dup 2))])]
{
@@ -12216,7 +12218,8 @@
(define_insn_and_split "paritysi2_cmp"
[(set (reg:CC FLAGS_REG)
- (parity:CC (match_operand:SI 2 "register_operand" "0")))
+ (unspec:CC [(match_operand:SI 2 "register_operand" "0")]
+ UNSPEC_PARITY))
(clobber (match_scratch:SI 0 "=r"))
(clobber (match_scratch:HI 1 "=&Q"))]
"! TARGET_POPCNT"
@@ -12228,7 +12231,7 @@
(clobber (reg:CC FLAGS_REG))])
(parallel
[(set (reg:CC FLAGS_REG)
- (parity:CC (match_dup 1)))
+ (unspec:CC [(match_dup 1)] UNSPEC_PARITY))
(clobber (match_dup 1))])]
{
operands[3] = gen_lowpart (HImode, operands[2]);
@@ -12239,20 +12242,13 @@
(define_insn "*parityhi2_cmp"
[(set (reg:CC FLAGS_REG)
- (parity:CC (match_operand:HI 1 "register_operand" "0")))
+ (unspec:CC [(match_operand:HI 1 "register_operand" "0")]
+ UNSPEC_PARITY))
(clobber (match_scratch:HI 0 "=Q"))]
"! TARGET_POPCNT"
"xor{b}\t{%h0, %b0|%b0, %h0}"
[(set_attr "length" "2")
(set_attr "mode" "HI")])
-
-(define_insn "*parityqi2_cmp"
- [(set (reg:CC FLAGS_REG)
- (parity:CC (match_operand:QI 0 "register_operand" "q")))]
- "! TARGET_POPCNT"
- "test{b}\t%0, %0"
- [(set_attr "length" "2")
- (set_attr "mode" "QI")])
;; Thread-local storage patterns for ELF.
;;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4922318..885f215 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-06-11 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/44481
+ * gcc.target/i386/pr44481.c: New test.
+
2010-06-11 Eric Botcazou <ebotcazou@adacore.com>
* gcc.dg/pr42461.c: Compile at -O2 instead of -O.
@@ -8,7 +13,7 @@
* gcc.dg/tree-ssa/pr44483.c: New.
2010-06-11 Paul Brook <paul@codesourcery.com>
-
+
* g++.dg/other/arm-neon-1.C: New test.
2010-06-11 Paul Thomas <pault@gcc.gnu.org>
@@ -159,7 +164,7 @@
2010-06-08 Andrew Pinski <pinskia@gmail.com>
Shujing Zhao <pearly.zhao@oracle.com>
-
+
PR c/37724
* gcc.dg/c90-const-expr-10.c: Adjust.
* gcc.dg/c99-const-expr-10.c: Adjust.
diff --git a/gcc/testsuite/gcc.target/i386/pr44481.c b/gcc/testsuite/gcc.target/i386/pr44481.c
new file mode 100644
index 0000000..701268b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr44481.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+static inline unsigned
+parity (unsigned x)
+{
+ return (unsigned) __builtin_parity (x);
+}
+
+unsigned
+f (unsigned rpoly)
+{
+ return parity (rpoly & 1) ^ parity (rpoly & 6);
+}