On Tue, Dec 9, 2014 at 9:57 AM, Uros Bizjak <ubiz...@gmail.com> wrote:
>> The patch fix pblendv expand. >> The bug was uncovered when permutation operands are constants. >> In this case we init target register for expand_vec_perm_1 with >> constant and then rewrite the target with constant for >> expand_vec_perm_pblend. >> >> The patch fixes 403.gcc execution, compiled with -Ofast -funroll-loops >> -flto -march=corei7. >> >> Bootstrap and make check passed. >> >> Is it ok? > > Please add a testcase. Also, it surprises me that we enter expand_vec_perm_pblendv with uninitialized (?) target. Does your patch only papers over a real problem up the call chain (hard to say without a testcase)? Uros. > >> >> Evgeny >> >> 2014-12-09 Evgeny Stupachenko <evstu...@gmail.com> >> >> gcc/ >> * config/i386/i386.c (expand_vec_perm_pblendv): Gen new rtx for >> expand_vec_perm_1 target. >> >> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c >> index eafc15a..5a914ad 100644 >> --- a/gcc/config/i386/i386.c >> +++ b/gcc/config/i386/i386.c >> @@ -47546,6 +47546,7 @@ expand_vec_perm_pblendv (struct expand_vec_perm_d *d) >> dcopy.op0 = dcopy.op1 = d->op1; >> else >> dcopy.op0 = dcopy.op1 = d->op0; >> + dcopy.target = gen_reg_rtx (vmode); >> dcopy.one_operand_p = true; >> >> for (i = 0; i < nelt; ++i)