mirror of
https://github.com/roc-lang/roc.git
synced 2025-08-04 04:08:19 +00:00
Start reuse similar layouts
This commit is contained in:
parent
b32cd5687b
commit
d82f3ee09d
6 changed files with 324 additions and 79 deletions
63
crates/compiler/test_mono/generated/binary_tree_fbip.txt
Normal file
63
crates/compiler/test_mono/generated/binary_tree_fbip.txt
Normal file
|
@ -0,0 +1,63 @@
|
|||
procedure Num.19 (#Attr.2, #Attr.3):
|
||||
let Num.281 : I64 = lowlevel NumAdd #Attr.2 #Attr.3;
|
||||
ret Num.281;
|
||||
|
||||
procedure Test.4 (Test.27):
|
||||
let Test.39 : [<rnu>C [<rnu><null>, C *self *self] *self, <null>] = TagId(0) ;
|
||||
let Test.40 : I64 = 0i64;
|
||||
let Test.38 : I64 = CallByName Test.5 Test.27 Test.39 Test.40;
|
||||
ret Test.38;
|
||||
|
||||
procedure Test.5 (Test.67, Test.68, Test.69):
|
||||
joinpoint Test.41 Test.29 Test.30 Test.31:
|
||||
let Test.51 : U8 = 0i64;
|
||||
let Test.52 : U8 = GetTagId Test.29;
|
||||
let Test.53 : Int1 = lowlevel Eq Test.51 Test.52;
|
||||
if Test.53 then
|
||||
let Test.32 : [<rnu><null>, C *self *self] = UnionAtIndex (Id 0) (Index 0) Test.29;
|
||||
inc Test.32;
|
||||
let Test.33 : [<rnu><null>, C *self *self] = UnionAtIndex (Id 0) (Index 1) Test.29;
|
||||
inc Test.33;
|
||||
let #Derived_gen.0 : [<rnu><null>, C *self *self] = Reset { symbol: Test.29, id: UpdateModeId { id: 0 } };
|
||||
let #Derived_gen.1 : [<rnu>C [<rnu><null>, C *self *self] *self, <null>] = lowlevel PtrCast #Derived_gen.0;
|
||||
let Test.43 : [<rnu>C [<rnu><null>, C *self *self] *self, <null>] = Reuse #Derived_gen.1 UpdateModeId { id: 0 } 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;
|
||||
else
|
||||
let Test.48 : U8 = 1i64;
|
||||
let Test.49 : U8 = GetTagId Test.30;
|
||||
let Test.50 : Int1 = lowlevel Eq Test.48 Test.49;
|
||||
if Test.50 then
|
||||
let Test.35 : [<rnu><null>, C *self *self] = UnionAtIndex (Id 1) (Index 0) Test.30;
|
||||
let Test.36 : [<rnu>C [<rnu><null>, C *self *self] *self, <null>] = UnionAtIndex (Id 1) (Index 1) Test.30;
|
||||
let #Derived_gen.3 : Int1 = lowlevel RefCountIsUnique Test.30;
|
||||
if #Derived_gen.3 then
|
||||
decref Test.30;
|
||||
jump Test.41 Test.35 Test.36 Test.31;
|
||||
else
|
||||
inc Test.35;
|
||||
inc Test.36;
|
||||
decref Test.30;
|
||||
jump Test.41 Test.35 Test.36 Test.31;
|
||||
else
|
||||
ret Test.31;
|
||||
in
|
||||
jump Test.41 Test.67 Test.68 Test.69;
|
||||
|
||||
procedure Test.0 ():
|
||||
let Test.64 : [<rnu><null>, C *self *self] = TagId(1) ;
|
||||
let Test.65 : [<rnu><null>, C *self *self] = TagId(1) ;
|
||||
let Test.62 : [<rnu><null>, C *self *self] = TagId(0) Test.64 Test.65;
|
||||
let Test.63 : [<rnu><null>, C *self *self] = TagId(1) ;
|
||||
let Test.58 : [<rnu><null>, C *self *self] = TagId(0) Test.62 Test.63;
|
||||
let Test.60 : [<rnu><null>, C *self *self] = TagId(1) ;
|
||||
let Test.61 : [<rnu><null>, C *self *self] = TagId(1) ;
|
||||
let Test.59 : [<rnu><null>, C *self *self] = TagId(0) Test.60 Test.61;
|
||||
let Test.54 : [<rnu><null>, C *self *self] = TagId(0) Test.58 Test.59;
|
||||
let Test.56 : [<rnu><null>, C *self *self] = TagId(1) ;
|
||||
let Test.57 : [<rnu><null>, C *self *self] = TagId(1) ;
|
||||
let Test.55 : [<rnu><null>, C *self *self] = TagId(0) Test.56 Test.57;
|
||||
let Test.10 : [<rnu><null>, C *self *self] = TagId(0) Test.54 Test.55;
|
||||
let Test.37 : I64 = CallByName Test.4 Test.10;
|
||||
ret Test.37;
|
|
@ -113,22 +113,23 @@ procedure Test.1 (Test.77):
|
|||
let Test.49 : [<r>C I64, C List *self] = StructAtIndex 1 Test.6;
|
||||
dec Test.50;
|
||||
let Test.10 : I64 = UnionAtIndex (Id 0) (Index 0) Test.49;
|
||||
joinpoint #Derived_gen.7:
|
||||
joinpoint #Derived_gen.9:
|
||||
let Test.27 : Int1 = CallByName Num.22 Test.8 Test.10;
|
||||
ret Test.27;
|
||||
in
|
||||
let #Derived_gen.8 : Int1 = lowlevel RefCountIsUnique Test.49;
|
||||
if #Derived_gen.8 then
|
||||
let #Derived_gen.10 : Int1 = lowlevel RefCountIsUnique Test.49;
|
||||
if #Derived_gen.10 then
|
||||
decref Test.49;
|
||||
jump #Derived_gen.7;
|
||||
jump #Derived_gen.9;
|
||||
else
|
||||
decref Test.49;
|
||||
jump #Derived_gen.7;
|
||||
jump #Derived_gen.9;
|
||||
else
|
||||
let Test.39 : [<r>C I64, C List *self] = StructAtIndex 0 Test.6;
|
||||
let Test.42 : [<r>C I64, C List *self] = StructAtIndex 1 Test.6;
|
||||
let Test.41 : List [<r>C I64, C List *self] = Array [Test.42];
|
||||
let Test.40 : [<r>C I64, C List *self] = Reuse #Derived_gen.1 UpdateModeId { id: 1 } TagId(1) Test.41;
|
||||
let #Derived_gen.4 : [<r>C I64, C List *self] = lowlevel PtrCast #Derived_gen.1;
|
||||
let Test.40 : [<r>C I64, C List *self] = Reuse #Derived_gen.4 UpdateModeId { id: 1 } TagId(1) Test.41;
|
||||
let Test.38 : {[<r>C I64, C List *self], [<r>C I64, C List *self]} = Struct {Test.39, Test.40};
|
||||
jump Test.26 Test.38;
|
||||
else
|
||||
|
@ -136,17 +137,17 @@ procedure Test.1 (Test.77):
|
|||
inc Test.61;
|
||||
let Test.62 : U8 = 1i64;
|
||||
let Test.63 : U8 = GetTagId Test.61;
|
||||
let #Derived_gen.4 : [<r>C I64, C List *self] = Reset { symbol: Test.61, id: UpdateModeId { id: 4 } };
|
||||
let #Derived_gen.5 : [<r>C I64, C List *self] = Reset { symbol: Test.61, id: UpdateModeId { id: 4 } };
|
||||
let Test.64 : Int1 = lowlevel Eq Test.62 Test.63;
|
||||
if Test.64 then
|
||||
decref #Derived_gen.4;
|
||||
decref #Derived_gen.5;
|
||||
let Test.52 : [<r>C I64, C List *self] = StructAtIndex 0 Test.6;
|
||||
let Test.12 : List [<r>C I64, C List *self] = UnionAtIndex (Id 1) (Index 0) Test.52;
|
||||
inc Test.12;
|
||||
let Test.51 : [<r>C I64, C List *self] = StructAtIndex 1 Test.6;
|
||||
dec Test.52;
|
||||
let Test.14 : List [<r>C I64, C List *self] = UnionAtIndex (Id 1) (Index 0) Test.51;
|
||||
joinpoint #Derived_gen.9:
|
||||
joinpoint #Derived_gen.11:
|
||||
let Test.35 : {} = Struct {};
|
||||
inc Test.12;
|
||||
inc Test.14;
|
||||
|
@ -166,19 +167,22 @@ procedure Test.1 (Test.77):
|
|||
let Test.28 : Int1 = CallByName Bool.1;
|
||||
ret Test.28;
|
||||
in
|
||||
let #Derived_gen.10 : Int1 = lowlevel RefCountIsUnique Test.51;
|
||||
if #Derived_gen.10 then
|
||||
let #Derived_gen.12 : Int1 = lowlevel RefCountIsUnique Test.51;
|
||||
if #Derived_gen.12 then
|
||||
decref Test.51;
|
||||
jump #Derived_gen.9;
|
||||
jump #Derived_gen.11;
|
||||
else
|
||||
inc Test.14;
|
||||
decref Test.51;
|
||||
jump #Derived_gen.9;
|
||||
jump #Derived_gen.11;
|
||||
else
|
||||
let Test.48 : [<r>C I64, C List *self] = StructAtIndex 0 Test.6;
|
||||
inc Test.48;
|
||||
let Test.47 : List [<r>C I64, C List *self] = Array [Test.48];
|
||||
let Test.45 : [<r>C I64, C List *self] = Reuse #Derived_gen.4 UpdateModeId { id: 4 } TagId(1) Test.47;
|
||||
let #Derived_gen.8 : [<r>C I64, C List *self] = lowlevel PtrCast #Derived_gen.5;
|
||||
let Test.45 : [<r>C I64, C List *self] = Reuse #Derived_gen.8 UpdateModeId { id: 4 } TagId(1) Test.47;
|
||||
let Test.46 : [<r>C I64, C List *self] = StructAtIndex 1 Test.6;
|
||||
dec Test.48;
|
||||
let Test.44 : {[<r>C I64, C List *self], [<r>C I64, C List *self]} = Struct {Test.45, Test.46};
|
||||
jump Test.26 Test.44;
|
||||
in
|
||||
|
|
|
@ -9,7 +9,8 @@ procedure Test.2 (Test.5):
|
|||
let #Derived_gen.1 : [<rnnu>C List *self] = Reset { symbol: Test.5, id: UpdateModeId { id: 1 } };
|
||||
let Test.15 : {} = Struct {};
|
||||
let Test.7 : List [<rnnu>C List *self] = CallByName List.5 Test.6 Test.15;
|
||||
let Test.14 : [<rnnu>C List *self] = Reuse #Derived_gen.1 UpdateModeId { id: 1 } TagId(0) Test.7;
|
||||
let #Derived_gen.2 : [<rnnu>C List *self] = lowlevel PtrCast #Derived_gen.1;
|
||||
let Test.14 : [<rnnu>C List *self] = Reuse #Derived_gen.2 UpdateModeId { id: 1 } TagId(0) Test.7;
|
||||
ret Test.14;
|
||||
|
||||
procedure Test.0 ():
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue