Hi,
the test fails at -O2 because of the assertion recently added to gen_reg_rtx
that crtl->emit.regno_pointer_align_length is non-zero. Now the function
expand_vec_perm_interleave_2 can be invoked at the GIMPLE level in "testing"
mode and crtl->emit is not initialized by that time.
Tested on ia64-linux-gnu, OK for mainline and 4.9 branch?
2015-03-03 Eric Botcazou <ebotca...@adacore.com>
* config/ia64/ia64.c (expand_vec_perm_interleave_2): Use gen_raw_REG
to create a register in testing mode.
--
Eric Botcazou
Index: config/ia64/ia64.c
===================================================================
--- config/ia64/ia64.c (revision 221132)
+++ config/ia64/ia64.c (working copy)
@@ -11570,7 +11570,10 @@ expand_vec_perm_interleave_2 (struct exp
gcc_assert (e < nelt);
dfinal.perm[i] = e;
}
- dfinal.op0 = gen_reg_rtx (dfinal.vmode);
+ if (d->testing_p)
+ dfinal.op0 = gen_raw_REG (dfinal.vmode, LAST_VIRTUAL_REGISTER + 1);
+ else
+ dfinal.op0 = gen_reg_rtx (dfinal.vmode);
dfinal.op1 = dfinal.op0;
dfinal.one_operand_p = true;
dremap.target = dfinal.op0;