summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTim King <taking@cs.nyu.edu>2014-04-06 18:41:32 -0400
committerTim King <taking@cs.nyu.edu>2014-04-06 18:41:32 -0400
commitb584097ab838c6855a86da36b900becb96354e55 (patch)
tree87377c731df0a63a526e168bcfacdd0012b3d2f4 /src
parent1364389f19e55984cc52589b3af42322c300e00f (diff)
parente1ac093478ef409707833ebe59be944536605c71 (diff)
Merge pull request #21 from pcc/ite-fix
Fix for ite of >=64bit wide bitvectors with unconstrained condition.
Diffstat (limited to 'src')
-rw-r--r--src/theory/unconstrained_simplifier.cpp35
1 files changed, 19 insertions, 16 deletions
diff --git a/src/theory/unconstrained_simplifier.cpp b/src/theory/unconstrained_simplifier.cpp
index a6e885f97..115788639 100644
--- a/src/theory/unconstrained_simplifier.cpp
+++ b/src/theory/unconstrained_simplifier.cpp
@@ -163,23 +163,26 @@ void UnconstrainedSimplifier::processUnconstrained()
currentSub = Node();
}
}
- else if (uCond && parent.getType().getCardinality().isFinite() && parent.getType().getCardinality().getFiniteCardinality() == 2) {
- // Special case: condition is unconstrained, then and else are different, and total cardinality of the type is 2, then the result
- // is unconstrained
- Node test;
- if (parent.getType().isBoolean()) {
- test = Rewriter::rewrite(parent[1].iffNode(parent[2]));
- }
- else {
- test = Rewriter::rewrite(parent[1].eqNode(parent[2]));
- }
- if (test == NodeManager::currentNM()->mkConst<bool>(false)) {
- ++d_numUnconstrainedElim;
- if (currentSub.isNull()) {
- currentSub = current;
+ else if (uCond) {
+ Cardinality card = parent.getType().getCardinality();
+ if (card.isFinite() && !card.isLargeFinite() && card.getFiniteCardinality() == 2) {
+ // Special case: condition is unconstrained, then and else are different, and total cardinality of the type is 2, then the result
+ // is unconstrained
+ Node test;
+ if (parent.getType().isBoolean()) {
+ test = Rewriter::rewrite(parent[1].iffNode(parent[2]));
+ }
+ else {
+ test = Rewriter::rewrite(parent[1].eqNode(parent[2]));
+ }
+ if (test == NodeManager::currentNM()->mkConst<bool>(false)) {
+ ++d_numUnconstrainedElim;
+ if (currentSub.isNull()) {
+ currentSub = current;
+ }
+ currentSub = newUnconstrainedVar(parent.getType(), currentSub);
+ current = parent;
}
- currentSub = newUnconstrainedVar(parent.getType(), currentSub);
- current = parent;
}
}
break;
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback