summaryrefslogtreecommitdiff
path: root/compiler/nativeGen/RegAlloc/Graph
diff options
context:
space:
mode:
authorBen Gamari <bgamari.foss@gmail.com>2017-08-29 14:51:52 -0400
committerBen Gamari <ben@smart-cactus.org>2017-08-29 19:08:07 -0400
commit9d57d8c192cd455aa68a7a0c019df97f68ae015f (patch)
tree872227cdd8b163148d6c4548e0b6cc1d97d9ee4a /compiler/nativeGen/RegAlloc/Graph
parent779b9e6965416ee08af6eb15354cf09e9f40e0d9 (diff)
downloadhaskell-9d57d8c192cd455aa68a7a0c019df97f68ae015f.tar.gz
nativeGen: Don't index into linked lists
There were a couple places where we indexed into linked lists of register names. Replace these with arrays. Reviewers: austin Subscribers: rwbarton, thomie Differential Revision: https://phabricator.haskell.org/D3893
Diffstat (limited to 'compiler/nativeGen/RegAlloc/Graph')
-rw-r--r--compiler/nativeGen/RegAlloc/Graph/ArchX86.hs25
1 files changed, 19 insertions, 6 deletions
diff --git a/compiler/nativeGen/RegAlloc/Graph/ArchX86.hs b/compiler/nativeGen/RegAlloc/Graph/ArchX86.hs
index 439899071a..9873118dcf 100644
--- a/compiler/nativeGen/RegAlloc/Graph/ArchX86.hs
+++ b/compiler/nativeGen/RegAlloc/Graph/ArchX86.hs
@@ -14,9 +14,12 @@ module RegAlloc.Graph.ArchX86 (
worst,
squeese,
) where
+
import RegAlloc.Graph.ArchBase (Reg(..), RegSub(..), RegClass(..))
import UniqSet
+import qualified Data.Array as A
+
-- | Determine the class of a register
classOfReg :: Reg -> RegClass
@@ -57,18 +60,28 @@ regName :: Reg -> Maybe String
regName reg
= case reg of
Reg ClassG32 i
- | i <= 7-> Just $ [ "eax", "ebx", "ecx", "edx"
- , "ebp", "esi", "edi", "esp" ] !! i
+ | i <= 7 ->
+ let names = A.listArray (0,8)
+ [ "eax", "ebx", "ecx", "edx"
+ , "ebp", "esi", "edi", "esp" ]
+ in Just $ names A.! i
RegSub SubL16 (Reg ClassG32 i)
- | i <= 7 -> Just $ [ "ax", "bx", "cx", "dx"
- , "bp", "si", "di", "sp"] !! i
+ | i <= 7 ->
+ let names = A.listArray (0,8)
+ [ "ax", "bx", "cx", "dx"
+ , "bp", "si", "di", "sp"]
+ in Just $ names A.! i
RegSub SubL8 (Reg ClassG32 i)
- | i <= 3 -> Just $ [ "al", "bl", "cl", "dl"] !! i
+ | i <= 3 ->
+ let names = A.listArray (0,4) [ "al", "bl", "cl", "dl"]
+ in Just $ names A.! i
RegSub SubL8H (Reg ClassG32 i)
- | i <= 3 -> Just $ [ "ah", "bh", "ch", "dh"] !! i
+ | i <= 3 ->
+ let names = A.listArray (0,4) [ "ah", "bh", "ch", "dh"]
+ in Just $ names A.! i
_ -> Nothing