Skip to content

Commit c94937d

Browse files
committed
Add decision procedure for hoist-builtins pass
1 parent c35657a commit c94937d

27 files changed

Lines changed: 1318 additions & 485 deletions

plutus-core/untyped-plutus-core/src/UntypedPlutusCore/Transform/Certify/Trace.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ data CertifiedOptStage
2828
| ApplyToCase
2929
| CaseReduce
3030
| LetFloatOut
31+
| PolyBuiltin
3132
deriving stock (Show, Generic)
3233
deriving anyclass (NFData)
3334

@@ -44,7 +45,6 @@ at https://github.com/IntersectMBO/plutus/issues. -}
4445
data UncertifiedOptStage
4546
= CaseOfCase
4647
| ConstantFolding
47-
| PolyBuiltin
4848
deriving stock (Show, Generic)
4949
deriving anyclass (NFData)
5050

@@ -81,7 +81,7 @@ pattern ConstantFoldingStage :: OptStage
8181
pattern ConstantFoldingStage = Left ConstantFolding
8282

8383
pattern PolyBuiltinStage :: OptStage
84-
pattern PolyBuiltinStage = Left PolyBuiltin
84+
pattern PolyBuiltinStage = Right PolyBuiltin
8585

8686
{-# COMPLETE
8787
FloatDelayStage

plutus-metatheory/src/CertifierReport.lagda.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ open import VerifiedCompilation.UntypedTranslation
1313
open import VerifiedCompilation.UInline
1414
open import VerifiedCompilation.UCaseReduce as CR
1515
import VerifiedCompilation.FloatOut as FloatOut
16+
open import VerifiedCompilation.UCSE as CSE
1617
open import Untyped.Relation.Binary.Modular
1718
open import Untyped.Relation.Binary.Core renaming (Pointwise to PW)
1819
open import Untyped
@@ -48,11 +49,11 @@ showCertifiedOptTag cseT = "Common Subexpression Elimination"
4849
showCertifiedOptTag applyToCaseT = "Transform multi-argument applications into case-constr form"
4950
showCertifiedOptTag caseReduceT = "Case-Constr and Case-Constant Cancellation"
5051
showCertifiedOptTag letFloatOutT = "Float bindings outwards"
52+
showCertifiedOptTag polyBuiltinT = "Hoist Polymorphic Builtins"
5153
5254
showUncertifiedOptTag : UncertifiedOptTag → String
5355
showUncertifiedOptTag caseOfCaseT = "Case-of-Case"
5456
showUncertifiedOptTag constantFoldingT = "Constant Folding"
55-
showUncertifiedOptTag polyBuiltinT = "Hoist Polymorphic Builtins"
5657
5758
showTag : OptTag → String
5859
showTag (inj₁ tag) = showUncertifiedOptTag tag ++ " ⚠ (certifier unavailable)"
@@ -129,6 +130,7 @@ numSites forceCaseDelayT p = numSites′ p
129130
numSites applyToCaseT p = numSites′ p
130131
numSites {M = M} caseReduceT p = numSitesCaseReduce (CR.sound {M = M} p)
131132
numSites letFloatOutT p = FloatOut.numSites p
133+
numSites polyBuiltinT p = CSE.polyNumSites p
132134
133135
showSites : {M N : 0 ⊢} → (tag : OptTag) → RelationOf tag M N → String
134136
showSites (inj₁ _) _ = ""

plutus-metatheory/src/FFI/AgdaUnparse.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,11 @@ instance AgdaUnparse CertifiedOptStage where
7272
agdaUnparse ApplyToCase = "applyToCaseT"
7373
agdaUnparse CaseReduce = "caseReduceT"
7474
agdaUnparse LetFloatOut = "letFloatOutT"
75+
agdaUnparse PolyBuiltin = "polyBuiltinT"
7576

7677
instance AgdaUnparse UncertifiedOptStage where
7778
agdaUnparse CaseOfCase = "caseOfCaseT"
7879
agdaUnparse ConstantFolding = "constantFoldingT"
79-
agdaUnparse PolyBuiltin = "polyBuiltinT"
8080

8181
instance AgdaUnparse Hints.Hints where
8282
agdaUnparse = \case

plutus-metatheory/src/MAlonzo/Code/Certifier.hs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ d_runCertifier_2 ::
3434
(MAlonzo.Code.Utils.T__'215'__436
3535
(MAlonzo.Code.Utils.T_Either_6
3636
MAlonzo.Code.VerifiedCompilation.Trace.T_UncertifiedOptTag_4
37-
MAlonzo.Code.VerifiedCompilation.Trace.T_CertifiedOptTag_12)
37+
MAlonzo.Code.VerifiedCompilation.Trace.T_CertifiedOptTag_10)
3838
MAlonzo.Code.VerifiedCompilation.Trace.T_Hints_80)
3939
MAlonzo.Code.RawU.T_Untyped_208 ->
4040
MAlonzo.Code.Utils.T_Either_6
@@ -65,7 +65,7 @@ runCertifierMain ::
6565
(MAlonzo.Code.Utils.T__'215'__436
6666
(MAlonzo.Code.Utils.T_Either_6
6767
MAlonzo.Code.VerifiedCompilation.Trace.T_UncertifiedOptTag_4
68-
MAlonzo.Code.VerifiedCompilation.Trace.T_CertifiedOptTag_12)
68+
MAlonzo.Code.VerifiedCompilation.Trace.T_CertifiedOptTag_10)
6969
MAlonzo.Code.VerifiedCompilation.Trace.T_Hints_80)
7070
MAlonzo.Code.RawU.T_Untyped_208 ->
7171
MAlonzo.Code.Agda.Builtin.List.T_List_10
@@ -80,7 +80,7 @@ d_runCertifierMain_10 ::
8080
(MAlonzo.Code.Utils.T__'215'__436
8181
(MAlonzo.Code.Utils.T_Either_6
8282
MAlonzo.Code.VerifiedCompilation.Trace.T_UncertifiedOptTag_4
83-
MAlonzo.Code.VerifiedCompilation.Trace.T_CertifiedOptTag_12)
83+
MAlonzo.Code.VerifiedCompilation.Trace.T_CertifiedOptTag_10)
8484
MAlonzo.Code.VerifiedCompilation.Trace.T_Hints_80)
8585
MAlonzo.Code.RawU.T_Untyped_208 ->
8686
[MAlonzo.Code.VerifiedCompilation.Trace.T_EvalResult_122] ->
@@ -104,15 +104,15 @@ d_runCertifierMain_10 v0 v1
104104
MAlonzo.Code.Utils.C__'44'__450
105105
(coe MAlonzo.Code.Agda.Builtin.Bool.C_false_8)
106106
(coe
107-
MAlonzo.Code.CertifierReport.d_makeReport_290 (coe v2) (coe v1)))
107+
MAlonzo.Code.CertifierReport.d_makeReport_292 (coe v2) (coe v1)))
108108
MAlonzo.Code.VerifiedCompilation.C_abort_10 v4
109109
-> coe
110110
MAlonzo.Code.Agda.Builtin.Maybe.C_just_16
111111
(coe
112112
MAlonzo.Code.Utils.C__'44'__450
113113
(coe MAlonzo.Code.Agda.Builtin.Bool.C_false_8)
114114
(coe
115-
MAlonzo.Code.CertifierReport.d_makeReport_290 (coe v2) (coe v1)))
115+
MAlonzo.Code.CertifierReport.d_makeReport_292 (coe v2) (coe v1)))
116116
_ -> MAlonzo.RTE.mazUnreachableError
117117
MAlonzo.Code.Utils.C_inj'8322'_14 v3
118118
-> coe
@@ -123,5 +123,5 @@ d_runCertifierMain_10 v0 v1
123123
MAlonzo.Code.Utils.C__'44'__450
124124
(coe MAlonzo.Code.Agda.Builtin.Bool.C_true_10)
125125
(coe
126-
MAlonzo.Code.CertifierReport.d_makeReport_290 (coe v2) (coe v1))))
126+
MAlonzo.Code.CertifierReport.d_makeReport_292 (coe v2) (coe v1))))
127127
_ -> MAlonzo.RTE.mazUnreachableError)

0 commit comments

Comments
 (0)