@@ -1163,8 +1163,17 @@ def _get_host_and_port(pid: int) -> tuple[str, int]:
1163
1163
return conn .laddr
1164
1164
1165
1165
1166
- class BoosterServerArgs (KoreServerArgs ):
1166
+ class FallbackReason (Enum ):
1167
+ BRANCHING = 'Branching'
1168
+ STUCK = 'Stuck'
1169
+ ABORTED = 'Aborted'
1170
+
1171
+
1172
+ class BoosterServerArgs (KoreServerArgs , total = False ):
1167
1173
llvm_kompiled_dir : Required [str | Path ]
1174
+ fallback_on : Iterable [str | FallbackReason ] | None
1175
+ interim_simplification : int | None
1176
+ no_post_exec_simplify : bool | None
1168
1177
1169
1178
1170
1179
class BoosterServer (KoreServer ):
@@ -1173,6 +1182,10 @@ class BoosterServer(KoreServer):
1173
1182
_llvm_definition : Path
1174
1183
_llvm_dt : Path
1175
1184
1185
+ _fallback_on : list [FallbackReason ] | None
1186
+ _interim_simplification : int | None
1187
+ _no_post_exec_simplify : bool
1188
+
1176
1189
def __init__ (self , args : BoosterServerArgs ):
1177
1190
self ._llvm_kompiled_dir = Path (args ['llvm_kompiled_dir' ])
1178
1191
@@ -1189,6 +1202,14 @@ def __init__(self, args: BoosterServerArgs):
1189
1202
self ._llvm_definition = self ._llvm_kompiled_dir / 'definition.kore'
1190
1203
self ._llvm_dt = self ._llvm_kompiled_dir / 'dt'
1191
1204
1205
+ if fallback_on := args .get ('fallback_on' ):
1206
+ self ._fallback_on = [FallbackReason (reason ) for reason in fallback_on ]
1207
+ else :
1208
+ self ._fallback_on = None
1209
+
1210
+ self ._interim_simplification = args .get ('interim_simplification' )
1211
+ self ._no_post_exec_simplify = bool (args .get ('no_post_exec_simplify' ))
1212
+
1192
1213
if not args .get ('command' ):
1193
1214
args ['command' ] = 'kore-rpc-booster'
1194
1215
@@ -1200,9 +1221,21 @@ def _validate(self) -> None:
1200
1221
check_file_path (self ._llvm_definition )
1201
1222
check_dir_path (self ._llvm_dt )
1202
1223
1224
+ if self ._fallback_on is not None and not self ._fallback_on :
1225
+ raise ValueError ("'fallback_on' must not be empty" )
1226
+
1227
+ if self ._interim_simplification and self ._interim_simplification < 0 :
1228
+ raise ValueError (f"'interim_simplification' must not be negative, got: { self ._interim_simplification } " )
1229
+
1203
1230
def _extra_args (self ) -> list [str ]:
1204
1231
res = super ()._extra_args ()
1205
1232
res += ['--llvm-backend-library' , str (self ._dylib )]
1233
+ if self ._fallback_on is not None :
1234
+ res += ['--fallback-on' , ',' .join (reason .value for reason in self ._fallback_on )]
1235
+ if self ._interim_simplification is not None :
1236
+ res += ['--interim-simplification' , str (self ._interim_simplification )]
1237
+ if self ._no_post_exec_simplify :
1238
+ res += ['--no-post-exec-simplify' ]
1206
1239
return res
1207
1240
1208
1241
def _populate_bug_report (self , bug_report : BugReport ) -> None :
@@ -1217,7 +1250,6 @@ def kore_server(
1217
1250
definition_dir : str | Path ,
1218
1251
module_name : str ,
1219
1252
* ,
1220
- llvm_definition_dir : Path | None = None ,
1221
1253
port : int | None = None ,
1222
1254
command : str | Iterable [str ] | None = None ,
1223
1255
smt_timeout : int | None = None ,
@@ -1226,6 +1258,12 @@ def kore_server(
1226
1258
log_axioms_file : Path | None = None ,
1227
1259
haskell_log_format : KoreExecLogFormat | None = None ,
1228
1260
haskell_log_entries : Iterable [str ] | None = None ,
1261
+ # booster
1262
+ llvm_definition_dir : Path | None = None ,
1263
+ fallback_on : Iterable [str | FallbackReason ] | None ,
1264
+ interim_simplification : int | None ,
1265
+ no_post_exec_simplify : bool | None ,
1266
+ # ---
1229
1267
bug_report : BugReport | None = None ,
1230
1268
) -> KoreServer :
1231
1269
kore_args : KoreServerArgs = {
@@ -1242,6 +1280,12 @@ def kore_server(
1242
1280
'bug_report' : bug_report ,
1243
1281
}
1244
1282
if llvm_definition_dir :
1245
- booster_args : BoosterServerArgs = {'llvm_kompiled_dir' : llvm_definition_dir , ** kore_args }
1283
+ booster_args : BoosterServerArgs = {
1284
+ 'llvm_kompiled_dir' : llvm_definition_dir ,
1285
+ 'fallback_on' : fallback_on ,
1286
+ 'interim_simplification' : interim_simplification ,
1287
+ 'no_post_exec_simplify' : no_post_exec_simplify ,
1288
+ ** kore_args ,
1289
+ }
1246
1290
return BoosterServer (booster_args )
1247
1291
return KoreServer (kore_args )
0 commit comments