[buddy] get rid of many recursive algorithms
This patch addresses the BuDDy part of #396, reported by Florian Renkin and Reed Oei. * src/kernel.c, src/kernel.h: Declare a bddrecstack and associated macros. Resize it when new variable are declared. * src/cache.h: Add a BddCache_index macro. * src/bddop.c (not_rec, apply_rec, quant_rec, appquant_rec, support_rec, ite_rec, compose_rec, restrict_rec, satone_rec, satoneset_rec): Rewrite using this stack to get rid of the recursion.
This commit is contained in:
parent
d7b3d05e57
commit
6f76121b89
4 changed files with 856 additions and 520 deletions
|
|
@ -43,6 +43,7 @@
|
|||
#include <limits.h>
|
||||
#include <setjmp.h>
|
||||
#include "bddx.h"
|
||||
#include "cache.h"
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
|
@ -133,6 +134,8 @@ extern int bddreorderdisabled;
|
|||
extern int bddresized;
|
||||
extern int bddcachesize;
|
||||
extern bddCacheStat bddcachestats;
|
||||
extern int* bddrecstack;
|
||||
extern int* bddrecstacktop;
|
||||
|
||||
/* from reorder.c */
|
||||
extern int bddreordermethod;
|
||||
|
|
@ -214,6 +217,28 @@ static inline int PUSHREF(int a)
|
|||
#define READREF(a) *(bddrefstacktop-(a))
|
||||
#define POPREF(a) bddrefstacktop -= (a)
|
||||
|
||||
#define PUSHREF_(a) *(localbddrefstacktop++) = (a)
|
||||
#define READREF_(a) *(localbddrefstacktop-(a))
|
||||
#define POPREF_(a) localbddrefstacktop -= (a)
|
||||
|
||||
#define PUSHINT_(a) *(localbddrecstacktop++) = (a)
|
||||
#define PUSH2INT_(a, b) {PUSHINT_(a); PUSHINT_(b);}
|
||||
#define PUSH3INT_(a, b, c) {PUSHINT_(a); PUSHINT_(b); PUSHINT_(c);}
|
||||
#define PUSH4INT_(a, b, c, d) {PUSHINT_(a); PUSHINT_(b); PUSHINT_(c); PUSHINT_(d);}
|
||||
#define POPINT_() *(--localbddrecstacktop)
|
||||
|
||||
#define LOCAL_REC_STACKS \
|
||||
int* restrict localbddrefstacktop = bddrefstacktop; \
|
||||
int* restrict localbddrecstacktop = bddrecstacktop; \
|
||||
int* localbddrecstackbot = bddrecstacktop;
|
||||
|
||||
#define NONEMPTY_REC_STACK (localbddrecstacktop > localbddrecstackbot)
|
||||
|
||||
|
||||
#define SYNC_REC_STACKS \
|
||||
bddrefstacktop = localbddrefstacktop; \
|
||||
bddrecstacktop = localbddrecstacktop;
|
||||
|
||||
#define BDDONE 1
|
||||
#define BDDZERO 0
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue