1-- SPDX-FileCopyrightText: 2025 Sören Tempel <soeren+git@soeren-tempel.net>2--3-- SPDX-License-Identifier: GPL-3.0-only45module Main (main) where67import Control.Monad (void)8import Criterion.Main (Benchmarkable, bench, bgroup, defaultMain, nfIO)9import Data.Word (Word32, Word64, Word8)10import Language.QBE (parseAndFind)11import Language.QBE.Simulator (execFunc)12import Language.QBE.Simulator.Default.Expression qualified as D13import Language.QBE.Simulator.Default.State (Env, mkEnv, run)14import Language.QBE.Types qualified as QBE1516exec :: [D.RegVal] -> String -> IO ()17exec params input = do18 (prog, func) <- parseAndFind entryFunc input1920 env <- mkEnv prog 0 memSize :: IO (Env D.RegVal Word8)21 void $ run env (execFunc func params)22 where23 memSize :: Word6424 memSize = 1024 * 1024 * 102526 entryFunc :: QBE.GlobalIdent27 entryFunc = QBE.GlobalIdent "entry"2829bubbleSort :: Word32 -> Benchmarkable30bubbleSort inputSize =31 nfIO (readFile "bench/data/bubble-sort.qbe" >>= exec [D.VWord inputSize])3233-- Our benchmark harness.34main :: IO ()35main =36 defaultMain37 [ bgroup38 "bubble-sort"39 [ bench "10" $ bubbleSort 25,40 bench "50" $ bubbleSort 50,41 bench "100" $ bubbleSort 10042 ]43 ]