@@ -16,11 +16,6 @@ module Booster.LLVM.Internal (
16
16
KoreStringPatternAPI (.. ),
17
17
KoreSymbolAPI (.. ),
18
18
KoreSortAPI (.. ),
19
- SomePtr (.. ),
20
- somePtr ,
21
- LlvmCall (.. ),
22
- LlvmCallArg (.. ),
23
- LlvmVar (.. ),
24
19
LlvmError (.. ),
25
20
) where
26
21
@@ -32,8 +27,7 @@ import Control.Monad.Extra (whenM)
32
27
import Control.Monad.IO.Class (MonadIO (.. ))
33
28
import Control.Monad.Trans.Reader (ReaderT (runReaderT ))
34
29
import Control.Monad.Trans.Reader qualified as Reader
35
- import Data.Binary (Binary , get , put )
36
- import Data.ByteString.Char8 (ByteString , pack )
30
+ import Data.ByteString.Char8 (ByteString )
37
31
import Data.ByteString.Char8 qualified as BS
38
32
import Data.Data (Data )
39
33
import Data.HashMap.Strict (HashMap )
@@ -45,16 +39,12 @@ import Foreign.C qualified as C
45
39
import Foreign.C.Types (CSize (.. ))
46
40
import Foreign.Marshal (alloca )
47
41
import Foreign.Storable (peek )
48
- import GHC.Generics (Generic )
49
42
import System.IO (hPutStrLn , stderr )
50
43
import System.Posix.DynamicLinker qualified as Linker
51
44
52
45
import Booster.LLVM.TH (dynamicBindings )
53
46
import Booster.Pattern.Base
54
- import Booster.Pattern.Binary
55
47
import Booster.Pattern.Util (sortOfTerm )
56
- import Booster.Trace
57
- import Booster.Trace qualified as Trace
58
48
59
49
data KorePattern
60
50
data KoreSort
@@ -120,39 +110,6 @@ data API = API
120
110
newtype LLVM a = LLVM (ReaderT API IO a )
121
111
deriving newtype (Functor , Applicative , Monad , MonadIO , MonadThrow , MonadCatch , MonadMask )
122
112
123
- newtype SomePtr = SomePtr ByteString
124
- deriving newtype (Binary )
125
-
126
- somePtr :: Show a => a -> SomePtr
127
- somePtr ptr = SomePtr $ pack $ show ptr
128
-
129
- data LlvmCallArg
130
- = LlvmCallArgByteString ByteString
131
- | LlvmCallArgWord Word
132
- | LlvmCallArgPtr SomePtr
133
- deriving (Generic )
134
-
135
- instance Binary LlvmCallArg
136
-
137
- data LlvmCall = LlvmCall
138
- { ret :: Maybe (ByteString , SomePtr )
139
- , call :: ByteString
140
- , args :: [LlvmCallArg ]
141
- }
142
- instance CustomUserEvent LlvmCall where
143
- encodeUserEvent (LlvmCall {ret, call, args}) = put ret <> put call <> put args
144
- decodeUserEvent = LlvmCall <$> get <*> get <*> get
145
- userEventTag _ = " LLVM "
146
- eventType _ = LlvmCalls
147
-
148
- data LlvmVar = LlvmVar SomePtr Term
149
-
150
- instance CustomUserEvent LlvmVar where
151
- encodeUserEvent (LlvmVar ptr trm) = put ptr <> encodeMagicHeaderAndVersion (Version 1 1 0 ) <> encodeTerm trm
152
- decodeUserEvent = LlvmVar <$> get <*> decodeTerm' Nothing
153
- userEventTag _ = " LLVMV"
154
- eventType _ = LlvmCalls
155
-
156
113
{- | Uses dlopen to load a .so/.dylib C library at runtime. For doucmentation of flags such as `RTL_LAZY`, consult e.g.
157
114
https://man7.org/linux/man-pages/man3/dlopen.3.html
158
115
-}
@@ -173,30 +130,21 @@ mkAPI dlib = flip runReaderT dlib $ do
173
130
BS. useAsCString name $
174
131
newCompositePattern
175
132
>=> newForeignPtr freePattern
176
- >=> traceCall " kore_composite_pattern_new" [LlvmCallArgByteString name] " kore_pattern*"
177
133
178
134
addArgumentCompositePattern <- koreCompositePatternAddArgument
179
135
let addArgumentPattern parent child =
180
136
{-# SCC "LLVM.pattern.addArgument" #-}
181
137
do
182
138
withForeignPtr parent $ \ rawParent -> withForeignPtr child $ addArgumentCompositePattern rawParent
183
139
finalizeForeignPtr child
184
- Trace. traceIO $
185
- LlvmCall
186
- { call = " kore_composite_pattern_add_argument"
187
- , args = [LlvmCallArgPtr $ somePtr parent, LlvmCallArgPtr $ somePtr child]
188
- , ret = Nothing
189
- }
190
140
pure parent
191
141
192
142
newString <- koreStringPatternNewWithLen
193
143
let string = KoreStringPatternAPI $ \ name ->
194
144
{-# SCC "LLVM.pattern.string" #-}
195
145
BS. useAsCStringLen name $ \ (rawStr, len) ->
196
146
newString rawStr (fromIntegral len)
197
- >>= ( newForeignPtr freePattern
198
- >=> traceCall " kore_string_pattern_new_with_len" [LlvmCallArgByteString name] " kore_pattern*"
199
- )
147
+ >>= newForeignPtr freePattern
200
148
201
149
newToken <- korePatternNewTokenWithLen
202
150
let token = KoreTokenPatternAPI $ \ name sort ->
@@ -205,18 +153,13 @@ mkAPI dlib = flip runReaderT dlib $ do
205
153
withForeignPtr sort $
206
154
newToken rawName (fromIntegral len)
207
155
>=> newForeignPtr freePattern
208
- >=> traceCall
209
- " kore_pattern_new_token_with_len"
210
- [LlvmCallArgByteString name, LlvmCallArgWord . fromIntegral $ len, LlvmCallArgPtr $ somePtr sort]
211
- " kore_pattern*"
212
156
213
157
compositePatternFromSymbol <- koreCompositePatternFromSymbol
214
158
let fromSymbol sym =
215
159
{-# SCC "LLVM.pattern.fromSymbol" #-}
216
160
withForeignPtr sym $
217
161
compositePatternFromSymbol
218
162
>=> newForeignPtr freePattern
219
- >=> traceCall " kore_composite_pattern_from_symbol" [LlvmCallArgPtr $ somePtr sym] " kore_pattern*"
220
163
221
164
dumpPattern' <- korePatternDump
222
165
let dumpPattern ptr =
@@ -246,19 +189,12 @@ mkAPI dlib = flip runReaderT dlib $ do
246
189
BS. useAsCString name $
247
190
newSymbol'
248
191
>=> newForeignPtr freeSymbol
249
- >=> traceCall " kore_symbol_new" [LlvmCallArgByteString name] " kore_symbol*"
250
192
251
193
addArgumentSymbol' <- koreSymbolAddFormalArgument
252
194
let addArgumentSymbol sym sort =
253
195
{-# SCC "LLVM.symbol.addArgument" #-}
254
196
do
255
197
withForeignPtr sym $ \ rawSym -> withForeignPtr sort $ addArgumentSymbol' rawSym
256
- Trace. traceIO $
257
- LlvmCall
258
- { call = " kore_symbol_add_formal_argument"
259
- , args = [LlvmCallArgPtr $ somePtr sym, LlvmCallArgPtr $ somePtr sort]
260
- , ret = Nothing
261
- }
262
198
pure sym
263
199
264
200
symbolCache <- liftIO $ newIORef mempty
@@ -273,19 +209,12 @@ mkAPI dlib = flip runReaderT dlib $ do
273
209
BS. useAsCString name $
274
210
newSort'
275
211
>=> newForeignPtr freeSort
276
- >=> traceCall " kore_composite_sort_new" [LlvmCallArgByteString name] " kore_sort*"
277
212
278
213
addArgumentSort' <- koreCompositeSortAddArgument
279
214
let addArgumentSort parent child =
280
215
{-# SCC "LLVM.sort.addArgument" #-}
281
216
do
282
217
withForeignPtr parent $ \ rawParent -> withForeignPtr child $ addArgumentSort' rawParent
283
- Trace. traceIO $
284
- LlvmCall
285
- { call = " kore_composite_sort_add_formal_argument"
286
- , args = [LlvmCallArgPtr $ somePtr parent, LlvmCallArgPtr $ somePtr child]
287
- , ret = Nothing
288
- }
289
218
pure parent
290
219
291
220
dumpSort' <- koreSortDump
@@ -314,12 +243,6 @@ mkAPI dlib = flip runReaderT dlib $ do
314
243
let simplifyBool p =
315
244
{-# SCC "LLVM.simplifyBool" #-}
316
245
do
317
- Trace. traceIO $
318
- LlvmCall
319
- { call = " kore_simplify_bool"
320
- , args = [LlvmCallArgPtr $ somePtr p]
321
- , ret = Nothing
322
- }
323
246
err <- newError
324
247
withForeignPtr err $ \ errPtr ->
325
248
withForeignPtr p $ \ pPtr -> do
@@ -341,17 +264,6 @@ mkAPI dlib = flip runReaderT dlib $ do
341
264
alloca $ \ lenPtr ->
342
265
alloca $ \ strPtr -> do
343
266
simplify' errPtr patPtr sortPtr strPtr lenPtr
344
- Trace. traceIO $
345
- LlvmCall
346
- { call = " kore_simplify"
347
- , args =
348
- [ LlvmCallArgPtr $ somePtr patPtr
349
- , LlvmCallArgPtr $ somePtr sortPtr
350
- , LlvmCallArgPtr $ somePtr strPtr
351
- , LlvmCallArgPtr $ somePtr lenPtr
352
- ]
353
- , ret = Nothing
354
- }
355
267
success <- isSuccess errPtr
356
268
if success
357
269
then do
@@ -372,10 +284,6 @@ mkAPI dlib = flip runReaderT dlib $ do
372
284
373
285
mutex <- liftIO $ newMVar ()
374
286
pure API {patt, symbol, sort, simplifyBool, simplify, collect, mutex}
375
- where
376
- traceCall call args retTy retPtr = do
377
- Trace. traceIO $ LlvmCall {ret = Just (retTy, somePtr retPtr), call, args}
378
- pure retPtr
379
287
380
288
ask :: LLVM API
381
289
ask = LLVM Reader. ask
0 commit comments