summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZubin Duggal <zubin.duggal@gmail.com>2021-06-17 16:25:46 +0530
committerZubin Duggal <zubin.duggal@gmail.com>2021-09-21 22:28:30 +0530
commit1f66634630a000c19d0806e7a6b30c1358bad271 (patch)
tree75651b12dca88f3e0a2ab6648355b5ba07038dc4
parentda0a46a3f1373eafb3466cc7c67285e96fa63ce7 (diff)
downloadhaskell-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.m42
-rw-r--r--compiler/GHC/CmmToLlvm.hs6
-rw-r--r--compiler/GHC/CmmToLlvm/Base.hs18
-rw-r--r--compiler/GHC/SysTools/Tasks.hs9
-rw-r--r--configure.ac4
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/\./,/')