[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