Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 3 additions & 31 deletions compiler/GHC/CmmToLlvm.hs
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ import GHC.Utils.Panic
import GHC.Utils.Logger
import qualified GHC.Data.Stream as Stream

import Control.Monad ( when, forM_ )
import Data.Maybe ( fromMaybe, catMaybes, isNothing )
import Control.Monad ( forM_ )
import Data.Maybe ( catMaybes )
import System.IO

-- -----------------------------------------------------------------------------
Expand All @@ -57,36 +57,8 @@ llvmCodeGen logger cfg h dus cmm_stream
-- Pass header
showPass logger "LLVM CodeGen"

-- get llvm version, cache for later use
let mb_ver = llvmCgLlvmVersion cfg

-- warn if unsupported
forM_ mb_ver $ \ver -> do
debugTraceMsg logger 2
(text "Using LLVM version:" <+> text (llvmVersionStr ver))
let doWarn = llvmCgDoWarn cfg
when (not (llvmVersionSupported ver) && doWarn) $ putMsg logger $
"You are using an unsupported version of LLVM!" $$
"Currently only" <+> text (llvmVersionStr supportedLlvmVersionLowerBound) <+>
"up to" <+> text (llvmVersionStr supportedLlvmVersionUpperBound) <+> "(non inclusive) is supported." <+>
"System LLVM version: " <> text (llvmVersionStr ver) $$
"We will try though..."

when (isNothing mb_ver) $ do
let doWarn = llvmCgDoWarn cfg
when doWarn $ putMsg logger $
"Failed to detect LLVM version!" $$
"Make sure LLVM is installed correctly." $$
"We will try though..."

-- HACK: the Nothing case here is potentially wrong here but we
-- currently don't use the LLVM version to guide code generation
-- so this is okay.
let llvm_ver :: LlvmVersion
llvm_ver = fromMaybe supportedLlvmVersionLowerBound mb_ver

-- run code generation
(a, _) <- runLlvm logger cfg llvm_ver bufh dus $
(a, _) <- runLlvm logger cfg bufh dus $
llvmCodeGen' cfg cmm_stream

