Fix -fPIC with the new code generator
authorSimon Marlow <marlowsd@gmail.com>
Fri, 24 Aug 2012 10:42:21 +0000 (11:42 +0100)
committerSimon Marlow <marlowsd@gmail.com>
Tue, 28 Aug 2012 08:16:44 +0000 (09:16 +0100)
The CmmBlocks inside CmmExprs were not getting the PIC treatment

compiler/nativeGen/AsmCodeGen.lhs
compiler/nativeGen/PPC/Regs.hs
compiler/nativeGen/SPARC/Imm.hs
compiler/nativeGen/X86/Regs.hs

index e510070..65fc4e3 100644 (file)
@@ -980,6 +980,12 @@ cmmExprNative referenceKind expr = do
            -> do args' <- mapM (cmmExprNative DataReference) args
                  return $ CmmMachOp mop args'
 
+        CmmLit (CmmBlock id)
+           -> cmmExprNative referenceKind (CmmLit (CmmLabel (infoTblLbl id)))
+           -- we must convert block Ids to CLabels here, because we
+           -- might have to do the PIC transformation.  Hence we must
+           -- not modify BlockIds beyond this point.
+
         CmmLit (CmmLabel lbl)
            -> do
                 cmmMakeDynamicReference dflags addImportCmmOpt referenceKind lbl
index 4d06268..b86df54 100644 (file)
@@ -54,7 +54,6 @@ import Reg
 import RegClass
 import Size
 
-import BlockId
 import OldCmm
 import CLabel           ( CLabel )
 import Unique
@@ -166,7 +165,6 @@ litToImm (CmmLabelDiffOff l1 l2 off)
                              = ImmConstantSum
                                (ImmConstantDiff (ImmCLbl l1) (ImmCLbl l2))
                                (ImmInt off)
-litToImm (CmmBlock id)       = ImmCLbl (infoTblLbl id)
 litToImm _                   = panic "PPC.Regs.litToImm: no match"
 
 
index eacc905..fe64738 100644 (file)
@@ -17,7 +17,6 @@ where
 
 import OldCmm
 import CLabel
-import BlockId
 
 import Outputable
 
@@ -71,7 +70,6 @@ litToImm lit
                (ImmConstantDiff (ImmCLbl l1) (ImmCLbl l2))
                (ImmInt off)
 
-       CmmBlock id     -> ImmCLbl (infoTblLbl id)
-       _               -> panic "SPARC.Regs.litToImm: no match"
+        _               -> panic "SPARC.Regs.litToImm: no match"
 
 
index 15f20a2..a53c4fc 100644 (file)
@@ -67,7 +67,6 @@ where
 import Reg
 import RegClass
 
-import BlockId
 import OldCmm
 import CmmCallConv
 import CLabel           ( CLabel )
@@ -166,7 +165,6 @@ litToImm (CmmLabelDiffOff l1 l2 off)
                              = ImmConstantSum
                                (ImmConstantDiff (ImmCLbl l1) (ImmCLbl l2))
                                (ImmInt off)
-litToImm (CmmBlock id)       = ImmCLbl (infoTblLbl id)
 litToImm _                   = panic "X86.Regs.litToImm: no match"
 
 -- addressing modes ------------------------------------------------------------