[commit: ghc] master: Avoid generating empty llvm.used definitions. (db9b631)

Geoffrey Mainland gmainlan at microsoft.com
Wed Jun 12 15:34:02 CEST 2013


Repository : http://darcs.haskell.org/ghc.git/

On branch  : master

https://github.com/ghc/ghc/commit/db9b63105a541e4ad3f9c55e2cfadf716445ab87

>---------------------------------------------------------------

commit db9b63105a541e4ad3f9c55e2cfadf716445ab87
Author: Geoffrey Mainland <gmainlan at microsoft.com>
Date:   Wed Jun 12 14:31:49 2013 +0100

    Avoid generating empty llvm.used definitions.
    
    LLVM 3.3rc3 complains when the llvm.used global is an empty array, so don't
    define llvm.used at all when it would be empty.

>---------------------------------------------------------------

 compiler/llvmGen/LlvmCodeGen.hs | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/compiler/llvmGen/LlvmCodeGen.hs b/compiler/llvmGen/LlvmCodeGen.hs
index a157a25..4f2bded 100644
--- a/compiler/llvmGen/LlvmCodeGen.hs
+++ b/compiler/llvmGen/LlvmCodeGen.hs
@@ -117,19 +117,19 @@ cmmProcLlvmGens :: DynFlags -> BufHandle -> UniqSupply -> LlvmEnv -> [RawCmmDecl
       -> [[LlvmVar]] -- ^ info tables that need to be marked as 'used'
       -> IO ()
 
-cmmProcLlvmGens _ _ _ _ [] _ []
-  = return ()
-
 cmmProcLlvmGens dflags h _ _ [] _ ivars
-  = let ivars' = concat ivars
-        cast x = LMBitc (LMStaticPointer (pVarLift x)) i8Ptr
-        ty     = (LMArray (length ivars') i8Ptr)
-        usedArray = LMStaticArray (map cast ivars') ty
-        lmUsed = (LMGlobalVar (fsLit "llvm.used") ty Appending
-                  (Just $ fsLit "llvm.metadata") Nothing False, Just usedArray)
-    in Prt.bufLeftRender h $ {-# SCC "llvm_used_ppr" #-}
-                             withPprStyleDoc dflags (mkCodeStyle CStyle) $
-                             pprLlvmData ([lmUsed], [])
+    | null ivars' = return ()
+    | otherwise   = Prt.bufLeftRender h $
+                        {-# SCC "llvm_used_ppr" #-}
+                        withPprStyleDoc dflags (mkCodeStyle CStyle) $
+                        pprLlvmData ([lmUsed], [])
+  where
+    ivars' = concat ivars
+    cast x = LMBitc (LMStaticPointer (pVarLift x)) i8Ptr
+    ty     = (LMArray (length ivars') i8Ptr)
+    usedArray = LMStaticArray (map cast ivars') ty
+    lmUsed = (LMGlobalVar (fsLit "llvm.used") ty Appending
+              (Just $ fsLit "llvm.metadata") Nothing False, Just usedArray)
 
 cmmProcLlvmGens dflags h us env ((CmmData _ _) : cmms) count ivars
  = cmmProcLlvmGens dflags h us env cmms count ivars





More information about the ghc-commits mailing list