Merge "Add an annotation for tests that need runtime prebuilts" into ub-jack-carnac
diff --git a/jack-tests/tests/com/android/jack/optimizations/notsimplifier/test001/dx/Tests.java b/jack-tests/tests/com/android/jack/optimizations/notsimplifier/test001/dx/Tests.java
index e4027e8..8304671 100644
--- a/jack-tests/tests/com/android/jack/optimizations/notsimplifier/test001/dx/Tests.java
+++ b/jack-tests/tests/com/android/jack/optimizations/notsimplifier/test001/dx/Tests.java
@@ -146,4 +146,22 @@
Assert.assertFalse(NotSimplifier.test015(false, true));
Assert.assertTrue(NotSimplifier.test015(true, false));
}
+
+ @Test
+ public void test016() {
+ Assert.assertTrue(NotSimplifier.test016(false, true));
+ Assert.assertFalse(NotSimplifier.test016(false, false));
+ }
+
+ @Test
+ public void test017() {
+ Assert.assertTrue(NotSimplifier.test017(false, true));
+ Assert.assertFalse(NotSimplifier.test017(false, false));
+ }
+
+ @Test
+ public void test018() {
+ Assert.assertTrue(NotSimplifier.test017(false, true));
+ Assert.assertFalse(NotSimplifier.test017(false, false));
+ }
}
diff --git a/jack-tests/tests/com/android/jack/optimizations/notsimplifier/test001/jack/NotSimplifier.java b/jack-tests/tests/com/android/jack/optimizations/notsimplifier/test001/jack/NotSimplifier.java
index 0a39a33..ae11792 100644
--- a/jack-tests/tests/com/android/jack/optimizations/notsimplifier/test001/jack/NotSimplifier.java
+++ b/jack-tests/tests/com/android/jack/optimizations/notsimplifier/test001/jack/NotSimplifier.java
@@ -133,4 +133,24 @@
// Check that expression is replaced by b1 & !b2
return !(!b1 | b2);
}
+
+ public static boolean test016(boolean b1, boolean b2) {
+ return !(!b1 && (b2 ^ true));
+ }
+
+ public static boolean test017(boolean b1, boolean b2) {
+ // Make sure the subexpression are correctly by replacing
+ // b1 = (!(!b1 && (b2 ^ true)))
+ boolean result1 = !(!b1 && (b2 ^ true));
+ boolean result2 = !(!(!(!b1 && (b2 ^ true))) && (b2 ^ true));
+ boolean result3 = !(!(!(!(!(!b1 && (b2 ^ true))) && (b2 ^ true))) && (b2 ^ true));
+ boolean result4 =
+ !(!(!(!(!(!(!(!b1 && (b2 ^ true))) && (b2 ^ true))) && (b2 ^ true))) && (b2 ^ true));
+ return result1 && result2 && result3 && result4;
+ }
+
+ public static boolean test018(boolean b1, boolean b2) {
+ // Exact statement from the bug report.
+ return !(!(new Boolean(b1)) & (b2 ^ true));
+ }
}
diff --git a/jack/src/com/android/jack/ir/ast/JBinaryOperator.java b/jack/src/com/android/jack/ir/ast/JBinaryOperator.java
index 5b444da..1c39b1b 100644
--- a/jack/src/com/android/jack/ir/ast/JBinaryOperator.java
+++ b/jack/src/com/android/jack/ir/ast/JBinaryOperator.java
@@ -73,6 +73,14 @@
case BIT_OR: {
return BIT_AND;
}
+ // XOR: EQ:
+ // T XOR T = F T EQ T = T
+ // T XOR F = T T EQ F = F
+ // F XOR T = T F EQ T = F
+ // F XOR F = F F EQ F = T
+ case BIT_XOR: {
+ return EQ;
+ }
case AND: {
return OR;
}
diff --git a/jack/src/com/android/jack/optimizations/NotSimplifier.java b/jack/src/com/android/jack/optimizations/NotSimplifier.java
index 04d08db..a925e9a 100644
--- a/jack/src/com/android/jack/optimizations/NotSimplifier.java
+++ b/jack/src/com/android/jack/optimizations/NotSimplifier.java
@@ -154,16 +154,13 @@
Jack.getSession().getPhantomLookup().getClass(CommonTypes.JAVA_LANG_BOOLEAN));
JBinaryOperator op = binaryOp.getOp();
- if (op.isComparison() || op.isConditionalOperation()
- || op == JBinaryOperator.BIT_AND
- || op == JBinaryOperator.BIT_OR) {
- try {
- tr.append(new Replace(binaryOp, JBinaryOperation.create(binaryOp.getSourceInfo(),
- binaryOp.getOp().getReverseOperator(), binaryOp.getLhs(),
- binaryOp.getRhs())));
- } catch (UnsupportedOperatorException e) {
- throw new JNodeInternalError("Failures into not simplifier", e);
- }
+ assert op.isComparison() || op.isConditionalOperation() || op == JBinaryOperator.BIT_AND
+ || op == JBinaryOperator.BIT_OR || op == JBinaryOperator.BIT_XOR;
+ try {
+ tr.append(new Replace(binaryOp, JBinaryOperation.create(binaryOp.getSourceInfo(),
+ binaryOp.getOp().getReverseOperator(), binaryOp.getLhs(), binaryOp.getRhs())));
+ } catch (UnsupportedOperatorException e) {
+ throw new JNodeInternalError("Failures into not simplifier", e);
}
// Continue to inverse operator only if it is '&&', '||', '|', '&' otherwise stop inversion.