@@ -805,114 +805,115 @@ performRewrite doTracing def mLlvmLibrary smtSolver varsToAvoid mbMaxDepth cutLa
805
805
logDepth $ showCounter counter
806
806
807
807
case counter of
808
- c | depthReached c -> do
808
+ c
809
+ | depthReached c -> do
809
810
logDepth $ " Reached maximum depth of " <> maybe " ?" showCounter mbMaxDepth
810
811
(if wasSimplified then pure else simplifyResult pat') $ RewriteFinished Nothing Nothing pat'
811
- | counter > 0
812
- , not wasSimplified
813
- , maybe False ((== 0 ) . (counter `mod` )) mbSimplify -> do
812
+ | counter > 0
813
+ , not wasSimplified
814
+ , maybe False ((== 0 ) . (counter `mod` )) mbSimplify -> do
814
815
logDepth $ " Interim simplification after " <> maybe " ??" showCounter mbSimplify
815
816
simplifyP pat' >>= \ case
816
817
Nothing -> pure $ RewriteTrivial pat'
817
818
Just newPat -> doSteps True newPat
818
- | otherwise ->
819
- runRewriteT
820
- doTracing
821
- def
822
- mLlvmLibrary
823
- smtSolver
824
- varsToAvoid
825
- simplifierCache
826
- (withPatternContext pat' $ rewriteStep cutLabels terminalLabels pat')
827
- >>= \ case
828
- Right (RewriteFinished mlbl mUniqueId single, cache) -> do
829
- whenJust mlbl $ \ lbl ->
830
- whenJust mUniqueId $ \ uniqueId ->
831
- emitRewriteTrace $ RewriteSingleStep lbl uniqueId pat' single
832
- updateCache cache
833
- incrementCounter
834
- doSteps False single
835
- Right (terminal@ (RewriteTerminal lbl uniqueId single), _cache) -> withPatternContext pat' $ do
836
- emitRewriteTrace $ RewriteSingleStep lbl uniqueId pat' single
837
- incrementCounter
838
- simplifyResult pat' terminal
839
- Right (branching@ RewriteBranch {}, cache) -> do
840
- logMessage $ " Stopped due to branching after " <> showCounter counter
841
- updateCache cache
842
- simplified <- withPatternContext pat' $ simplifyResult pat' branching
843
- case simplified of
844
- RewriteStuck {} -> withPatternContext pat' $ do
845
- logMessage (" Rewrite stuck after pruning branches" :: Text )
846
- pure simplified
847
- RewriteTrivial {} -> withPatternContext pat' $ do
848
- logMessage $ " Simplified to bottom after " <> showCounter counter
849
- pure simplified
850
- RewriteFinished mlbl mUniqueId single -> do
851
- logMessage (" All but one branch pruned, continuing" :: Text )
852
- whenJust mlbl $ \ lbl ->
853
- whenJust mUniqueId $ \ uniqueId ->
854
- emitRewriteTrace $ RewriteSingleStep lbl uniqueId pat' single
855
- incrementCounter
856
- doSteps False single
857
- RewriteBranch pat'' branches -> withPatternContext pat' $ do
858
- emitRewriteTrace $ RewriteBranchingStep pat'' $ fmap (\ (lbl, uid, _) -> (lbl, uid)) branches
859
- pure simplified
860
- _other -> withPatternContext pat' $ error " simplifyResult: Unexpected return value"
861
- Right (cutPoint@ (RewriteCutPoint lbl _ _ _), _) -> withPatternContext pat' $ do
862
- simplified <- simplifyResult pat' cutPoint
863
- case simplified of
864
- RewriteCutPoint {} ->
865
- logMessage $ " Cut point " <> lbl <> " after " <> showCounter counter
866
- RewriteStuck {} ->
867
- logMessage $ " Stuck after " <> showCounter counter
868
- RewriteTrivial {} ->
869
- logMessage $ " Simplified to bottom after " <> showCounter counter
870
- _other -> error " simplifyResult: Unexpected return value"
871
- pure simplified
872
- Right (stuck@ RewriteStuck {}, cache) -> do
873
- logMessage $ " Stopped after " <> showCounter counter
874
- updateCache cache
875
- emitRewriteTrace $ RewriteStepFailed $ NoApplicableRules pat'
876
- if wasSimplified
877
- then pure stuck
878
- else withSimplified pat' " Retrying with simplified pattern" (doSteps True )
879
- Right (trivial@ RewriteTrivial {}, _) -> withPatternContext pat' $ do
880
- logMessage $ " Simplified to bottom after " <> showCounter counter
881
- pure trivial
882
- Right (aborted@ RewriteAborted {}, _) -> withPatternContext pat' $ do
883
- logMessage $ " Aborted after " <> showCounter counter
884
- simplifyResult pat' aborted
885
- -- if unification was unclear and the pattern was
886
- -- unsimplified, simplify and retry rewriting once
887
- Left failure@ (RuleApplicationUnclear rule _ remainder)
888
- | not wasSimplified -> do
889
- emitRewriteTrace $ RewriteStepFailed failure
890
- -- simplify remainders, substitute and rerun.
891
- -- If failed, do the pattern-wide simplfication and rerun again
892
- withSimplified pat' " Retrying with simplified pattern" (doSteps True )
893
- | otherwise -> do
894
- -- was already simplified, emit an abort log entry
895
- withRuleContext rule . withContext CtxMatch . withContext CtxAbort $
896
- getPrettyModifiers >>= \ case
897
- ModifiersRep (_ :: FromModifiersT mods => Proxy mods ) ->
898
- logMessage $
899
- WithJsonMessage (object [" remainder" .= (bimap externaliseTerm externaliseTerm <$> remainder)]) $
900
- renderOneLineText $
901
- " Uncertain about match with rule. Remainder:"
902
- <+> ( hsep $
903
- punctuate comma $
904
- map (\ (t1, t2) -> pretty' @ mods t1 <+> " ==" <+> pretty' @ mods t2) $
905
- NE. toList remainder
906
- )
907
- emitRewriteTrace $ RewriteStepFailed failure
819
+ | otherwise ->
820
+ runRewriteT
821
+ doTracing
822
+ def
823
+ mLlvmLibrary
824
+ smtSolver
825
+ varsToAvoid
826
+ simplifierCache
827
+ (withPatternContext pat' $ rewriteStep cutLabels terminalLabels pat')
828
+ >>= \ case
829
+ Right (RewriteFinished mlbl mUniqueId single, cache) -> do
830
+ whenJust mlbl $ \ lbl ->
831
+ whenJust mUniqueId $ \ uniqueId ->
832
+ emitRewriteTrace $ RewriteSingleStep lbl uniqueId pat' single
833
+ updateCache cache
834
+ incrementCounter
835
+ doSteps False single
836
+ Right (terminal@ (RewriteTerminal lbl uniqueId single), _cache) -> withPatternContext pat' $ do
837
+ emitRewriteTrace $ RewriteSingleStep lbl uniqueId pat' single
838
+ incrementCounter
839
+ simplifyResult pat' terminal
840
+ Right (branching@ RewriteBranch {}, cache) -> do
841
+ logMessage $ " Stopped due to branching after " <> showCounter counter
842
+ updateCache cache
843
+ simplified <- withPatternContext pat' $ simplifyResult pat' branching
844
+ case simplified of
845
+ RewriteStuck {} -> withPatternContext pat' $ do
846
+ logMessage (" Rewrite stuck after pruning branches" :: Text )
847
+ pure simplified
848
+ RewriteTrivial {} -> withPatternContext pat' $ do
849
+ logMessage $ " Simplified to bottom after " <> showCounter counter
850
+ pure simplified
851
+ RewriteFinished mlbl mUniqueId single -> do
852
+ logMessage (" All but one branch pruned, continuing" :: Text )
853
+ whenJust mlbl $ \ lbl ->
854
+ whenJust mUniqueId $ \ uniqueId ->
855
+ emitRewriteTrace $ RewriteSingleStep lbl uniqueId pat' single
856
+ incrementCounter
857
+ doSteps False single
858
+ RewriteBranch pat'' branches -> withPatternContext pat' $ do
859
+ emitRewriteTrace $ RewriteBranchingStep pat'' $ fmap (\ (lbl, uid, _) -> (lbl, uid)) branches
860
+ pure simplified
861
+ _other -> withPatternContext pat' $ error " simplifyResult: Unexpected return value"
862
+ Right (cutPoint@ (RewriteCutPoint lbl _ _ _), _) -> withPatternContext pat' $ do
863
+ simplified <- simplifyResult pat' cutPoint
864
+ case simplified of
865
+ RewriteCutPoint {} ->
866
+ logMessage $ " Cut point " <> lbl <> " after " <> showCounter counter
867
+ RewriteStuck {} ->
868
+ logMessage $ " Stuck after " <> showCounter counter
869
+ RewriteTrivial {} ->
870
+ logMessage $ " Simplified to bottom after " <> showCounter counter
871
+ _other -> error " simplifyResult: Unexpected return value"
872
+ pure simplified
873
+ Right (stuck@ RewriteStuck {}, cache) -> do
874
+ logMessage $ " Stopped after " <> showCounter counter
875
+ updateCache cache
876
+ emitRewriteTrace $ RewriteStepFailed $ NoApplicableRules pat'
877
+ if wasSimplified
878
+ then pure stuck
879
+ else withSimplified pat' " Retrying with simplified pattern" (doSteps True )
880
+ Right (trivial@ RewriteTrivial {}, _) -> withPatternContext pat' $ do
881
+ logMessage $ " Simplified to bottom after " <> showCounter counter
882
+ pure trivial
883
+ Right (aborted@ RewriteAborted {}, _) -> withPatternContext pat' $ do
908
884
logMessage $ " Aborted after " <> showCounter counter
909
- pure (RewriteAborted failure pat')
910
- Left failure -> do
911
- emitRewriteTrace $ RewriteStepFailed failure
912
- let msg = " Aborted after " <> showCounter counter
913
- if wasSimplified
914
- then logMessage msg >> pure (RewriteAborted failure pat')
915
- else withSimplified pat' msg (pure . RewriteAborted failure)
885
+ simplifyResult pat' aborted
886
+ -- if unification was unclear and the pattern was
887
+ -- unsimplified, simplify and retry rewriting once
888
+ Left failure@ (RuleApplicationUnclear rule _ remainder)
889
+ | not wasSimplified -> do
890
+ emitRewriteTrace $ RewriteStepFailed failure
891
+ -- simplify remainders, substitute and rerun.
892
+ -- If failed, do the pattern-wide simplfication and rerun again
893
+ withSimplified pat' " Retrying with simplified pattern" (doSteps True )
894
+ | otherwise -> do
895
+ -- was already simplified, emit an abort log entry
896
+ withRuleContext rule . withContext CtxMatch . withContext CtxAbort $
897
+ getPrettyModifiers >>= \ case
898
+ ModifiersRep (_ :: FromModifiersT mods => Proxy mods ) ->
899
+ logMessage $
900
+ WithJsonMessage (object [" remainder" .= (bimap externaliseTerm externaliseTerm <$> remainder)]) $
901
+ renderOneLineText $
902
+ " Uncertain about match with rule. Remainder:"
903
+ <+> ( hsep $
904
+ punctuate comma $
905
+ map (\ (t1, t2) -> pretty' @ mods t1 <+> " ==" <+> pretty' @ mods t2) $
906
+ NE. toList remainder
907
+ )
908
+ emitRewriteTrace $ RewriteStepFailed failure
909
+ logMessage $ " Aborted after " <> showCounter counter
910
+ pure (RewriteAborted failure pat')
911
+ Left failure -> do
912
+ emitRewriteTrace $ RewriteStepFailed failure
913
+ let msg = " Aborted after " <> showCounter counter
914
+ if wasSimplified
915
+ then logMessage msg >> pure (RewriteAborted failure pat')
916
+ else withSimplified pat' msg (pure . RewriteAborted failure)
916
917
where
917
918
withSimplified p msg cont = do
918
919
(withPatternContext p $ simplifyP p) >>= \ case
0 commit comments