Canonicalize method rule flags

Fixes: b/278482400
Change-Id: I432bde3ac80d04e9f1e3f121335bd5028d0d87e3
diff --git a/src/main/java/com/android/tools/r8/profile/art/ArtProfileMethodRuleInfoImpl.java b/src/main/java/com/android/tools/r8/profile/art/ArtProfileMethodRuleInfoImpl.java
index d91553e..b86c569 100644
--- a/src/main/java/com/android/tools/r8/profile/art/ArtProfileMethodRuleInfoImpl.java
+++ b/src/main/java/com/android/tools/r8/profile/art/ArtProfileMethodRuleInfoImpl.java
@@ -4,16 +4,18 @@
 
 package com.android.tools.r8.profile.art;
 
+import com.android.tools.r8.utils.ArrayUtils;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 
 public class ArtProfileMethodRuleInfoImpl implements ArtProfileMethodRuleInfo {
 
-  private static final ArtProfileMethodRuleInfoImpl EMPTY = new ArtProfileMethodRuleInfoImpl(0);
+  private static final ArtProfileMethodRuleInfoImpl[] INSTANCES =
+      ArrayUtils.initialize(new ArtProfileMethodRuleInfoImpl[8], ArtProfileMethodRuleInfoImpl::new);
 
   private final int flags;
 
-  ArtProfileMethodRuleInfoImpl(int flags) {
+  private ArtProfileMethodRuleInfoImpl(int flags) {
     this.flags = flags;
   }
 
@@ -22,7 +24,7 @@
   }
 
   public static ArtProfileMethodRuleInfoImpl empty() {
-    return EMPTY;
+    return INSTANCES[0];
   }
 
   public int getFlags() {
@@ -163,7 +165,9 @@
     }
 
     public ArtProfileMethodRuleInfoImpl build() {
-      return new ArtProfileMethodRuleInfoImpl(flags);
+      assert 0 <= flags;
+      assert flags < INSTANCES.length;
+      return INSTANCES[flags];
     }
   }
 }
diff --git a/src/main/java/com/android/tools/r8/utils/ArrayUtils.java b/src/main/java/com/android/tools/r8/utils/ArrayUtils.java
index 3e5104a..d90c8e5 100644
--- a/src/main/java/com/android/tools/r8/utils/ArrayUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ArrayUtils.java
@@ -10,6 +10,7 @@
 import java.util.Objects;
 import java.util.Optional;
 import java.util.function.Function;
+import java.util.function.IntFunction;
 import java.util.function.IntPredicate;
 import java.util.function.Predicate;
 
@@ -49,6 +50,13 @@
     return results;
   }
 
+  public static <T> T[] initialize(T[] array, IntFunction<T> fn) {
+    for (int i = 0; i < array.length; i++) {
+      array[i] = fn.apply(i);
+    }
+    return array;
+  }
+
   public static <T> boolean isEmpty(T[] array) {
     return array.length == 0;
   }