Fixed logic

This commit is contained in:
J.Teeuwissen 2023-06-19 17:41:57 +02:00
parent fdfa978ca8
commit 78c1855b66
No known key found for this signature in database
GPG key ID: DB5F7A1ED8D478AD
4 changed files with 139 additions and 131 deletions

View file

@ -1358,14 +1358,14 @@ where
branches: &*arena.alloc([(
1,
BranchInfo::Unique {
scrutinee: unique_symbol,
scrutinee: symbol,
unique: true,
},
u.clone(),
)]),
default_branch: (
BranchInfo::Unique {
scrutinee: unique_symbol,
scrutinee: symbol,
unique: false,
},
n,

View file

@ -233,26 +233,35 @@ fn insert_reset_reuse_operations_stmt<'a, 'i>(
default_branch,
ret_layout,
} => {
let new_branches = branches
.iter()
.map(|(tag_id, info, branch)| {
let mut branch_env = environment.clone();
match info {
macro_rules! update_env_with_constructor {
($branch_env:expr, $info:expr) => {{
match $info {
BranchInfo::Constructor {
scrutinee,
tag_id: tag,
..
} => {
branch_env.add_symbol_tag(*scrutinee, *tag);
$branch_env.add_symbol_tag(*scrutinee, *tag);
}
BranchInfo::Unique {
scrutinee,
unique: false,
} => {
branch_env.non_unique_symbols.insert(*scrutinee);
$branch_env.non_unique_symbols.insert(*scrutinee);
}
_ => {}
BranchInfo::None
| BranchInfo::List { .. }
| BranchInfo::Unique { unique: true, .. } => {}
}
}};
}
let new_branches = branches
.iter()
.map(|(tag_id, info, branch)| {
let mut branch_env = environment.clone();
update_env_with_constructor!(branch_env, info);
let new_branch = insert_reset_reuse_operations_stmt(
arena,
@ -272,14 +281,8 @@ fn insert_reset_reuse_operations_stmt<'a, 'i>(
let (info, branch) = default_branch;
let mut branch_env = environment.clone();
if let BranchInfo::Constructor {
scrutinee,
tag_id: tag,
..
} = info
{
branch_env.add_symbol_tag(*scrutinee, *tag);
}
update_env_with_constructor!(branch_env, info);
let new_branch = insert_reset_reuse_operations_stmt(
arena,

View file

@ -16,22 +16,23 @@ procedure Test.5 (Test.67, Test.68, Test.69):
if Test.53 then
let Test.32 : [<rnu><null>, C *self *self] = UnionAtIndex (Id 0) (Index 0) Test.29;
let Test.33 : [<rnu><null>, C *self *self] = UnionAtIndex (Id 0) (Index 1) Test.29;
joinpoint #Derived_gen.0 #Derived_gen.5:
let #Derived_gen.6 : [<rnu>C [<rnu><null>, C *self *self] *self, <null>] = lowlevel PtrCast #Derived_gen.5;
let Test.43 : [<rnu>C [<rnu><null>, C *self *self] *self, <null>] = Reuse #Derived_gen.6 UpdateModeId { id: 2 } TagId(1) Test.33 Test.30;
joinpoint #Derived_gen.0 #Derived_gen.4:
let #Derived_gen.5 : [<rnu>C [<rnu><null>, C *self *self] *self, <null>] = lowlevel PtrCast #Derived_gen.4;
let Test.43 : [<rnu>C [<rnu><null>, C *self *self] *self, <null>] = Reuse #Derived_gen.5 UpdateModeId { id: 1 } TagId(1) Test.33 Test.30;
let Test.45 : I64 = 1i64;
let Test.44 : I64 = CallByName Num.19 Test.31 Test.45;
jump Test.41 Test.32 Test.43 Test.44;
in
let #Derived_gen.1 : Int1 = lowlevel RefCountIsUnique Test.29;
if #Derived_gen.1 then
let #Derived_gen.7 : [<rnu><null>, C *self *self] = ResetRef { symbol: Test.29, id: UpdateModeId { id: 3 } };
jump #Derived_gen.0 #Derived_gen.7;
let #Derived_gen.6 : [<rnu><null>, C *self *self] = ResetRef { symbol: Test.29, id: UpdateModeId { id: 2 } };
jump #Derived_gen.0 #Derived_gen.6;
else
inc Test.32;
inc Test.33;
let #Derived_gen.8 : [<rnu><null>, C *self *self] = ResetRef { symbol: Test.29, id: UpdateModeId { id: 4 } };
jump #Derived_gen.0 #Derived_gen.8;
decref Test.29;
let #Derived_gen.7 : [<rnu><null>, C *self *self] = NullPointer;
jump #Derived_gen.0 #Derived_gen.7;
else
let Test.48 : U8 = 1i64;
let Test.49 : U8 = GetTagId Test.30;

View file

@ -25,13 +25,13 @@ procedure Test.3 (Test.9, Test.10, Test.11):
let Test.18 : I64 = UnionAtIndex (Id 1) (Index 1) Test.9;
let Test.19 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 2) Test.9;
let Test.17 : I32 = UnionAtIndex (Id 1) (Index 3) Test.9;
joinpoint #Derived_gen.72 #Derived_gen.78:
joinpoint #Derived_gen.72 #Derived_gen.77:
let Test.179 : Int1 = CallByName Num.22 Test.10 Test.17;
if Test.179 then
joinpoint Test.238 #Derived_gen.152:
joinpoint Test.238 #Derived_gen.139:
let Test.233 : [<rnu>C *self I64 *self I32 Int1, <null>] = CallByName Test.3 Test.16 Test.10 Test.11;
let Test.232 : Int1 = false;
let Test.231 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.152 UpdateModeId { id: 71 } TagId(1) Test.233 Test.18 Test.19 Test.17 Test.232;
let Test.231 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.139 UpdateModeId { id: 56 } TagId(1) Test.233 Test.18 Test.19 Test.17 Test.232;
ret Test.231;
in
let Test.236 : U8 = 1i64;
@ -43,7 +43,7 @@ procedure Test.3 (Test.9, Test.10, Test.11):
let Test.239 : Int1 = lowlevel Eq Test.235 Test.234;
if Test.239 then
let Test.180 : [<rnu>C *self I64 *self I32 Int1, <null>] = CallByName Test.3 Test.16 Test.10 Test.11;
joinpoint Test.199 #Derived_gen.184:
joinpoint Test.199 #Derived_gen.166:
let Test.198 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 0) Test.180;
let Test.20 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 0) Test.198;
inc Test.20;
@ -54,52 +54,53 @@ procedure Test.3 (Test.9, Test.10, Test.11):
let Test.25 : I64 = UnionAtIndex (Id 1) (Index 1) Test.180;
let Test.26 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 2) Test.180;
let Test.24 : I32 = UnionAtIndex (Id 1) (Index 3) Test.180;
joinpoint #Derived_gen.30 #Derived_gen.188 #Derived_gen.189 #Derived_gen.190:
joinpoint #Derived_gen.30 #Derived_gen.169 #Derived_gen.170 #Derived_gen.171:
let Test.186 : Int1 = false;
let Test.183 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.190 UpdateModeId { id: 107 } TagId(1) Test.20 Test.22 Test.23 Test.21 Test.186;
let Test.183 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.171 UpdateModeId { id: 85 } TagId(1) Test.20 Test.22 Test.23 Test.21 Test.186;
let Test.185 : Int1 = false;
let Test.184 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.189 UpdateModeId { id: 106 } TagId(1) Test.26 Test.18 Test.19 Test.17 Test.185;
let Test.184 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.170 UpdateModeId { id: 84 } TagId(1) Test.26 Test.18 Test.19 Test.17 Test.185;
let Test.182 : Int1 = true;
let Test.181 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.188 UpdateModeId { id: 105 } TagId(1) Test.183 Test.25 Test.184 Test.24 Test.182;
let Test.181 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.169 UpdateModeId { id: 83 } TagId(1) Test.183 Test.25 Test.184 Test.24 Test.182;
ret Test.181;
in
let #Derived_gen.31 : Int1 = lowlevel RefCountIsUnique Test.180;
if #Derived_gen.31 then
let #Derived_gen.191 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reset { symbol: Test.198, id: UpdateModeId { id: 108 } };
let #Derived_gen.192 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.180, id: UpdateModeId { id: 109 } };
jump #Derived_gen.30 #Derived_gen.192 #Derived_gen.191 #Derived_gen.184;
let #Derived_gen.172 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reset { symbol: Test.198, id: UpdateModeId { id: 86 } };
let #Derived_gen.173 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.180, id: UpdateModeId { id: 87 } };
jump #Derived_gen.30 #Derived_gen.173 #Derived_gen.172 #Derived_gen.166;
else
inc Test.26;
let #Derived_gen.193 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.180, id: UpdateModeId { id: 110 } };
let #Derived_gen.194 : [<rnu>C *self I64 *self I32 Int1, <null>] = NullPointer;
jump #Derived_gen.30 #Derived_gen.193 #Derived_gen.184 #Derived_gen.194;
decref Test.180;
let #Derived_gen.174 : [<rnu>C *self I64 *self I32 Int1, <null>] = NullPointer;
jump #Derived_gen.30 #Derived_gen.166 #Derived_gen.174 #Derived_gen.174;
in
let Test.228 : U8 = 1i64;
let Test.229 : U8 = GetTagId Test.180;
let Test.230 : Int1 = lowlevel Eq Test.228 Test.229;
if Test.230 then
joinpoint Test.225 #Derived_gen.206:
joinpoint Test.216 #Derived_gen.207:
joinpoint Test.225 #Derived_gen.184:
joinpoint Test.216 #Derived_gen.185:
let Test.46 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 0) Test.180;
let Test.48 : I64 = UnionAtIndex (Id 1) (Index 1) Test.180;
let Test.49 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 2) Test.180;
let Test.47 : I32 = UnionAtIndex (Id 1) (Index 3) Test.180;
joinpoint #Derived_gen.24 #Derived_gen.210 #Derived_gen.211:
joinpoint #Derived_gen.24 #Derived_gen.187 #Derived_gen.188:
let Test.196 : Int1 = true;
let Test.195 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.211 UpdateModeId { id: 126 } TagId(1) Test.46 Test.48 Test.49 Test.47 Test.196;
let Test.195 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.188 UpdateModeId { id: 100 } TagId(1) Test.46 Test.48 Test.49 Test.47 Test.196;
let Test.194 : Int1 = false;
let Test.193 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.210 UpdateModeId { id: 125 } TagId(1) Test.195 Test.18 Test.19 Test.17 Test.194;
let Test.193 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.187 UpdateModeId { id: 99 } TagId(1) Test.195 Test.18 Test.19 Test.17 Test.194;
ret Test.193;
in
let #Derived_gen.25 : Int1 = lowlevel RefCountIsUnique Test.180;
if #Derived_gen.25 then
let #Derived_gen.212 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.180, id: UpdateModeId { id: 127 } };
jump #Derived_gen.24 #Derived_gen.212 #Derived_gen.207;
let #Derived_gen.189 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.180, id: UpdateModeId { id: 101 } };
jump #Derived_gen.24 #Derived_gen.189 #Derived_gen.185;
else
inc Test.46;
inc Test.49;
let #Derived_gen.213 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.180, id: UpdateModeId { id: 128 } };
jump #Derived_gen.24 #Derived_gen.213 #Derived_gen.207;
decref Test.180;
let #Derived_gen.190 : [<rnu>C *self I64 *self I32 Int1, <null>] = NullPointer;
jump #Derived_gen.24 #Derived_gen.185 #Derived_gen.190;
in
let Test.213 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 0) Test.180;
let Test.214 : U8 = 1i64;
@ -111,11 +112,11 @@ procedure Test.3 (Test.9, Test.10, Test.11):
let Test.212 : Int1 = true;
let Test.217 : Int1 = lowlevel Eq Test.212 Test.211;
if Test.217 then
jump Test.199 #Derived_gen.206;
jump Test.199 #Derived_gen.184;
else
jump Test.216 #Derived_gen.206;
jump Test.216 #Derived_gen.184;
else
jump Test.216 #Derived_gen.206;
jump Test.216 #Derived_gen.184;
in
let Test.222 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 2) Test.180;
let Test.223 : U8 = 1i64;
@ -127,7 +128,7 @@ procedure Test.3 (Test.9, Test.10, Test.11):
let Test.221 : Int1 = true;
let Test.226 : Int1 = lowlevel Eq Test.221 Test.220;
if Test.226 then
joinpoint Test.207 #Derived_gen.214:
joinpoint Test.207 #Derived_gen.191:
let Test.33 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 0) Test.180;
let Test.35 : I64 = UnionAtIndex (Id 1) (Index 1) Test.180;
let Test.200 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 2) Test.180;
@ -138,25 +139,25 @@ procedure Test.3 (Test.9, Test.10, Test.11):
inc Test.39;
let Test.37 : I32 = UnionAtIndex (Id 1) (Index 3) Test.200;
let Test.34 : I32 = UnionAtIndex (Id 1) (Index 3) Test.180;
joinpoint #Derived_gen.28 #Derived_gen.218 #Derived_gen.219 #Derived_gen.220:
joinpoint #Derived_gen.28 #Derived_gen.194 #Derived_gen.195 #Derived_gen.196:
let Test.192 : Int1 = false;
let Test.189 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.220 UpdateModeId { id: 135 } TagId(1) Test.33 Test.35 Test.36 Test.34 Test.192;
let Test.189 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.196 UpdateModeId { id: 107 } TagId(1) Test.33 Test.35 Test.36 Test.34 Test.192;
let Test.191 : Int1 = false;
let Test.190 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.219 UpdateModeId { id: 134 } TagId(1) Test.39 Test.18 Test.19 Test.17 Test.191;
let Test.190 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.195 UpdateModeId { id: 106 } TagId(1) Test.39 Test.18 Test.19 Test.17 Test.191;
let Test.188 : Int1 = true;
let Test.187 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.218 UpdateModeId { id: 133 } TagId(1) Test.189 Test.38 Test.190 Test.37 Test.188;
let Test.187 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.194 UpdateModeId { id: 105 } TagId(1) Test.189 Test.38 Test.190 Test.37 Test.188;
ret Test.187;
in
let #Derived_gen.29 : Int1 = lowlevel RefCountIsUnique Test.180;
if #Derived_gen.29 then
let #Derived_gen.221 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reset { symbol: Test.200, id: UpdateModeId { id: 136 } };
let #Derived_gen.222 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.180, id: UpdateModeId { id: 137 } };
jump #Derived_gen.28 #Derived_gen.222 #Derived_gen.221 #Derived_gen.214;
let #Derived_gen.197 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reset { symbol: Test.200, id: UpdateModeId { id: 108 } };
let #Derived_gen.198 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.180, id: UpdateModeId { id: 109 } };
jump #Derived_gen.28 #Derived_gen.198 #Derived_gen.197 #Derived_gen.191;
else
inc Test.33;
let #Derived_gen.223 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.180, id: UpdateModeId { id: 138 } };
let #Derived_gen.224 : [<rnu>C *self I64 *self I32 Int1, <null>] = NullPointer;
jump #Derived_gen.28 #Derived_gen.223 #Derived_gen.214 #Derived_gen.224;
decref Test.180;
let #Derived_gen.199 : [<rnu>C *self I64 *self I32 Int1, <null>] = NullPointer;
jump #Derived_gen.28 #Derived_gen.191 #Derived_gen.199 #Derived_gen.199;
in
let Test.204 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 0) Test.180;
let Test.205 : U8 = 1i64;
@ -168,31 +169,31 @@ procedure Test.3 (Test.9, Test.10, Test.11):
let Test.203 : Int1 = true;
let Test.208 : Int1 = lowlevel Eq Test.203 Test.202;
if Test.208 then
jump Test.199 #Derived_gen.78;
jump Test.199 #Derived_gen.77;
else
jump Test.207 #Derived_gen.78;
jump Test.207 #Derived_gen.77;
else
jump Test.207 #Derived_gen.78;
jump Test.207 #Derived_gen.77;
else
jump Test.225 #Derived_gen.78;
jump Test.225 #Derived_gen.77;
else
jump Test.225 #Derived_gen.78;
jump Test.225 #Derived_gen.77;
else
decref #Derived_gen.78;
decref #Derived_gen.77;
dec Test.19;
let Test.197 : [<rnu>C *self I64 *self I32 Int1, <null>] = TagId(0) ;
ret Test.197;
else
jump Test.238 #Derived_gen.78;
jump Test.238 #Derived_gen.77;
else
jump Test.238 #Derived_gen.78;
jump Test.238 #Derived_gen.77;
else
let Test.117 : Int1 = CallByName Num.24 Test.10 Test.17;
if Test.117 then
joinpoint Test.176 #Derived_gen.327:
joinpoint Test.176 #Derived_gen.291:
let Test.171 : [<rnu>C *self I64 *self I32 Int1, <null>] = CallByName Test.3 Test.19 Test.10 Test.11;
let Test.170 : Int1 = false;
let Test.169 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.327 UpdateModeId { id: 241 } TagId(1) Test.16 Test.18 Test.171 Test.17 Test.170;
let Test.169 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.291 UpdateModeId { id: 196 } TagId(1) Test.16 Test.18 Test.171 Test.17 Test.170;
ret Test.169;
in
let Test.174 : U8 = 1i64;
@ -204,9 +205,9 @@ procedure Test.3 (Test.9, Test.10, Test.11):
let Test.177 : Int1 = lowlevel Eq Test.173 Test.172;
if Test.177 then
inc Test.19;
let #Derived_gen.328 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reset { symbol: Test.16, id: UpdateModeId { id: 242 } };
let #Derived_gen.292 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reset { symbol: Test.16, id: UpdateModeId { id: 197 } };
let Test.118 : [<rnu>C *self I64 *self I32 Int1, <null>] = CallByName Test.3 Test.19 Test.10 Test.11;
joinpoint Test.137 #Derived_gen.373 #Derived_gen.374:
joinpoint Test.137 #Derived_gen.332 #Derived_gen.333:
let Test.136 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 0) Test.118;
let Test.57 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 0) Test.136;
inc Test.57;
@ -217,52 +218,54 @@ procedure Test.3 (Test.9, Test.10, Test.11):
let Test.62 : I64 = UnionAtIndex (Id 1) (Index 1) Test.118;
let Test.63 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 2) Test.118;
let Test.61 : I32 = UnionAtIndex (Id 1) (Index 3) Test.118;
joinpoint #Derived_gen.70 #Derived_gen.379 #Derived_gen.380 #Derived_gen.381:
joinpoint #Derived_gen.70 #Derived_gen.337 #Derived_gen.338 #Derived_gen.339:
let Test.124 : Int1 = false;
let Test.121 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.381 UpdateModeId { id: 295 } TagId(1) Test.57 Test.59 Test.60 Test.58 Test.124;
let Test.121 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.339 UpdateModeId { id: 242 } TagId(1) Test.57 Test.59 Test.60 Test.58 Test.124;
let Test.123 : Int1 = false;
let Test.122 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.380 UpdateModeId { id: 294 } TagId(1) Test.63 Test.18 Test.19 Test.17 Test.123;
let Test.122 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.338 UpdateModeId { id: 241 } TagId(1) Test.63 Test.18 Test.19 Test.17 Test.123;
let Test.120 : Int1 = true;
let Test.119 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.379 UpdateModeId { id: 293 } TagId(1) Test.121 Test.62 Test.122 Test.61 Test.120;
let Test.119 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.337 UpdateModeId { id: 240 } TagId(1) Test.121 Test.62 Test.122 Test.61 Test.120;
ret Test.119;
in
let #Derived_gen.71 : Int1 = lowlevel RefCountIsUnique Test.118;
if #Derived_gen.71 then
decref #Derived_gen.373;
let #Derived_gen.382 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reset { symbol: Test.136, id: UpdateModeId { id: 296 } };
let #Derived_gen.383 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.118, id: UpdateModeId { id: 297 } };
jump #Derived_gen.70 #Derived_gen.383 #Derived_gen.382 #Derived_gen.374;
decref #Derived_gen.332;
let #Derived_gen.340 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reset { symbol: Test.136, id: UpdateModeId { id: 243 } };
let #Derived_gen.341 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.118, id: UpdateModeId { id: 244 } };
jump #Derived_gen.70 #Derived_gen.341 #Derived_gen.340 #Derived_gen.333;
else
inc Test.63;
let #Derived_gen.384 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.118, id: UpdateModeId { id: 298 } };
jump #Derived_gen.70 #Derived_gen.384 #Derived_gen.374 #Derived_gen.373;
decref Test.118;
let #Derived_gen.342 : [<rnu>C *self I64 *self I32 Int1, <null>] = NullPointer;
jump #Derived_gen.70 #Derived_gen.333 #Derived_gen.332 #Derived_gen.342;
in
let Test.166 : U8 = 1i64;
let Test.167 : U8 = GetTagId Test.118;
let Test.168 : Int1 = lowlevel Eq Test.166 Test.167;
if Test.168 then
joinpoint Test.163 #Derived_gen.397 #Derived_gen.398:
joinpoint Test.154 #Derived_gen.400:
joinpoint Test.163 #Derived_gen.354 #Derived_gen.355:
joinpoint Test.154 #Derived_gen.356 #Derived_gen.357:
let Test.83 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 0) Test.118;
let Test.85 : I64 = UnionAtIndex (Id 1) (Index 1) Test.118;
let Test.86 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 2) Test.118;
let Test.84 : I32 = UnionAtIndex (Id 1) (Index 3) Test.118;
joinpoint #Derived_gen.60 #Derived_gen.404 #Derived_gen.405:
joinpoint #Derived_gen.60 #Derived_gen.360 #Derived_gen.361:
let Test.134 : Int1 = true;
let Test.133 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.405 UpdateModeId { id: 319 } TagId(1) Test.83 Test.85 Test.86 Test.84 Test.134;
let Test.133 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.361 UpdateModeId { id: 262 } TagId(1) Test.83 Test.85 Test.86 Test.84 Test.134;
let Test.132 : Int1 = false;
let Test.131 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.404 UpdateModeId { id: 318 } TagId(1) Test.133 Test.18 Test.19 Test.17 Test.132;
let Test.131 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.360 UpdateModeId { id: 261 } TagId(1) Test.133 Test.18 Test.19 Test.17 Test.132;
ret Test.131;
in
let #Derived_gen.61 : Int1 = lowlevel RefCountIsUnique Test.118;
if #Derived_gen.61 then
let #Derived_gen.406 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.118, id: UpdateModeId { id: 320 } };
jump #Derived_gen.60 #Derived_gen.406 #Derived_gen.400;
decref #Derived_gen.356;
let #Derived_gen.362 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.118, id: UpdateModeId { id: 263 } };
jump #Derived_gen.60 #Derived_gen.362 #Derived_gen.357;
else
inc Test.83;
inc Test.86;
let #Derived_gen.407 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.118, id: UpdateModeId { id: 321 } };
jump #Derived_gen.60 #Derived_gen.407 #Derived_gen.400;
decref Test.118;
jump #Derived_gen.60 #Derived_gen.357 #Derived_gen.356;
in
let Test.151 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 0) Test.118;
let Test.152 : U8 = 1i64;
@ -274,13 +277,11 @@ procedure Test.3 (Test.9, Test.10, Test.11):
let Test.150 : Int1 = true;
let Test.155 : Int1 = lowlevel Eq Test.150 Test.149;
if Test.155 then
jump Test.137 #Derived_gen.398 #Derived_gen.397;
jump Test.137 #Derived_gen.355 #Derived_gen.354;
else
decref #Derived_gen.397;
jump Test.154 #Derived_gen.398;
jump Test.154 #Derived_gen.355 #Derived_gen.354;
else
decref #Derived_gen.397;
jump Test.154 #Derived_gen.398;
jump Test.154 #Derived_gen.355 #Derived_gen.354;
in
let Test.160 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 2) Test.118;
let Test.161 : U8 = 1i64;
@ -292,7 +293,7 @@ procedure Test.3 (Test.9, Test.10, Test.11):
let Test.159 : Int1 = true;
let Test.164 : Int1 = lowlevel Eq Test.159 Test.158;
if Test.164 then
joinpoint Test.145 #Derived_gen.408 #Derived_gen.409:
joinpoint Test.145 #Derived_gen.363 #Derived_gen.364:
let Test.70 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 0) Test.118;
let Test.72 : I64 = UnionAtIndex (Id 1) (Index 1) Test.118;
let Test.138 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 2) Test.118;
@ -303,25 +304,26 @@ procedure Test.3 (Test.9, Test.10, Test.11):
inc Test.76;
let Test.74 : I32 = UnionAtIndex (Id 1) (Index 3) Test.138;
let Test.71 : I32 = UnionAtIndex (Id 1) (Index 3) Test.118;
joinpoint #Derived_gen.64 #Derived_gen.414 #Derived_gen.415 #Derived_gen.416:
joinpoint #Derived_gen.64 #Derived_gen.368 #Derived_gen.369 #Derived_gen.370:
let Test.130 : Int1 = false;
let Test.127 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.416 UpdateModeId { id: 330 } TagId(1) Test.70 Test.72 Test.73 Test.71 Test.130;
let Test.127 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.370 UpdateModeId { id: 271 } TagId(1) Test.70 Test.72 Test.73 Test.71 Test.130;
let Test.129 : Int1 = false;
let Test.128 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.415 UpdateModeId { id: 329 } TagId(1) Test.76 Test.18 Test.19 Test.17 Test.129;
let Test.128 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.369 UpdateModeId { id: 270 } TagId(1) Test.76 Test.18 Test.19 Test.17 Test.129;
let Test.126 : Int1 = true;
let Test.125 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.414 UpdateModeId { id: 328 } TagId(1) Test.127 Test.75 Test.128 Test.74 Test.126;
let Test.125 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.368 UpdateModeId { id: 269 } TagId(1) Test.127 Test.75 Test.128 Test.74 Test.126;
ret Test.125;
in
let #Derived_gen.65 : Int1 = lowlevel RefCountIsUnique Test.118;
if #Derived_gen.65 then
decref #Derived_gen.408;
let #Derived_gen.417 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reset { symbol: Test.138, id: UpdateModeId { id: 331 } };
let #Derived_gen.418 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.118, id: UpdateModeId { id: 332 } };
jump #Derived_gen.64 #Derived_gen.418 #Derived_gen.417 #Derived_gen.409;
decref #Derived_gen.363;
let #Derived_gen.371 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reset { symbol: Test.138, id: UpdateModeId { id: 272 } };
let #Derived_gen.372 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.118, id: UpdateModeId { id: 273 } };
jump #Derived_gen.64 #Derived_gen.372 #Derived_gen.371 #Derived_gen.364;
else
inc Test.70;
let #Derived_gen.419 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.118, id: UpdateModeId { id: 333 } };
jump #Derived_gen.64 #Derived_gen.419 #Derived_gen.409 #Derived_gen.408;
decref Test.118;
let #Derived_gen.373 : [<rnu>C *self I64 *self I32 Int1, <null>] = NullPointer;
jump #Derived_gen.64 #Derived_gen.364 #Derived_gen.363 #Derived_gen.373;
in
let Test.142 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 0) Test.118;
let Test.143 : U8 = 1i64;
@ -333,18 +335,18 @@ procedure Test.3 (Test.9, Test.10, Test.11):
let Test.141 : Int1 = true;
let Test.146 : Int1 = lowlevel Eq Test.141 Test.140;
if Test.146 then
jump Test.137 #Derived_gen.328 #Derived_gen.78;
jump Test.137 #Derived_gen.292 #Derived_gen.77;
else
jump Test.145 #Derived_gen.328 #Derived_gen.78;
jump Test.145 #Derived_gen.292 #Derived_gen.77;
else
jump Test.145 #Derived_gen.328 #Derived_gen.78;
jump Test.145 #Derived_gen.292 #Derived_gen.77;
else
jump Test.163 #Derived_gen.328 #Derived_gen.78;
jump Test.163 #Derived_gen.292 #Derived_gen.77;
else
jump Test.163 #Derived_gen.328 #Derived_gen.78;
jump Test.163 #Derived_gen.292 #Derived_gen.77;
else
decref #Derived_gen.328;
decref #Derived_gen.78;
decref #Derived_gen.292;
decref #Derived_gen.77;
joinpoint #Derived_gen.66:
let Test.135 : [<rnu>C *self I64 *self I32 Int1, <null>] = TagId(0) ;
ret Test.135;
@ -361,56 +363,58 @@ procedure Test.3 (Test.9, Test.10, Test.11):
decref Test.19;
jump #Derived_gen.66;
else
jump Test.176 #Derived_gen.78;
jump Test.176 #Derived_gen.77;
else
jump Test.176 #Derived_gen.78;
jump Test.176 #Derived_gen.77;
else
let Test.116 : Int1 = false;
let Test.115 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.78 UpdateModeId { id: 2 } TagId(1) Test.16 Test.11 Test.19 Test.10 Test.116;
let Test.115 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.77 UpdateModeId { id: 1 } TagId(1) Test.16 Test.11 Test.19 Test.10 Test.116;
ret Test.115;
in
let #Derived_gen.73 : Int1 = lowlevel RefCountIsUnique Test.9;
if #Derived_gen.73 then
let #Derived_gen.429 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.9, id: UpdateModeId { id: 343 } };
jump #Derived_gen.72 #Derived_gen.429;
let #Derived_gen.382 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.9, id: UpdateModeId { id: 282 } };
jump #Derived_gen.72 #Derived_gen.382;
else
inc Test.16;
inc Test.19;
let #Derived_gen.430 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.9, id: UpdateModeId { id: 344 } };
jump #Derived_gen.72 #Derived_gen.430;
decref Test.9;
let #Derived_gen.383 : [<rnu>C *self I64 *self I32 Int1, <null>] = NullPointer;
jump #Derived_gen.72 #Derived_gen.383;
else
let Test.96 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 0) Test.9;
let Test.98 : I64 = UnionAtIndex (Id 1) (Index 1) Test.9;
let Test.99 : [<rnu>C *self I64 *self I32 Int1, <null>] = UnionAtIndex (Id 1) (Index 2) Test.9;
let Test.97 : I32 = UnionAtIndex (Id 1) (Index 3) Test.9;
joinpoint #Derived_gen.74 #Derived_gen.433:
joinpoint #Derived_gen.74 #Derived_gen.385:
let Test.247 : Int1 = CallByName Num.22 Test.10 Test.97;
if Test.247 then
let Test.250 : [<rnu>C *self I64 *self I32 Int1, <null>] = CallByName Test.3 Test.96 Test.10 Test.11;
let Test.249 : Int1 = true;
let Test.248 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.433 UpdateModeId { id: 347 } TagId(1) Test.250 Test.98 Test.99 Test.97 Test.249;
let Test.248 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.385 UpdateModeId { id: 284 } TagId(1) Test.250 Test.98 Test.99 Test.97 Test.249;
ret Test.248;
else
let Test.243 : Int1 = CallByName Num.24 Test.10 Test.97;
if Test.243 then
let Test.246 : [<rnu>C *self I64 *self I32 Int1, <null>] = CallByName Test.3 Test.99 Test.10 Test.11;
let Test.245 : Int1 = true;
let Test.244 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.433 UpdateModeId { id: 347 } TagId(1) Test.96 Test.98 Test.246 Test.97 Test.245;
let Test.244 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.385 UpdateModeId { id: 284 } TagId(1) Test.96 Test.98 Test.246 Test.97 Test.245;
ret Test.244;
else
let Test.242 : Int1 = true;
let Test.241 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.433 UpdateModeId { id: 347 } TagId(1) Test.96 Test.11 Test.99 Test.10 Test.242;
let Test.241 : [<rnu>C *self I64 *self I32 Int1, <null>] = Reuse #Derived_gen.385 UpdateModeId { id: 284 } TagId(1) Test.96 Test.11 Test.99 Test.10 Test.242;
ret Test.241;
in
let #Derived_gen.75 : Int1 = lowlevel RefCountIsUnique Test.9;
if #Derived_gen.75 then
let #Derived_gen.434 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.9, id: UpdateModeId { id: 348 } };
jump #Derived_gen.74 #Derived_gen.434;
let #Derived_gen.386 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.9, id: UpdateModeId { id: 285 } };
jump #Derived_gen.74 #Derived_gen.386;
else
inc Test.96;
inc Test.99;
let #Derived_gen.435 : [<rnu>C *self I64 *self I32 Int1, <null>] = ResetRef { symbol: Test.9, id: UpdateModeId { id: 349 } };
jump #Derived_gen.74 #Derived_gen.435;
decref Test.9;
let #Derived_gen.387 : [<rnu>C *self I64 *self I32 Int1, <null>] = NullPointer;
jump #Derived_gen.74 #Derived_gen.387;
procedure Test.0 ():
let Test.281 : [<rnu>C *self I64 *self I32 Int1, <null>] = TagId(0) ;