46 lines
2.0 KiB
Diff
46 lines
2.0 KiB
Diff
|
git-author: Geoffrey Mainland <gmainlan@…> (06/12/13 13:31:49)
|
||
|
git-committer: Geoffrey Mainland <gmainlan@…> (06/12/13 13:31:49)
|
||
|
Message:
|
||
|
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.
|
||
|
--
|
||
|
|
||
|
Index: ghc-7.6.3/compiler/llvmGen/LlvmCodeGen.hs
|
||
|
===================================================================
|
||
|
--- ghc-7.6.3.orig/compiler/llvmGen/LlvmCodeGen.hs
|
||
|
+++ ghc-7.6.3/compiler/llvmGen/LlvmCodeGen.hs
|
||
|
@@ -112,19 +112,19 @@ cmmProcLlvmGens :: DynFlags -> BufHandle
|
||
|
-> [[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
|