ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
resize.c File Reference
#include "resize.h"
#include "allocate.h"
#include "inline.h"
#include "require.h"
#include <limits.h>
#include <string.h>
Include dependency graph for resize.c:

Go to the source code of this file.

Macros

#define NREALLOC_GENERIC(TYPE, NAME, ELEMENTS_PER_BLOCK)
 
#define CREALLOC_GENERIC(TYPE, NAME, ELEMENTS_PER_BLOCK)
 
#define NREALLOC_VARIABLE_INDEXED(TYPE, NAME)
 
#define NREALLOC_LITERAL_INDEXED(TYPE, NAME)
 
#define CREALLOC_VARIABLE_INDEXED(TYPE, NAME)
 
#define CREALLOC_LITERAL_INDEXED(TYPE, NAME)
 

Functions

void kissat_increase_size (kissat *solver, unsigned new_size)
 
void kissat_decrease_size (kissat *solver)
 
void kissat_enlarge_variables (kissat *solver, unsigned new_vars)
 

Macro Definition Documentation

◆ CREALLOC_GENERIC

#define CREALLOC_GENERIC ( TYPE,
NAME,
ELEMENTS_PER_BLOCK )
Value:
do { \
const size_t block_size = sizeof (TYPE); \
TYPE *NAME = \
(TYPE*) kissat_calloc (solver, ELEMENTS_PER_BLOCK * new_size, block_size); \
if (old_size) { \
const size_t bytes = ELEMENTS_PER_BLOCK * old_size * block_size; \
memcpy (NAME, solver->NAME, bytes); \
} \
kissat_dealloc (solver, solver->NAME, ELEMENTS_PER_BLOCK *old_size, \
block_size); \
solver->NAME = NAME; \
} while (0)
void * kissat_calloc(kissat *solver, size_t n, size_t size)
Definition allocate.c:97
@ NAME
Definition inflate.h:29
@ TYPE
Definition inflate.h:34
#define solver
Definition kitten.c:211

Definition at line 19 of file resize.c.

19#define CREALLOC_GENERIC(TYPE, NAME, ELEMENTS_PER_BLOCK) \
20 do { \
21 const size_t block_size = sizeof (TYPE); \
22 TYPE *NAME = \
23 (TYPE*) kissat_calloc (solver, ELEMENTS_PER_BLOCK * new_size, block_size); \
24 if (old_size) { \
25 const size_t bytes = ELEMENTS_PER_BLOCK * old_size * block_size; \
26 memcpy (NAME, solver->NAME, bytes); \
27 } \
28 kissat_dealloc (solver, solver->NAME, ELEMENTS_PER_BLOCK *old_size, \
29 block_size); \
30 solver->NAME = NAME; \
31 } while (0)

◆ CREALLOC_LITERAL_INDEXED

#define CREALLOC_LITERAL_INDEXED ( TYPE,
NAME )
Value:
#define CREALLOC_GENERIC(TYPE, NAME, ELEMENTS_PER_BLOCK)
Definition resize.c:19

Definition at line 42 of file resize.c.

42#define CREALLOC_LITERAL_INDEXED(TYPE, NAME) \
43 CREALLOC_GENERIC (TYPE, NAME, 2)

◆ CREALLOC_VARIABLE_INDEXED

#define CREALLOC_VARIABLE_INDEXED ( TYPE,
NAME )
Value:

Definition at line 39 of file resize.c.

39#define CREALLOC_VARIABLE_INDEXED(TYPE, NAME) \
40 CREALLOC_GENERIC (TYPE, NAME, 1)

◆ NREALLOC_GENERIC

#define NREALLOC_GENERIC ( TYPE,
NAME,
ELEMENTS_PER_BLOCK )
Value:
do { \
const size_t block_size = sizeof (TYPE); \
solver->NAME = \
(TYPE*) kissat_nrealloc (solver, solver->NAME, old_size, new_size, \
ELEMENTS_PER_BLOCK * block_size); \
} while (0)
void * kissat_nrealloc(kissat *solver, void *p, size_t o, size_t n, size_t size)
Definition allocate.c:151

Definition at line 11 of file resize.c.

11#define NREALLOC_GENERIC(TYPE, NAME, ELEMENTS_PER_BLOCK) \
12 do { \
13 const size_t block_size = sizeof (TYPE); \
14 solver->NAME = \
15 (TYPE*) kissat_nrealloc (solver, solver->NAME, old_size, new_size, \
16 ELEMENTS_PER_BLOCK * block_size); \
17 } while (0)

◆ NREALLOC_LITERAL_INDEXED

#define NREALLOC_LITERAL_INDEXED ( TYPE,
NAME )
Value:
#define NREALLOC_GENERIC(TYPE, NAME, ELEMENTS_PER_BLOCK)
Definition resize.c:11

