X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FllvmGen%2FLlvm%2FPpLlvm.hs;fp=compiler%2FllvmGen%2FLlvm%2FPpLlvm.hs;h=9afb76e59608435a9952b831e500603303809c93;hb=6bae9f3ff5422c8ebe8a53d0981f51b3ced26777;hp=fffb72db20a91a5e317f0fcb6c9b475d6dbfee0b;hpb=7dc0cd52f216da7a46c4832da0a68f2ec1f181f0;p=ghc-hetmet.git diff --git a/compiler/llvmGen/Llvm/PpLlvm.hs b/compiler/llvmGen/Llvm/PpLlvm.hs index fffb72d..9afb76e 100644 --- a/compiler/llvmGen/Llvm/PpLlvm.hs +++ b/compiler/llvmGen/Llvm/PpLlvm.hs @@ -104,17 +104,30 @@ ppLlvmFunctions funcs = vcat $ map ppLlvmFunction funcs -- | Print out a function definition. ppLlvmFunction :: LlvmFunction -> Doc -ppLlvmFunction (LlvmFunction dec attrs sec body) = +ppLlvmFunction (LlvmFunction dec args attrs sec body) = let attrDoc = ppSpaceJoin attrs secDoc = case sec of - Just s' -> text "section " <+> (doubleQuotes $ ftext s') + Just s' -> text "section" <+> (doubleQuotes $ ftext s') Nothing -> empty - in text "define" <+> texts dec + in text "define" <+> ppLlvmFunctionHeader dec args <+> attrDoc <+> secDoc $+$ lbrace $+$ ppLlvmBlocks body $+$ rbrace +-- | Print out a function defenition header. +ppLlvmFunctionHeader :: LlvmFunctionDecl -> [LMString] -> Doc +ppLlvmFunctionHeader (LlvmFunctionDecl n l c r varg p a) args + = let varg' = if varg == VarArgs then text ", ..." else empty + align = case a of + Just a' -> space <> text "align" <+> texts a' + Nothing -> empty + args' = map (\((ty,p),n) -> texts ty <+> ppSpaceJoin p <+> text "%" + <> ftext n) + (zip p args) + in texts l <+> texts c <+> texts r <+> text "@" <> ftext n <> lparen <> + (hcat $ intersperse comma args') <> varg' <> rparen <> align + -- | Print out a list of function declaration. ppLlvmFunctionDecls :: LlvmFunctionDecls -> Doc @@ -194,7 +207,8 @@ ppCall ct fptr vals attrs = case fptr of ppCall' (LlvmFunctionDecl _ _ cc ret argTy params _) = let tc = if ct == TailCall then text "tail " else empty ppValues = ppCommaJoin vals - ppArgTy = either ppCommaJoin (\x -> ppCommaJoin $ map getVarType x) params <> + ppParams = map (\(ty,p) -> texts ty <+> ppSpaceJoin p) params + ppArgTy = (hcat $ intersperse comma ppParams) <> (case argTy of VarArgs -> text ", ..." FixedArgs -> empty)