diff options
author | Simon Marlow <marlowsd@gmail.com> | 2018-02-18 11:09:19 -0500 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2018-02-18 11:57:45 -0500 |
commit | c05529c2219d12ee950eb8972e1aca135cd8e032 (patch) | |
tree | 557d1615f569d8448da5f3c0f96434d45e064a09 | |
parent | ccda4862102104e080a200e4d9c2ca8f42eb5b70 (diff) | |
download | haskell-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.hs | 3 | ||||
-rw-r--r-- | compiler/prelude/primops.txt.pp | 1 | ||||
-rw-r--r-- | rts/PrimOps.cmm | 5 | ||||
-rw-r--r-- | rts/RtsSymbols.c | 1 |
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) \ |