@@ -56,9 +56,10 @@ namespace ParaFROST {
5656 uint32 trailpivot;
5757 uint32 simplified;
5858 uint32 propagated;
59+ bool selfallocated;
5960 // ================
60- SP () { RESETSTRUCT (this ); }
61- SP (const uint32 & size)
61+ SP () { RESETSTRUCT (this ); }
62+ explicit SP (const size_t & size, const LIT_ST & pol )
6263 {
6364 RESETSTRUCT (this );
6465 assert (sizeof (C_REF ) == sizeof (uint64));
@@ -69,7 +70,7 @@ namespace ParaFROST {
6970 _sz = size;
7071 _cap = vec1Bytes + vec4Bytes + vec8Bytes;
7172 assert (_cap);
72- pfralloc (_mem, _cap);
73+ pfralloc (_mem, align_up ( _cap, 64 ) );
7374 assert (_mem != NULL );
7475 memset (_mem, 0 , _cap);
7576 // 8-byte arrays
@@ -93,22 +94,24 @@ namespace ParaFROST {
9394 memset (marks, UNDEFINED , _sz);
9495 memset (ptarget, UNDEFINED , _sz);
9596 memset (pbest, UNDEFINED , _sz);
97+ memset (psaved, pol, _sz);
9698 forall_space (v) {
9799 level[v] = UNDEFINED ;
98100 source[v] = NOREF ;
99101 }
102+ selfallocated = true ;
100103 }
101104 size_t size () const { return _sz; }
102105 size_t capacity () const { return _cap; }
103- void initSaved (const LIT_ST & pol) {
104- memset (psaved, pol, _sz);
105- }
106+ // Assume memory is already allocated and initialized properly.
106107 void copyFrom (SP * src)
107108 {
109+ assert (src->size () <= _sz);
110+ selfallocated = src->selfallocated ;
108111 propagated = src->propagated ;
109112 trailpivot = src->trailpivot ;
110113 simplified = src->simplified ;
111- forall_space (v ) {
114+ for ( size_t v = 1 ; v < src-> size (); v++ ) {
112115 const uint32 p = V2L (v), n = NEG (p);
113116 value[p] = src->value [p];
114117 value[n] = src->value [n];
@@ -118,6 +121,14 @@ namespace ParaFROST {
118121 psaved[v] = src->psaved [v];
119122 }
120123 }
124+ void printPhases () {
125+ LOGN1 (" Phases->[" );
126+ forall_space (v) {
127+ PRINT (" %5d:%d " , v, psaved[v]);
128+ breakline (v);
129+ }
130+ putc (' ]' , stdout), PUTCH (' \n ' );
131+ }
121132 void printStates () {
122133 LOGN1 (" States->[" );
123134 forall_space (v) {
@@ -144,7 +155,7 @@ namespace ParaFROST {
144155 putc (' ]' , stdout), PUTCH (' \n ' );
145156 }
146157 void clearSubsume () { forall_space (v) vstate[v].subsume = 0 ; }
147- void destroy () { if (_mem != NULL ) std::free (_mem); }
158+ void destroy () { if (_mem != NULL ) std::free (_mem); _mem = NULL ; }
148159 ~SP () { destroy (); }
149160 };
150161}
0 commit comments