diff options
author | Simon Marlow <marlowsd@gmail.com> | 2011-05-24 13:16:28 +0100 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2011-05-24 13:20:52 +0100 |
commit | 46176dfa4f329af687c92e57740c800a6cada7b1 (patch) | |
tree | d3130f38f3754316aaf5eae82d8559fa04abcf97 /utils/genprimopcode | |
parent | 4177efa79d0ebc45e1319caff1c000f5fb6cfdcf (diff) | |
download | haskell-46176dfa4f329af687c92e57740c800a6cada7b1.tar.gz |
Assign more accurate code sizes to primops, so that the inlining
heuristics work better. Also removed the old unused "needs_wrapper"
predicate for primops. This helps with #4978.
Diffstat (limited to 'utils/genprimopcode')
-rw-r--r-- | utils/genprimopcode/Lexer.x | 1 | ||||
-rw-r--r-- | utils/genprimopcode/Main.hs | 13 | ||||
-rw-r--r-- | utils/genprimopcode/Parser.y | 2 | ||||
-rw-r--r-- | utils/genprimopcode/ParserM.hs | 1 | ||||
-rw-r--r-- | utils/genprimopcode/Syntax.hs | 2 |
5 files changed, 13 insertions, 6 deletions
diff --git a/utils/genprimopcode/Lexer.x b/utils/genprimopcode/Lexer.x index df710d72b3..6f48c02f8f 100644 --- a/utils/genprimopcode/Lexer.x +++ b/utils/genprimopcode/Lexer.x @@ -54,6 +54,7 @@ words :- <0> "thats_all_folks" { mkT TThatsAllFolks } <0> [a-z][a-zA-Z0-9\#_]* { mkTv TLowerName } <0> [A-Z][a-zA-Z0-9\#_]* { mkTv TUpperName } + <0> [0-9][0-9]* { mkTv (TInteger . read) } <0> \" [^\"]* \" { mkTv (TString . tail . init) } <in_braces> [^\{\}]+ { mkTv TNoBraces } <in_braces> \n { mkTv TNoBraces } diff --git a/utils/genprimopcode/Main.hs b/utils/genprimopcode/Main.hs index 5b802bccd7..d9bfd21fde 100644 --- a/utils/genprimopcode/Main.hs +++ b/utils/genprimopcode/Main.hs @@ -46,13 +46,13 @@ main = getArgs >>= \args -> "commutable" "commutableOp" p_o_specs) - "--needs-wrapper" + "--code-size" -> putStr (gen_switch_from_attribs - "needs_wrapper" - "primOpNeedsWrapper" p_o_specs) + "code_size" + "primOpCodeSize" p_o_specs) - "--can-fail" - -> putStr (gen_switch_from_attribs + "--can-fail" + -> putStr (gen_switch_from_attribs "can_fail" "primOpCanFail" p_o_specs) @@ -91,7 +91,7 @@ known_args "--has-side-effects", "--out-of-line", "--commutable", - "--needs-wrapper", + "--code-size", "--can-fail", "--strictness", "--primop-primop-info", @@ -550,6 +550,7 @@ gen_switch_from_attribs attrib_name fn_name (Info defaults entries) getAltRhs (OptionFalse _) = "False" getAltRhs (OptionTrue _) = "True" + getAltRhs (OptionInteger _ i) = show i getAltRhs (OptionString _ s) = s mkAlt po diff --git a/utils/genprimopcode/Parser.y b/utils/genprimopcode/Parser.y index b20414d7d2..5773abb4fe 100644 --- a/utils/genprimopcode/Parser.y +++ b/utils/genprimopcode/Parser.y @@ -48,6 +48,7 @@ import Syntax lowerName { TLowerName $$ } upperName { TUpperName $$ } string { TString $$ } + integer { TInteger $$ } noBraces { TNoBraces $$ } %% @@ -66,6 +67,7 @@ pOption :: { Option } pOption : lowerName '=' false { OptionFalse $1 } | lowerName '=' true { OptionTrue $1 } | lowerName '=' pStuffBetweenBraces { OptionString $1 $3 } + | lowerName '=' integer { OptionInteger $1 $3 } pEntries :: { [Entry] } pEntries : pEntry pEntries { $1 : $2 } diff --git a/utils/genprimopcode/ParserM.hs b/utils/genprimopcode/ParserM.hs index edc300d6cc..a2b39d7a21 100644 --- a/utils/genprimopcode/ParserM.hs +++ b/utils/genprimopcode/ParserM.hs @@ -81,6 +81,7 @@ data Token = TEOF | TUpperName String | TString String | TNoBraces String + | TInteger Int deriving Show -- Actions diff --git a/utils/genprimopcode/Syntax.hs b/utils/genprimopcode/Syntax.hs index 809467020f..5fe4e0b23e 100644 --- a/utils/genprimopcode/Syntax.hs +++ b/utils/genprimopcode/Syntax.hs @@ -40,6 +40,7 @@ data Option = OptionFalse String -- name = False | OptionTrue String -- name = True | OptionString String String -- name = { ... unparsed stuff ... } + | OptionInteger String Int -- name = <int> deriving Show -- categorises primops @@ -120,6 +121,7 @@ get_attrib_name :: Option -> String get_attrib_name (OptionFalse nm) = nm get_attrib_name (OptionTrue nm) = nm get_attrib_name (OptionString nm _) = nm +get_attrib_name (OptionInteger nm _) = nm lookup_attrib :: String -> [Option] -> Maybe Option lookup_attrib _ [] = Nothing |