From d9af88cb974792b4b4d8359d7175a50e358a1fcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20Sinan=20A=C4=9Facan?= <omeragacan@gmail.com> Date: Thu, 16 May 2019 16:28:32 +0300 Subject: [PATCH] NonMoving: Implement -xns to disable selector optimization --- includes/rts/Flags.h | 4 +++- rts/RtsFlags.c | 5 +++++ rts/sm/NonMovingMark.c | 6 +++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/includes/rts/Flags.h b/includes/rts/Flags.h index 9a039fd95ca..f27ce23b0b8 100644 --- a/includes/rts/Flags.h +++ b/includes/rts/Flags.h @@ -52,7 +52,9 @@ typedef struct _GC_FLAGS { double oldGenFactor; double pcFreeHeap; - bool useNonmoving; + bool useNonmoving; // default = false + bool nonmovingSelectorOpt; // Do selector optimization in the + // non-moving heap, default = false uint32_t generations; bool squeezeUpdFrames; diff --git a/rts/RtsFlags.c b/rts/RtsFlags.c index c606d864182..0e28b980ac6 100644 --- a/rts/RtsFlags.c +++ b/rts/RtsFlags.c @@ -157,6 +157,7 @@ void initRtsFlagsDefaults(void) RtsFlags.GcFlags.pcFreeHeap = 3; /* 3% */ RtsFlags.GcFlags.oldGenFactor = 2; RtsFlags.GcFlags.useNonmoving = false; + RtsFlags.GcFlags.nonmovingSelectorOpt = false; RtsFlags.GcFlags.generations = 2; RtsFlags.GcFlags.squeezeUpdFrames = true; RtsFlags.GcFlags.compact = false; @@ -1542,6 +1543,10 @@ error = true; OPTION_SAFE; RtsFlags.GcFlags.useNonmoving = true; unchecked_arg_start++; + if (rts_argv[arg][3] == 's') { + RtsFlags.GcFlags.nonmovingSelectorOpt = true; + unchecked_arg_start++; + } break; case 'c': /* Debugging tool: show current cost centre on diff --git a/rts/sm/NonMovingMark.c b/rts/sm/NonMovingMark.c index 41d96effe7d..277317aec03 100644 --- a/rts/sm/NonMovingMark.c +++ b/rts/sm/NonMovingMark.c @@ -1458,7 +1458,11 @@ mark_closure (MarkQueue *queue, const StgClosure *p0, StgClosure **origin) } case THUNK_SELECTOR: - nonmoving_eval_thunk_selector(queue, (StgSelector*)p, origin); + if (RtsFlags.GcFlags.nonmovingSelectorOpt) { + nonmoving_eval_thunk_selector(queue, (StgSelector*)p, origin); + } else { + PUSH_FIELD((StgSelector *) p, selectee); + } break; case AP_STACK: { -- GitLab