]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/52107 (IBM 128bit long double constant loaded inefficiently)
authorAlan Modra <amodra@gmail.com>
Mon, 6 Feb 2012 23:41:45 +0000 (10:11 +1030)
committerAlan Modra <amodra@gcc.gnu.org>
Mon, 6 Feb 2012 23:41:45 +0000 (10:11 +1030)
PR target/52107
* config/rs6000/rs6000.c (rs6000_emit_move): Don't create DImode
subregs of TFmode.

From-SVN: r183947

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 2ff3b717ac0872dea80aabf8a69a429f4a182941..28f57011da6f10d8ae46b8a6386ccebdcbeec5dd 100644 (file)
@@ -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-02  Uros Bizjak  <ubizjak@gmail.com>
 
        Backport from mainline:
index ae0cc17f573c3ddb93a9c3167b943675049994c3..a9cd835577e5827ce2b13d7528cd0612ffc05749 100644 (file)
@@ -7590,17 +7590,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;
     }