Skip to content
Snippets Groups Projects

Perf: Implement a new algorithm for pattern matching compilation to reduce code size

Merged Melwyn Saldanha requested to merge melwyn95@compile_pattern_matching_to_decision_tree into dev
2 files
+ 71
60
Compare changes
  • Side-by-side
  • Inline
Files
2
@@ -51,16 +51,17 @@ let%expect_test _ =
CAR ;
SENDER ;
PAIR ;
DUP 2 ;
DUP 2 ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
PUSH nat 0 ;
DUP 4 ;
DUP 5 ;
CDR ;
COMPARE ;
GT ;
PUSH nat 0 ;
DUP 4 ;
DUP 4 ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
DIG 2 ;
COMPARE ;
GT ;
AND ;
@@ -82,32 +83,34 @@ let%expect_test _ =
UPDATE 1 ;
NIL operation }
{ DUP 2 ;
NIL operation ;
DUP 3 ;
CDR ;
PUSH mutez 0 ;
DIG 5 ;
CAR ;
CAR ;
DIG 5 ;
DUP 2 ;
CAR ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
DIG 2 ;
NIL operation ;
DIG 3 ;
CDR ;
PUSH mutez 0 ;
DIG 4 ;
TRANSFER_TOKENS ;
CONS } }
{ IF_LEFT
{ DUP 2 ;
NIL operation ;
DUP 3 ;
CDR ;
PUSH mutez 0 ;
DIG 5 ;
CAR ;
CDR ;
DIG 5 ;
DUP 2 ;
CAR ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
DIG 2 ;
NIL operation ;
DIG 3 ;
CDR ;
PUSH mutez 0 ;
DIG 4 ;
TRANSFER_TOKENS }
{ DUP 2 ;
NIL operation ;
@@ -134,12 +137,13 @@ let%expect_test _ =
DUP 4 ;
CAR ;
PAIR ;
DUP 4 ;
GET 4 ;
DUP 4 ;
DUP 3 ;
DUP 2 ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
DUP 5 ;
GET 4 ;
SWAP ;
SUB ;
ISNAT ;
IF_NONE { PUSH string "NotEnoughAllowance" ; FAILWITH } {} ;
@@ -151,13 +155,14 @@ let%expect_test _ =
IF { SWAP ; DROP ; NONE nat } { SWAP ; SOME } ;
DIG 2 ;
UPDATE } ;
DUP 3 ;
GET 4 ;
DUP 3 ;
DUP 5 ;
DUP 2 ;
DUP 4 ;
CAR ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
DUP 4 ;
GET 4 ;
SWAP ;
SUB ;
ISNAT ;
IF_NONE { PUSH string "NotEnoughBalance" ; FAILWITH } {} ;
@@ -170,13 +175,13 @@ let%expect_test _ =
DUP 4 ;
CAR ;
UPDATE ;
DUP 3 ;
GET 4 ;
DUP 2 ;
DUP 5 ;
DUP ;
DUP 4 ;
GET 3 ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
DUP 4 ;
GET 4 ;
ADD ;
DUP 5 ;
DIG 5 ;
@@ -2710,16 +2715,17 @@ let%expect_test _ =
CAR ;
SENDER ;
PAIR ;
DUP 2 ;
DUP 2 ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
PUSH nat 0 ;
DUP 4 ;
DUP 5 ;
CDR ;
COMPARE ;
GT ;
PUSH nat 0 ;
DUP 4 ;
DUP 4 ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
DIG 2 ;
COMPARE ;
GT ;
AND ;
@@ -2741,32 +2747,34 @@ let%expect_test _ =
UPDATE 1 ;
NIL operation }
{ DUP 2 ;
NIL operation ;
DUP 3 ;
CDR ;
PUSH mutez 0 ;
DIG 5 ;
CAR ;
CAR ;
DIG 5 ;
DUP 2 ;
CAR ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
DIG 2 ;
NIL operation ;
DIG 3 ;
CDR ;
PUSH mutez 0 ;
DIG 4 ;
TRANSFER_TOKENS ;
CONS } }
{ IF_LEFT
{ DUP 2 ;
NIL operation ;
DUP 3 ;
CDR ;
PUSH mutez 0 ;
DIG 5 ;
CAR ;
CDR ;
DIG 5 ;
DUP 2 ;
CAR ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
DIG 2 ;
NIL operation ;
DIG 3 ;
CDR ;
PUSH mutez 0 ;
DIG 4 ;
TRANSFER_TOKENS }
{ DUP 2 ;
NIL operation ;
@@ -2793,12 +2801,13 @@ let%expect_test _ =
DUP 4 ;
CAR ;
PAIR ;
DUP 4 ;
GET 4 ;
DUP 4 ;
DUP 3 ;
DUP 2 ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
DUP 5 ;
GET 4 ;
SWAP ;
SUB ;
ISNAT ;
IF_NONE { PUSH string "NotEnoughAllowance" ; FAILWITH } {} ;
@@ -2810,13 +2819,14 @@ let%expect_test _ =
IF { SWAP ; DROP ; NONE nat } { SWAP ; SOME } ;
DIG 2 ;
UPDATE } ;
DUP 3 ;
GET 4 ;
DUP 3 ;
DUP 5 ;
DUP 2 ;
DUP 4 ;
CAR ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
DUP 4 ;
GET 4 ;
SWAP ;
SUB ;
ISNAT ;
IF_NONE { PUSH string "NotEnoughBalance" ; FAILWITH } {} ;
@@ -2829,13 +2839,13 @@ let%expect_test _ =
DUP 4 ;
CAR ;
UPDATE ;
DUP 3 ;
GET 4 ;
DUP 2 ;
DUP 5 ;
DUP ;
DUP 4 ;
GET 3 ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
DUP 4 ;
GET 4 ;
ADD ;
DUP 5 ;
DIG 5 ;
@@ -2956,11 +2966,12 @@ let%expect_test _ =
{ DROP 3 ;
PUSH string "Cannot find view feedback on given oracle address" ;
FAILWITH }
{ SWAP ;
{ DIG 3 ;
DUP 2 ;
PAIR ;
DIG 2 ;
DIG 3 ;
DUP 4 ;
PAIR ;
DIG 2 ;
SOURCE ;
SWAP ;
SOME ;
Loading