1-- SPDX-FileCopyrightText: 2025 Sören Tempel <soeren+git@soeren-tempel.net>2--3-- SPDX-License-Identifier: MIT AND GPL-3.0-only45module Exec (execBench) where67import Control.Monad (void)8import Criterion.Main (Benchmark, Benchmarkable, bench, bgroup, nfIO)9import Data.Word (Word64, Word8)10import Language.QBE (parseAndFind)11import Language.QBE.Simulator (execFunc)12import Language.QBE.Simulator.Concolic.Expression qualified as CE13import Language.QBE.Simulator.Default.Expression qualified as DE14import Language.QBE.Simulator.Default.State (SimState, mkEnv, run)15import Language.QBE.Simulator.Expression qualified as E16import Language.QBE.Types qualified as QBE1718exec :: [CE.Concolic DE.RegVal] -> String -> IO ()19exec params input = do20 (prog, func) <- parseAndFind entryFunc input2122 env <- mkEnv prog 0 102423 void $ run env (execFunc func params :: SimState (CE.Concolic DE.RegVal) (CE.Concolic Word8) (Maybe (CE.Concolic DE.RegVal)))24 where25 entryFunc :: QBE.GlobalIdent26 entryFunc = QBE.GlobalIdent "entry"2728------------------------------------------------------------------------2930bubbleSort :: Word64 -> Benchmarkable31bubbleSort inputSize =32 nfIO (readFile "bench/data/Exec/bubble-sort.qbe" >>= exec [E.fromLit (QBE.Base QBE.Word) inputSize])3334execBench :: Benchmark35execBench =36 bgroup37 "Concrete Execution"38 [ bench "10" $ bubbleSort 25,39 bench "50" $ bubbleSort 50,40 bench "100" $ bubbleSort 10041 ]