X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FllvmGen%2FLlvmCodeGen%2FBase.hs;h=80d88e6b14a7a2a0b282b27466852f78816b6f13;hb=6f66d02c9654fc037db0582857acdcc15e0fd1d3;hp=83469c80f5eb8260a7d073b13104f5a1b66b0337;hpb=6bae9f3ff5422c8ebe8a53d0981f51b3ced26777;p=ghc-hetmet.git diff --git a/compiler/llvmGen/LlvmCodeGen/Base.hs b/compiler/llvmGen/LlvmCodeGen/Base.hs index 83469c8..80d88e6 100644 --- a/compiler/llvmGen/LlvmCodeGen/Base.hs +++ b/compiler/llvmGen/LlvmCodeGen/Base.hs @@ -25,14 +25,14 @@ module LlvmCodeGen.Base ( import Llvm import LlvmCodeGen.Regs -import CgUtils ( activeStgRegs ) import CLabel -import Cmm - +import CgUtils ( activeStgRegs ) +import Constants import FastString +import OldCmm import qualified Outputable as Outp -import Unique import UniqFM +import Unique -- ---------------------------------------------------------------------------- -- * Some Data Types @@ -42,7 +42,7 @@ type LlvmCmmTop = GenCmmTop LlvmData [CmmStatic] (ListGraph LlvmStatement) type LlvmBasicBlock = GenBasicBlock LlvmStatement -- | Unresolved code. --- Of the form: (data label, data type, unresovled data) +-- Of the form: (data label, data type, unresolved data) type LlvmUnresData = (CLabel, Section, LlvmType, [UnresStatic]) -- | Top level LLVM Data (globals and type aliases) @@ -89,11 +89,15 @@ llvmFunSig :: CLabel -> LlvmLinkageType -> LlvmFunctionDecl llvmFunSig lbl link = llvmFunSig' (strCLabel_llvm lbl) link llvmFunSig' :: LMString -> LlvmLinkageType -> LlvmFunctionDecl -llvmFunSig' lbl link = LlvmFunctionDecl lbl link llvmGhcCC LMVoid FixedArgs - (tysToParams $ map getVarType llvmFunArgs) llvmFunAlign +llvmFunSig' lbl link + = let toParams x | isPointer x = (x, [NoAlias, NoCapture]) + | otherwise = (x, []) + in LlvmFunctionDecl lbl link llvmGhcCC LMVoid FixedArgs + (map (toParams . getVarType) llvmFunArgs) llvmFunAlign -- | Create a Haskell function in LLVM. -mkLlvmFunc :: CLabel -> LlvmLinkageType -> LMSection -> LlvmBlocks -> LlvmFunction +mkLlvmFunc :: CLabel -> LlvmLinkageType -> LMSection -> LlvmBlocks + -> LlvmFunction mkLlvmFunc lbl link sec blks = let funDec = llvmFunSig lbl link funArgs = map (fsLit . getPlainName) llvmFunArgs @@ -101,11 +105,11 @@ mkLlvmFunc lbl link sec blks -- | Alignment to use for functions llvmFunAlign :: LMAlign -llvmFunAlign = Just 4 +llvmFunAlign = Just wORD_SIZE -- | Alignment to use for into tables llvmInfAlign :: LMAlign -llvmInfAlign = Just 4 +llvmInfAlign = Just wORD_SIZE -- | A Function's arguments llvmFunArgs :: [LlvmVar]