diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index d2ef72e..3ec09d4 100644
--- a/src/main/java/com/android/tools/r8/Version.java
+++ b/src/main/java/com/android/tools/r8/Version.java
@@ -11,7 +11,7 @@
 
   // This field is accessed from release scripts using simple pattern matching.
   // Therefore, changing this field could break our release scripts.
-  public static final String LABEL = "2.0.25";
+  public static final String LABEL = "2.0.26";
 
   private Version() {
   }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/PeepholeOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/PeepholeOptimizer.java
index c0a67fc..958749e 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/PeepholeOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/PeepholeOptimizer.java
@@ -94,15 +94,15 @@
         }
       }
 
-      // Each block with one or more catch handlers may have at most one throwing instruction.
-      if (instruction.instructionTypeCanThrow() && block.hasCatchHandlers()) {
-        return;
-      }
+      if (instruction.instructionTypeCanThrow()) {
+        // Each block with one or more catch handlers may have at most one throwing instruction.
+        if (block.hasCatchHandlers()) {
+          return;
+        }
 
-      // If the instruction can throw and one of the normal successor blocks has a catch handler,
-      // then we cannot merge the instruction into the predecessor, since this would change the
-      // exceptional control flow.
-      if (instruction.instructionInstanceCanThrow()) {
+        // If the instruction can throw and one of the normal successor blocks has a catch handler,
+        // then we cannot merge the instruction into the predecessor, since this would change the
+        // exceptional control flow.
         for (BasicBlock normalSuccessor : normalSuccessors) {
           if (normalSuccessor.hasCatchHandlers()) {
             return;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/B148366506.java b/src/test/java/com/android/tools/r8/ir/optimize/B148366506.java
new file mode 100644
index 0000000..e89e6cd5
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/ir/optimize/B148366506.java
@@ -0,0 +1,388 @@
+// Copyright (c) 2020, 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;
+
+import com.android.tools.r8.CompilationMode;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import java.util.Collection;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+
+@RunWith(Parameterized.class)
+public class B148366506 extends TestBase implements Opcodes {
+
+  private final TestParameters parameters;
+  private final CompilationMode compilationMode;
+
+  @Parameterized.Parameters(name = "{0}, {1}")
+  public static Collection<Object[]> data() {
+    return buildParameters(
+        getTestParameters().withDexRuntimes().withAllApiLevels().build(), CompilationMode.values());
+  }
+
+  public B148366506(TestParameters parameters, CompilationMode compilationMode) {
+    this.parameters = parameters;
+    this.compilationMode = compilationMode;
+  }
+
+  @Test
+  public void test() throws Exception {
+    testForD8()
+        .addProgramClassFileData(dump())
+        .setMinApi(parameters.getApiLevel())
+        .setMode(compilationMode)
+        .compile();
+  }
+
+  // Code from b/148366506.
+  public static byte[] dump() {
+
+    ClassWriter classWriter = new ClassWriter(0);
+    MethodVisitor methodVisitor;
+
+    classWriter.visit(
+        V1_7,
+        ACC_PUBLIC | ACC_SUPER,
+        "d/b/c/e/e/a/b/a",
+        null,
+        "java/lang/Object",
+        new String[] {"com/microsoft/identity/common/adal/internal/cache/IStorageHelper"});
+
+    {
+      methodVisitor =
+          classWriter.visitMethod(
+              ACC_PUBLIC | ACC_SYNCHRONIZED, "e", "()Ljavax/crypto/SecretKey;", null, null);
+      methodVisitor.visitCode();
+      Label label0 = new Label();
+      Label label1 = new Label();
+      Label label2 = new Label();
+      methodVisitor.visitTryCatchBlock(label0, label1, label2, "java/lang/Exception");
+      Label label3 = new Label();
+      Label label4 = new Label();
+      Label label5 = new Label();
+      methodVisitor.visitTryCatchBlock(label3, label4, label5, null);
+      Label label6 = new Label();
+      methodVisitor.visitTryCatchBlock(label6, label5, label2, "java/lang/Exception");
+      Label label7 = new Label();
+      Label label8 = new Label();
+      Label label9 = new Label();
+      methodVisitor.visitTryCatchBlock(label7, label8, label9, null);
+      Label label10 = new Label();
+      methodVisitor.visitJumpInsn(GOTO, label10);
+      methodVisitor.visitLabel(label2);
+      methodVisitor.visitFrame(
+          Opcodes.F_FULL, 0, new Object[] {}, 1, new Object[] {"java/lang/Exception"});
+      methodVisitor.visitInsn(ATHROW);
+      Label label11 = new Label();
+      methodVisitor.visitLabel(label11);
+      methodVisitor.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] {"d/b/c/e/e/a/b/a"});
+      methodVisitor.visitInsn(ICONST_0);
+      Label label12 = new Label();
+      methodVisitor.visitJumpInsn(GOTO, label12);
+      Label label13 = new Label();
+      methodVisitor.visitLabel(label13);
+      methodVisitor.visitFrame(Opcodes.F_APPEND, 1, new Object[] {"d/b/c/e/e/a/b/a"}, 0, null);
+      methodVisitor.visitVarInsn(ALOAD, 0);
+      methodVisitor.visitLabel(label0);
+      methodVisitor.visitFieldInsn(
+          GETFIELD, "d/b/c/e/e/a/b/a", "mContext", "Landroid/content/Context;");
+      methodVisitor.visitLabel(label1);
+      Label label14 = new Label();
+      methodVisitor.visitJumpInsn(GOTO, label14);
+      Label label15 = new Label();
+      methodVisitor.visitLabel(label15);
+      methodVisitor.visitFrame(
+          Opcodes.F_SAME1, 0, null, 1, new Object[] {"android/content/Context"});
+      methodVisitor.visitFieldInsn(GETSTATIC, "d/b/c/e/e/a/b/a", "\u0131", "I");
+      methodVisitor.visitIntInsn(BIPUSH, 111);
+      methodVisitor.visitInsn(IADD);
+      methodVisitor.visitInsn(DUP);
+      methodVisitor.visitIntInsn(SIPUSH, 128);
+      methodVisitor.visitInsn(IREM);
+      methodVisitor.visitFieldInsn(PUTSTATIC, "d/b/c/e/e/a/b/a", "\u03b9", "I");
+      methodVisitor.visitInsn(ICONST_2);
+      methodVisitor.visitInsn(IREM);
+      Label label16 = new Label();
+      methodVisitor.visitJumpInsn(IFNE, label16);
+      Label label17 = new Label();
+      methodVisitor.visitJumpInsn(GOTO, label17);
+      methodVisitor.visitLabel(label16);
+      methodVisitor.visitFrame(
+          Opcodes.F_SAME1, 0, null, 1, new Object[] {"android/content/Context"});
+      methodVisitor.visitJumpInsn(GOTO, label3);
+      Label label18 = new Label();
+      methodVisitor.visitLabel(label18);
+      methodVisitor.visitFrame(
+          Opcodes.F_FULL,
+          0,
+          new Object[] {},
+          2,
+          new Object[] {"d/b/c/e/e/a/b/a", "java/lang/String"});
+      methodVisitor.visitInsn(ICONST_2);
+      methodVisitor.visitInsn(ICONST_2);
+      methodVisitor.visitInsn(IREM);
+      methodVisitor.visitInsn(POP);
+      methodVisitor.visitJumpInsn(GOTO, label6);
+      methodVisitor.visitLabel(label3);
+      methodVisitor.visitFrame(
+          Opcodes.F_FULL,
+          1,
+          new Object[] {"d/b/c/e/e/a/b/a"},
+          1,
+          new Object[] {"android/content/Context"});
+      methodVisitor.visitLdcInsn("android.content.Context");
+      methodVisitor.visitMethodInsn(
+          INVOKESTATIC,
+          "java/lang/Class",
+          "forName",
+          "(Ljava/lang/String;)Ljava/lang/Class;",
+          false);
+      methodVisitor.visitLdcInsn("getPackageName");
+      methodVisitor.visitInsn(ACONST_NULL);
+      methodVisitor.visitMethodInsn(
+          INVOKEVIRTUAL,
+          "java/lang/Class",
+          "getMethod",
+          "(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;",
+          false);
+      methodVisitor.visitInsn(SWAP);
+      methodVisitor.visitInsn(ACONST_NULL);
+      methodVisitor.visitMethodInsn(
+          INVOKEVIRTUAL,
+          "java/lang/reflect/Method",
+          "invoke",
+          "(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;",
+          false);
+      methodVisitor.visitTypeInsn(CHECKCAST, "java/lang/String");
+      methodVisitor.visitLabel(label4);
+      methodVisitor.visitVarInsn(ASTORE, 1);
+      methodVisitor.visitVarInsn(ALOAD, 0);
+      methodVisitor.visitVarInsn(ALOAD, 1);
+      methodVisitor.visitMethodInsn(
+          INVOKESPECIAL, "d/b/c/e/e/a/b/a", "getSecretKeyData", "(Ljava/lang/String;)[B", false);
+      methodVisitor.visitVarInsn(ASTORE, 2);
+      methodVisitor.visitVarInsn(ALOAD, 0);
+      methodVisitor.visitVarInsn(ALOAD, 2);
+      Label label19 = new Label();
+      methodVisitor.visitJumpInsn(IFNONNULL, label19);
+      Label label20 = new Label();
+      methodVisitor.visitJumpInsn(GOTO, label20);
+      methodVisitor.visitLabel(label19);
+      methodVisitor.visitFrame(
+          Opcodes.F_FULL, 0, new Object[] {}, 1, new Object[] {"d/b/c/e/e/a/b/a"});
+      Label label21 = new Label();
+      methodVisitor.visitJumpInsn(GOTO, label21);
+      Label label22 = new Label();
+      methodVisitor.visitLabel(label22);
+      methodVisitor.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] {"d/b/c/e/e/a/b/a"});
+      methodVisitor.visitLdcInsn("A001");
+      methodVisitor.visitJumpInsn(GOTO, label6);
+      methodVisitor.visitLabel(label12);
+      methodVisitor.visitFrame(
+          Opcodes.F_FULL, 0, new Object[] {}, 2, new Object[] {"d/b/c/e/e/a/b/a", Opcodes.INTEGER});
+      Label label23 = new Label();
+      methodVisitor.visitTableSwitchInsn(0, 1, label22, new Label[] {label22, label23});
+      Label label24 = new Label();
+      methodVisitor.visitLabel(label24);
+      methodVisitor.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] {"d/b/c/e/e/a/b/a"});
+      methodVisitor.visitInsn(ICONST_1);
+      methodVisitor.visitJumpInsn(GOTO, label12);
+      methodVisitor.visitLabel(label9);
+      methodVisitor.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] {"java/lang/Throwable"});
+      methodVisitor.visitInsn(ATHROW);
+      methodVisitor.visitLabel(label6);
+      methodVisitor.visitFrame(
+          Opcodes.F_FULL,
+          0,
+          new Object[] {},
+          2,
+          new Object[] {"d/b/c/e/e/a/b/a", "java/lang/String"});
+      methodVisitor.visitMethodInsn(
+          INVOKEVIRTUAL,
+          "d/b/c/e/e/a/b/a",
+          "loadSecretKeyForEncryption",
+          "(Ljava/lang/String;)Ljavax/crypto/SecretKey;",
+          false);
+      methodVisitor.visitInsn(ARETURN);
+      methodVisitor.visitLabel(label5);
+      methodVisitor.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] {"java/lang/Throwable"});
+      methodVisitor.visitInsn(DUP);
+      methodVisitor.visitMethodInsn(
+          INVOKEVIRTUAL, "java/lang/Throwable", "getCause", "()Ljava/lang/Throwable;", false);
+      methodVisitor.visitInsn(DUP);
+      Label label25 = new Label();
+      methodVisitor.visitJumpInsn(IFNULL, label25);
+      Label label26 = new Label();
+      methodVisitor.visitJumpInsn(GOTO, label26);
+      methodVisitor.visitLabel(label25);
+      methodVisitor.visitFrame(
+          Opcodes.F_FULL,
+          0,
+          new Object[] {},
+          2,
+          new Object[] {"java/lang/Throwable", "java/lang/Throwable"});
+      Label label27 = new Label();
+      methodVisitor.visitJumpInsn(GOTO, label27);
+      Label label28 = new Label();
+      methodVisitor.visitLabel(label28);
+      methodVisitor.visitFrame(
+          Opcodes.F_FULL,
+          1,
+          new Object[] {"d/b/c/e/e/a/b/a"},
+          1,
+          new Object[] {"android/content/Context"});
+      methodVisitor.visitInsn(ICONST_2);
+      methodVisitor.visitInsn(ICONST_2);
+      methodVisitor.visitInsn(IREM);
+      methodVisitor.visitInsn(POP);
+      methodVisitor.visitJumpInsn(GOTO, label15);
+      Label label29 = new Label();
+      methodVisitor.visitLabel(label29);
+      methodVisitor.visitFrame(
+          Opcodes.F_FULL, 0, new Object[] {}, 1, new Object[] {"d/b/c/e/e/a/b/a"});
+      methodVisitor.visitLdcInsn("U001");
+      methodVisitor.visitJumpInsn(GOTO, label18);
+      methodVisitor.visitLabel(label10);
+      methodVisitor.visitFrame(Opcodes.F_APPEND, 1, new Object[] {"d/b/c/e/e/a/b/a"}, 0, null);
+      methodVisitor.visitInsn(ICONST_2);
+      methodVisitor.visitInsn(ICONST_2);
+      methodVisitor.visitInsn(IREM);
+      methodVisitor.visitInsn(POP);
+      Label label30 = new Label();
+      methodVisitor.visitJumpInsn(GOTO, label30);
+      methodVisitor.visitLabel(label20);
+      methodVisitor.visitFrame(
+          Opcodes.F_FULL, 0, new Object[] {}, 1, new Object[] {"d/b/c/e/e/a/b/a"});
+      methodVisitor.visitInsn(ICONST_1);
+      Label label31 = new Label();
+      methodVisitor.visitJumpInsn(GOTO, label31);
+      Label label32 = new Label();
+      methodVisitor.visitLabel(label32);
+      methodVisitor.visitFrame(
+          Opcodes.F_FULL,
+          1,
+          new Object[] {"d/b/c/e/e/a/b/a"},
+          1,
+          new Object[] {"android/content/Context"});
+      methodVisitor.visitJumpInsn(GOTO, label28);
+      methodVisitor.visitLabel(label31);
+      methodVisitor.visitFrame(
+          Opcodes.F_FULL, 0, new Object[] {}, 2, new Object[] {"d/b/c/e/e/a/b/a", Opcodes.INTEGER});
+      Label label33 = new Label();
+      methodVisitor.visitTableSwitchInsn(0, 1, label29, new Label[] {label29, label33});
+      methodVisitor.visitLabel(label26);
+      methodVisitor.visitFrame(
+          Opcodes.F_FULL,
+          0,
+          new Object[] {},
+          2,
+          new Object[] {"java/lang/Throwable", "java/lang/Throwable"});
+      methodVisitor.visitInsn(SWAP);
+      methodVisitor.visitInsn(POP);
+      methodVisitor.visitInsn(ATHROW);
+      methodVisitor.visitLabel(label21);
+      methodVisitor.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] {"d/b/c/e/e/a/b/a"});
+      methodVisitor.visitInsn(ICONST_0);
+      methodVisitor.visitJumpInsn(GOTO, label31);
+      methodVisitor.visitLabel(label17);
+      methodVisitor.visitFrame(
+          Opcodes.F_FULL,
+          1,
+          new Object[] {"d/b/c/e/e/a/b/a"},
+          1,
+          new Object[] {"android/content/Context"});
+      methodVisitor.visitJumpInsn(GOTO, label3);
+      methodVisitor.visitLabel(label30);
+      methodVisitor.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+      methodVisitor.visitFieldInsn(GETSTATIC, "d/b/c/e/e/a/b/a", "\u0131", "I");
+      methodVisitor.visitIntInsn(BIPUSH, 47);
+      methodVisitor.visitInsn(IADD);
+      methodVisitor.visitInsn(DUP);
+      methodVisitor.visitIntInsn(SIPUSH, 128);
+      methodVisitor.visitInsn(IREM);
+      methodVisitor.visitFieldInsn(PUTSTATIC, "d/b/c/e/e/a/b/a", "\u03b9", "I");
+      methodVisitor.visitInsn(ICONST_2);
+      methodVisitor.visitInsn(IREM);
+      Label label34 = new Label();
+      methodVisitor.visitJumpInsn(IFNE, label34);
+      methodVisitor.visitJumpInsn(GOTO, label8);
+      methodVisitor.visitLabel(label34);
+      methodVisitor.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+      methodVisitor.visitJumpInsn(GOTO, label13);
+      methodVisitor.visitLabel(label33);
+      methodVisitor.visitFrame(
+          Opcodes.F_FULL, 0, new Object[] {}, 1, new Object[] {"d/b/c/e/e/a/b/a"});
+      methodVisitor.visitFieldInsn(GETSTATIC, "d/b/c/e/e/a/b/a", "\u03b9", "I");
+      methodVisitor.visitIntInsn(BIPUSH, 35);
+      methodVisitor.visitInsn(IADD);
+      methodVisitor.visitInsn(DUP);
+      methodVisitor.visitIntInsn(SIPUSH, 128);
+      methodVisitor.visitInsn(IREM);
+      methodVisitor.visitFieldInsn(PUTSTATIC, "d/b/c/e/e/a/b/a", "\u0131", "I");
+      methodVisitor.visitInsn(ICONST_2);
+      methodVisitor.visitInsn(IREM);
+      Label label35 = new Label();
+      methodVisitor.visitJumpInsn(IFEQ, label35);
+      methodVisitor.visitJumpInsn(GOTO, label24);
+      methodVisitor.visitLabel(label35);
+      methodVisitor.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] {"d/b/c/e/e/a/b/a"});
+      methodVisitor.visitJumpInsn(GOTO, label11);
+      methodVisitor.visitLabel(label14);
+      methodVisitor.visitFrame(
+          Opcodes.F_FULL,
+          1,
+          new Object[] {"d/b/c/e/e/a/b/a"},
+          1,
+          new Object[] {"android/content/Context"});
+      methodVisitor.visitFieldInsn(GETSTATIC, "d/b/c/e/e/a/b/a", "\u03b9", "I");
+      methodVisitor.visitIntInsn(BIPUSH, 45);
+      methodVisitor.visitInsn(IADD);
+      methodVisitor.visitInsn(DUP);
+      methodVisitor.visitIntInsn(SIPUSH, 128);
+      methodVisitor.visitInsn(IREM);
+      methodVisitor.visitFieldInsn(PUTSTATIC, "d/b/c/e/e/a/b/a", "\u0131", "I");
+      methodVisitor.visitInsn(ICONST_2);
+      methodVisitor.visitInsn(IREM);
+      Label label36 = new Label();
+      methodVisitor.visitJumpInsn(IFEQ, label36);
+      methodVisitor.visitJumpInsn(GOTO, label32);
+      methodVisitor.visitLabel(label36);
+      methodVisitor.visitFrame(
+          Opcodes.F_SAME1, 0, null, 1, new Object[] {"android/content/Context"});
+      methodVisitor.visitJumpInsn(GOTO, label28);
+      methodVisitor.visitLabel(label27);
+      methodVisitor.visitFrame(
+          Opcodes.F_FULL,
+          0,
+          new Object[] {},
+          2,
+          new Object[] {"java/lang/Throwable", "java/lang/Throwable"});
+      methodVisitor.visitInsn(POP);
+      methodVisitor.visitInsn(ATHROW);
+      methodVisitor.visitLabel(label23);
+      methodVisitor.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] {"d/b/c/e/e/a/b/a"});
+      methodVisitor.visitLdcInsn("A001");
+      methodVisitor.visitLabel(label7);
+      methodVisitor.visitInsn(ACONST_NULL);
+      methodVisitor.visitInsn(ARRAYLENGTH);
+      methodVisitor.visitInsn(POP);
+      methodVisitor.visitJumpInsn(GOTO, label6);
+      methodVisitor.visitLabel(label8);
+      methodVisitor.visitFrame(Opcodes.F_APPEND, 1, new Object[] {"d/b/c/e/e/a/b/a"}, 0, null);
+      methodVisitor.visitJumpInsn(GOTO, label13);
+      methodVisitor.visitMaxs(4, 3);
+      methodVisitor.visitEnd();
+    }
+    classWriter.visitEnd();
+
+    return classWriter.toByteArray();
+  }
+}
