diff options
author | Uros Bizjak <uros@gcc.gnu.org> | 2010-01-28 18:58:03 +0100 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2010-01-28 18:58:03 +0100 |
commit | d819472d13b5cbe78afb3e71566428a9104138d4 (patch) | |
tree | 23095edfa45f8a8d602232ba4faee6e41c04906c | |
parent | 8c0b91b4cee216da9ae8b05624c4e4a3b60debc3 (diff) | |
download | gcc-d819472d13b5cbe78afb3e71566428a9104138d4.zip gcc-d819472d13b5cbe78afb3e71566428a9104138d4.tar.gz gcc-d819472d13b5cbe78afb3e71566428a9104138d4.tar.bz2 |
re PR target/42891 (ice in extract_insn, at recog.c:2097)
PR target/42891
* config/i386/i386.c (ix86_expand_int_movcc): Convert tmp to SImode
in the call to gen_x86_movsicc_0_m1.
testsuite/ChangeLog:
PR target/42891
* gcc.target/i386/pr42891.c: New test.
From-SVN: r156327
-rw-r--r-- | gcc/ChangeLog | 14 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr42891.c | 13 |
4 files changed, 32 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ff0e868..cae4c13 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-01-28 Uros Bizjak <ubizjak@gmail.com> + + PR target/42891 + * config/i386/i386.c (ix86_expand_int_movcc): Convert tmp to SImode + in the call to gen_x86_movsicc_0_m1. + 2010-01-28 Richard Guenther <rguenther@suse.de> PR tree-optimization/42871 @@ -17,7 +23,7 @@ 2010-01-28 Razya Ladelsky <razya@il.ibm.com> - * tree-parloops.c (transform_to_exit_first_loop): Update the basic + * tree-parloops.c (transform_to_exit_first_loop): Update the basic block list passed to gimple_duplicate_sese_tail. (parallelize_loops): Avoid parallelization when the function has_nonlocal_label. @@ -91,7 +97,7 @@ PR target/42841 * config/sh/sh.c (find_barrier): Increase length for non delayed conditional branches. - + 2010-01-27 Matthias Klose <doko@ubuntu.com> * configure.ac (gnu-unique-object): Fix ldd version check. @@ -238,8 +244,8 @@ 2010-01-21 Andrew Haley <aph@redhat.com> - * gcc.c (process_command): Move lang_specific_driver before - setting cc_libexec_prefix. + * gcc.c (process_command): Move lang_specific_driver before + setting cc_libexec_prefix. 2010-01-21 Richard Guenther <rguenther@suse.de> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 84b652f..5bc4a64 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -15381,7 +15381,7 @@ ix86_expand_int_movcc (rtx operands[]) enum rtx_code code = GET_CODE (operands[1]), compare_code; rtx compare_seq, compare_op; enum machine_mode mode = GET_MODE (operands[0]); - bool sign_bit_compare_p = false;; + bool sign_bit_compare_p = false; start_sequence (); ix86_compare_op0 = XEXP (operands[1], 0); @@ -15422,7 +15422,6 @@ ix86_expand_int_movcc (rtx operands[]) if (!sign_bit_compare_p) { rtx flags; - rtx (*insn)(rtx, rtx, rtx); bool fpcmp = false; compare_code = GET_CODE (compare_op); @@ -15463,11 +15462,10 @@ ix86_expand_int_movcc (rtx operands[]) tmp = gen_reg_rtx (mode); if (mode == DImode) - insn = gen_x86_movdicc_0_m1; + emit_insn (gen_x86_movdicc_0_m1 (tmp, flags, compare_op)); else - insn = gen_x86_movsicc_0_m1; - - emit_insn (insn (tmp, flags, compare_op)); + emit_insn (gen_x86_movsicc_0_m1 (gen_lowpart (SImode, tmp), + flags, compare_op)); } else { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4279696..b754ad4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-01-28 Uros Bizjak <ubizjak@gmail.com> + + PR target/42891 + * gcc.target/i386/pr42891.c: New test. + 2010-01-28 Richard Guenther <rguenther@suse.de> PR tree-optimization/42871 diff --git a/gcc/testsuite/gcc.target/i386/pr42891.c b/gcc/testsuite/gcc.target/i386/pr42891.c new file mode 100644 index 0000000..e3c7b9c --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr42891.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +union B { int i; float f; }; + +extern void bar (void); + +void +foo (union B x, union B y) +{ + if (!(y.f > x.i)) + bar (); +} |