diff options
author | David Terei <davidterei@gmail.com> | 2010-06-21 17:49:54 +0000 |
---|---|---|
committer | David Terei <davidterei@gmail.com> | 2010-06-21 17:49:54 +0000 |
commit | 3aadff5e31bf6b665cf7ae7606c94cdab85624d2 (patch) | |
tree | 2fd6f5899646e6d7ed2150fff594f6e7fefdd75b /compiler/llvmGen/LlvmCodeGen.hs | |
parent | 09e6aba8000ccf52943ada4fb9ac76e0d93a202f (diff) | |
download | haskell-3aadff5e31bf6b665cf7ae7606c94cdab85624d2.tar.gz |
Declare some top level globals to be constant when appropriate
This involved removing the old constant handling mechanism
which was fairly hard to use. Now being constant or not is
simply a property of a global variable instead of a separate
type.
Diffstat (limited to 'compiler/llvmGen/LlvmCodeGen.hs')
-rw-r--r-- | compiler/llvmGen/LlvmCodeGen.hs | 21 |
1 files changed, 5 insertions, 16 deletions
diff --git a/compiler/llvmGen/LlvmCodeGen.hs b/compiler/llvmGen/LlvmCodeGen.hs index 1b1fd96514..c208006516 100644 --- a/compiler/llvmGen/LlvmCodeGen.hs +++ b/compiler/llvmGen/LlvmCodeGen.hs @@ -50,7 +50,7 @@ llvmCodeGen dflags h us cmms (cdata,env) = foldr split ([],initLlvmEnv) cmm - split (CmmData _ d' ) (d,e) = (d':d,e) + split (CmmData s d' ) (d,e) = ((s,d'):d,e) split (CmmProc i l _ _) (d,e) = let lbl = strCLabel_llvm $ if not (null i) then entryLblToInfoLbl l @@ -62,7 +62,7 @@ llvmCodeGen dflags h us cmms -- ----------------------------------------------------------------------------- -- | Do llvm code generation on all these cmms data sections. -- -cmmDataLlvmGens :: DynFlags -> BufHandle -> LlvmEnv -> [[CmmStatic]] +cmmDataLlvmGens :: DynFlags -> BufHandle -> LlvmEnv -> [(Section,[CmmStatic])] -> [LlvmUnresData] -> IO ( LlvmEnv ) cmmDataLlvmGens dflags h env [] lmdata @@ -74,7 +74,7 @@ cmmDataLlvmGens dflags h env [] lmdata return env' cmmDataLlvmGens dflags h env (cmm:cmms) lmdata - = let lmdata'@(l, ty, _) = genLlvmData cmm + = let lmdata'@(l, _, ty, _) = genLlvmData cmm env' = funInsert (strCLabel_llvm l) ty env in cmmDataLlvmGens dflags h env' cmms (lmdata ++ [lmdata']) @@ -95,7 +95,7 @@ cmmProcLlvmGens _ h _ _ [] _ ivars ty = (LMArray (length ivars) i8Ptr) usedArray = LMStaticArray (map cast ivars) ty lmUsed = (LMGlobalVar (fsLit "llvm.used") ty Appending - (Just $ fsLit "llvm.metadata") Nothing, Just usedArray) + (Just $ fsLit "llvm.metadata") Nothing False, Just usedArray) in do Prt.bufLeftRender h $ pprLlvmData ([lmUsed], []) @@ -112,7 +112,6 @@ cmmProcLlvmGens dflags h us env (cmm : cmms) count ivars -- | Complete llvm code generation phase for a single top-level chunk of Cmm. cmmLlvmGen :: DynFlags -> UniqSupply -> LlvmEnv -> RawCmmTop -> IO ( UniqSupply, LlvmEnv, [LlvmCmmTop] ) - cmmLlvmGen dflags us env cmm = do -- rewrite assignments to global regs @@ -122,20 +121,10 @@ cmmLlvmGen dflags us env cmm (pprCmm $ Cmm [fixed_cmm]) -- generate llvm code from cmm - let ((env', llvmBC), usGen) = initUs us $ genLlvmCode env fixed_cmm + let ((env', llvmBC), usGen) = initUs us $ genLlvmProc env fixed_cmm dumpIfSet_dyn dflags Opt_D_dump_llvm "LLVM Code" (vcat $ map (docToSDoc . fst . pprLlvmCmmTop env' 0) llvmBC) return (usGen, env', llvmBC) - --- ----------------------------------------------------------------------------- --- | Instruction selection --- -genLlvmCode :: LlvmEnv -> RawCmmTop - -> UniqSM (LlvmEnv, [LlvmCmmTop]) -genLlvmCode env (CmmData _ _ ) = return (env, []) -genLlvmCode env (CmmProc _ _ _ (ListGraph [])) = return (env, []) -genLlvmCode env cp@(CmmProc _ _ _ _ ) = genLlvmProc env cp - |