Make NaturalIntLoopRemover a CodeRewriterPass

Change-Id: I82ba6746022c8c3ce460bc290cb0ee4eac62465a
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 9e5d496..7aae701 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -32,6 +32,7 @@
 import com.android.tools.r8.ir.conversion.passes.BranchSimplifier;
 import com.android.tools.r8.ir.conversion.passes.CommonSubexpressionElimination;
 import com.android.tools.r8.ir.conversion.passes.DexConstantOptimizer;
+import com.android.tools.r8.ir.conversion.passes.NaturalIntLoopRemover;
 import com.android.tools.r8.ir.conversion.passes.ParentConstructorHoistingCodeRewriter;
 import com.android.tools.r8.ir.conversion.passes.SplitBranch;
 import com.android.tools.r8.ir.conversion.passes.ThrowCatchOptimizer;
@@ -53,7 +54,6 @@
 import com.android.tools.r8.ir.optimize.IdempotentFunctionCallCanonicalizer;
 import com.android.tools.r8.ir.optimize.Inliner;
 import com.android.tools.r8.ir.optimize.Inliner.ConstraintWithTarget;
-import com.android.tools.r8.ir.optimize.NaturalIntLoopRemover;
 import com.android.tools.r8.ir.optimize.RedundantFieldLoadAndStoreElimination;
 import com.android.tools.r8.ir.optimize.ReflectionOptimizer;
 import com.android.tools.r8.ir.optimize.RemoveVerificationErrorForUnknownReturnedValues;
@@ -123,7 +123,6 @@
   public final CommonSubexpressionElimination commonSubexpressionElimination;
   private final SplitBranch splitBranch;
   public AssertionErrorTwoArgsConstructorRewriter assertionErrorTwoArgsConstructorRewriter;
-  private final NaturalIntLoopRemover naturalIntLoopRemover = new NaturalIntLoopRemover();
   public final MemberValuePropagation<?> memberValuePropagation;
   private final LensCodeRewriter lensCodeRewriter;
   protected final Inliner inliner;
@@ -747,9 +746,7 @@
     timing.begin("Rewrite array length");
     codeRewriter.rewriteKnownArrayLengthCalls(code);
     timing.end();
-    timing.begin("Natural Int Loop Remover");
-    naturalIntLoopRemover.run(appView, code);
-    timing.end();
+    new NaturalIntLoopRemover(appView).run(context, code);
     if (assertionErrorTwoArgsConstructorRewriter != null) {
       timing.begin("Rewrite AssertionError");
       assertionErrorTwoArgsConstructorRewriter.rewrite(
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/NaturalIntLoopRemover.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/NaturalIntLoopRemover.java
similarity index 95%
rename from src/main/java/com/android/tools/r8/ir/optimize/NaturalIntLoopRemover.java
rename to src/main/java/com/android/tools/r8/ir/conversion/passes/NaturalIntLoopRemover.java
index fc26421..16e9415 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/NaturalIntLoopRemover.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/NaturalIntLoopRemover.java
@@ -1,11 +1,13 @@
-// Copyright (c) 2021, the R8 project authors. Please see the AUTHORS file
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-package com.android.tools.r8.ir.optimize;
+package com.android.tools.r8.ir.conversion.passes;
 
 import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.graph.AppInfo;
 import com.android.tools.r8.graph.AppView;
+import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.ir.code.BasicBlock;
 import com.android.tools.r8.ir.code.Goto;
 import com.android.tools.r8.ir.code.IRCode;
@@ -27,12 +29,19 @@
  * pattern match fori and for loops with any initial value and increment, but this should be
  * extended for while loop support.
  */
-public class NaturalIntLoopRemover {
+public class NaturalIntLoopRemover extends CodeRewriterPass<AppInfo> {
 
-  public void run(AppView<?> appView, IRCode code) {
-    if (!appView.options().enableLoopUnrolling) {
-      return;
-    }
+  public NaturalIntLoopRemover(AppView<?> appView) {
+    super(appView);
+  }
+
+  @Override
+  String getTimingId() {
+    return "NaturalIntLoopRemover";
+  }
+
+  @Override
+  void rewriteCode(ProgramMethod method, IRCode code) {
     boolean loopRemoved = false;
     for (BasicBlock comparisonBlockCandidate : code.blocks) {
       if (isComparisonBlock(comparisonBlockCandidate)) {
@@ -46,6 +55,11 @@
     }
   }
 
+  @Override
+  boolean shouldRewriteCode(ProgramMethod method, IRCode code) {
+    return appView.options().enableLoopUnrolling;
+  }
+
   private boolean isComparisonBlock(BasicBlock comparisonBlockCandidate) {
     if (!comparisonBlockCandidate.exit().isIf()
         || comparisonBlockCandidate.exit().asIf().isZeroTest()) {