diff options
author | Alan Modra <amodra@gmail.com> | 2012-02-07 08:39:13 +1030 |
---|---|---|
committer | Alan Modra <amodra@gcc.gnu.org> | 2012-02-07 08:39:13 +1030 |
commit | 30f0eb2d91e92e8944c59e6166102cbfec55cf23 (patch) | |
tree | 654b7ed9e49d71cedd6a406013724e75af7da290 | |
parent | c5f14d626e38bf94e2cf8d3bda0409c2c4de1fe6 (diff) | |
download | gcc-30f0eb2d91e92e8944c59e6166102cbfec55cf23.zip gcc-30f0eb2d91e92e8944c59e6166102cbfec55cf23.tar.gz gcc-30f0eb2d91e92e8944c59e6166102cbfec55cf23.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 19 |
2 files changed, 14 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9bacd9d..3307d71 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +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> PR tree-optimization/50969 diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 4190b25..39c0714 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -7010,17 +7010,14 @@ rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode) if (!TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128 && mode == TFmode && GET_CODE (operands[1]) == CONST_DOUBLE) { - /* DImode is used, not DFmode, because simplify_gen_subreg doesn't - know how to get a DFmode SUBREG of a TFmode. */ - enum machine_mode imode = (TARGET_E500_DOUBLE ? DFmode : DImode); - rs6000_emit_move (simplify_gen_subreg (imode, operands[0], mode, 0), - simplify_gen_subreg (imode, operands[1], mode, 0), - imode); - rs6000_emit_move (simplify_gen_subreg (imode, operands[0], mode, - GET_MODE_SIZE (imode)), - simplify_gen_subreg (imode, operands[1], mode, - GET_MODE_SIZE (imode)), - imode); + rs6000_emit_move (simplify_gen_subreg (DFmode, operands[0], mode, 0), + simplify_gen_subreg (DFmode, operands[1], mode, 0), + DFmode); + rs6000_emit_move (simplify_gen_subreg (DFmode, operands[0], mode, + GET_MODE_SIZE (DFmode)), + simplify_gen_subreg (DFmode, operands[1], mode, + GET_MODE_SIZE (DFmode)), + DFmode); return; } |