Commit 30f0eb2d by Alan Modra Committed by Alan Modra

re PR target/52107 (IBM 128bit long double constant loaded inefficiently)

	PR target/52107
	* config/rs6000/rs6000.c (rs6000_emit_move): Don't create DImode
	subregs of TFmode.

From-SVN: r183945
parent c5f14d62
2012-02-07 Alan Modra <amodra@gmail.com>
PR target/52107
* config/rs6000/rs6000.c (rs6000_emit_move): Don't create DImode
subregs of TFmode.
2012-02-06 Bill Schmidt <wschmidt@linux.vnet.ibm.com> 2012-02-06 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
PR tree-optimization/50969 PR tree-optimization/50969
......
...@@ -7010,17 +7010,14 @@ rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode) ...@@ -7010,17 +7010,14 @@ rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode)
if (!TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128 if (!TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128
&& mode == TFmode && GET_CODE (operands[1]) == CONST_DOUBLE) && mode == TFmode && GET_CODE (operands[1]) == CONST_DOUBLE)
{ {
/* DImode is used, not DFmode, because simplify_gen_subreg doesn't rs6000_emit_move (simplify_gen_subreg (DFmode, operands[0], mode, 0),
know how to get a DFmode SUBREG of a TFmode. */ simplify_gen_subreg (DFmode, operands[1], mode, 0),
enum machine_mode imode = (TARGET_E500_DOUBLE ? DFmode : DImode); DFmode);
rs6000_emit_move (simplify_gen_subreg (imode, operands[0], mode, 0), rs6000_emit_move (simplify_gen_subreg (DFmode, operands[0], mode,
simplify_gen_subreg (imode, operands[1], mode, 0), GET_MODE_SIZE (DFmode)),
imode); simplify_gen_subreg (DFmode, operands[1], mode,
rs6000_emit_move (simplify_gen_subreg (imode, operands[0], mode, GET_MODE_SIZE (DFmode)),
GET_MODE_SIZE (imode)), DFmode);
simplify_gen_subreg (imode, operands[1], mode,
GET_MODE_SIZE (imode)),
imode);
return; return;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment