Avoid generating empty llvm.used definitions.
authorGeoffrey Mainland <gmainlan@microsoft.com>
Wed, 12 Jun 2013 12:31:49 +0000 (13:31 +0100)
committerJoachim Breitner <nomeata@debian.org>
Wed, 1 Apr 2015 11:35:10 +0000 (11:35 +0000)
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.

Gbp-Pq: Name llvm-3.3-compat

compiler/llvmGen/LlvmCodeGen.hs

index 5c2e420545abad02792a2057c89206e4f68236b5..311ce0499c2ff2cc440a6ada7091646e94f7b8a3 100644 (file)
@@ -112,19 +112,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