diff options
author | Zubin Duggal <zubin.duggal@gmail.com> | 2021-06-17 16:25:46 +0530 |
---|---|---|
committer | Zubin Duggal <zubin.duggal@gmail.com> | 2021-09-21 22:28:30 +0530 |
commit | 1f66634630a000c19d0806e7a6b30c1358bad271 (patch) | |
tree | 75651b12dca88f3e0a2ab6648355b5ba07038dc4 | |
parent | da0a46a3f1373eafb3466cc7c67285e96fa63ce7 (diff) | |
download | haskell-1f66634630a000c19d0806e7a6b30c1358bad271.tar.gz |
Set min LLVM version to 9 and make version checking use a non-inclusive upper
bound.
We use a non-inclusive upper bound so that setting the upper bound to 13 for
example means that all 12.x versions are accepted.
(cherry picked from commit 6c783817ef089e85642c3383937117cff9d15f67)
(cherry picked from commit 9b668ca47499b271bffd96d58f696a80a14002c8)
-rw-r--r-- | aclocal.m4 | 2 | ||||
-rw-r--r-- | compiler/GHC/CmmToLlvm.hs | 6 | ||||
-rw-r--r-- | compiler/GHC/CmmToLlvm/Base.hs | 18 | ||||
-rw-r--r-- | compiler/GHC/SysTools/Tasks.hs | 9 | ||||
-rw-r--r-- | configure.ac | 4 |
5 files changed, 21 insertions, 18 deletions
diff --git a/aclocal.m4 b/aclocal.m4 index a296dbc243..0219ea3a61 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -2251,7 +2251,7 @@ AC_DEFUN([FIND_LLVM_PROG],[ [AC_MSG_RESULT(no) $1="" AC_MSG_NOTICE([We only support llvm $3 to $4 (found $PROG_VERSION).])], - [AX_COMPARE_VERSION([$PROG_VERSION], [gt], [$4], + [AX_COMPARE_VERSION([$PROG_VERSION], [ge], [$4], [AC_MSG_RESULT(no) $1="" AC_MSG_NOTICE([We only support llvm $3 to $4 (found $PROG_VERSION).])], diff --git a/compiler/GHC/CmmToLlvm.hs b/compiler/GHC/CmmToLlvm.hs index 0d2ecb16be..8bc7dc65b4 100644 --- a/compiler/GHC/CmmToLlvm.hs +++ b/compiler/GHC/CmmToLlvm.hs @@ -64,8 +64,8 @@ llvmCodeGen dflags h cmm_stream let doWarn = wopt Opt_WarnUnsupportedLlvmVersion dflags when (not (llvmVersionSupported ver) && doWarn) $ putMsg dflags $ "You are using an unsupported version of LLVM!" $$ - "Currently only" <+> text (llvmVersionStr supportedLlvmVersionMin) <+> - "to" <+> text (llvmVersionStr supportedLlvmVersionMax) <+> "is supported." <+> + "Currently only" <+> text (llvmVersionStr supportedLlvmVersionLowerBound) <+> + "to" <+> text (llvmVersionStr supportedLlvmVersionUpperBound) <+> "is supported." <+> "System LLVM version: " <> text (llvmVersionStr ver) $$ "We will try though..." let isS390X = platformArch (targetPlatform dflags) == ArchS390X @@ -78,7 +78,7 @@ llvmCodeGen dflags h cmm_stream -- currently don't use the LLVM version to guide code generation -- so this is okay. let llvm_ver :: LlvmVersion - llvm_ver = fromMaybe supportedLlvmVersionMin mb_ver + llvm_ver = fromMaybe supportedLlvmVersionLowerBound mb_ver -- run code generation a <- runLlvm dflags llvm_ver bufh $ diff --git a/compiler/GHC/CmmToLlvm/Base.hs b/compiler/GHC/CmmToLlvm/Base.hs index bd0638914b..ebc726ee7d 100644 --- a/compiler/GHC/CmmToLlvm/Base.hs +++ b/compiler/GHC/CmmToLlvm/Base.hs @@ -15,8 +15,8 @@ module GHC.CmmToLlvm.Base ( LiveGlobalRegs, LlvmUnresData, LlvmData, UnresLabel, UnresStatic, - LlvmVersion, supportedLlvmVersionMin, supportedLlvmVersionMax, - llvmVersionSupported, parseLlvmVersion, + LlvmVersion, llvmVersionSupported, parseLlvmVersion, + supportedLlvmVersionLowerBound, supportedLlvmVersionUpperBound, llvmVersionStr, llvmVersionList, LlvmM, @@ -265,7 +265,6 @@ llvmPtrBits platform = widthInBits $ typeWidth $ gcWord platform -- * Llvm Version -- --- Newtype to avoid using the Eq instance! newtype LlvmVersion = LlvmVersion { llvmVersionNE :: NE.NonEmpty Int } deriving (Eq, Ord) @@ -283,14 +282,17 @@ parseLlvmVersion = where (ver_str, rest) = span isDigit s --- | The LLVM Version that is currently supported. -supportedLlvmVersionMin, supportedLlvmVersionMax :: LlvmVersion -supportedLlvmVersionMin = LlvmVersion (sUPPORTED_LLVM_VERSION_MIN NE.:| []) -supportedLlvmVersionMax = LlvmVersion (sUPPORTED_LLVM_VERSION_MAX NE.:| []) +-- | The (inclusive) lower bound on the LLVM Version that is currently supported. +supportedLlvmVersionLowerBound :: LlvmVersion +supportedLlvmVersionLowerBound = LlvmVersion (sUPPORTED_LLVM_VERSION_MIN NE.:| []) + +-- | The (not-inclusive) upper bound bound on the LLVM Version that is currently supported. +supportedLlvmVersionUpperBound :: LlvmVersion +supportedLlvmVersionUpperBound = LlvmVersion (sUPPORTED_LLVM_VERSION_MAX NE.:| []) llvmVersionSupported :: LlvmVersion -> Bool llvmVersionSupported v = - v > supportedLlvmVersionMin && v <= supportedLlvmVersionMax + v >= supportedLlvmVersionLowerBound && v < supportedLlvmVersionUpperBound llvmVersionStr :: LlvmVersion -> String llvmVersionStr = intercalate "." . map show . llvmVersionList diff --git a/compiler/GHC/SysTools/Tasks.hs b/compiler/GHC/SysTools/Tasks.hs index c999a95956..3b075e7116 100644 --- a/compiler/GHC/SysTools/Tasks.hs +++ b/compiler/GHC/SysTools/Tasks.hs @@ -11,7 +11,7 @@ module GHC.SysTools.Tasks where import GHC.Utils.Exception as Exception import GHC.Utils.Error -import GHC.CmmToLlvm.Base (LlvmVersion, llvmVersionStr, supportedLlvmVersionMin, supportedLlvmVersionMax, llvmVersionStr, parseLlvmVersion) +import GHC.CmmToLlvm.Base (LlvmVersion, llvmVersionStr, supportedLlvmVersionLowerBound, supportedLlvmVersionUpperBound, llvmVersionStr, parseLlvmVersion) import GHC.Driver.Types import GHC.Driver.Session import GHC.Utils.Outputable @@ -235,10 +235,11 @@ figureLlvmVersion dflags = traceToolCommand dflags "llc" $ do errorMsg dflags $ vcat [ text "Warning:", nest 9 $ text "Couldn't figure out LLVM version!" $$ - text ("Make sure you have installed LLVM between " - ++ llvmVersionStr supportedLlvmVersionMin + text ("Make sure you have installed LLVM between [" + ++ llvmVersionStr supportedLlvmVersionLowerBound ++ " and " - ++ llvmVersionStr supportedLlvmVersionMax) ] + ++ llvmVersionStr supportedLlvmVersionUpperBound + ++ ")") ] return Nothing) diff --git a/configure.ac b/configure.ac index 4a89c0743d..b3661c9d1b 100644 --- a/configure.ac +++ b/configure.ac @@ -716,8 +716,8 @@ AC_SUBST(InstallNameToolCmd) # tools we are looking for. In the past, GHC supported a number of # versions of LLVM simultaneously, but that stopped working around # 3.5/3.6 release of LLVM. -LlvmMinVersion=10 -LlvmMaxVersion=12 # inclusive +LlvmMinVersion=9 # inclusive +LlvmMaxVersion=13 # not inclusive AC_SUBST([LlvmMinVersion]) AC_SUBST([LlvmMaxVersion]) sUPPORTED_LLVM_VERSION_MIN=$(echo \($LlvmMinVersion\) | sed 's/\./,/') |