diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
index 93c4dbb..e39faa0 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
@@ -25,7 +25,6 @@
     private boolean allowAccessModification = false;
     private boolean ignoreWarnings = false;
     private boolean optimize = true;
-    private int optimizationPasses = 1;
     private boolean obfuscating = true;
     private boolean shrinking = true;
     private boolean printUsage = false;
@@ -81,11 +80,6 @@
       this.optimize = optimize;
     }
 
-    public void setOptimizationPasses(int optimizationPasses) {
-      // TODO(b/36800551): no-op until we have clear ideas about optimization passes.
-      // this.optimizationPasses = optimizationPasses;
-    }
-
     public void setObfuscating(boolean obfuscate) {
       this.obfuscating = obfuscate;
     }
@@ -155,7 +149,6 @@
           packagePrefix,
           allowAccessModification,
           ignoreWarnings,
-          optimize ? optimizationPasses : 0,
           obfuscating,
           shrinking,
           printUsage,
@@ -181,7 +174,6 @@
   private final String packagePrefix;
   private final boolean allowAccessModification;
   private final boolean ignoreWarnings;
-  private final int optimizationPasses;
   private final boolean obfuscating;
   private final boolean shrinking;
   private final boolean printUsage;
@@ -206,7 +198,6 @@
       String packagePrefix,
       boolean allowAccessModification,
       boolean ignoreWarnings,
-      int optimizationPasses,
       boolean obfuscating,
       boolean shrinking,
       boolean printUsage,
@@ -229,7 +220,6 @@
     this.packagePrefix = packagePrefix;
     this.allowAccessModification = allowAccessModification;
     this.ignoreWarnings = ignoreWarnings;
-    this.optimizationPasses = optimizationPasses;
     this.obfuscating = obfuscating;
     this.shrinking = shrinking;
     this.printUsage = printUsage;
@@ -294,10 +284,6 @@
     return ignoreWarnings;
   }
 
-  public int getOptimizationPasses() {
-    return optimizationPasses;
-  }
-
   public boolean isObfuscating() {
     return obfuscating;
   }
@@ -356,7 +342,6 @@
           ""                    /* package prefix */,
           false                 /* allowAccessModification */,
           false                 /* ignoreWarnings */,
-          1                     /* optimizationPasses */,
           false                 /* obfuscating */,
           false                 /* shrinking */,
           false                 /* printUsage */,
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
index 5b34221..4fb7357 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
@@ -163,7 +163,6 @@
         if (expectedOptimizationPasses == null) {
           throw parseError("Missing n of \"-optimizationpasses n\"");
         }
-        configurationBuilder.setOptimizationPasses(expectedOptimizationPasses);
         warnIgnoringOptions("optimizationpasses");
       } else if (acceptString("dontobfuscate")) {
         configurationBuilder.setObfuscating(false);
diff --git a/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java b/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
index 28722af..ea28214 100644
--- a/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
@@ -445,7 +445,6 @@
     ProguardConfigurationParser parser = new ProguardConfigurationParser(new DexItemFactory());
     parser.parse(Paths.get(DONT_OPTIMIZE));
     ProguardConfiguration config = parser.getConfig();
-    assertTrue(config.getOptimizationPasses() == 0);
   }
 
   @Test
@@ -453,7 +452,6 @@
     ProguardConfigurationParser parser = new ProguardConfigurationParser(new DexItemFactory());
     parser.parse(Paths.get(DONT_OPTIMIZE_OVERRIDES_PASSES));
     ProguardConfiguration config = parser.getConfig();
-    assertTrue(config.getOptimizationPasses() == 0);
   }
 
   @Test
@@ -461,9 +459,6 @@
     ProguardConfigurationParser parser = new ProguardConfigurationParser(new DexItemFactory());
     parser.parse(Paths.get(OPTIMIZATION_PASSES));
     ProguardConfiguration config = parser.getConfig();
-    // TODO(b/36800551): optimizationPasses should not be set at the moment.
-    // assertTrue(config.getOptimizationPasses() == 8);
-    assertTrue(config.getOptimizationPasses() == 1);
   }
 
   @Test
