diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr50482.c | 11 |
4 files changed, 28 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ed624bb..a0c8b07 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2011-09-22 Uros Bizjak <ubizjak@gmail.com> + + PR target/50482 + * config/i386/i386.c (ix86_expand_sse_movcc): When generating + blendv, force op_true to register if it doesn't satisfy + nonimmediate_operand predicate. + 2011-09-22 Richard Sandiford <rdsandiford@googlemail.com> PR middle-end/50113 @@ -18,8 +25,7 @@ * ipa-inline.c (ipa_inline): Likewise; do not call ipa_create_all_structures_for_iinln. (ipa_inline): Always free jump functions. - * ipa-inline-analysis.c (evaluate_conditions_for_edge): Remove - hack. + * ipa-inline-analysis.c (evaluate_conditions_for_edge): Remove hack. (remap_edge_predicates): Fix pasto. (inline_merge_summary): Remove nlined edge predicate; remove hack. (inline_analyze_function): Always initialize jump functions. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index f952d2e..954b879 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -18911,6 +18911,9 @@ ix86_expand_sse_movcc (rtx dest, rtx cmp, rtx op_true, rtx op_false) { rtx (*gen) (rtx, rtx, rtx, rtx) = NULL; + if (!nonimmediate_operand (op_true, mode)) + op_true = force_reg (mode, op_true); + op_false = force_reg (mode, op_false); switch (mode) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 696f257..b9d638f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-09-22 Uros Bizjak <ubizjak@gmail.com> + + PR target/50482 + * gcc.target/i386/pr50482.c: New test. + 2011-09-22 Joseph Myers <joseph@codesourcery.com> * gcc.target/i386/pad-2.c, gcc.target/i386/pad-3.c, @@ -40,7 +45,7 @@ 2011-09-21 Uros Bizjak <ubizjak@gmail.com> * g++.dg/other/i386-3.C: Remove duplicated dg-options. - * g++.dg/other/i386-4.C: Remove dg-requre-effective-target directive. + * g++.dg/other/i386-4.C: Remove dg-require-effective-target directive. * g++.dg/other/i386-8.C: Ditto. * g++.dg/other/pr34435.C: Ditto. * g++.dg/other/pr39496.C: Ditto. diff --git a/gcc/testsuite/gcc.target/i386/pr50482.c b/gcc/testsuite/gcc.target/i386/pr50482.c new file mode 100644 index 0000000..64c2686 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr50482.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -msse4" } */ + +void +test (int code, unsigned int * image, int * colors) +{ + int i; + + for (i = 0; i < code; ++i) + image[i] = (colors[i] < 0 ? ~(unsigned int) 0 : colors[i]); +} |