ART: Delete code optimizing a%1 and a%-1 from InstructionCodeGeneratorARM64

In InstructionWithAbsorbingInputSimplifier there is code optimizing a%1
and a%-1. So the code in InstructionCodeGeneratorARM64 optimizing such
cases can be deleted.

This patch deletes the code from InstructionCodeGeneratorARM64 and adds
additional tests.

Test: 012-math, 014-math3, 411-optimizing-arith, 411-checker-hdiv-hrem-pow2
Test: 701-easy-div-rem, 442-checker-constant-folding
Test: test-art-host, test-art-target
Change-Id: Ib80c0aa4c3e28b07fa79bb43783274c9d7fc456a
diff --git a/test/411-optimizing-arith/src/RemTest.java b/test/411-optimizing-arith/src/RemTest.java
index 1b31f63..287f5d8 100644
--- a/test/411-optimizing-arith/src/RemTest.java
+++ b/test/411-optimizing-arith/src/RemTest.java
@@ -89,6 +89,34 @@
     expectDivisionByZero(5L);
     expectDivisionByZero(Long.MAX_VALUE);
     expectDivisionByZero(Long.MIN_VALUE);
+
+    expectEquals(0, $noinline$RemLoaded1(0));
+    expectEquals(0, $noinline$RemLoaded1(1));
+    expectEquals(0, $noinline$RemLoaded1(-1));
+    expectEquals(0, $noinline$RemLoaded1(12345));
+    expectEquals(0, $noinline$RemLoaded1(Integer.MAX_VALUE));
+    expectEquals(0, $noinline$RemLoaded1(Integer.MIN_VALUE));
+
+    expectEquals(0, $noinline$RemLoadedN1(0));
+    expectEquals(0, $noinline$RemLoadedN1(1));
+    expectEquals(0, $noinline$RemLoadedN1(-1));
+    expectEquals(0, $noinline$RemLoadedN1(12345));
+    expectEquals(0, $noinline$RemLoadedN1(Integer.MAX_VALUE));
+    expectEquals(0, $noinline$RemLoadedN1(Integer.MIN_VALUE));
+
+    expectEquals(0L, $noinline$RemLoaded1(0L));
+    expectEquals(0L, $noinline$RemLoaded1(1L));
+    expectEquals(0L, $noinline$RemLoaded1(-1L));
+    expectEquals(0L, $noinline$RemLoaded1(12345L));
+    expectEquals(0L, $noinline$RemLoaded1(Long.MAX_VALUE));
+    expectEquals(0L, $noinline$RemLoaded1(Long.MIN_VALUE));
+
+    expectEquals(0L, $noinline$RemLoadedN1(0L));
+    expectEquals(0L, $noinline$RemLoadedN1(1L));
+    expectEquals(0L, $noinline$RemLoadedN1(-1L));
+    expectEquals(0L, $noinline$RemLoadedN1(12345L));
+    expectEquals(0L, $noinline$RemLoadedN1(Long.MAX_VALUE));
+    expectEquals(0L, $noinline$RemLoadedN1(Long.MIN_VALUE));
   }
 
   static int $opt$Rem(int a, int b) {
@@ -99,6 +127,26 @@
     return a % 0;
   }
 
+  static int $noinline$RemLoaded1(int a) {
+    int[] v = {25, 1};
+    return a % v[1];
+  }
+
+  static int $noinline$RemLoadedN1(int a) {
+    int [] v = {25, -1};
+    return a % v[1];
+  }
+
+  static long $noinline$RemLoaded1(long a) {
+    long[] v = {25, 1};
+    return a % v[1];
+  }
+
+  static long $noinline$RemLoadedN1(long a) {
+    long [] v = {25, -1};
+    return a % v[1];
+  }
+
   // Modulo by literals != 0 should not generate checks.
   static int $opt$RemConst(int a) {
     return a % 4;