Definition at line 36 of file resize.c.

36#define NREALLOC_LITERAL_INDEXED(TYPE, NAME) \
37 NREALLOC_GENERIC (TYPE, NAME, 2)

◆ NREALLOC_VARIABLE_INDEXED

#define NREALLOC_VARIABLE_INDEXED ( TYPE,
NAME )
Value:

Definition at line 33 of file resize.c.

33#define NREALLOC_VARIABLE_INDEXED(TYPE, NAME) \
34 NREALLOC_GENERIC (TYPE, NAME, 1)

Function Documentation

◆ kissat_decrease_size()

void kissat_decrease_size ( kissat * solver)

Definition at line 82 of file resize.c.

82 {
83 const unsigned old_size = solver->size;
84 const unsigned new_size = solver->vars;
85
86#ifdef METRICS
87 LOG ("%s before decreasing size from %u to %u",
88 FORMAT_BYTES (kissat_allocated (solver)), old_size, new_size);
89#endif
90
94
98
99 reallocate_trail (solver, old_size, new_size);
100 kissat_resize_heap (solver, SCORES, new_size);
101 kissat_decrease_phases (solver, new_size);
102
103 solver->size = new_size;
104
105#ifdef METRICS
106 LOG ("%s after decreasing size from %u to %u",
107 FORMAT_BYTES (kissat_allocated (solver)), old_size, new_size);
108#endif
109}
#define LOG(...)
ABC_NAMESPACE_IMPL_START typedef signed char value
#define FORMAT_BYTES(BYTES)
Definition format.h:31
void kissat_resize_heap(kissat *solver, heap *heap, unsigned new_size)
Definition heap.c:46
#define SCORES
Definition internal.h:262
void kissat_decrease_phases(kissat *solver, unsigned new_size)
Definition phases.c:31
#define NREALLOC_VARIABLE_INDEXED(TYPE, NAME)
Definition resize.c:33
#define NREALLOC_LITERAL_INDEXED(TYPE, NAME)
Definition resize.c:36
Definition flags.h:11
signed char mark
Definition value.h:8
vector watches
Definition watch.h:49
Here is the call graph for this function:
Here is the caller graph for this function:

◆ kissat_enlarge_variables()

void kissat_enlarge_variables ( kissat * solver,
unsigned new_vars )

Definition at line 111 of file resize.c.

111 {
112 if (solver->vars >= new_vars)
113 return;
114 KISSAT_assert (new_vars <= INTERNAL_MAX_VAR + 1);
115 LOG ("enlarging variables from %u to %u", solver->vars, new_vars);
116 const size_t old_size = solver->size;
117 if (old_size < new_vars) {
118 LOG ("old size %zu below requested new number of variables %u",
119 old_size, new_vars);
120 size_t new_size;
121 if (!old_size)
122 new_size = new_vars;
123 else {
124 if (kissat_is_power_of_two (old_size)) {
125 KISSAT_assert (old_size <= UINT_MAX / 2);
126 new_size = 2 * old_size;
127 } else {
128 KISSAT_assert (1 < old_size);
129 new_size = 2;
130 }
131 while (new_size < new_vars) {
132 KISSAT_assert (new_size <= UINT_MAX / 2);
133 new_size *= 2;
134 }
135 }
136 kissat_increase_size (solver, new_size);
137 }
138 solver->vars = new_vars;
139}
#define KISSAT_assert(ignore)
Definition global.h:13
void kissat_increase_size(kissat *solver, unsigned new_size)
Definition resize.c:52
#define INTERNAL_MAX_VAR
Definition literal.h:13
Here is the call graph for this function:

◆ kissat_increase_size()

void kissat_increase_size ( kissat * solver,
unsigned new_size )

Definition at line 52 of file resize.c.

52 {
53 KISSAT_assert (solver->vars <= new_size);
54 const unsigned old_size = solver->size;
55 if (old_size >= new_size)
56 return;
57
58#ifdef METRICS
59 LOG ("%s before increasing size from %u to %u",
60 FORMAT_BYTES (kissat_allocated (solver)), old_size, new_size);
61#endif
65
69
70 reallocate_trail (solver, old_size, new_size);
71 kissat_resize_heap (solver, SCORES, new_size);
73
74 solver->size = new_size;
75
76#ifdef METRICS
77 LOG ("%s after increasing size from %u to %u",
78 FORMAT_BYTES (kissat_allocated (solver)), old_size, new_size);
79#endif
80}
void kissat_increase_phases(kissat *solver, unsigned new_size)
Definition phases.c:22
#define CREALLOC_VARIABLE_INDEXED(TYPE, NAME)
Definition resize.c:39
#define CREALLOC_LITERAL_INDEXED(TYPE, NAME)
Definition resize.c:42
Here is the call graph for this function:
Here is the caller graph for this function: