diff options
author | Ben Gamari <bgamari.foss@gmail.com> | 2019-01-20 19:57:12 -0500 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2019-01-20 19:59:43 -0500 |
commit | 00cf32d076f6e949e5e0dc38d10c37dd3fbc0df5 (patch) | |
tree | c58b33344fbb350883de0df499fddec030e70295 | |
parent | c9756dbf1ee58b117ea5c4ded45dea88030efd65 (diff) | |
download | haskell-00cf32d076f6e949e5e0dc38d10c37dd3fbc0df5.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.h | 3 | ||||
m--------- | libraries/Cabal | 0 | ||||
m--------- | libraries/binary | 0 | ||||
m--------- | libraries/bytestring | 0 | ||||
m--------- | libraries/containers | 0 | ||||
m--------- | libraries/deepseq | 0 | ||||
m--------- | libraries/directory | 0 | ||||
m--------- | libraries/hpc | 0 | ||||
m--------- | libraries/stm | 0 | ||||
m--------- | libraries/text | 0 | ||||
m--------- | libraries/time | 0 | ||||
m--------- | libraries/unix | 0 | ||||
m--------- | nofib | 0 | ||||
-rw-r--r-- | rts/ClosureFlags.c | 3 | ||||
-rw-r--r-- | rts/Printer.c | 5 | ||||
-rw-r--r-- | rts/StgMiscClosures.cmm | 32 | ||||
-rw-r--r-- | rts/sm/Evac.c | 4 | ||||
-rw-r--r-- | rts/sm/Scav.c | 1 | ||||
m--------- | utils/haddock | 0 | ||||
m--------- | utils/hsc2hs | 0 |
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 |