X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fmain%2FCodeOutput.lhs;h=40f4f11a818d286b55487d0637fda98612b6a7d2;hp=2d68b830ecfc6f5ffed74dee6cf31f987d4147b6;hb=49a8e5c021009430d373d6224b29004c7d18c408;hpb=f871cf1bf889704a4ec1f0063ad4d96f31453ea3 diff --git a/compiler/main/CodeOutput.lhs b/compiler/main/CodeOutput.lhs index 2d68b83..40f4f11 100644 --- a/compiler/main/CodeOutput.lhs +++ b/compiler/main/CodeOutput.lhs @@ -9,10 +9,14 @@ module CodeOutput( codeOutput, outputForeignStubs ) where #include "HsVersions.h" #ifndef OMIT_NATIVE_CODEGEN -import UniqSupply ( mkSplitUniqSupply ) import AsmCodeGen ( nativeCodeGen ) #endif +import UniqSupply ( mkSplitUniqSupply ) +#ifndef GHCI_TABLES_NEXT_TO_CODE +import qualified LlvmCodeGen ( llvmCodeGen ) +#endif + #ifdef JAVA import JavaGen ( javaGen ) import qualified PrintJava @@ -27,6 +31,7 @@ import Util import Cmm ( RawCmm ) import HscTypes import DynFlags +import Config import ErrUtils ( dumpIfSet_dyn, showPass, ghcExit ) import Outputable @@ -80,6 +85,7 @@ codeOutput dflags this_mod location foreign_stubs pkg_deps flat_abstractC HscInterpreted -> return (); HscAsm -> outputAsm dflags filenm flat_abstractC; HscC -> outputC dflags filenm flat_abstractC pkg_deps; + HscLlvm -> outputLlvm dflags filenm flat_abstractC; HscJava -> #ifdef JAVA outputJava dflags filenm mod_name tycons core_binds; @@ -167,6 +173,30 @@ outputAsm _ _ _ %************************************************************************ %* * +\subsection{LLVM} +%* * +%************************************************************************ + +\begin{code} +outputLlvm :: DynFlags -> FilePath -> [RawCmm] -> IO () + +#ifndef GHCI_TABLES_NEXT_TO_CODE +outputLlvm dflags filenm flat_absC + = do ncg_uniqs <- mkSplitUniqSupply 'n' + doOutput filenm $ \f -> + LlvmCodeGen.llvmCodeGen dflags f ncg_uniqs flat_absC +#else +outputLlvm _ _ _ + = pprPanic "This compiler was built with the LLVM backend disabled" + (text ("This is because the TABLES_NEXT_TO_CODE optimisation is" + ++ " enabled, which the LLVM backend doesn't support right now.") + $+$ text "Use -fasm instead") +#endif +\end{code} + + +%************************************************************************ +%* * \subsection{Java} %* * %************************************************************************ @@ -225,6 +255,10 @@ outputForeignStubs dflags mod location stubs concatMap mk_include (includes rts_pkg) mk_include i = "#include \"" ++ i ++ "\"\n" + -- wrapper code mentions the ffi_arg type, which comes from ffi.h + ffi_includes | cLibFFI = "#include \"ffi.h\"\n" + | otherwise = "" + stub_h_file_exists <- outputForeignStubs_help stub_h stub_h_output_w ("#include \"HsFFI.h\"\n" ++ cplusplus_hdr) cplusplus_ftr @@ -237,6 +271,7 @@ outputForeignStubs dflags mod location stubs ("#define IN_STG_CODE 0\n" ++ "#include \"Rts.h\"\n" ++ rts_includes ++ + ffi_includes ++ cplusplus_hdr) cplusplus_ftr -- We're adding the default hc_header to the stub file, but this