projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Eliminate more dead reg->reg moves in linear allocator
[ghc-hetmet.git]
/
compiler
/
nativeGen
/
PprMach.hs
diff --git
a/compiler/nativeGen/PprMach.hs
b/compiler/nativeGen/PprMach.hs
index
446495a
..
6a72265
100644
(file)
--- a/
compiler/nativeGen/PprMach.hs
+++ b/
compiler/nativeGen/PprMach.hs
@@
-13,8
+13,8
@@
#include "nativeGen/NCG.h"
module PprMach (
#include "nativeGen/NCG.h"
module PprMach (
- pprNatCmmTop, pprBasicBlock,
- pprInstr, pprSize, pprUserReg,
+ pprNatCmmTop, pprBasicBlock, pprSectionHeader, pprData,
+ pprInstr, pprSize, pprUserReg
) where
) where
@@
-36,6
+36,7
@@
import Unique ( pprUnique )
import Pretty
import FastString
import qualified Outputable
import Pretty
import FastString
import qualified Outputable
+import Outputable ( Outputable )
import Data.Array.ST
import Data.Word ( Word8 )
import Data.Array.ST
import Data.Word ( Word8 )
@@
-646,9
+647,9
@@
pprSectionHeader RelocatableReadOnlyData
IF_ARCH_alpha(SLIT("\t.data\n\t.align 3")
,IF_ARCH_sparc(SLIT(".data\n\t.align 8") {-<8 will break double constants -}
,IF_ARCH_i386(IF_OS_darwin(SLIT(".const_data\n.align 2"),
IF_ARCH_alpha(SLIT("\t.data\n\t.align 3")
,IF_ARCH_sparc(SLIT(".data\n\t.align 8") {-<8 will break double constants -}
,IF_ARCH_i386(IF_OS_darwin(SLIT(".const_data\n.align 2"),
- SLIT(".section .rodata\n\t.align 4"))
+ SLIT(".section .data\n\t.align 4"))
,IF_ARCH_x86_64(IF_OS_darwin(SLIT(".const_data\n.align 3"),
,IF_ARCH_x86_64(IF_OS_darwin(SLIT(".const_data\n.align 3"),
- SLIT(".section .rodata\n\t.align 8"))
+ SLIT(".section .data\n\t.align 8"))
,IF_ARCH_powerpc(IF_OS_darwin(SLIT(".const_data\n.align 2"),
SLIT(".data\n\t.align 2"))
,)))))
,IF_ARCH_powerpc(IF_OS_darwin(SLIT(".const_data\n.align 2"),
SLIT(".data\n\t.align 2"))
,)))))
@@
-692,8
+693,18
@@
pprGloblDecl lbl
SLIT(".globl ")) <>
pprCLabel_asm lbl
SLIT(".globl ")) <>
pprCLabel_asm lbl
+pprTypeAndSizeDecl :: CLabel -> Doc
+pprTypeAndSizeDecl lbl
+#if linux_TARGET_OS
+ | not (externallyVisibleCLabel lbl) = empty
+ | otherwise = ptext SLIT(".type ") <>
+ pprCLabel_asm lbl <> ptext SLIT(", @object")
+#else
+ = empty
+#endif
+
pprLabel :: CLabel -> Doc
pprLabel :: CLabel -> Doc
-pprLabel lbl = pprGloblDecl lbl $$ (pprCLabel_asm lbl <> char ':')
+pprLabel lbl = pprGloblDecl lbl $$ pprTypeAndSizeDecl lbl $$ (pprCLabel_asm lbl <> char ':')
pprASCII str
pprASCII str
@@
-770,7
+781,6
@@
pprDataItem lit
| otherwise =
[ptext SLIT("\t.quad\t") <> pprImm imm]
where
| otherwise =
[ptext SLIT("\t.quad\t") <> pprImm imm]
where
- isRelativeReloc (CmmLabelOff _ _) = True
isRelativeReloc (CmmLabelDiffOff _ _ _) = True
isRelativeReloc _ = False
#endif
isRelativeReloc (CmmLabelDiffOff _ _ _) = True
isRelativeReloc _ = False
#endif
@@
-789,6
+799,9
@@
pprDataItem lit
-- -----------------------------------------------------------------------------
-- pprInstr: print an 'Instr'
-- -----------------------------------------------------------------------------
-- pprInstr: print an 'Instr'
+instance Outputable Instr where
+ ppr instr = Outputable.docToSDoc $ pprInstr instr
+
pprInstr :: Instr -> Doc
--pprInstr (COMMENT s) = empty -- nuke 'em
pprInstr :: Instr -> Doc
--pprInstr (COMMENT s) = empty -- nuke 'em
@@
-1198,7
+1211,8
@@
pprSizeRegRegReg name size reg1 reg2 reg3
#if i386_TARGET_ARCH || x86_64_TARGET_ARCH
#if i386_TARGET_ARCH || x86_64_TARGET_ARCH
-pprInstr v@(MOV size s@(OpReg src) d@(OpReg dst)) -- hack
+{- -- BUGS: changed for coloring allocator
+pprInstr v@(MOV size s@(OpReg src) d@(OpReg dst)) -- hack -- write a pass for this and patch linear allocator with it
| src == dst
=
#if 0 /* #ifdef DEBUG */
| src == dst
=
#if 0 /* #ifdef DEBUG */
@@
-1206,6
+1220,7
@@
pprInstr v@(MOV size s@(OpReg src) d@(OpReg dst)) -- hack
#else
empty
#endif
#else
empty
#endif
+-}
pprInstr (MOV size src dst)
= pprSizeOpOp SLIT("mov") size src dst
pprInstr (MOV size src dst)
= pprSizeOpOp SLIT("mov") size src dst