diff options
author | Uros Bizjak <uros@gcc.gnu.org> | 2010-06-11 23:58:31 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2010-06-11 23:58:31 +0200 |
commit | b79a08f6c4b57f701b6a879365b5506003cefba7 (patch) | |
tree | 0018d742cb5a16c65f66b16a0f90e1cd47d47c2e /gcc | |
parent | d5568f03cda87e0e877d957f9613990e75bec269 (diff) | |
download | gcc-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/ChangeLog | 14 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 22 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr44481.c | 14 |
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); +} |