summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <bgamari.foss@gmail.com>2019-01-20 19:57:12 -0500
committerBen Gamari <ben@smart-cactus.org>2019-01-20 19:59:43 -0500
commit00cf32d076f6e949e5e0dc38d10c37dd3fbc0df5 (patch)
treec58b33344fbb350883de0df499fddec030e70295
parentc9756dbf1ee58b117ea5c4ded45dea88030efd65 (diff)
downloadhaskell-wip/rts-srt-closure-type.tar.gz
rts: Make SRTs a distinct closure typewip/rts-srt-closure-type
This will make it easier to count closure traversals during scavenging. Previously Differential Revision https://phabricator.haskell.org/D5098
-rw-r--r--includes/rts/storage/ClosureTypes.h3
m---------libraries/Cabal0
m---------libraries/binary0
m---------libraries/bytestring0
m---------libraries/containers0
m---------libraries/deepseq0
m---------libraries/directory0
m---------libraries/hpc0
m---------libraries/stm0
m---------libraries/text0
m---------libraries/time0
m---------libraries/unix0
m---------nofib0
-rw-r--r--rts/ClosureFlags.c3
-rw-r--r--rts/Printer.c5
-rw-r--r--rts/StgMiscClosures.cmm32
-rw-r--r--rts/sm/Evac.c4
-rw-r--r--rts/sm/Scav.c1
m---------utils/haddock0
m---------utils/hsc2hs0
20 files changed, 28 insertions, 20 deletions
diff --git a/includes/rts/storage/ClosureTypes.h b/includes/rts/storage/ClosureTypes.h
index 85dc1a0ce4..5319e9cdc8 100644
--- a/includes/rts/storage/ClosureTypes.h
+++ b/includes/rts/storage/ClosureTypes.h
@@ -83,4 +83,5 @@
#define SMALL_MUT_ARR_PTRS_FROZEN_DIRTY 61
#define SMALL_MUT_ARR_PTRS_FROZEN_CLEAN 62
#define COMPACT_NFDATA 63
-#define N_CLOSURE_TYPES 64
+#define SRT 64
+#define N_CLOSURE_TYPES 65
diff --git a/libraries/Cabal b/libraries/Cabal
-Subproject 98fcb3a964a4deef67920020a4a02d4d8552cc1
+Subproject fe10982db1f2fa7d828fc5f8ddaa5beedceadde
diff --git a/libraries/binary b/libraries/binary
-Subproject fb461cf048460813a7fac8e040c1004a0d123e4
+Subproject 38adf7ce1ad6a497fba61de500c3f35b186303a
diff --git a/libraries/bytestring b/libraries/bytestring
-Subproject 847563a2e5ce84714688429c4fee8df5c8568cb
+Subproject ce3c6a01cd9e2438358108e3e4b515304b5ce5a
diff --git a/libraries/containers b/libraries/containers
-Subproject 03dcb287c96613ceb1f64d5d5a82f7b94b87926
+Subproject e5b3bbaeb79cbf3a2c99bd14257d4199cc651b7
diff --git a/libraries/deepseq b/libraries/deepseq
-Subproject 4f031810fc0eaf5ba12d805ff8df7f15e561e40
+Subproject fe94780b629b27969c5e8965e6e6ccde564ece6
diff --git a/libraries/directory b/libraries/directory
-Subproject 19d6dc0d33366a8920bf8acc7a0fd3ef533d39c
+Subproject e9debc1d4a9c4b608a32f60bae173ed10f89fdc
diff --git a/libraries/hpc b/libraries/hpc
-Subproject 26780988735bdb8fdbeffb59c4a8d585b9e46c3
+Subproject 85e04edd6e29de549301cf10d2c725cbf29b209
diff --git a/libraries/stm b/libraries/stm
-Subproject 5f4d7c6d07a760d935c9d96e62999f1ad38a5e4
+Subproject 4a1deb98fc95e55d8a6762a7dfec1a7dfa8b49b
diff --git a/libraries/text b/libraries/text
-Subproject 69d625b9caa34fd8b384a4599ee98f5f53f20fb
+Subproject a02c2dafafa425bd5f36c8629e98b98daf1cfa1
diff --git a/libraries/time b/libraries/time
-Subproject 9e96c26132fef01a3113c8b152b1be96c0eccd8
+Subproject 1fcaa07e10d7966356373ed0e946eb078fcdd6e
diff --git a/libraries/unix b/libraries/unix
-Subproject dbada9890c1d58111af7d4ebb2a67d38a3a6a87
+Subproject f4f500d53b4c73e542a377a5c675309dbbe5774
diff --git a/nofib b/nofib
-Subproject f87d446b4e361cc82f219cf78917db9681af69b
+Subproject a3b0f2b2cff8babbb85cbbe1e7515905ffb444a
diff --git a/rts/ClosureFlags.c b/rts/ClosureFlags.c
index f8dba8f326..45d7138064 100644
--- a/rts/ClosureFlags.c
+++ b/rts/ClosureFlags.c
@@ -85,8 +85,9 @@ StgWord16 closure_flags[] = {
[SMALL_MUT_ARR_PTRS_FROZEN_DIRTY] = (_HNF| _NS| _MUT|_UPT ),
[SMALL_MUT_ARR_PTRS_FROZEN_CLEAN] = (_HNF| _NS| _UPT ),
[COMPACT_NFDATA] = (_HNF| _NS ),
+ [SRT] = (_HNF| _NS ),
};
-#if N_CLOSURE_TYPES != 64
+#if N_CLOSURE_TYPES != 65
#error Closure types changed: update ClosureFlags.c!
#endif
diff --git a/rts/Printer.c b/rts/Printer.c
index 291f529e8f..478729092e 100644
--- a/rts/Printer.c
+++ b/rts/Printer.c
@@ -950,10 +950,11 @@ const char *closure_type_names[] = {
[SMALL_MUT_ARR_PTRS_DIRTY] = "SMALL_MUT_ARR_PTRS_DIRTY",
[SMALL_MUT_ARR_PTRS_FROZEN_DIRTY] = "SMALL_MUT_ARR_PTRS_FROZEN_DIRTY",
[SMALL_MUT_ARR_PTRS_FROZEN_CLEAN] = "SMALL_MUT_ARR_PTRS_FROZEN_CLEAN",
- [COMPACT_NFDATA] = "COMPACT_NFDATA"
+ [COMPACT_NFDATA] = "COMPACT_NFDATA",
+ [SRT] = "SRT",
};
-#if N_CLOSURE_TYPES != 64
+#if N_CLOSURE_TYPES != 65
#error Closure types changed: update Printer.c!
#endif
diff --git a/rts/StgMiscClosures.cmm b/rts/StgMiscClosures.cmm
index fdd9f1565e..35e9a36eb9 100644
--- a/rts/StgMiscClosures.cmm
+++ b/rts/StgMiscClosures.cmm
@@ -512,52 +512,52 @@ CLOSURE(stg_NO_TREC_closure,stg_NO_TREC);
See Note [SRTs] in compiler/cmm/CmmBuildInfoTable.hs
------------------------------------------------------------------------- */
-INFO_TABLE_CONSTR(stg_SRT_1, 1, 0, 0, CONSTR_1_0, "SRT_1", "SRT_1")
+INFO_TABLE_CONSTR(stg_SRT_1, 1, 0, 0, SRT, "SRT_1", "SRT_1")
{ foreign "C" barf("SRT_1 object (%p) entered!", R1) never returns; }
-INFO_TABLE_CONSTR(stg_SRT_2, 2, 0, 0, CONSTR_2_0, "SRT_2", "SRT_2")
+INFO_TABLE_CONSTR(stg_SRT_2, 2, 0, 0, SRT, "SRT_2", "SRT_2")
{ foreign "C" barf("SRT_2 object (%p) entered!", R1) never returns; }
-INFO_TABLE_CONSTR(stg_SRT_3, 3, 0, 0, CONSTR, "SRT_3", "SRT_3")
+INFO_TABLE_CONSTR(stg_SRT_3, 3, 0, 0, SRT, "SRT_3", "SRT_3")
{ foreign "C" barf("SRT_3 object (%p) entered!", R1) never returns; }
-INFO_TABLE_CONSTR(stg_SRT_4, 4, 0, 0, CONSTR, "SRT_4", "SRT_4")
+INFO_TABLE_CONSTR(stg_SRT_4, 4, 0, 0, SRT, "SRT_4", "SRT_4")
{ foreign "C" barf("SRT_4 object (%p) entered!", R1) never returns; }
-INFO_TABLE_CONSTR(stg_SRT_5, 5, 0, 0, CONSTR, "SRT_5", "SRT_5")
+INFO_TABLE_CONSTR(stg_SRT_5, 5, 0, 0, SRT, "SRT_5", "SRT_5")
{ foreign "C" barf("SRT_5 object (%p) entered!", R1) never returns; }
-INFO_TABLE_CONSTR(stg_SRT_6, 6, 0, 0, CONSTR, "SRT_6", "SRT_6")
+INFO_TABLE_CONSTR(stg_SRT_6, 6, 0, 0, SRT, "SRT_6", "SRT_6")
{ foreign "C" barf("SRT_6 object (%p) entered!", R1) never returns; }
-INFO_TABLE_CONSTR(stg_SRT_7, 7, 0, 0, CONSTR, "SRT_7", "SRT_7")
+INFO_TABLE_CONSTR(stg_SRT_7, 7, 0, 0, SRT, "SRT_7", "SRT_7")
{ foreign "C" barf("SRT_7 object (%p) entered!", R1) never returns; }
-INFO_TABLE_CONSTR(stg_SRT_8, 8, 0, 0, CONSTR, "SRT_8", "SRT_8")
+INFO_TABLE_CONSTR(stg_SRT_8, 8, 0, 0, SRT, "SRT_8", "SRT_8")
{ foreign "C" barf("SRT_8 object (%p) entered!", R1) never returns; }
-INFO_TABLE_CONSTR(stg_SRT_9, 9, 0, 0, CONSTR, "SRT_9", "SRT_9")
+INFO_TABLE_CONSTR(stg_SRT_9, 9, 0, 0, SRT, "SRT_9", "SRT_9")
{ foreign "C" barf("SRT_9 object (%p) entered!", R1) never returns; }
-INFO_TABLE_CONSTR(stg_SRT_10, 10, 0, 0, CONSTR, "SRT_10", "SRT_10")
+INFO_TABLE_CONSTR(stg_SRT_10, 10, 0, 0, SRT, "SRT_10", "SRT_10")
{ foreign "C" barf("SRT_10 object (%p) entered!", R1) never returns; }
-INFO_TABLE_CONSTR(stg_SRT_11, 11, 0, 0, CONSTR, "SRT_11", "SRT_11")
+INFO_TABLE_CONSTR(stg_SRT_11, 11, 0, 0, SRT, "SRT_11", "SRT_11")
{ foreign "C" barf("SRT_11 object (%p) entered!", R1) never returns; }
-INFO_TABLE_CONSTR(stg_SRT_12, 12, 0, 0, CONSTR, "SRT_12", "SRT_12")
+INFO_TABLE_CONSTR(stg_SRT_12, 12, 0, 0, SRT, "SRT_12", "SRT_12")
{ foreign "C" barf("SRT_12 object (%p) entered!", R1) never returns; }
-INFO_TABLE_CONSTR(stg_SRT_13, 13, 0, 0, CONSTR, "SRT_13", "SRT_13")
+INFO_TABLE_CONSTR(stg_SRT_13, 13, 0, 0, SRT, "SRT_13", "SRT_13")
{ foreign "C" barf("SRT_13 object (%p) entered!", R1) never returns; }
-INFO_TABLE_CONSTR(stg_SRT_14, 14, 0, 0, CONSTR, "SRT_14", "SRT_14")
+INFO_TABLE_CONSTR(stg_SRT_14, 14, 0, 0, SRT, "SRT_14", "SRT_14")
{ foreign "C" barf("SRT_14 object (%p) entered!", R1) never returns; }
-INFO_TABLE_CONSTR(stg_SRT_15, 15, 0, 0, CONSTR, "SRT_15", "SRT_15")
+INFO_TABLE_CONSTR(stg_SRT_15, 15, 0, 0, SRT, "SRT_15", "SRT_15")
{ foreign "C" barf("SRT_15 object (%p) entered!", R1) never returns; }
-INFO_TABLE_CONSTR(stg_SRT_16, 16, 0, 0, CONSTR, "SRT_16", "SRT_16")
+INFO_TABLE_CONSTR(stg_SRT_16, 16, 0, 0, SRT, "SRT_16", "SRT_16")
{ foreign "C" barf("SRT_16 object (%p) entered!", R1) never returns; }
/* --------------------------------------------------------------------------- Messages
diff --git a/rts/sm/Evac.c b/rts/sm/Evac.c
index 289031945d..20ea2f5d4a 100644
--- a/rts/sm/Evac.c
+++ b/rts/sm/Evac.c
@@ -541,6 +541,10 @@ loop:
evacuate_static_object(IND_STATIC_LINK((StgClosure *)q), q);
return;
+ case SRT:
+ evacuate_static_object(STATIC_LINK(info,(StgClosure *)q), q);
+ return;
+
case CONSTR:
case CONSTR_1_0:
case CONSTR_2_0:
diff --git a/rts/sm/Scav.c b/rts/sm/Scav.c
index 8bc702900b..e96373ad48 100644
--- a/rts/sm/Scav.c
+++ b/rts/sm/Scav.c
@@ -1751,6 +1751,7 @@ scavenge_static(void)
case CONSTR_2_0:
case CONSTR_1_1:
case CONSTR_0_2:
+ case SRT:
{
StgPtr q, next;
diff --git a/utils/haddock b/utils/haddock
-Subproject 21e4f3fa6f73a9b25f3deed80da0e56024238ea
+Subproject 9ef12f3c2f0ef2948e6f4bd38fdfa002c416ab0
diff --git a/utils/hsc2hs b/utils/hsc2hs
-Subproject a816333ae67c54b98cce4ed22621242714967b3
+Subproject 6b6938db11a33904bb6ba90d70d89df4b72a7f9