Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
abc
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
abc
Commits
bf4be3fc
Commit
bf4be3fc
authored
Mar 28, 2017
by
Yen-Sheng Ho
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
%pdra: improved performance
parent
2fea987e
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
28 additions
and
8 deletions
+28
-8
src/base/wlc/wlcAbs.c
+28
-8
No files found.
src/base/wlc/wlcAbs.c
View file @
bf4be3fc
...
@@ -213,7 +213,7 @@ void Wlc_NtkAbsAnalyzeRefine( Wlc_Ntk_t * p, Vec_Int_t * vBlacks, Vec_Bit_t * vU
...
@@ -213,7 +213,7 @@ void Wlc_NtkAbsAnalyzeRefine( Wlc_Ntk_t * p, Vec_Int_t * vBlacks, Vec_Bit_t * vU
Vec_IntFree
(
vSuppRefs
);
Vec_IntFree
(
vSuppRefs
);
}
}
static
Vec_Int_t
*
Wlc_NtkGetCoreSels
(
Gia_Man_t
*
pFrames
,
int
nFrames
,
int
first_sel_pi
,
int
num_sel_pis
,
Vec_Bit_t
*
vMark
,
int
nConfLimit
,
Wlc_Par_t
*
pPars
)
static
Vec_Int_t
*
Wlc_NtkGetCoreSels
(
Gia_Man_t
*
pFrames
,
int
nFrames
,
int
first_sel_pi
,
int
num_sel_pis
,
Vec_Bit_t
*
vMark
,
int
nConfLimit
,
Wlc_Par_t
*
pPars
,
int
fSetPO
)
{
{
Vec_Int_t
*
vCores
=
NULL
;
Vec_Int_t
*
vCores
=
NULL
;
Aig_Man_t
*
pAigFrames
=
Gia_ManToAigSimple
(
pFrames
);
Aig_Man_t
*
pAigFrames
=
Gia_ManToAigSimple
(
pFrames
);
...
@@ -238,12 +238,30 @@ static Vec_Int_t * Wlc_NtkGetCoreSels( Gia_Man_t * pFrames, int nFrames, int fir
...
@@ -238,12 +238,30 @@ static Vec_Int_t * Wlc_NtkGetCoreSels( Gia_Man_t * pFrames, int nFrames, int fir
assert
(
pCnf
->
pVarNums
[
pObj
->
Id
]
>=
0
);
assert
(
pCnf
->
pVarNums
[
pObj
->
Id
]
>=
0
);
Vec_IntPush
(
vLits
,
toLitCond
(
pCnf
->
pVarNums
[
pObj
->
Id
],
0
));
Vec_IntPush
(
vLits
,
toLitCond
(
pCnf
->
pVarNums
[
pObj
->
Id
],
0
));
}
}
ret
=
sat_solver_addclause
(
pSat
,
Vec_IntArray
(
vLits
),
Vec_IntArray
(
vLits
)
+
Vec_IntSize
(
vLits
));
if
(
!
fSetPO
)
if
(
!
ret
)
{
Abc_Print
(
1
,
"UNSAT after adding PO clauses.
\n
"
);
ret
=
sat_solver_addclause
(
pSat
,
Vec_IntArray
(
vLits
),
Vec_IntArray
(
vLits
)
+
Vec_IntSize
(
vLits
));
if
(
!
ret
)
Abc_Print
(
1
,
"UNSAT after adding PO clauses.
\n
"
);
}
else
{
int
Lit
;
for
(
i
=
0
;
i
<
Vec_IntSize
(
vLits
);
++
i
)
{
if
(
i
==
Vec_IntSize
(
vLits
)
-
1
)
Lit
=
Vec_IntEntry
(
vLits
,
i
);
else
Lit
=
lit_neg
(
Vec_IntEntry
(
vLits
,
i
));
ret
=
sat_solver_addclause
(
pSat
,
&
Lit
,
&
Lit
+
1
);
if
(
!
ret
)
Abc_Print
(
1
,
"UNSAT after adding PO clauses.
\n
"
);
}
}
Vec_IntFree
(
vLits
);
Vec_IntFree
(
vLits
);
}
}
// main procedure
// main procedure
{
{
int
status
;
int
status
;
...
@@ -627,6 +645,7 @@ static Vec_Bit_t * Wlc_NtkProofReduce( Wlc_Ntk_t * p, Wlc_Par_t * pPars, int nFr
...
@@ -627,6 +645,7 @@ static Vec_Bit_t * Wlc_NtkProofReduce( Wlc_Ntk_t * p, Wlc_Par_t * pPars, int nFr
Vec_Bit_t
*
vChoiceMark
;
Vec_Bit_t
*
vChoiceMark
;
int
first_sel_pi
;
int
first_sel_pi
;
int
i
,
Entry
;
int
i
,
Entry
;
abctime
clk
=
Abc_Clock
();
assert
(
vWhites
&&
Vec_IntSize
(
vWhites
)
);
assert
(
vWhites
&&
Vec_IntSize
(
vWhites
)
);
pNtkWithChoices
=
Wlc_NtkIntroduceChoices
(
p
,
vWhites
);
pNtkWithChoices
=
Wlc_NtkIntroduceChoices
(
p
,
vWhites
);
...
@@ -637,7 +656,7 @@ static Vec_Bit_t * Wlc_NtkProofReduce( Wlc_Ntk_t * p, Wlc_Par_t * pPars, int nFr
...
@@ -637,7 +656,7 @@ static Vec_Bit_t * Wlc_NtkProofReduce( Wlc_Ntk_t * p, Wlc_Par_t * pPars, int nFr
vChoiceMark
=
Vec_BitStart
(
Vec_IntSize
(
vWhites
)
);
vChoiceMark
=
Vec_BitStart
(
Vec_IntSize
(
vWhites
)
);
Vec_IntForEachEntry
(
vWhites
,
Entry
,
i
)
Vec_IntForEachEntry
(
vWhites
,
Entry
,
i
)
Vec_BitWriteEntry
(
vChoiceMark
,
i
,
1
);
Vec_BitWriteEntry
(
vChoiceMark
,
i
,
1
);
vCoreSels
=
Wlc_NtkGetCoreSels
(
pGiaFrames
,
nFrames
,
first_sel_pi
,
Vec_IntSize
(
vWhites
),
vChoiceMark
,
0
,
pPars
);
vCoreSels
=
Wlc_NtkGetCoreSels
(
pGiaFrames
,
nFrames
,
first_sel_pi
,
Vec_IntSize
(
vWhites
),
vChoiceMark
,
0
,
pPars
,
1
);
Wlc_NtkFree
(
pNtkWithChoices
);
Wlc_NtkFree
(
pNtkWithChoices
);
Gia_ManStop
(
pGiaFrames
);
Gia_ManStop
(
pGiaFrames
);
...
@@ -646,7 +665,8 @@ static Vec_Bit_t * Wlc_NtkProofReduce( Wlc_Ntk_t * p, Wlc_Par_t * pPars, int nFr
...
@@ -646,7 +665,8 @@ static Vec_Bit_t * Wlc_NtkProofReduce( Wlc_Ntk_t * p, Wlc_Par_t * pPars, int nFr
Vec_IntForEachEntry
(
vCoreSels
,
Entry
,
i
)
Vec_IntForEachEntry
(
vCoreSels
,
Entry
,
i
)
Vec_BitWriteEntry
(
vChoiceMark
,
Entry
,
1
);
Vec_BitWriteEntry
(
vChoiceMark
,
Entry
,
1
);
Abc_Print
(
1
,
"ProofReduce: remove %d out of %d white boxes.
\n
"
,
Vec_IntSize
(
vWhites
)
-
Vec_BitCount
(
vChoiceMark
),
Vec_IntSize
(
vWhites
)
);
Abc_Print
(
1
,
"ProofReduce: remove %d out of %d white boxes."
,
Vec_IntSize
(
vWhites
)
-
Vec_BitCount
(
vChoiceMark
),
Vec_IntSize
(
vWhites
)
);
Abc_PrintTime
(
1
,
" Time"
,
Abc_Clock
()
-
clk
);
Vec_IntFree
(
vCoreSels
);
Vec_IntFree
(
vCoreSels
);
return
vChoiceMark
;
return
vChoiceMark
;
...
@@ -682,9 +702,9 @@ static int Wlc_NtkProofRefine( Wlc_Ntk_t * p, Wlc_Par_t * pPars, Abc_Cex_t * pCe
...
@@ -682,9 +702,9 @@ static int Wlc_NtkProofRefine( Wlc_Ntk_t * p, Wlc_Par_t * pPars, Abc_Cex_t * pCe
pGiaFrames
=
Wlc_NtkUnrollWithCex
(
pNtkWithChoices
,
pCex
,
Wlc_NtkNumPiBits
(
p
),
Vec_IntSize
(
vBlacks
),
&
num_ppis
,
0
,
pPars
->
fProofUsePPI
);
pGiaFrames
=
Wlc_NtkUnrollWithCex
(
pNtkWithChoices
,
pCex
,
Wlc_NtkNumPiBits
(
p
),
Vec_IntSize
(
vBlacks
),
&
num_ppis
,
0
,
pPars
->
fProofUsePPI
);
if
(
!
pPars
->
fProofUsePPI
)
if
(
!
pPars
->
fProofUsePPI
)
vCoreSels
=
Wlc_NtkGetCoreSels
(
pGiaFrames
,
pCex
->
iFrame
+
1
,
num_ppis
,
Vec_IntSize
(
vBlacks
),
vChoiceMark
,
0
,
pPars
);
vCoreSels
=
Wlc_NtkGetCoreSels
(
pGiaFrames
,
pCex
->
iFrame
+
1
,
num_ppis
,
Vec_IntSize
(
vBlacks
),
vChoiceMark
,
0
,
pPars
,
0
);
else
else
vCoreSels
=
Wlc_NtkGetCoreSels
(
pGiaFrames
,
pCex
->
iFrame
+
1
,
0
,
Vec_IntSize
(
vBlacks
),
vChoiceMark
,
0
,
pPars
);
vCoreSels
=
Wlc_NtkGetCoreSels
(
pGiaFrames
,
pCex
->
iFrame
+
1
,
0
,
Vec_IntSize
(
vBlacks
),
vChoiceMark
,
0
,
pPars
,
0
);
Wlc_NtkFree
(
pNtkWithChoices
);
Wlc_NtkFree
(
pNtkWithChoices
);
Gia_ManStop
(
pGiaFrames
);
Gia_ManStop
(
pGiaFrames
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment