[multiple changes]

2014-06-13  Jeff Law  <law@redhat.com>

	PR rtl-optimization/61094
	PR rtl-optimization/61446
	* ree.c (combine_reaching_defs): Get the mode for the copy from
	the extension insn rather than the defining insn.

2014-06-13  Ilya Enkovich  <ilya.enkovich@intel.com>

	PR rtl-optimization/61094
	PR rtl-optimization/61446
	* gcc.target/i386/pr61446.c : New.

From-SVN: r211649
This commit is contained in:
Jeff Law 2014-06-13 10:40:48 -06:00
parent 8e96d78433
commit c7ece684ca
4 changed files with 34 additions and 4 deletions

View File

@ -1,3 +1,10 @@
2014-06-13 Jeff Law <law@redhat.com>
PR rtl-optimization/61094
PR rtl-optimization/61446
* ree.c (combine_reaching_defs): Get the mode for the copy from
the extension insn rather than the defining insn.
2014-06-13 Dehao Chen <dehao@google.com> 2014-06-13 Dehao Chen <dehao@google.com>
* dwarf2out.c (add_linkage_name): Emit more linkage name. * dwarf2out.c (add_linkage_name): Emit more linkage name.

View File

@ -787,13 +787,16 @@ combine_reaching_defs (ext_cand *cand, const_rtx set_pat, ext_state *state)
generated more than one insn. generated more than one insn.
This generates garbage since we throw away the insn when we're This generates garbage since we throw away the insn when we're
done, only to recreate it later if this test was successful. */ done, only to recreate it later if this test was successful.
Make sure to get the mode from the extension (cand->insn). This
is different than in the code to emit the copy as we have not
modified the defining insn yet. */
start_sequence (); start_sequence ();
rtx sub_rtx = *get_sub_rtx (def_insn);
rtx pat = PATTERN (cand->insn); rtx pat = PATTERN (cand->insn);
rtx new_dst = gen_rtx_REG (GET_MODE (SET_DEST (sub_rtx)), rtx new_dst = gen_rtx_REG (GET_MODE (SET_DEST (pat)),
REGNO (XEXP (SET_SRC (pat), 0))); REGNO (XEXP (SET_SRC (pat), 0)));
rtx new_src = gen_rtx_REG (GET_MODE (SET_DEST (sub_rtx)), rtx new_src = gen_rtx_REG (GET_MODE (SET_DEST (pat)),
REGNO (SET_DEST (pat))); REGNO (SET_DEST (pat)));
emit_move_insn (new_dst, new_src); emit_move_insn (new_dst, new_src);

View File

@ -1,3 +1,9 @@
2014-06-13 Ilya Enkovich <ilya.enkovich@intel.com>
PR rtl-optimization/61094
PR rtl-optimization/61446
* gcc.target/i386/pr61446.c : New.
2014-06-13 Dehao Chen <dehao@google.com> 2014-06-13 Dehao Chen <dehao@google.com>
* g++.dg/debug/dwarf2/cdtor-1.C: Update test result. * g++.dg/debug/dwarf2/cdtor-1.C: Update test result.

View File

@ -0,0 +1,14 @@
/* PR rtl-optimization/61446 */
/* { dg-do compile { target { ia32 } } } */
/* { dg-options "-O2 -march=corei7 -mfpmath=387" } */
unsigned long long
foo (float a)
{
const double dfa = a;
const unsigned int hi = dfa / 0x1p32f;
const unsigned int lo = dfa - (double) hi * 0x1p32f;
return ((unsigned long long) hi << (4 * (8))) | lo;
}