[m-rev.] Saving MR_region_disj_sp when pushing a commit frame
Quan Phan
quan.phan at cs.kuleuven.be
Thu Oct 11 20:23:49 AEST 2007
Hi,
This change will likely affect no one except Zoltan and me. So can I
commit it?
Regards,
Quan.
On Wed, Oct 10, 2007 at 12:28:10PM +0200, Quan Phan wrote:
> Hi,
>
> Estimated hours taken: 0.5
>
> This diff updates the runtime support for region-based memore management
> as follows.
> - Save the disj stack pointer (MR_region_disj_sp) at commit frame (just
> like saving the maxfr).
> - At commit success, disj-unprotect the disj-protected regions at the
> will-be-cut-off disj frames, and restore the MR_region_disj_sp.
>
> compiler/options.m:
> Change size_region_commit_fixed from 3 to 4 to have one more slot for
> saving the disj stack pointer.
>
> runtime/mercury_region.c:
> Delete and add some rbmm debug messages.
>
> runtime/mercury_region.h:
> Change the related #defines as per the size increase.
> Implement the above 2-point change.
>
> Delete one unused debug message.
> Fix a bug in commit_failure.
>
> Regards,
> Quan.
>
> cvs diff: Diffing .
> cvs diff: Diffing analysis
> cvs diff: Diffing bench
> cvs diff: Diffing bench/progs
> cvs diff: Diffing bench/progs/compress
> cvs diff: Diffing bench/progs/icfp2000
> cvs diff: Diffing bench/progs/icfp2001
> cvs diff: Diffing bench/progs/nuc
> cvs diff: Diffing bench/progs/ray
> cvs diff: Diffing bench/progs/tree234
> cvs diff: Diffing bindist
> cvs diff: Diffing boehm_gc
> cvs diff: Diffing boehm_gc/Mac_files
> cvs diff: Diffing boehm_gc/cord
> cvs diff: Diffing boehm_gc/cord/private
> cvs diff: Diffing boehm_gc/doc
> cvs diff: Diffing boehm_gc/include
> cvs diff: Diffing boehm_gc/include/private
> cvs diff: Diffing boehm_gc/libatomic_ops-1.2
> cvs diff: Diffing boehm_gc/libatomic_ops-1.2/doc
> cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src
> cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops
> cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps
> cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc
> cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc
> cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc
> cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/icc
> cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc
> cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc
> cvs diff: Diffing boehm_gc/libatomic_ops-1.2/tests
> cvs diff: Diffing boehm_gc/tests
> cvs diff: Diffing boehm_gc/windows-untested
> cvs diff: Diffing boehm_gc/windows-untested/vc60
> cvs diff: Diffing boehm_gc/windows-untested/vc70
> cvs diff: Diffing boehm_gc/windows-untested/vc71
> cvs diff: Diffing browser
> cvs diff: Diffing browser/test
> cvs diff: Diffing bytecode
> cvs diff: Diffing bytecode/test
> cvs diff: Diffing compiler
> Index: compiler/options.m
> ===================================================================
> RCS file: /home/mercury/mercury1/repository/mercury/compiler/options.m,v
> retrieving revision 1.588
> diff -u -r1.588 options.m
> --- compiler/options.m 9 Oct 2007 07:59:46 -0000 1.588
> +++ compiler/options.m 10 Oct 2007 10:12:01 -0000
> @@ -1201,7 +1201,7 @@
> % The values here must be consistent with those in mercury_region.h.
> size_region_ite_fixed - int(4),
> size_region_disj_fixed - int(4),
> - size_region_commit_fixed - int(3),
> + size_region_commit_fixed - int(4),
> size_region_ite_protect - int(1),
> size_region_ite_snapshot - int(4),
> size_region_disj_protect - int(1),
> cvs diff: Diffing compiler/notes
> cvs diff: Diffing debian
> cvs diff: Diffing debian/patches
> cvs diff: Diffing deep
> cvs diff: Diffing deep_profiler
> cvs diff: Diffing deep_profiler/notes
> cvs diff: Diffing detail
> cvs diff: Diffing doc
> cvs diff: Diffing extras
> cvs diff: Diffing extras/aditi
> cvs diff: Diffing extras/base64
> cvs diff: Diffing extras/cgi
> cvs diff: Diffing extras/complex_numbers
> cvs diff: Diffing extras/complex_numbers/samples
> cvs diff: Diffing extras/complex_numbers/tests
> cvs diff: Diffing extras/concurrency
> cvs diff: Diffing extras/concurrency/samples
> cvs diff: Diffing extras/concurrency/samples/midi
> cvs diff: Diffing extras/concurrency/tests
> cvs diff: Diffing extras/curs
> cvs diff: Diffing extras/curs/samples
> cvs diff: Diffing extras/curses
> cvs diff: Diffing extras/curses/sample
> cvs diff: Diffing extras/dynamic_linking
> cvs diff: Diffing extras/error
> cvs diff: Diffing extras/exceptions
> cvs diff: Diffing extras/fixed
> cvs diff: Diffing extras/gator
> cvs diff: Diffing extras/gator/generations
> cvs diff: Diffing extras/gator/generations/1
> cvs diff: Diffing extras/graphics
> cvs diff: Diffing extras/graphics/easyx
> cvs diff: Diffing extras/graphics/easyx/samples
> cvs diff: Diffing extras/graphics/mercury_allegro
> cvs diff: Diffing extras/graphics/mercury_allegro/examples
> cvs diff: Diffing extras/graphics/mercury_allegro/samples
> cvs diff: Diffing extras/graphics/mercury_allegro/samples/demo
> cvs diff: Diffing extras/graphics/mercury_allegro/samples/mandel
> cvs diff: Diffing extras/graphics/mercury_allegro/samples/pendulum2
> cvs diff: Diffing extras/graphics/mercury_allegro/samples/speed
> cvs diff: Diffing extras/graphics/mercury_glut
> cvs diff: Diffing extras/graphics/mercury_opengl
> cvs diff: Diffing extras/graphics/mercury_tcltk
> cvs diff: Diffing extras/graphics/samples
> cvs diff: Diffing extras/graphics/samples/calc
> cvs diff: Diffing extras/graphics/samples/gears
> cvs diff: Diffing extras/graphics/samples/maze
> cvs diff: Diffing extras/graphics/samples/pent
> cvs diff: Diffing extras/lazy_evaluation
> cvs diff: Diffing extras/lazy_evaluation/examples
> cvs diff: Diffing extras/lex
> cvs diff: Diffing extras/lex/samples
> cvs diff: Diffing extras/lex/tests
> cvs diff: Diffing extras/log4m
> cvs diff: Diffing extras/logged_output
> cvs diff: Diffing extras/moose
> cvs diff: Diffing extras/moose/samples
> cvs diff: Diffing extras/moose/tests
> cvs diff: Diffing extras/mopenssl
> cvs diff: Diffing extras/morphine
> cvs diff: Diffing extras/morphine/non-regression-tests
> cvs diff: Diffing extras/morphine/scripts
> cvs diff: Diffing extras/morphine/source
> cvs diff: Diffing extras/net
> cvs diff: Diffing extras/odbc
> cvs diff: Diffing extras/opium_m
> cvs diff: Diffing extras/opium_m/non-regression-tests
> cvs diff: Diffing extras/opium_m/scripts
> cvs diff: Diffing extras/opium_m/source
> cvs diff: Diffing extras/posix
> cvs diff: Diffing extras/posix/samples
> cvs diff: Diffing extras/quickcheck
> cvs diff: Diffing extras/quickcheck/tutes
> cvs diff: Diffing extras/references
> cvs diff: Diffing extras/references/samples
> cvs diff: Diffing extras/references/tests
> cvs diff: Diffing extras/solver_types
> cvs diff: Diffing extras/solver_types/library
> cvs diff: Diffing extras/stream
> cvs diff: Diffing extras/stream/tests
> cvs diff: Diffing extras/trailed_update
> cvs diff: Diffing extras/trailed_update/samples
> cvs diff: Diffing extras/trailed_update/tests
> cvs diff: Diffing extras/windows_installer_generator
> cvs diff: Diffing extras/windows_installer_generator/sample
> cvs diff: Diffing extras/windows_installer_generator/sample/images
> cvs diff: Diffing extras/xml
> cvs diff: Diffing extras/xml/samples
> cvs diff: Diffing extras/xml_stylesheets
> cvs diff: Diffing java
> cvs diff: Diffing java/library
> cvs diff: Diffing java/runtime
> cvs diff: Diffing library
> cvs diff: Diffing lp_solve
> cvs diff: Diffing lp_solve/lp_examples
> cvs diff: Diffing mdbcomp
> cvs diff: Diffing profiler
> cvs diff: Diffing quickcheck
> cvs diff: Diffing quickcheck/tutes
> cvs diff: Diffing readline
> cvs diff: Diffing readline/doc
> cvs diff: Diffing readline/examples
> cvs diff: Diffing readline/shlib
> cvs diff: Diffing readline/support
> cvs diff: Diffing robdd
> cvs diff: Diffing runtime
> Index: runtime/mercury_region.c
> ===================================================================
> RCS file: /home/mercury/mercury1/repository/mercury/runtime/mercury_region.c,v
> retrieving revision 1.1
> diff -u -r1.1 mercury_region.c
> --- runtime/mercury_region.c 9 Oct 2007 07:59:54 -0000 1.1
> +++ runtime/mercury_region.c 10 Oct 2007 10:12:02 -0000
> @@ -528,9 +528,6 @@
> {
> printf("Destroy region ");
> MR_region_region_struct_removal_info_msg(region);
> - printf("ite frame: %d\n", MR_region_ite_sp);
> - printf("disj frame: %d\n", MR_region_disj_sp);
> - printf("commit frame: %d\n", MR_region_commit_sp);
> }
>
> void
> @@ -735,6 +732,14 @@
> int i;
> int num_saved_regions;
>
> + printf("Commit frame #%d: %d\n",
> + MR_region_get_frame_number(commit_frame), commit_frame);
> + printf("\tPrevious frame #%d: %d\n",
> + MR_region_get_frame_number((MR_Word *) (*commit_frame)),
> + *commit_frame);
> + printf("\tSequence number at push: %d\n",
> + *(commit_frame + MR_REGION_COMMIT_FRAME_SEQUENCE_NUMBER));
> +
> num_saved_regions =
> *(commit_frame + MR_REGION_COMMIT_FRAME_NUMBER_SAVED_REGIONS);
> first_saved_region = commit_frame +
> Index: runtime/mercury_region.h
> ===================================================================
> RCS file: /home/mercury/mercury1/repository/mercury/runtime/mercury_region.h,v
> retrieving revision 1.1
> diff -u -r1.1 mercury_region.h
> --- runtime/mercury_region.h 9 Oct 2007 07:59:54 -0000 1.1
> +++ runtime/mercury_region.h 10 Oct 2007 10:12:03 -0000
> @@ -50,11 +50,12 @@
> #define MR_REGION_FRAME_NUMBER_PROTECTED_REGIONS 2
> #define MR_REGION_FRAME_NUMBER_SNAPSHOTS 3
>
> -#define MR_REGION_COMMIT_FRAME_FIXED_SIZE 3
> +#define MR_REGION_COMMIT_FRAME_FIXED_SIZE 4
> #define MR_REGION_COMMIT_FRAME_PREVIOUS_FRAME 0
> #define MR_REGION_COMMIT_FRAME_SEQUENCE_NUMBER 1
> -#define MR_REGION_COMMIT_FRAME_NUMBER_SAVED_REGIONS 2
> -#define MR_REGION_COMMIT_FRAME_FIRST_SAVED_REGION 3
> +#define MR_REGION_COMMIT_FRAME_DISJ_FRAME 2
> +#define MR_REGION_COMMIT_FRAME_NUMBER_SAVED_REGIONS 3
> +#define MR_REGION_COMMIT_FRAME_FIRST_SAVED_REGION 4
>
> #define MR_REGION_SNAPSHOT_SIZE 4
> #define MR_REGION_SNAPSHOT_REGION 0
> @@ -245,17 +246,15 @@
> *((new_disj_sp) + MR_REGION_FRAME_REGION_LIST)); \
> MR_region_disj_sp = (new_disj_sp); \
> MR_region_debug_push_disj_frame(new_disj_sp); \
> - if (MR_live_region_list != NULL) { \
> - MR_region_debug_region_struct_removal_info( \
> - MR_live_region_list); \
> - } \
> } while (0)
>
> #define MR_push_region_commit_frame(new_commit_sp) \
> do { \
> *(new_commit_sp) = (MR_Word) MR_region_commit_sp; \
> *(new_commit_sp + MR_REGION_COMMIT_FRAME_SEQUENCE_NUMBER) = \
> - MR_region_sequence_number; \
> + MR_region_sequence_number; \
> + *(new_commit_sp + MR_REGION_COMMIT_FRAME_DISJ_FRAME) = \
> + (MR_Word) MR_region_disj_sp; \
> MR_region_commit_sp = (new_commit_sp); \
> MR_region_debug_push_commit_frame(new_commit_sp); \
> } while (0)
> @@ -528,9 +527,25 @@
> saved_region_seq_number); \
> MR_destroy_marked_old_regions_at_commit( \
> number_of_saved_regions, first_saved_region_slot); \
> + MR_commit_success_undisjprotect_regions(commit_sp); \
> + MR_region_disj_sp = ( (MR_Word *) \
> + *((commit_sp) + MR_REGION_COMMIT_FRAME_DISJ_FRAME)); \
> MR_pop_region_commit_frame(commit_sp); \
> } while (0)
>
> +#define MR_commit_success_undisjprotect_regions(commit_sp) \
> + do { \
> + MR_Word *saved_disj_frame; \
> + MR_Word *disj_frame; \
> + \
> + saved_disj_frame = ( (MR_Word *) \
> + *((commit_sp) + MR_REGION_COMMIT_FRAME_DISJ_FRAME)); \
> + disj_frame = MR_region_disj_sp; \
> + while (disj_frame != saved_disj_frame) { \
> + MR_region_disj_unprotect_regions(disj_frame); \
> + disj_frame = (MR_Word *) *disj_frame; \
> + } \
> + } while (0)
> /*
> ** Commit failure means that the goal in the commit operation has failed.
> ** We reset any changes to the commit-related state of saved regions
> @@ -551,7 +566,7 @@
> (commit_sp) + MR_REGION_COMMIT_FRAME_FIRST_SAVED_REGION;\
> for (i = 0; i < number_of_saved_regions; i++) { \
> region = (MR_Region *) \
> - (first_saved_region_slot + \
> + *(first_saved_region_slot + \
> i * MR_REGION_COMMIT_ENTRY_SIZE); \
> if (region != NULL) { \
> region->MR_region_commit_frame = NULL; \
> cvs diff: Diffing runtime/GETOPT
> cvs diff: Diffing runtime/machdeps
> cvs diff: Diffing samples
> cvs diff: Diffing samples/c_interface
> cvs diff: Diffing samples/c_interface/c_calls_mercury
> cvs diff: Diffing samples/c_interface/cplusplus_calls_mercury
> cvs diff: Diffing samples/c_interface/mercury_calls_c
> cvs diff: Diffing samples/c_interface/mercury_calls_cplusplus
> cvs diff: Diffing samples/c_interface/mercury_calls_fortran
> cvs diff: Diffing samples/c_interface/simpler_c_calls_mercury
> cvs diff: Diffing samples/c_interface/simpler_cplusplus_calls_mercury
> cvs diff: Diffing samples/c_interface/standalone_c
> cvs diff: Diffing samples/diff
> cvs diff: Diffing samples/muz
> cvs diff: Diffing samples/rot13
> cvs diff: Diffing samples/solutions
> cvs diff: Diffing samples/solver_types
> cvs diff: Diffing samples/tests
> cvs diff: Diffing samples/tests/c_interface
> cvs diff: Diffing samples/tests/c_interface/c_calls_mercury
> cvs diff: Diffing samples/tests/c_interface/cplusplus_calls_mercury
> cvs diff: Diffing samples/tests/c_interface/mercury_calls_c
> cvs diff: Diffing samples/tests/c_interface/mercury_calls_cplusplus
> cvs diff: Diffing samples/tests/c_interface/mercury_calls_fortran
> cvs diff: Diffing samples/tests/c_interface/simpler_c_calls_mercury
> cvs diff: Diffing samples/tests/c_interface/simpler_cplusplus_calls_mercury
> cvs diff: Diffing samples/tests/diff
> cvs diff: Diffing samples/tests/muz
> cvs diff: Diffing samples/tests/rot13
> cvs diff: Diffing samples/tests/solutions
> cvs diff: Diffing samples/tests/toplevel
> cvs diff: Diffing scripts
> cvs diff: Diffing slice
> cvs diff: Diffing ssdb
> cvs diff: Diffing tools
> cvs diff: Diffing trace
> cvs diff: Diffing trax
> cvs diff: Diffing trial
> cvs diff: Diffing util
> cvs diff: Diffing vim
> cvs diff: Diffing vim/after
> cvs diff: Diffing vim/ftplugin
> cvs diff: Diffing vim/syntax
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to: mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions: mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------
More information about the reviews
mailing list