summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2018-02-18 11:09:19 -0500
committerBen Gamari <ben@smart-cactus.org>2018-02-18 11:57:45 -0500
commitc05529c2219d12ee950eb8972e1aca135cd8e032 (patch)
tree557d1615f569d8448da5f3c0f96434d45e064a09
parentccda4862102104e080a200e4d9c2ca8f42eb5b70 (diff)
downloadhaskell-c05529c2219d12ee950eb8972e1aca135cd8e032.tar.gz
myThreadId# is trivial; make it an inline primop
The pattern `threadCapability =<< myThreadId` is used a lot in code that uses `hs_try_putmvar`, I want to make it cheaper. Test Plan: validate Reviewers: bgamari, erikd Reviewed By: bgamari Subscribers: rwbarton, thomie, carter Differential Revision: https://phabricator.haskell.org/D4381
-rw-r--r--compiler/codeGen/StgCmmPrim.hs3
-rw-r--r--compiler/prelude/primops.txt.pp1
-rw-r--r--rts/PrimOps.cmm5
-rw-r--r--rts/RtsSymbols.c1
4 files changed, 3 insertions, 7 deletions
diff --git a/compiler/codeGen/StgCmmPrim.hs b/compiler/codeGen/StgCmmPrim.hs
index 7661e9f8fb..b5cd267c6b 100644
--- a/compiler/codeGen/StgCmmPrim.hs
+++ b/compiler/codeGen/StgCmmPrim.hs
@@ -306,6 +306,9 @@ emitPrimOp dflags [res] GetCCSOfOp [arg]
emitPrimOp _ [res] GetCurrentCCSOp [_dummy_arg]
= emitAssign (CmmLocal res) cccsExpr
+emitPrimOp _ [res] MyThreadIdOp []
+ = emitAssign (CmmLocal res) currentTSOExpr
+
emitPrimOp dflags [res] ReadMutVarOp [mutv]
= emitAssign (CmmLocal res) (cmmLoadIndexW dflags mutv (fixedHdrSizeW dflags) (gcWord dflags))
diff --git a/compiler/prelude/primops.txt.pp b/compiler/prelude/primops.txt.pp
index 43e8f535d3..038d350a76 100644
--- a/compiler/prelude/primops.txt.pp
+++ b/compiler/prelude/primops.txt.pp
@@ -2403,7 +2403,6 @@ primop YieldOp "yield#" GenPrimOp
primop MyThreadIdOp "myThreadId#" GenPrimOp
State# RealWorld -> (# State# RealWorld, ThreadId# #)
with
- out_of_line = True
has_side_effects = True
primop LabelThreadOp "labelThread#" GenPrimOp
diff --git a/rts/PrimOps.cmm b/rts/PrimOps.cmm
index fb9db0aa45..6d57fd889d 100644
--- a/rts/PrimOps.cmm
+++ b/rts/PrimOps.cmm
@@ -943,11 +943,6 @@ stg_yieldzh ()
jump stg_yield_noregs();
}
-stg_myThreadIdzh ()
-{
- return (CurrentTSO);
-}
-
stg_labelThreadzh ( gcptr threadid, W_ addr )
{
#if defined(DEBUG) || defined(TRACING) || defined(DTRACE)
diff --git a/rts/RtsSymbols.c b/rts/RtsSymbols.c
index 2ea6713eee..e53a056a4c 100644
--- a/rts/RtsSymbols.c
+++ b/rts/RtsSymbols.c
@@ -641,7 +641,6 @@
SymI_HasProto(lookupSymbol) \
SymI_HasProto(stg_makeStablePtrzh) \
SymI_HasProto(stg_mkApUpd0zh) \
- SymI_HasProto(stg_myThreadIdzh) \
SymI_HasProto(stg_labelThreadzh) \
SymI_HasProto(stg_newArrayzh) \
SymI_HasProto(stg_copyArrayzh) \