bFlush bufh
Expand Down
14 changes: 4 additions & 10 deletions compiler/GHC/CmmToLlvm/Base.hs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ module GHC.CmmToLlvm.Base (
LlvmM,
runLlvm, withClearVars, varLookup, varInsert,
markStackReg, checkStackReg,
funLookup, funInsert, getLlvmVer,
funLookup, funInsert,
dumpIfSetLlvm, renderLlvm, markUsedVar, getUsedVars,
ghcInternalFunctions, getPlatform, getConfig,

Expand Down Expand Up @@ -277,8 +277,7 @@ llvmPtrBits platform = widthInBits $ typeWidth $ gcWord platform
--

data LlvmEnv = LlvmEnv
{ envVersion :: LlvmVersion -- ^ LLVM version
, envConfig :: !LlvmCgConfig -- ^ Configuration for LLVM code gen
{ envConfig :: !LlvmCgConfig -- ^ Configuration for LLVM code gen
, envLogger :: !Logger -- ^ Logger
, envOutput :: BufHandle -- ^ Output buffer
, envTag :: !Char -- ^ Tag for creating unique values
Expand Down Expand Up @@ -331,16 +330,15 @@ liftUDSMT m = LlvmM $ \env -> do x <- m
return (x, env)

-- | Get initial Llvm environment.
runLlvm :: Logger -> LlvmCgConfig -> LlvmVersion -> BufHandle -> DSM.DUniqSupply -> LlvmM a -> IO (a, DSM.DUniqSupply)
runLlvm logger cfg ver out us m = do
runLlvm :: Logger -> LlvmCgConfig -> BufHandle -> DSM.DUniqSupply -> LlvmM a -> IO (a, DSM.DUniqSupply)
runLlvm logger cfg out us m = do
((a, _), us') <- DSM.runUDSMT us $ runLlvmM m env
return (a, us')
where env = LlvmEnv { envFunMap = emptyUFM
, envVarMap = emptyUFM
, envStackRegs = []
, envUsedVars = []
, envAliases = emptyUniqSet
, envVersion = ver
, envConfig = cfg
, envLogger = logger
, envOutput = out
Expand Down Expand Up @@ -388,10 +386,6 @@ getMetaUniqueId :: LlvmM MetaId
getMetaUniqueId = LlvmM $ \env ->
return (envFreshMeta env, env { envFreshMeta = succ $ envFreshMeta env })

-- | Get the LLVM version we are generating code for
getLlvmVer :: LlvmM LlvmVersion
getLlvmVer = getEnv envVersion

-- | Dumps the document if the corresponding flag has been set by the user
dumpIfSetLlvm :: DumpFlag -> String -> DumpFormat -> Outp.SDoc -> LlvmM ()
dumpIfSetLlvm flag hdr fmt doc = do
Expand Down
1 change: 0 additions & 1 deletion compiler/GHC/CmmToLlvm/Config.hs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ data LlvmCgConfig = LlvmCgConfig
, llvmCgAvxEnabled :: !Bool
, llvmCgBmiVersion :: Maybe BmiVersion -- ^ (x86) BMI instructions
, llvmCgLlvmVersion :: Maybe LlvmVersion -- ^ version of Llvm we're using
, llvmCgDoWarn :: !Bool -- ^ True ==> warn unsupported Llvm version
, llvmCgLlvmTarget :: !String -- ^ target triple passed to LLVM
, llvmCgLlvmConfig :: !LlvmConfig -- ^ Supported LLVM configurations.
-- see Note [LLVM configuration]
Expand Down
8 changes: 0 additions & 8 deletions compiler/GHC/CmmToLlvm/Version.hs
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
module GHC.CmmToLlvm.Version
( LlvmVersion(..)
, supportedLlvmVersionLowerBound
, supportedLlvmVersionUpperBound
, parseLlvmVersion
, llvmVersionSupported
, llvmVersionStr
, llvmVersionList
)
Expand All @@ -12,7 +9,6 @@ where
import GHC.Prelude

import GHC.CmmToLlvm.Version.Type
import GHC.CmmToLlvm.Version.Bounds

import Data.Char (isDigit)
import Data.List (intercalate)
Expand All @@ -32,10 +28,6 @@ parseLlvmVersion =
where
(ver_str, rest) = span isDigit s

llvmVersionSupported :: LlvmVersion -> Bool
llvmVersionSupported v =
v >= supportedLlvmVersionLowerBound && v < supportedLlvmVersionUpperBound

llvmVersionStr :: LlvmVersion -> String
llvmVersionStr = intercalate "." . map show . llvmVersionList

Expand Down
19 changes: 0 additions & 19 deletions compiler/GHC/CmmToLlvm/Version/Bounds.hs.in

This file was deleted.

1 change: 0 additions & 1 deletion compiler/GHC/Driver/Config/CmmToLlvm.hs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ initLlvmCgConfig logger config_cache dflags = do
ArchX86 -> bmiVersion dflags
_ -> Nothing
, llvmCgLlvmVersion = version
, llvmCgDoWarn = wopt Opt_WarnUnsupportedLlvmVersion dflags
, llvmCgLlvmTarget = platformMisc_llvmTarget $! platformMisc dflags
, llvmCgLlvmConfig = llvm_config
}
8 changes: 1 addition & 7 deletions compiler/GHC/Driver/Errors/Ppr.hs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ import GHC.HsToCore.Errors.Types (DsMessage)
import GHC.Iface.Errors.Types
import GHC.Tc.Errors.Ppr () -- instance Diagnostic TcRnMessage
import GHC.Iface.Errors.Ppr () -- instance Diagnostic IfaceMessage
import GHC.CmmToLlvm.Version (llvmVersionStr, supportedLlvmVersionLowerBound, supportedLlvmVersionUpperBound)

--
-- Suggestions
Expand Down Expand Up @@ -276,12 +275,7 @@ instance Diagnostic DriverMessage where
, nest 2 $ ppr node ]
DriverNoConfiguredLLVMToolchain ->
mkSimpleDecorated $
text "GHC was not configured with a supported LLVM toolchain" $$
text ("Make sure you have installed LLVM between ["
++ llvmVersionStr supportedLlvmVersionLowerBound
++ " and "
++ llvmVersionStr supportedLlvmVersionUpperBound
++ ") and reinstall GHC to ensure -fllvm works")
text "GHC was not configured with a supported LLVM toolchain"

diagnosticReason = \case
DriverUnknownMessage m
Expand Down
3 changes: 0 additions & 3 deletions compiler/GHC/Driver/Flags.hs
Original file line number Diff line number Diff line change
Expand Up @@ -1041,7 +1041,6 @@ data WarningFlag =
| Opt_WarnMissedSpecs
| Opt_WarnAllMissedSpecs
| Opt_WarnUnsupportedCallingConventions
| Opt_WarnUnsupportedLlvmVersion
| Opt_WarnMissedExtraSharedLib
| Opt_WarnInlineRuleShadowing
| Opt_WarnTypedHoles
Expand Down Expand Up @@ -1175,7 +1174,6 @@ warnFlagNames wflag = case wflag of
Opt_WarnMisplacedPragmas -> "misplaced-pragmas" :| []
Opt_WarnUnsafe -> "unsafe" :| []
Opt_WarnUnsupportedCallingConventions -> "unsupported-calling-conventions" :| []
Opt_WarnUnsupportedLlvmVersion -> "unsupported-llvm-version" :| []
Opt_WarnMissedExtraSharedLib -> "missed-extra-shared-lib" :| []
Opt_WarnUntickedPromotedConstructors -> "unticked-promoted-constructors" :| []
Opt_WarnUnusedDoBind -> "unused-do-bind" :| []
Expand Down Expand Up @@ -1350,7 +1348,6 @@ standardWarnings -- see Note [Documenting warning flags]
Opt_WarnDodgyForeignImports,
Opt_WarnInlineRuleShadowing,
Opt_WarnAlternativeLayoutRuleTransitional,
Opt_WarnUnsupportedLlvmVersion,
Opt_WarnMissedExtraSharedLib,
Opt_WarnTabs,
Opt_WarnUnrecognisedWarningFlags,
Expand Down
1 change: 0 additions & 1 deletion compiler/GHC/Driver/Session.hs
Original file line number Diff line number Diff line change
Expand Up @@ -2337,7 +2337,6 @@ wWarningFlagsDeps = [minBound..maxBound] >>= \x -> case x of
Opt_WarnMisplacedPragmas -> warnSpec x
Opt_WarnUnsafe -> warnSpec' x setWarnUnsafe
Opt_WarnUnsupportedCallingConventions -> warnSpec x
Opt_WarnUnsupportedLlvmVersion -> warnSpec x
Opt_WarnMissedExtraSharedLib -> warnSpec x
Opt_WarnUntickedPromotedConstructors -> warnSpec x
Opt_WarnUnusedDoBind -> warnSpec x
Expand Down
2 changes: 1 addition & 1 deletion compiler/GHC/SysTools/Tasks.hs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ module GHC.SysTools.Tasks
import GHC.Prelude
import GHC.ForeignSrcLang

import GHC.CmmToLlvm.Version (LlvmVersion, llvmVersionStr, supportedLlvmVersionUpperBound, parseLlvmVersion, supportedLlvmVersionLowerBound)
import GHC.CmmToLlvm.Version (LlvmVersion, parseLlvmVersion)

import GHC.Settings

Expand Down
1 change: 0 additions & 1 deletion compiler/ghc.cabal.in
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,6 @@ Library
GHC.CmmToLlvm.Ppr
GHC.CmmToLlvm.Regs
GHC.CmmToLlvm.Version
GHC.CmmToLlvm.Version.Bounds
GHC.CmmToLlvm.Version.Type
GHC.Cmm.Dominators
GHC.Cmm.Reducibility
Expand Down
3 changes: 2 additions & 1 deletion hadrian/src/Hadrian/Haskell/Cabal/Parse.hs
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,9 @@ biModules pd = go [ comp | comp@(bi,_,_,_) <-
--
-- Put another way, while Hadrian knows these are generated, Cabal
-- should just think they are regular source files.
-- TODO: Review if this is necessary
extraPreConfigureDeps :: [String]
extraPreConfigureDeps = ["compiler/GHC/CmmToLlvm/Version/Bounds.hs"]
extraPreConfigureDeps = []

-- TODO: Track command line arguments and package configuration flags.
-- | Configure a package using the Cabal library by collecting all the command
Expand Down
9 changes: 1 addition & 8 deletions hadrian/src/Rules/Generate.hs
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,6 @@ rtsDependencies = do

compilerDependencies :: Expr [FilePath]
compilerDependencies = do
let fixed = ("compiler" -/-) <$>
[ "GHC/CmmToLlvm/Version/Bounds.hs"
]
stage <- getStage
ghcPath <- expr $ buildPath (vanillaContext stage compiler)
let buildSpecific = (ghcPath -/-) <$>
Expand All @@ -105,7 +102,7 @@ compilerDependencies = do
, "GHC/Platform/Constants.hs"
, "GHC/Settings/Config.hs"
]
pure $ fixed ++ buildSpecific
pure buildSpecific

generatedDependencies :: Expr [FilePath]
generatedDependencies = do
Expand Down Expand Up @@ -389,10 +386,6 @@ templateRules = do
, interpolateSetting "LlvmMinVersion" LlvmMinVersion
, interpolateSetting "LlvmMaxVersion" LlvmMaxVersion
]
templateRule "compiler/GHC/CmmToLlvm/Version/Bounds.hs" $ mconcat
[ interpolateVar "LlvmMinVersion" $ replaceEq '.' ',' <$> setting LlvmMinVersion
, interpolateVar "LlvmMaxVersion" $ replaceEq '.' ',' <$> setting LlvmMaxVersion
]
bindistRules

bindistRules :: Rules ()
Expand Down
3 changes: 1 addition & 2 deletions hadrian/src/Rules/Lint.hs
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,7 @@ compiler = do
let compilerDir = "compiler"
let ghcautoconf = stage1RtsInc </> "ghcautoconf.h"
let ghcplatform = stage1RtsInc </> "ghcplatform.h"
let ghcLlvmVersion = compilerDir </> "GHC/CmmToLlvm/Version/Bounds.hs"
need $ mconcat [[ghcautoconf, ghcplatform, ghcLlvmVersion], hsIncls stage1Compiler, [machDeps]]
need $ mconcat [[ghcautoconf, ghcplatform], hsIncls stage1Compiler, [machDeps]]
let includeDirs =
[ stage1RtsInc
, compilerDir
Expand Down
2 changes: 1 addition & 1 deletion testsuite/tests/driver/all.T
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ test('T12971', [when(opsys('mingw32'), fragile(17945)), ignore_stdout], makefile
test('json_dump', normal, compile_fail, ['-ddump-json'])
test('json', normalise_version('ghc'), compile_fail, ['-fdiagnostics-as-json'])
test('json_warn', normalise_version('ghc'), compile, ['-fdiagnostics-as-json -Wunused-matches -Wx-partial'])
test('json2', normalise_version('ghc-internal', 'base','ghc-prim'), compile, ['-ddump-types -ddump-json -Wno-unsupported-llvm-version'])
test('json2', normalise_version('ghc-internal', 'base','ghc-prim'), compile, ['-ddump-types -ddump-json'])
test('T16167', [normalise_version('ghc'),req_interp,exit_code(1)], run_command,
['{compiler} -x hs -e ":set prog T16167.hs" -ddump-json T16167.hs'])
test('T13604', [], makefile_test, [])
Expand Down