diff options
author | Ben Gamari <bgamari.foss@gmail.com> | 2017-08-29 14:51:52 -0400 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2017-08-29 19:08:07 -0400 |
commit | 9d57d8c192cd455aa68a7a0c019df97f68ae015f (patch) | |
tree | 872227cdd8b163148d6c4548e0b6cc1d97d9ee4a /compiler/nativeGen/RegAlloc/Graph | |
parent | 779b9e6965416ee08af6eb15354cf09e9f40e0d9 (diff) | |
download | haskell-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.hs | 25 |
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 |