diff --git a/WYBE.md b/WYBE.md
index 8cf42b80..f29687c4 100644
--- a/WYBE.md
+++ b/WYBE.md
@@ -2245,38 +2245,46 @@ Floating point multiplication
Floating point division
- `foreign llvm frem(`arg1:float, arg2:float`)`:float
Floating point remainder
-- `foreign llvm fcmp_ord(`arg1:float, arg2:float`)`:bool
-Floating point ordered (neither is a NaN)
+
+
+##### Floating point comparisons
+
+Floating point comparisons are either *ordered* or *unordered*, the former
+returning false if either comparand is not a number (NaN), while the latter sort
+return true in that case.
+
+- `foreign llvm fcmp_false(`arg1:float, arg2:float`)`:bool
+Always returns false with no comparison
- `foreign llvm fcmp_oeq(`arg1:float, arg2:float`)`:bool
Floating point equality
-- `foreign llvm fcmp_one(`arg1:float, arg2:float`)`:bool
-Floating point disequality
-- `foreign llvm fcmp_olt(`arg1:float, arg2:float`)`:bool
-Floating point (signed) strictly less
-- `foreign llvm fcmp_ole(`arg1:float, arg2:float`)`:bool
-Floating point (signed) less or equal
- `foreign llvm fcmp_ogt(`arg1:float, arg2:float`)`:bool
-Floating point (signed) strictly greater
+Floating point strictly greater
- `foreign llvm fcmp_oge(`arg1:float, arg2:float`)`:bool
-Floating point (signed) greater or equal
+Floating point greater or equal
+- `foreign llvm fcmp_olt(`arg1:float, arg2:float`)`:bool
+Floating point strictly less
+- `foreign llvm fcmp_ole(`arg1:float, arg2:float`)`:bool
+Floating point less or equal
+- `foreign llvm fcmp_one(`arg1:float, arg2:float`)`:bool
+Floating point disequality
- `foreign llvm fcmp_ord(`arg1:float, arg2:float`)`:bool
-Floating point unordered (either is a NaN)
+Floating point ordered (neither is a NaN)
- `foreign llvm fcmp_ueq(`arg1:float, arg2:float`)`:bool
Floating point unordered or equal
-- `foreign llvm fcmp_une(`arg1:float, arg2:float`)`:bool
-Floating point unordered or not equal
-- `foreign llvm fcmp_ult(`arg1:float, arg2:float`)`:bool
-Floating point unordered or strictly less
-- `foreign llvm fcmp_ule(`arg1:float, arg2:float`)`:bool
-Floating point unordered or less or equal
- `foreign llvm fcmp_ugt(`arg1:float, arg2:float`)`:bool
Floating point unordered or strictly greater
- `foreign llvm fcmp_uge(`arg1:float, arg2:float`)`:bool
Floating point unordered or greater or equal
+- `foreign llvm fcmp_ult(`arg1:float, arg2:float`)`:bool
+Floating point unordered or strictly less
+- `foreign llvm fcmp_ule(`arg1:float, arg2:float`)`:bool
+Floating point unordered or less or equal
+- `foreign llvm fcmp_une(`arg1:float, arg2:float`)`:bool
+Floating point unordered or not equal
+- `foreign llvm fcmp_uno(`arg1:float, arg2:float`)`:bool
+Floating point unordered (either is a NaN)
- `foreign llvm fcmp_true(`arg1:float, arg2:float`)`:bool
Always returns true with no comparison
-- `foreign llvm fcmp_false(`arg1:float, arg2:float`)`:bool
-Always returns false with no comparison
##### Integer/floating point conversion
@@ -2309,7 +2317,7 @@ treat this as an ordinary pointer.
- `opaque`
the type is a machine address, similar to the `void *` type in C. Wybe treats such values as opaque.
- *n* `bit signed`
-a signed primitive number type comprising *n* bits, where *n* is any non-negative
+a signed primitive number type comprising *n* bits, where *n* is any positive
integer. Represents integers between -2*n*-1 and 2*n*-1-1 inclusive.
- *n* `bit unsigned`
an unsigned primitive number type comprising *n* bits, where *n* is any non-negative
diff --git a/src/BodyBuilder.hs b/src/BodyBuilder.hs
index e88c3763..3074288a 100644
--- a/src/BodyBuilder.hs
+++ b/src/BodyBuilder.hs
@@ -19,6 +19,7 @@ import Snippets ( boolType, intType, primMove )
import Util
import Config (minimumSwitchCases, wordSize)
import Options (LogSelection(BodyBuilder))
+import Data.Char ( ord )
import Data.Map as Map
import Data.List as List
import Data.Set as Set
@@ -234,11 +235,6 @@ instance Show Constraint where
= show v ++ ":" ++ show t ++ " ~= " ++ show a
--- negateConstraint :: Constraint -> Constraint
--- negateConstraint (Equal v n) = NotEqual v n
--- negateConstraint (NotEqual v n) = Equal v n
-
-
----------------------------------------------------------------
-- BodyBuilder Primitive Operations
----------------------------------------------------------------
@@ -954,6 +950,7 @@ updateVariableFlows prim = do
-- performing the operation at compile-time.
simplifyForeign :: String -> ProcName -> [Ident] -> [PrimArg] -> Prim
simplifyForeign "llvm" op flags args = simplifyOp op flags args
+simplifyForeign "lpvm" op flags args = simplifyLPVM op flags args
simplifyForeign lang op flags args = PrimForeign lang op flags args
@@ -1130,21 +1127,53 @@ simplifyOp "fdiv" _ [ArgFloat n1 ty, ArgFloat n2 _, output] =
simplifyOp "fdiv" _ [arg, ArgFloat 1 _, output] =
primMove arg output
-- Float comparisons
+simplifyOp "fcmp_false" _ [ArgFloat n1 _, ArgFloat n2 _, output] =
+ primMove (boolConstant False) output
simplifyOp "fcmp_oeq" _ [ArgFloat n1 _, ArgFloat n2 _, output] =
primMove (boolConstant $ n1==n2) output
-simplifyOp "fcmp_one" _ [ArgFloat n1 _, ArgFloat n2 _, output] =
- primMove (boolConstant $ n1/=n2) output
+simplifyOp "fcmp_ogt" _ [ArgFloat n1 _, ArgFloat n2 _, output] =
+ primMove (boolConstant $ n1>n2) output
+simplifyOp "fcmp_oge" _ [ArgFloat n1 _, ArgFloat n2 _, output] =
+ primMove (boolConstant $ n1>=n2) output
simplifyOp "fcmp_olt" _ [ArgFloat n1 _, ArgFloat n2 _, output] =
primMove (boolConstant $ n1n2) output
-simplifyOp "fcmp_oge" _ [ArgFloat n1 _, ArgFloat n2 _, output] =
+simplifyOp "fcmp_uge" _ [ArgFloat n1 _, ArgFloat n2 _, output] =
primMove (boolConstant $ n1>=n2) output
+simplifyOp "fcmp_ult" _ [ArgFloat n1 _, ArgFloat n2 _, output] =
+ primMove (boolConstant $ n1 [Ident] -> [PrimArg] -> Prim
+simplifyLPVM "cast" _ [ArgInt n _, output] =
+ primMove (ArgInt n (argType output)) output
+simplifyLPVM "cast" _ [ArgChar ch _, output] =
+ primMove (ArgInt (fromIntegral $ ord ch) (argType output)) output
+simplifyLPVM "cast" _ [ArgFloat n _, output] =
+ primMove (ArgFloat n (argType output)) output
+simplifyLPVM name flags args = PrimForeign "lpvm" name flags args
+
+
boolConstant :: Bool -> PrimArg
boolConstant bool = ArgInt (fromIntegral $ fromEnum bool) boolType
diff --git a/src/Expansion.hs b/src/Expansion.hs
index 3c2d0b67..5e5bb813 100644
--- a/src/Expansion.hs
+++ b/src/Expansion.hs
@@ -27,6 +27,8 @@ import Data.Map as Map
import Data.Set as Set
import Data.Maybe as Maybe
import Options (LogSelection (Expansion))
+import Distribution.Simple.Setup (emptyGlobalFlags)
+import Snippets
-- | Expand the supplied ProcDef, inlining as desired.
@@ -169,6 +171,15 @@ addRenaming var val = do
-- are used to tell which variables shoudn't be renamed.
+-- | Generate a fresh CallSiteID.
+genCallSiteID :: Expander CallSiteID
+genCallSiteID = do
+ id <- gets nextCallSiteID
+ modify (\st -> st {nextCallSiteID = id + 1})
+ return id
+
+
+-- | Add an instruction to the body, possibly renaming variables
addInstr :: Prim -> OptPos -> Expander ()
addInstr prim pos = do
-- reassign "CallSiteID" if the given prim is inlined from other proc
@@ -177,8 +188,7 @@ addInstr prim pos = do
inlinePos <- gets inlining
if isJust inlinePos
then do
- callSiteID <- gets nextCallSiteID
- modify (\st -> st {nextCallSiteID = callSiteID + 1})
+ callSiteID <- genCallSiteID
return $ PrimCall callSiteID pspec impurity args gFlows
else
return prim
@@ -332,6 +342,34 @@ inlineCall proto args body pos = do
expandArg :: PrimArg -> Expander PrimArg
+-- termToExp (StringConst pos "" DoubleQuote)
+-- = return $ Placed (Fncall ["wybe","string"] "empty" False []) pos
+-- termToExp (StringConst pos [chr] DoubleQuote)
+-- = return $ Placed (Fncall ["wybe","string"] "singleton" False
+-- [Unplaced (CharValue chr)]) pos
+expandArg arg@(ArgString "" WybeString ty) = do
+ logExpansion "Optimising empty string"
+ newVarName <- lift freshVarName
+ let defVar = ArgVar newVarName ty FlowOut Ordinary False
+ let useVar = ArgVar newVarName ty FlowIn Ordinary False
+ logExpansion $ " Generated fresh name " ++ show newVarName
+ callID <- genCallSiteID
+ let emptyStringProc = ProcSpec ["wybe","string"] "empty" 0 Set.empty
+ expandPrim (PrimCall callID emptyStringProc Pure [defVar] emptyGlobalFlows) Nothing
+ logExpansion $ "Empty string variable = " ++ show useVar
+ return useVar
+expandArg arg@(ArgString [ch] WybeString ty) = do
+ logExpansion $ "Optimising singleton string \"" ++ [ch] ++ "\""
+ newVarName <- lift freshVarName
+ let defVar = ArgVar newVarName ty FlowOut Ordinary False
+ let useVar = ArgVar newVarName ty FlowIn Ordinary False
+ logExpansion $ " Generated fresh name " ++ show newVarName
+ callID <- genCallSiteID
+ let emptyStringProc = ProcSpec ["wybe","string"] "singleton" 0 Set.empty
+ expandPrim (PrimCall callID emptyStringProc Pure
+ [ArgChar ch charType, defVar] emptyGlobalFlows) Nothing
+ logExpansion $ "Singleton string variable = " ++ show useVar
+ return useVar
expandArg arg@(ArgVar var ty flow ft _) = do
renameAll <- isJust <$> gets inlining
if renameAll
diff --git a/src/Parser.hs b/src/Parser.hs
index f0c4c414..2adaf00f 100644
--- a/src/Parser.hs
+++ b/src/Parser.hs
@@ -171,7 +171,7 @@ typeRep = do
-- | Type declaration body where visibility, constructors, and items are given
typeCtors :: Parser (TypeImpln,[Item])
typeCtors = betweenB Brace $ do
- vis <- option Private
+ vis <- option Private
$ try (visibility <* (ident "constructor" <|> ident "constructors"))
ctors <- TypeCtors vis <$> ctorDecls
items <- option [] (separator *> items)
@@ -260,7 +260,7 @@ procOrFuncItem vis = do
Nothing -> do
body <- embracedTerm >>= parseWith termToBody
return $ ProcDecl vis mods proto' body $ Just pos
-
+
-- | Parse an optional series of resource flows
@@ -1171,9 +1171,9 @@ termToExp (Call pos [] "@" flow exps) = do
exps' <- mapM termToExp exps
case content <$> exps' of
[] -> return $ Placed (AnonParamVar Nothing flow) pos
- [IntValue i] | i > 0
+ [IntValue i] | i > 0
-> return $ Placed (AnonParamVar (Just i) flow) pos
- [exp]
+ [exp]
-> return $ Placed (AnonFunc $ head exps') pos
_ -> syntaxError pos "invalid anonymous parameter/function expression"
termToExp (Call pos [] "|" ParamIn [exp1,exp2]) = do
diff --git a/src/Snippets.hs b/src/Snippets.hs
index 16da5a59..2c75fc7e 100644
--- a/src/Snippets.hs
+++ b/src/Snippets.hs
@@ -7,7 +7,7 @@
module Snippets (castFromTo, castTo, withType, intType, intCast,
tagType, tagCast, phantomType, stringType, cStringType,
- isTypeVar,
+ charType, isTypeVar,
varSet, varGet, varGetSet,
varSetTyped, varGetTyped, varGetSetTyped,
boolType, boolCast, boolTrue, boolFalse, boolBool,
@@ -84,6 +84,10 @@ stringType = TypeSpec ["wybe"] "string" []
cStringType :: TypeSpec
cStringType = TypeSpec ["wybe"] "c_string" []
+-- | The char type, a single character constant
+charType :: TypeSpec
+charType = TypeSpec ["wybe"] "char" []
+
-- | Is the given string a type variable name
isTypeVar :: String -> Bool
isTypeVar (alpha:digits) | isUpper alpha && all isDigit digits = True
diff --git a/src/Types.hs b/src/Types.hs
index 8a533c47..50de9a55 100644
--- a/src/Types.hs
+++ b/src/Types.hs
@@ -1219,10 +1219,9 @@ typecheckProcDecl' pdef = do
typeError $ ReasonUndef name callee $ place pcall
_ -> shouldnt "typecheckProcDecl'"
) badCalls
- ifOK pdef $ do
- typecheckCalls calls' [] False
- $ List.filter (isForeign . content) calls
- ifOK pdef $ modeCheckProcDecl pdef
+ typecheckCalls calls' [] False
+ $ List.filter (isForeign . content) calls
+ ifOK pdef $ modeCheckProcDecl pdef
-- | If no type errors have been recorded, execute the enclosed code; otherwise
diff --git a/test-cases/complex/exp/testcase_multi_specz-drone.exp b/test-cases/complex/exp/testcase_multi_specz-drone.exp
index 54ff1492..2f71adbe 100644
--- a/test-cases/complex/exp/testcase_multi_specz-drone.exp
+++ b/test-cases/complex/exp/testcase_multi_specz-drone.exp
@@ -149,8 +149,7 @@ module top-level code > public {semipure} (0 calls)
foreign lpvm load(<>:wybe.phantom, ?%tmp#3##0:wybe.phantom) @drone:nn:nn
foreign c read_char(?ch##0:wybe.char, ~tmp#3##0:wybe.phantom, ?tmp#4##0:wybe.phantom) @drone:nn:nn
foreign lpvm store(~%tmp#4##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
- foreign lpvm cast(-1:wybe.int, ?tmp#1##0:wybe.char) @drone:nn:nn
- foreign llvm icmp_ne(ch##0:wybe.char, ~tmp#1##0:wybe.char, ?tmp#2##0:wybe.bool) @drone:nn:nn
+ foreign llvm icmp_ne(ch##0:wybe.char, -1:wybe.char, ?tmp#2##0:wybe.bool) @drone:nn:nn
case ~tmp#2##0:wybe.bool of
0:
drone.#cont#1<0><{<>}; {<>}; {}> #6
@@ -283,7 +282,7 @@ proc loop > (2 calls)
loop(d##0:drone.drone_info, ch##0:wybe.char)<{<>}; {<>}; {}>:
AliasPairs: []
InterestingCallProperties: [InterestingUnaliased 0]
- MultiSpeczDepInfo: [(5,(drone.loop#cont#1<0>,fromList [NonAliasedParamCond 1 [0]])),(6,(drone.do_action<0>,fromList [NonAliasedParamCond 0 [0]])),(10,(drone.loop#cont#1<0>,fromList [NonAliasedParamCond 1 [0]])),(11,(drone.loop#cont#1<0>,fromList [NonAliasedParamCond 1 [0]])),(12,(drone.loop#cont#1<0>,fromList [NonAliasedParamCond 1 [0]]))]
+ MultiSpeczDepInfo: [(5,(drone.loop#cont#1<0>,fromList [NonAliasedParamCond 1 [0]])),(6,(drone.do_action<0>,fromList [NonAliasedParamCond 0 [0]])),(10,(drone.loop#cont#1<0>,fromList [NonAliasedParamCond 1 [0]])),(11,(drone.loop#cont#1<0>,fromList [NonAliasedParamCond 1 [0]])),(12,(drone.loop#cont#1<0>,fromList [NonAliasedParamCond 1 [0]])),(14,(wybe.string.print<0>,fromList [NonAliasedParamCond 0 []]))]
foreign llvm icmp_ne(ch##0:wybe.char, ' ':wybe.char, ?tmp#0##0:wybe.bool) @drone:nn:nn
foreign llvm icmp_ne(ch##0:wybe.char, '\n':wybe.char, ?tmp#1##0:wybe.bool) @drone:nn:nn
foreign llvm and(~tmp#0##0:wybe.bool, ~tmp#1##0:wybe.bool, ?tmp#7##0:wybe.bool) @drone:nn:nn
@@ -310,7 +309,7 @@ loop(d##0:drone.drone_info, ch##0:wybe.char)<{<>}; {<>};
1:
- wybe.string.print<0>("(":wybe.string)<{<>}; {<>}; {}> #14 @drone:nn:nn
+ wybe.string.print<0>[410bae77d3](1187:wybe.string)<{<>}; {<>}; {}> #14 @drone:nn:nn
foreign lpvm access(d##0:drone.drone_info, 0:wybe.int, 32:wybe.int, 0:wybe.int, ?tmp#22##0:wybe.int) @drone:nn:nn
foreign lpvm load(<>:wybe.phantom, ?%tmp#23##0:wybe.phantom) @drone:nn:nn
foreign c print_int(~tmp#22##0:wybe.int, ~tmp#23##0:wybe.phantom, ?tmp#24##0:wybe.phantom) @drone:nn:nn
@@ -345,8 +344,7 @@ loop#cont#1([ch##0:wybe.char], d##0:drone.drone_info)<{<>}; {<>:wybe.phantom, ?%tmp#5##0:wybe.phantom) @drone:nn:nn
foreign c read_char(?ch##1:wybe.char, ~tmp#5##0:wybe.phantom, ?tmp#6##0:wybe.phantom) @drone:nn:nn
foreign lpvm store(~%tmp#6##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
- foreign lpvm cast(-1:wybe.int, ?tmp#3##0:wybe.char) @drone:nn:nn
- foreign llvm icmp_ne(ch##1:wybe.char, ~tmp#3##0:wybe.char, ?tmp#4##0:wybe.bool) @drone:nn:nn
+ foreign llvm icmp_ne(ch##1:wybe.char, -1:wybe.char, ?tmp#4##0:wybe.bool) @drone:nn:nn
case ~tmp#4##0:wybe.bool of
0:
@@ -360,27 +358,27 @@ proc print_info > {inline} (1 calls)
print_info(d##0:drone.drone_info)<{<>}; {<>}; {}>:
AliasPairs: []
InterestingCallProperties: []
- wybe.string.print<0>("(":wybe.string)<{<>}; {<>}; {}> #0 @drone:nn:nn
+ wybe.string.print<0>(1187:wybe.string)<{<>}; {<>}; {}> #0 @drone:nn:nn
foreign lpvm access(d##0:drone.drone_info, 0:wybe.int, 32:wybe.int, 0:wybe.int, ?tmp#0##0:wybe.int) @drone:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#6##0:wybe.phantom) @drone:nn:nn
- foreign c print_int(~tmp#0##0:wybe.int, ~tmp#6##0:wybe.phantom, ?tmp#7##0:wybe.phantom) @drone:nn:nn
- foreign lpvm store(~%tmp#7##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#11##0:wybe.phantom) @drone:nn:nn
+ foreign c print_int(~tmp#0##0:wybe.int, ~tmp#11##0:wybe.phantom, ?tmp#12##0:wybe.phantom) @drone:nn:nn
+ foreign lpvm store(~%tmp#12##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
wybe.string.print<0>(", ":wybe.string)<{<>}; {<>}; {}> #3 @drone:nn:nn
foreign lpvm access(d##0:drone.drone_info, 8:wybe.int, 32:wybe.int, 0:wybe.int, ?tmp#1##0:wybe.int) @drone:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#10##0:wybe.phantom) @drone:nn:nn
- foreign c print_int(~tmp#1##0:wybe.int, ~tmp#10##0:wybe.phantom, ?tmp#11##0:wybe.phantom) @drone:nn:nn
- foreign lpvm store(~%tmp#11##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#15##0:wybe.phantom) @drone:nn:nn
+ foreign c print_int(~tmp#1##0:wybe.int, ~tmp#15##0:wybe.phantom, ?tmp#16##0:wybe.phantom) @drone:nn:nn
+ foreign lpvm store(~%tmp#16##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
wybe.string.print<0>(", ":wybe.string)<{<>}; {<>}; {}> #6 @drone:nn:nn
foreign lpvm access(d##0:drone.drone_info, 16:wybe.int, 32:wybe.int, 0:wybe.int, ?tmp#2##0:wybe.int) @drone:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#14##0:wybe.phantom) @drone:nn:nn
- foreign c print_int(~tmp#2##0:wybe.int, ~tmp#14##0:wybe.phantom, ?tmp#15##0:wybe.phantom) @drone:nn:nn
- foreign lpvm store(~%tmp#15##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#19##0:wybe.phantom) @drone:nn:nn
+ foreign c print_int(~tmp#2##0:wybe.int, ~tmp#19##0:wybe.phantom, ?tmp#20##0:wybe.phantom) @drone:nn:nn
+ foreign lpvm store(~%tmp#20##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
wybe.string.print<0>(") #":wybe.string)<{<>}; {<>}; {}> #9 @drone:nn:nn
foreign lpvm access(~d##0:drone.drone_info, 24:wybe.int, 32:wybe.int, 0:wybe.int, ?tmp#3##0:wybe.int) @drone:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#18##0:wybe.phantom) @drone:nn:nn
- foreign c print_int(~tmp#3##0:wybe.int, ~tmp#18##0:wybe.phantom, ?tmp#19##0:wybe.phantom) @drone:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#19##0:wybe.phantom, ?tmp#21##0:wybe.phantom) @drone:nn:nn
- foreign lpvm store(~%tmp#21##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#23##0:wybe.phantom) @drone:nn:nn
+ foreign c print_int(~tmp#3##0:wybe.int, ~tmp#23##0:wybe.phantom, ?tmp#24##0:wybe.phantom) @drone:nn:nn
+ foreign c putchar('\n':wybe.char, ~tmp#24##0:wybe.phantom, ?tmp#26##0:wybe.phantom) @drone:nn:nn
+ foreign lpvm store(~%tmp#26##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
LLVM code :
@@ -768,8 +766,7 @@ module top-level code > public {semipure} (0 calls)
foreign lpvm load(<>:wybe.phantom, ?%tmp#3##0:wybe.phantom) @drone:nn:nn
foreign c read_char(?ch##0:wybe.char, ~tmp#3##0:wybe.phantom, ?tmp#4##0:wybe.phantom) @drone:nn:nn
foreign lpvm store(~%tmp#4##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
- foreign lpvm cast(-1:wybe.int, ?tmp#1##0:wybe.char) @drone:nn:nn
- foreign llvm icmp_ne(ch##0:wybe.char, ~tmp#1##0:wybe.char, ?tmp#2##0:wybe.bool) @drone:nn:nn
+ foreign llvm icmp_ne(ch##0:wybe.char, -1:wybe.char, ?tmp#2##0:wybe.bool) @drone:nn:nn
case ~tmp#2##0:wybe.bool of
0:
drone.#cont#1<0><{<>}; {<>}; {}> #6
@@ -981,7 +978,7 @@ proc loop > (2 calls)
loop(d##0:drone.drone_info, ch##0:wybe.char)<{<>}; {<>}; {}>:
AliasPairs: []
InterestingCallProperties: [InterestingUnaliased 0]
- MultiSpeczDepInfo: [(5,(drone.loop#cont#1<0>,fromList [NonAliasedParamCond 1 [0]])),(6,(drone.do_action<0>,fromList [NonAliasedParamCond 0 [0]])),(10,(drone.loop#cont#1<0>,fromList [NonAliasedParamCond 1 [0]])),(11,(drone.loop#cont#1<0>,fromList [NonAliasedParamCond 1 [0]])),(12,(drone.loop#cont#1<0>,fromList [NonAliasedParamCond 1 [0]]))]
+ MultiSpeczDepInfo: [(5,(drone.loop#cont#1<0>,fromList [NonAliasedParamCond 1 [0]])),(6,(drone.do_action<0>,fromList [NonAliasedParamCond 0 [0]])),(10,(drone.loop#cont#1<0>,fromList [NonAliasedParamCond 1 [0]])),(11,(drone.loop#cont#1<0>,fromList [NonAliasedParamCond 1 [0]])),(12,(drone.loop#cont#1<0>,fromList [NonAliasedParamCond 1 [0]])),(14,(wybe.string.print<0>,fromList [NonAliasedParamCond 0 []]))]
foreign llvm icmp_ne(ch##0:wybe.char, ' ':wybe.char, ?tmp#0##0:wybe.bool) @drone:nn:nn
foreign llvm icmp_ne(ch##0:wybe.char, '\n':wybe.char, ?tmp#1##0:wybe.bool) @drone:nn:nn
foreign llvm and(~tmp#0##0:wybe.bool, ~tmp#1##0:wybe.bool, ?tmp#7##0:wybe.bool) @drone:nn:nn
@@ -1008,7 +1005,7 @@ loop(d##0:drone.drone_info, ch##0:wybe.char)<{<>}; {<>};
1:
- wybe.string.print<0>("(":wybe.string)<{<>}; {<>}; {}> #14 @drone:nn:nn
+ wybe.string.print<0>[410bae77d3](1187:wybe.string)<{<>}; {<>}; {}> #14 @drone:nn:nn
foreign lpvm access(d##0:drone.drone_info, 0:wybe.int, 32:wybe.int, 0:wybe.int, ?tmp#22##0:wybe.int) @drone:nn:nn
foreign lpvm load(<>:wybe.phantom, ?%tmp#23##0:wybe.phantom) @drone:nn:nn
foreign c print_int(~tmp#22##0:wybe.int, ~tmp#23##0:wybe.phantom, ?tmp#24##0:wybe.phantom) @drone:nn:nn
@@ -1059,7 +1056,7 @@ loop(d##0:drone.drone_info, ch##0:wybe.char)<{<>}; {<>};
1:
- wybe.string.print<0>("(":wybe.string)<{<>}; {<>}; {}> #14 @drone:nn:nn
+ wybe.string.print<0>[410bae77d3](1187:wybe.string)<{<>}; {<>}; {}> #14 @drone:nn:nn
foreign lpvm access(d##0:drone.drone_info, 0:wybe.int, 32:wybe.int, 0:wybe.int, ?tmp#22##0:wybe.int) @drone:nn:nn
foreign lpvm load(<>:wybe.phantom, ?%tmp#23##0:wybe.phantom) @drone:nn:nn
foreign c print_int(~tmp#22##0:wybe.int, ~tmp#23##0:wybe.phantom, ?tmp#24##0:wybe.phantom) @drone:nn:nn
@@ -1094,8 +1091,7 @@ loop#cont#1([ch##0:wybe.char], d##0:drone.drone_info)<{<>}; {<>:wybe.phantom, ?%tmp#5##0:wybe.phantom) @drone:nn:nn
foreign c read_char(?ch##1:wybe.char, ~tmp#5##0:wybe.phantom, ?tmp#6##0:wybe.phantom) @drone:nn:nn
foreign lpvm store(~%tmp#6##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
- foreign lpvm cast(-1:wybe.int, ?tmp#3##0:wybe.char) @drone:nn:nn
- foreign llvm icmp_ne(ch##1:wybe.char, ~tmp#3##0:wybe.char, ?tmp#4##0:wybe.bool) @drone:nn:nn
+ foreign llvm icmp_ne(ch##1:wybe.char, -1:wybe.char, ?tmp#4##0:wybe.bool) @drone:nn:nn
case ~tmp#4##0:wybe.bool of
0:
@@ -1106,8 +1102,7 @@ loop#cont#1([ch##0:wybe.char], d##0:drone.drone_info)<{<>}; {<>:wybe.phantom, ?%tmp#5##0:wybe.phantom) @drone:nn:nn
foreign c read_char(?ch##1:wybe.char, ~tmp#5##0:wybe.phantom, ?tmp#6##0:wybe.phantom) @drone:nn:nn
foreign lpvm store(~%tmp#6##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
- foreign lpvm cast(-1:wybe.int, ?tmp#3##0:wybe.char) @drone:nn:nn
- foreign llvm icmp_ne(ch##1:wybe.char, ~tmp#3##0:wybe.char, ?tmp#4##0:wybe.bool) @drone:nn:nn
+ foreign llvm icmp_ne(ch##1:wybe.char, -1:wybe.char, ?tmp#4##0:wybe.bool) @drone:nn:nn
case ~tmp#4##0:wybe.bool of
0:
@@ -1121,27 +1116,27 @@ proc print_info > {inline} (1 calls)
print_info(d##0:drone.drone_info)<{<>}; {<>}; {}>:
AliasPairs: []
InterestingCallProperties: []
- wybe.string.print<0>("(":wybe.string)<{<>}; {<>}; {}> #0 @drone:nn:nn
+ wybe.string.print<0>(1187:wybe.string)<{<>}; {<>}; {}> #0 @drone:nn:nn
foreign lpvm access(d##0:drone.drone_info, 0:wybe.int, 32:wybe.int, 0:wybe.int, ?tmp#0##0:wybe.int) @drone:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#6##0:wybe.phantom) @drone:nn:nn
- foreign c print_int(~tmp#0##0:wybe.int, ~tmp#6##0:wybe.phantom, ?tmp#7##0:wybe.phantom) @drone:nn:nn
- foreign lpvm store(~%tmp#7##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#11##0:wybe.phantom) @drone:nn:nn
+ foreign c print_int(~tmp#0##0:wybe.int, ~tmp#11##0:wybe.phantom, ?tmp#12##0:wybe.phantom) @drone:nn:nn
+ foreign lpvm store(~%tmp#12##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
wybe.string.print<0>(", ":wybe.string)<{<>}; {<>}; {}> #3 @drone:nn:nn
foreign lpvm access(d##0:drone.drone_info, 8:wybe.int, 32:wybe.int, 0:wybe.int, ?tmp#1##0:wybe.int) @drone:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#10##0:wybe.phantom) @drone:nn:nn
- foreign c print_int(~tmp#1##0:wybe.int, ~tmp#10##0:wybe.phantom, ?tmp#11##0:wybe.phantom) @drone:nn:nn
- foreign lpvm store(~%tmp#11##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#15##0:wybe.phantom) @drone:nn:nn
+ foreign c print_int(~tmp#1##0:wybe.int, ~tmp#15##0:wybe.phantom, ?tmp#16##0:wybe.phantom) @drone:nn:nn
+ foreign lpvm store(~%tmp#16##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
wybe.string.print<0>(", ":wybe.string)<{<>}; {<>}; {}> #6 @drone:nn:nn
foreign lpvm access(d##0:drone.drone_info, 16:wybe.int, 32:wybe.int, 0:wybe.int, ?tmp#2##0:wybe.int) @drone:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#14##0:wybe.phantom) @drone:nn:nn
- foreign c print_int(~tmp#2##0:wybe.int, ~tmp#14##0:wybe.phantom, ?tmp#15##0:wybe.phantom) @drone:nn:nn
- foreign lpvm store(~%tmp#15##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#19##0:wybe.phantom) @drone:nn:nn
+ foreign c print_int(~tmp#2##0:wybe.int, ~tmp#19##0:wybe.phantom, ?tmp#20##0:wybe.phantom) @drone:nn:nn
+ foreign lpvm store(~%tmp#20##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
wybe.string.print<0>(") #":wybe.string)<{<>}; {<>}; {}> #9 @drone:nn:nn
foreign lpvm access(~d##0:drone.drone_info, 24:wybe.int, 32:wybe.int, 0:wybe.int, ?tmp#3##0:wybe.int) @drone:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#18##0:wybe.phantom) @drone:nn:nn
- foreign c print_int(~tmp#3##0:wybe.int, ~tmp#18##0:wybe.phantom, ?tmp#19##0:wybe.phantom) @drone:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#19##0:wybe.phantom, ?tmp#21##0:wybe.phantom) @drone:nn:nn
- foreign lpvm store(~%tmp#21##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#23##0:wybe.phantom) @drone:nn:nn
+ foreign c print_int(~tmp#3##0:wybe.int, ~tmp#23##0:wybe.phantom, ?tmp#24##0:wybe.phantom) @drone:nn:nn
+ foreign c putchar('\n':wybe.char, ~tmp#24##0:wybe.phantom, ?tmp#26##0:wybe.phantom) @drone:nn:nn
+ foreign lpvm store(~%tmp#26##0:wybe.phantom, <>:wybe.phantom) @drone:nn:nn
LLVM code :
@@ -1151,18 +1146,17 @@ print_info(d##0:drone.drone_info)<{<>}; {<>}; {}>:
source_filename = "/private!TMP!/drone.wybe"
target triple = ???
-@"cstring#0" = private unnamed_addr constant [ ?? x i8 ] c"(\00", align 8
-@"cstring#1" = private unnamed_addr constant [ ?? x i8 ] c") #\00", align 8
-@"cstring#2" = private unnamed_addr constant [ ?? x i8 ] c"** malloc count: \00", align 8
-@"cstring#3" = private unnamed_addr constant [ ?? x i8 ] c", \00", align 8
-@"cstring#4" = private unnamed_addr constant [ ?? x i8 ] c"invalid action!\00", align 8
-@"string#5" = private unnamed_addr constant {i64, i64} { i64 1, i64 ptrtoint( ptr @"cstring#0" to i64 ) }, align 8
-@"string#6" = private unnamed_addr constant {i64, i64} { i64 3, i64 ptrtoint( ptr @"cstring#1" to i64 ) }, align 8
-@"string#7" = private unnamed_addr constant {i64, i64} { i64 17, i64 ptrtoint( ptr @"cstring#2" to i64 ) }, align 8
-@"string#8" = private unnamed_addr constant {i64, i64} { i64 2, i64 ptrtoint( ptr @"cstring#3" to i64 ) }, align 8
-@"string#9" = private unnamed_addr constant {i64, i64} { i64 15, i64 ptrtoint( ptr @"cstring#4" to i64 ) }, align 8
+@"cstring#0" = private unnamed_addr constant [ ?? x i8 ] c") #\00", align 8
+@"cstring#1" = private unnamed_addr constant [ ?? x i8 ] c"** malloc count: \00", align 8
+@"cstring#2" = private unnamed_addr constant [ ?? x i8 ] c", \00", align 8
+@"cstring#3" = private unnamed_addr constant [ ?? x i8 ] c"invalid action!\00", align 8
+@"string#4" = private unnamed_addr constant {i64, i64} { i64 3, i64 ptrtoint( ptr @"cstring#0" to i64 ) }, align 8
+@"string#5" = private unnamed_addr constant {i64, i64} { i64 17, i64 ptrtoint( ptr @"cstring#1" to i64 ) }, align 8
+@"string#6" = private unnamed_addr constant {i64, i64} { i64 2, i64 ptrtoint( ptr @"cstring#2" to i64 ) }, align 8
+@"string#7" = private unnamed_addr constant {i64, i64} { i64 15, i64 ptrtoint( ptr @"cstring#3" to i64 ) }, align 8
declare external fastcc void @"wybe.string.print<0>"(i64)
+declare external fastcc void @"wybe.string.print<0>[410bae77d3]"(i64)
declare external ccc i64 @malloc_count()
declare external ccc void @print_int(i64)
declare external ccc void @putchar(i8)
@@ -1173,8 +1167,7 @@ declare external ccc void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)
define external fastcc void @"drone.<0>"() {
%"tmp#0##0" = tail call fastcc i64 @"drone.drone_init<0>"()
%"ch##0" = call ccc i8 @read_char()
- %"tmp#1##0" = trunc i64 -1 to i8
- %"tmp#2##0" = icmp ne i8 %"ch##0", %"tmp#1##0"
+ %"tmp#2##0" = icmp ne i8 %"ch##0", -1
br i1 %"tmp#2##0", label %if.then.0, label %if.else.0
if.then.0:
tail call fastcc void @"drone.loop<0>[410bae77d3]"(i64 %"tmp#0##0", i8 %"ch##0")
@@ -1187,7 +1180,7 @@ if.else.0:
define external fastcc void @"drone.#cont#1<0>"() {
%"mc##0" = call ccc i64 @malloc_count()
- tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#7" to i64 ))
+ tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#5" to i64 ))
call ccc void @print_int(i64 %"mc##0")
call ccc void @putchar(i8 10)
ret void
@@ -1463,21 +1456,21 @@ if.then.0:
%"tmp#6##0" = icmp eq i8 %"ch##0", 112
br i1 %"tmp#6##0", label %if.then.1, label %if.else.1
if.then.1:
- tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#5" to i64 ))
+ tail call fastcc void @"wybe.string.print<0>[410bae77d3]"(i64 1187)
%"tmp#35##0" = inttoptr i64 %"d##0" to ptr
%"tmp#22##0" = load i64, ptr %"tmp#35##0"
call ccc void @print_int(i64 %"tmp#22##0")
- tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#8" to i64 ))
+ tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#6" to i64 ))
%"tmp#36##0" = add i64 %"d##0", 8
%"tmp#37##0" = inttoptr i64 %"tmp#36##0" to ptr
%"tmp#25##0" = load i64, ptr %"tmp#37##0"
call ccc void @print_int(i64 %"tmp#25##0")
- tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#8" to i64 ))
+ tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#6" to i64 ))
%"tmp#38##0" = add i64 %"d##0", 16
%"tmp#39##0" = inttoptr i64 %"tmp#38##0" to ptr
%"tmp#28##0" = load i64, ptr %"tmp#39##0"
call ccc void @print_int(i64 %"tmp#28##0")
- tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#6" to i64 ))
+ tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#4" to i64 ))
%"tmp#40##0" = add i64 %"d##0", 24
%"tmp#41##0" = inttoptr i64 %"tmp#40##0" to ptr
%"tmp#31##0" = load i64, ptr %"tmp#41##0"
@@ -1492,7 +1485,7 @@ if.else.1:
%"tmp#5##0" = icmp eq i1 %"success##0", 0
br i1 %"tmp#5##0", label %if.then.2, label %if.else.2
if.then.2:
- tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#9" to i64 ))
+ tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#7" to i64 ))
call ccc void @putchar(i8 10)
tail call fastcc void @"drone.loop#cont#1<0>"(i64 %"d##1")
ret void
@@ -1513,21 +1506,21 @@ if.then.0:
%"tmp#6##0" = icmp eq i8 %"ch##0", 112
br i1 %"tmp#6##0", label %if.then.1, label %if.else.1
if.then.1:
- tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#5" to i64 ))
+ tail call fastcc void @"wybe.string.print<0>[410bae77d3]"(i64 1187)
%"tmp#35##0" = inttoptr i64 %"d##0" to ptr
%"tmp#22##0" = load i64, ptr %"tmp#35##0"
call ccc void @print_int(i64 %"tmp#22##0")
- tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#8" to i64 ))
+ tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#6" to i64 ))
%"tmp#36##0" = add i64 %"d##0", 8
%"tmp#37##0" = inttoptr i64 %"tmp#36##0" to ptr
%"tmp#25##0" = load i64, ptr %"tmp#37##0"
call ccc void @print_int(i64 %"tmp#25##0")
- tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#8" to i64 ))
+ tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#6" to i64 ))
%"tmp#38##0" = add i64 %"d##0", 16
%"tmp#39##0" = inttoptr i64 %"tmp#38##0" to ptr
%"tmp#28##0" = load i64, ptr %"tmp#39##0"
call ccc void @print_int(i64 %"tmp#28##0")
- tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#6" to i64 ))
+ tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#4" to i64 ))
%"tmp#40##0" = add i64 %"d##0", 24
%"tmp#41##0" = inttoptr i64 %"tmp#40##0" to ptr
%"tmp#31##0" = load i64, ptr %"tmp#41##0"
@@ -1542,7 +1535,7 @@ if.else.1:
%"tmp#5##0" = icmp eq i1 %"success##0", 0
br i1 %"tmp#5##0", label %if.then.2, label %if.else.2
if.then.2:
- tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#9" to i64 ))
+ tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#7" to i64 ))
call ccc void @putchar(i8 10)
tail call fastcc void @"drone.loop#cont#1<0>[6dacb8fd25]"(i64 %"d##1")
ret void
@@ -1556,8 +1549,7 @@ if.else.0:
define external fastcc void @"drone.loop#cont#1<0>"(i64 %"d##0") {
%"ch##1" = call ccc i8 @read_char()
- %"tmp#3##0" = trunc i64 -1 to i8
- %"tmp#4##0" = icmp ne i8 %"ch##1", %"tmp#3##0"
+ %"tmp#4##0" = icmp ne i8 %"ch##1", -1
br i1 %"tmp#4##0", label %if.then.0, label %if.else.0
if.then.0:
tail call fastcc void @"drone.loop<0>"(i64 %"d##0", i8 %"ch##1")
@@ -1568,8 +1560,7 @@ if.else.0:
define external fastcc void @"drone.loop#cont#1<0>[6dacb8fd25]"(i64 %"d##0") {
%"ch##1" = call ccc i8 @read_char()
- %"tmp#3##0" = trunc i64 -1 to i8
- %"tmp#4##0" = icmp ne i8 %"ch##1", %"tmp#3##0"
+ %"tmp#4##0" = icmp ne i8 %"ch##1", -1
br i1 %"tmp#4##0", label %if.then.0, label %if.else.0
if.then.0:
tail call fastcc void @"drone.loop<0>[410bae77d3]"(i64 %"d##0", i8 %"ch##1")
@@ -1579,24 +1570,24 @@ if.else.0:
}
define external fastcc void @"drone.print_info<0>"(i64 %"d##0") {
- tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#5" to i64 ))
- %"tmp#22##0" = inttoptr i64 %"d##0" to ptr
- %"tmp#0##0" = load i64, ptr %"tmp#22##0"
+ tail call fastcc void @"wybe.string.print<0>"(i64 1187)
+ %"tmp#27##0" = inttoptr i64 %"d##0" to ptr
+ %"tmp#0##0" = load i64, ptr %"tmp#27##0"
call ccc void @print_int(i64 %"tmp#0##0")
- tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#8" to i64 ))
- %"tmp#23##0" = add i64 %"d##0", 8
- %"tmp#24##0" = inttoptr i64 %"tmp#23##0" to ptr
- %"tmp#1##0" = load i64, ptr %"tmp#24##0"
+ tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#6" to i64 ))
+ %"tmp#28##0" = add i64 %"d##0", 8
+ %"tmp#29##0" = inttoptr i64 %"tmp#28##0" to ptr
+ %"tmp#1##0" = load i64, ptr %"tmp#29##0"
call ccc void @print_int(i64 %"tmp#1##0")
- tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#8" to i64 ))
- %"tmp#25##0" = add i64 %"d##0", 16
- %"tmp#26##0" = inttoptr i64 %"tmp#25##0" to ptr
- %"tmp#2##0" = load i64, ptr %"tmp#26##0"
- call ccc void @print_int(i64 %"tmp#2##0")
tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#6" to i64 ))
- %"tmp#27##0" = add i64 %"d##0", 24
- %"tmp#28##0" = inttoptr i64 %"tmp#27##0" to ptr
- %"tmp#3##0" = load i64, ptr %"tmp#28##0"
+ %"tmp#30##0" = add i64 %"d##0", 16
+ %"tmp#31##0" = inttoptr i64 %"tmp#30##0" to ptr
+ %"tmp#2##0" = load i64, ptr %"tmp#31##0"
+ call ccc void @print_int(i64 %"tmp#2##0")
+ tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#4" to i64 ))
+ %"tmp#32##0" = add i64 %"d##0", 24
+ %"tmp#33##0" = inttoptr i64 %"tmp#32##0" to ptr
+ %"tmp#3##0" = load i64, ptr %"tmp#33##0"
call ccc void @print_int(i64 %"tmp#3##0")
call ccc void @putchar(i8 10)
ret void
diff --git a/test-cases/complex/exp/testcase_multi_specz-int_list.exp b/test-cases/complex/exp/testcase_multi_specz-int_list.exp
index 0abb73fa..47fe27b9 100644
--- a/test-cases/complex/exp/testcase_multi_specz-int_list.exp
+++ b/test-cases/complex/exp/testcase_multi_specz-int_list.exp
@@ -870,56 +870,56 @@ proc test_int_list > (2 calls)
test_int_list(x##0:int_list.int_list, y##0:int_list.int_list, z##0:int_list.int_list)<{<>}; {<>}; {}>:
AliasPairs: []
InterestingCallProperties: [InterestingUnaliased 0,InterestingUnaliased 1,InterestingUnaliased 2]
- MultiSpeczDepInfo: [(2,(int_list.append<0>,fromList [NonAliasedParamCond 0 [1]])),(7,(int_list.extend<0>,fromList [NonAliasedParamCond 0 []])),(8,(int_list.extend<0>,fromList [NonAliasedParamCond 0 []])),(11,(int_list.insert<0>,fromList [NonAliasedParamCond 0 []])),(12,(int_list.pop<0>,fromList [NonAliasedParamCond 0 []])),(13,(int_list.remove<0>,fromList [NonAliasedParamCond 0 []])),(16,(int_list.sort<0>,fromList [NonAliasedParamCond 0 []])),(19,(int_list.reverse_helper<0>,fromList [NonAliasedParamCond 0 [0]])),(20,(int_list.reverse_helper<0>,fromList [NonAliasedParamCond 0 [2]]))]
+ MultiSpeczDepInfo: [(2,(int_list.append<0>,fromList [NonAliasedParamCond 0 [1]])),(7,(int_list.extend<0>,fromList [NonAliasedParamCond 0 []])),(8,(int_list.extend<0>,fromList [NonAliasedParamCond 0 []])),(11,(int_list.insert<0>,fromList [NonAliasedParamCond 0 []])),(12,(int_list.pop<0>,fromList [NonAliasedParamCond 0 []])),(13,(int_list.remove<0>,fromList [NonAliasedParamCond 0 []])),(16,(int_list.sort<0>,fromList [NonAliasedParamCond 0 []])),(19,(int_list.reverse_helper<0>,fromList [NonAliasedParamCond 0 [0]])),(20,(int_list.reverse_helper<0>,fromList [NonAliasedParamCond 0 [2]])),(22,(wybe.string.print<0>,fromList [NonAliasedParamCond 0 []])),(27,(wybe.string.print<0>,fromList [NonAliasedParamCond 0 []])),(30,(wybe.string.print<0>,fromList [NonAliasedParamCond 0 []])),(33,(wybe.string.print<0>,fromList [NonAliasedParamCond 0 []]))]
int_list.reverse_helper<0>(~x##0:int_list.int_list, 0:int_list.int_list, ?x##1:int_list.int_list) #19 @int_list_test:nn:nn
int_list.reverse_helper<0>(~z##0:int_list.int_list, 0:int_list.int_list, ?z##1:int_list.int_list) #20 @int_list_test:nn:nn
int_list.append<0>(~y##0:int_list.int_list, 99:wybe.int, ?tmp#0##0:int_list.int_list) #2 @int_list_test:nn:nn
- wybe.string.print<0>("-":wybe.string)<{<>}; {<>}; {}> #21 @int_list_test:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#9##0:wybe.phantom) @int_list_test:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#9##0:wybe.phantom, ?tmp#10##0:wybe.phantom) @int_list_test:nn:nn
- foreign lpvm store(~%tmp#10##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
- int_list.print<0>(x##1:int_list.int_list)<{<>}; {<>}; {}> #22 @int_list_test:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#12##0:wybe.phantom) @int_list_test:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#12##0:wybe.phantom, ?tmp#13##0:wybe.phantom) @int_list_test:nn:nn
- foreign lpvm store(~%tmp#13##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
- int_list.print<0>(tmp#0##0:int_list.int_list)<{<>}; {<>}; {}> #23 @int_list_test:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#15##0:wybe.phantom) @int_list_test:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#15##0:wybe.phantom, ?tmp#16##0:wybe.phantom) @int_list_test:nn:nn
- foreign lpvm store(~%tmp#16##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
- int_list.print<0>(z##1:int_list.int_list)<{<>}; {<>}; {}> #24 @int_list_test:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#18##0:wybe.phantom) @int_list_test:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#18##0:wybe.phantom, ?tmp#19##0:wybe.phantom) @int_list_test:nn:nn
- foreign lpvm store(~%tmp#19##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
+ wybe.string.print<0>[410bae77d3](1207:wybe.string)<{<>}; {<>}; {}> #22 @int_list_test:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#14##0:wybe.phantom) @int_list_test:nn:nn
+ foreign c putchar('\n':wybe.char, ~tmp#14##0:wybe.phantom, ?tmp#15##0:wybe.phantom) @int_list_test:nn:nn
+ foreign lpvm store(~%tmp#15##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
+ int_list.print<0>(x##1:int_list.int_list)<{<>}; {<>}; {}> #23 @int_list_test:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#17##0:wybe.phantom) @int_list_test:nn:nn
+ foreign c putchar('\n':wybe.char, ~tmp#17##0:wybe.phantom, ?tmp#18##0:wybe.phantom) @int_list_test:nn:nn
+ foreign lpvm store(~%tmp#18##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
+ int_list.print<0>(tmp#0##0:int_list.int_list)<{<>}; {<>}; {}> #24 @int_list_test:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#20##0:wybe.phantom) @int_list_test:nn:nn
+ foreign c putchar('\n':wybe.char, ~tmp#20##0:wybe.phantom, ?tmp#21##0:wybe.phantom) @int_list_test:nn:nn
+ foreign lpvm store(~%tmp#21##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
+ int_list.print<0>(z##1:int_list.int_list)<{<>}; {<>}; {}> #25 @int_list_test:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#23##0:wybe.phantom) @int_list_test:nn:nn
+ foreign c putchar('\n':wybe.char, ~tmp#23##0:wybe.phantom, ?tmp#24##0:wybe.phantom) @int_list_test:nn:nn
+ foreign lpvm store(~%tmp#24##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
int_list.extend<0>[410bae77d3](~x##1:int_list.int_list, ~tmp#0##0:int_list.int_list, outByReference tmp#1##0:int_list.int_list) #7 @int_list_test:nn:nn
int_list.extend<0>[410bae77d3](~tmp#1##0:int_list.int_list, ~z##1:int_list.int_list, outByReference tmp#2##0:int_list.int_list) #8 @int_list_test:nn:nn
- wybe.string.print<0>("-":wybe.string)<{<>}; {<>}; {}> #25 @int_list_test:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#21##0:wybe.phantom) @int_list_test:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#21##0:wybe.phantom, ?tmp#22##0:wybe.phantom) @int_list_test:nn:nn
- foreign lpvm store(~%tmp#22##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
- int_list.print<0>(tmp#2##0:int_list.int_list)<{<>}; {<>}; {}> #26 @int_list_test:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#24##0:wybe.phantom) @int_list_test:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#24##0:wybe.phantom, ?tmp#25##0:wybe.phantom) @int_list_test:nn:nn
- foreign lpvm store(~%tmp#25##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
+ wybe.string.print<0>[410bae77d3](1207:wybe.string)<{<>}; {<>}; {}> #27 @int_list_test:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#31##0:wybe.phantom) @int_list_test:nn:nn
+ foreign c putchar('\n':wybe.char, ~tmp#31##0:wybe.phantom, ?tmp#32##0:wybe.phantom) @int_list_test:nn:nn
+ foreign lpvm store(~%tmp#32##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
+ int_list.print<0>(tmp#2##0:int_list.int_list)<{<>}; {<>}; {}> #28 @int_list_test:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#34##0:wybe.phantom) @int_list_test:nn:nn
+ foreign c putchar('\n':wybe.char, ~tmp#34##0:wybe.phantom, ?tmp#35##0:wybe.phantom) @int_list_test:nn:nn
+ foreign lpvm store(~%tmp#35##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
int_list.insert<0>[410bae77d3](~tmp#2##0:int_list.int_list, 4:wybe.int, 78:wybe.int, outByReference tmp#3##0:int_list.int_list) #11 @int_list_test:nn:nn
int_list.pop<0>[410bae77d3](~tmp#3##0:int_list.int_list, 20:wybe.int, outByReference tmp#4##0:int_list.int_list) #12 @int_list_test:nn:nn
int_list.remove<0>[410bae77d3](~tmp#4##0:int_list.int_list, 2:wybe.int, outByReference tmp#5##0:int_list.int_list) #13 @int_list_test:nn:nn
- wybe.string.print<0>("-":wybe.string)<{<>}; {<>}; {}> #27 @int_list_test:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#27##0:wybe.phantom) @int_list_test:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#27##0:wybe.phantom, ?tmp#28##0:wybe.phantom) @int_list_test:nn:nn
- foreign lpvm store(~%tmp#28##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
- int_list.print<0>(tmp#5##0:int_list.int_list)<{<>}; {<>}; {}> #28 @int_list_test:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#30##0:wybe.phantom) @int_list_test:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#30##0:wybe.phantom, ?tmp#31##0:wybe.phantom) @int_list_test:nn:nn
- foreign lpvm store(~%tmp#31##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
+ wybe.string.print<0>[410bae77d3](1207:wybe.string)<{<>}; {<>}; {}> #30 @int_list_test:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#42##0:wybe.phantom) @int_list_test:nn:nn
+ foreign c putchar('\n':wybe.char, ~tmp#42##0:wybe.phantom, ?tmp#43##0:wybe.phantom) @int_list_test:nn:nn
+ foreign lpvm store(~%tmp#43##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
+ int_list.print<0>(tmp#5##0:int_list.int_list)<{<>}; {<>}; {}> #31 @int_list_test:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#45##0:wybe.phantom) @int_list_test:nn:nn
+ foreign c putchar('\n':wybe.char, ~tmp#45##0:wybe.phantom, ?tmp#46##0:wybe.phantom) @int_list_test:nn:nn
+ foreign lpvm store(~%tmp#46##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
int_list.sort<0>[410bae77d3](~tmp#5##0:int_list.int_list, ?l##5:int_list.int_list) #16 @int_list_test:nn:nn
- wybe.string.print<0>("-":wybe.string)<{<>}; {<>}; {}> #29 @int_list_test:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#33##0:wybe.phantom) @int_list_test:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#33##0:wybe.phantom, ?tmp#34##0:wybe.phantom) @int_list_test:nn:nn
- foreign lpvm store(~%tmp#34##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
- int_list.print<0>(~l##5:int_list.int_list)<{<>}; {<>}; {}> #30 @int_list_test:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#36##0:wybe.phantom) @int_list_test:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#36##0:wybe.phantom, ?tmp#37##0:wybe.phantom) @int_list_test:nn:nn
- foreign lpvm store(~%tmp#37##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
+ wybe.string.print<0>[410bae77d3](1207:wybe.string)<{<>}; {<>}; {}> #33 @int_list_test:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#53##0:wybe.phantom) @int_list_test:nn:nn
+ foreign c putchar('\n':wybe.char, ~tmp#53##0:wybe.phantom, ?tmp#54##0:wybe.phantom) @int_list_test:nn:nn
+ foreign lpvm store(~%tmp#54##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
+ int_list.print<0>(~l##5:int_list.int_list)<{<>}; {<>}; {}> #34 @int_list_test:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#56##0:wybe.phantom) @int_list_test:nn:nn
+ foreign c putchar('\n':wybe.char, ~tmp#56##0:wybe.phantom, ?tmp#57##0:wybe.phantom) @int_list_test:nn:nn
+ foreign lpvm store(~%tmp#57##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
LLVM code :
@@ -2641,106 +2641,106 @@ proc test_int_list > (2 calls)
test_int_list(x##0:int_list.int_list, y##0:int_list.int_list, z##0:int_list.int_list)<{<>}; {<>}; {}>:
AliasPairs: []
InterestingCallProperties: [InterestingUnaliased 0,InterestingUnaliased 1,InterestingUnaliased 2]
- MultiSpeczDepInfo: [(2,(int_list.append<0>,fromList [NonAliasedParamCond 0 [1]])),(7,(int_list.extend<0>,fromList [NonAliasedParamCond 0 []])),(8,(int_list.extend<0>,fromList [NonAliasedParamCond 0 []])),(11,(int_list.insert<0>,fromList [NonAliasedParamCond 0 []])),(12,(int_list.pop<0>,fromList [NonAliasedParamCond 0 []])),(13,(int_list.remove<0>,fromList [NonAliasedParamCond 0 []])),(16,(int_list.sort<0>,fromList [NonAliasedParamCond 0 []])),(19,(int_list.reverse_helper<0>,fromList [NonAliasedParamCond 0 [0]])),(20,(int_list.reverse_helper<0>,fromList [NonAliasedParamCond 0 [2]]))]
+ MultiSpeczDepInfo: [(2,(int_list.append<0>,fromList [NonAliasedParamCond 0 [1]])),(7,(int_list.extend<0>,fromList [NonAliasedParamCond 0 []])),(8,(int_list.extend<0>,fromList [NonAliasedParamCond 0 []])),(11,(int_list.insert<0>,fromList [NonAliasedParamCond 0 []])),(12,(int_list.pop<0>,fromList [NonAliasedParamCond 0 []])),(13,(int_list.remove<0>,fromList [NonAliasedParamCond 0 []])),(16,(int_list.sort<0>,fromList [NonAliasedParamCond 0 []])),(19,(int_list.reverse_helper<0>,fromList [NonAliasedParamCond 0 [0]])),(20,(int_list.reverse_helper<0>,fromList [NonAliasedParamCond 0 [2]])),(22,(wybe.string.print<0>,fromList [NonAliasedParamCond 0 []])),(27,(wybe.string.print<0>,fromList [NonAliasedParamCond 0 []])),(30,(wybe.string.print<0>,fromList [NonAliasedParamCond 0 []])),(33,(wybe.string.print<0>,fromList [NonAliasedParamCond 0 []]))]
int_list.reverse_helper<0>(~x##0:int_list.int_list, 0:int_list.int_list, ?x##1:int_list.int_list) #19 @int_list_test:nn:nn
int_list.reverse_helper<0>(~z##0:int_list.int_list, 0:int_list.int_list, ?z##1:int_list.int_list) #20 @int_list_test:nn:nn
int_list.append<0>(~y##0:int_list.int_list, 99:wybe.int, ?tmp#0##0:int_list.int_list) #2 @int_list_test:nn:nn
- wybe.string.print<0>("-":wybe.string)<{<>}; {<>}; {}> #21 @int_list_test:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#9##0:wybe.phantom) @int_list_test:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#9##0:wybe.phantom, ?tmp#10##0:wybe.phantom) @int_list_test:nn:nn
- foreign lpvm store(~%tmp#10##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
- int_list.print<0>(x##1:int_list.int_list)<{<>}; {<>}; {}> #22 @int_list_test:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#12##0:wybe.phantom) @int_list_test:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#12##0:wybe.phantom, ?tmp#13##0:wybe.phantom) @int_list_test:nn:nn
- foreign lpvm store(~%tmp#13##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
- int_list.print<0>(tmp#0##0:int_list.int_list)<{<>}; {<>}; {}> #23 @int_list_test:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#15##0:wybe.phantom) @int_list_test:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#15##0:wybe.phantom, ?tmp#16##0:wybe.phantom) @int_list_test:nn:nn
- foreign lpvm store(~%tmp#16##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
- int_list.print<0>(z##1:int_list.int_list)<{<>}; {<>}; {}> #24 @int_list_test:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#18##0:wybe.phantom) @int_list_test:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#18##0:wybe.phantom, ?tmp#19##0:wybe.phantom) @int_list_test:nn:nn
- foreign lpvm store(~%tmp#19##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
+ wybe.string.print<0>[410bae77d3](1207:wybe.string)<{<>}; {<>}; {}> #22 @int_list_test:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#14##0:wybe.phantom) @int_list_test:nn:nn
+ foreign c putchar('\n':wybe.char, ~tmp#14##0:wybe.phantom, ?tmp#15##0:wybe.phantom) @int_list_test:nn:nn
+ foreign lpvm store(~%tmp#15##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
+ int_list.print<0>(x##1:int_list.int_list)<{<>}; {<>}; {}> #23 @int_list_test:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#17##0:wybe.phantom) @int_list_test:nn:nn
+ foreign c putchar('\n':wybe.char, ~tmp#17##0:wybe.phantom, ?tmp#18##0:wybe.phantom) @int_list_test:nn:nn
+ foreign lpvm store(~%tmp#18##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
+ int_list.print<0>(tmp#0##0:int_list.int_list)<{<>}; {<>}; {}> #24 @int_list_test:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#20##0:wybe.phantom) @int_list_test:nn:nn
+ foreign c putchar('\n':wybe.char, ~tmp#20##0:wybe.phantom, ?tmp#21##0:wybe.phantom) @int_list_test:nn:nn
+ foreign lpvm store(~%tmp#21##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
+ int_list.print<0>(z##1:int_list.int_list)<{<>}; {<>}; {}> #25 @int_list_test:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#23##0:wybe.phantom) @int_list_test:nn:nn
+ foreign c putchar('\n':wybe.char, ~tmp#23##0:wybe.phantom, ?tmp#24##0:wybe.phantom) @int_list_test:nn:nn
+ foreign lpvm store(~%tmp#24##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
int_list.extend<0>[410bae77d3](~x##1:int_list.int_list, ~tmp#0##0:int_list.int_list, outByReference tmp#1##0:int_list.int_list) #7 @int_list_test:nn:nn
int_list.extend<0>[410bae77d3](~tmp#1##0:int_list.int_list, ~z##1:int_list.int_list, outByReference tmp#2##0:int_list.int_list) #8 @int_list_test:nn:nn
- wybe.string.print<0>("-":wybe.string)<{<>}; {<>}; {}> #25 @int_list_test:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#21##0:wybe.phantom) @int_list_test:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#21##0:wybe.phantom, ?tmp#22##0:wybe.phantom) @int_list_test:nn:nn
- foreign lpvm store(~%tmp#22##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
- int_list.print<0>(tmp#2##0:int_list.int_list)<{<>}; {<>}; {}> #26 @int_list_test:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#24##0:wybe.phantom) @int_list_test:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#24##0:wybe.phantom, ?tmp#25##0:wybe.phantom) @int_list_test:nn:nn
- foreign lpvm store(~%tmp#25##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
+ wybe.string.print<0>[410bae77d3](1207:wybe.string)<{<>}; {<>}; {}> #27 @int_list_test:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#31##0:wybe.phantom) @int_list_test:nn:nn
+ foreign c putchar('\n':wybe.char, ~tmp#31##0:wybe.phantom, ?tmp#32##0:wybe.phantom) @int_list_test:nn:nn
+ foreign lpvm store(~%tmp#32##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
+ int_list.print<0>(tmp#2##0:int_list.int_list)<{<>}; {<>}; {}> #28 @int_list_test:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#34##0:wybe.phantom) @int_list_test:nn:nn
+ foreign c putchar('\n':wybe.char, ~tmp#34##0:wybe.phantom, ?tmp#35##0:wybe.phantom) @int_list_test:nn:nn
+ foreign lpvm store(~%tmp#35##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
int_list.insert<0>[410bae77d3](~tmp#2##0:int_list.int_list, 4:wybe.int, 78:wybe.int, outByReference tmp#3##0:int_list.int_list) #11 @int_list_test:nn:nn
int_list.pop<0>[410bae77d3](~tmp#3##0:int_list.int_list, 20:wybe.int, outByReference tmp#4##0:int_list.int_list) #12 @int_list_test:nn:nn
int_list.remove<0>[410bae77d3](~tmp#4##0:int_list.int_list, 2:wybe.int, outByReference tmp#5##0:int_list.int_list) #13 @int_list_test:nn:nn
- wybe.string.print<0>("-":wybe.string)<{<>}; {<>}; {}> #27 @int_list_test:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#27##0:wybe.phantom) @int_list_test:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#27##0:wybe.phantom, ?tmp#28##0:wybe.phantom) @int_list_test:nn:nn
- foreign lpvm store(~%tmp#28##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
- int_list.print<0>(tmp#5##0:int_list.int_list)<{<>}; {<>}; {}> #28 @int_list_test:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#30##0:wybe.phantom) @int_list_test:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#30##0:wybe.phantom, ?tmp#31##0:wybe.phantom) @int_list_test:nn:nn
- foreign lpvm store(~%tmp#31##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
+ wybe.string.print<0>[410bae77d3](1207:wybe.string)<{<>}; {<>}; {}> #30 @int_list_test:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#42##0:wybe.phantom) @int_list_test:nn:nn
+ foreign c putchar('\n':wybe.char, ~tmp#42##0:wybe.phantom, ?tmp#43##0:wybe.phantom) @int_list_test:nn:nn
+ foreign lpvm store(~%tmp#43##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
+ int_list.print<0>(tmp#5##0:int_list.int_list)<{<>}; {<>}; {}> #31 @int_list_test:nn:nn
+ foreign lpvm load(<>:wybe.phantom, ?%tmp#45##0:wybe.phantom) @int_list_test:nn:nn
+ foreign c putchar('\n':wybe.char, ~tmp#45##0:wybe.phantom, ?tmp#46##0:wybe.phantom) @int_list_test:nn:nn
+ foreign lpvm store(~%tmp#46##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
int_list.sort<0>[410bae77d3](~tmp#5##0:int_list.int_list, ?l##5:int_list.int_list) #16 @int_list_test:nn:nn
- wybe.string.print<0>("-":wybe.string)<{<>}; {<>}; {}> #29 @int_list_test:nn:nn
- foreign lpvm load(<>:wybe.phantom, ?%tmp#33##0:wybe.phantom) @int_list_test:nn:nn
- foreign c putchar('\n':wybe.char, ~tmp#33##0:wybe.phantom, ?tmp#34##0:wybe.phantom) @int_list_test:nn:nn
- foreign lpvm store(~%tmp#34##0:wybe.phantom, <>:wybe.phantom) @int_list_test:nn:nn
- int_list.print<0>(~l##5:int_list.int_list)<{<