From 3bbd2bf2b9befaae53effb6bfc593b5ff7ff0c76 Mon Sep 17 00:00:00 2001
From: Ben Gamari <ben@smart-cactus.org>
Date: Sat, 11 Mar 2023 14:25:13 -0500
Subject: [PATCH] compiler/tc: Small optimisation of evCallStack

Don't lookupIds unless we actually need them.
---
 compiler/GHC/Tc/Types/EvTerm.hs | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/compiler/GHC/Tc/Types/EvTerm.hs b/compiler/GHC/Tc/Types/EvTerm.hs
index 905cf1fa1444..fe845acf4929 100644
--- a/compiler/GHC/Tc/Types/EvTerm.hs
+++ b/compiler/GHC/Tc/Types/EvTerm.hs
@@ -38,7 +38,9 @@ evDelayedError ty msg
 evCallStack :: (MonadThings m, HasModule m, HasDynFlags m) =>
     EvCallStack -> m EvExpr
 -- See Note [Overview of implicit CallStacks] in GHC.Tc.Types.Evidence
-evCallStack cs = do
+evCallStack EvCsEmpty =
+  Var <$> lookupId emptyCallStackName
+evCallStack (EvCsPushCall fs loc tm) = do
   df            <- getDynFlags
   let platform = targetPlatform df
   m             <- getModule
@@ -53,8 +55,6 @@ evCallStack cs = do
                         , return $ mkIntExprInt platform (srcSpanEndCol l)
                         ]
 
-  emptyCS <- Var <$> lookupId emptyCallStackName
-
   pushCSVar <- lookupId pushCallStackName
   let pushCS name loc rest =
         mkCoreApps (Var pushCSVar) [mkCoreTup [name, loc], rest]
@@ -69,6 +69,4 @@ evCallStack cs = do
         let ip_co = unwrapIP (exprType tm)
         return (pushCS nameExpr locExpr (Cast tm ip_co))
 
-  case cs of
-    EvCsPushCall fs loc tm -> mkPush fs loc tm
-    EvCsEmpty              -> return emptyCS
+  mkPush fs loc tm
-- 
GitLab