diff --git a/src/test/examples/cse/CommonSubexpressionElimination.java b/src/test/examples/cse/CommonSubexpressionElimination.java
new file mode 100644
index 0000000..3c64a1d
--- /dev/null
+++ b/src/test/examples/cse/CommonSubexpressionElimination.java
@@ -0,0 +1,115 @@
+// Copyright (c) 2017, 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.
+
+// This code is not run directly. It needs to be compiled to dex code.
+// 'arithmetic.dex' is what is run.
+
+package cse;
+
+public class CommonSubexpressionElimination {
+
+  public static int divNoCatch(int a, int b, int c) {
+    int d = c / (a - b);
+    System.out.println(d);
+    return c / (a - b);
+  }
+
+  public static int divNoCatch2(int a, int b, int c) {
+    int d = c / (a - b);
+    int e = c / (a - b);
+    System.out.println(d + " " + e);
+    return c / (a - b);
+  }
+
+  public static int divCatch(int a, int b, int c) {
+    try {
+      int d = c / (a - b);
+      System.out.println(d);
+      return d;
+    } catch (Throwable t) {
+      return c / (a - b);
+    }
+  }
+
+  public static int divCatch2(int a, int b, int c) {
+    try {
+      int d = c / (a - b);
+      int e = c / (a - b);
+      System.out.println(d + " " + e);
+      return d;
+    } catch (Throwable t) {
+      return c / (a - b);
+    }
+  }
+
+  public static String divCatchCatch(int a, int b, int c) {
+    try {
+      int d = c / (a - b);
+      System.out.println(d);
+      return "X";
+    } catch (Throwable t) {
+      try {
+        return "" + c / (a - b);
+      } catch (Throwable t2) {
+        return "A";
+      }
+    }
+  }
+
+  public static String divCatchSharedCatchHandler(int a, int b, int c) {
+    try {
+      int d = c / (a - b);
+      System.out.println(d);
+      if (a == 0) {
+        int e = c / (a - b);
+        System.out.println(e);
+      } else {
+        int f = c / (a - b);
+        System.out.println(f);
+      }
+      return "X";
+    } catch (Throwable t) {
+      return "B";
+    }
+  }
+
+
+  public static void main(String[] args) {
+    System.out.println(divNoCatch(1, 0, 1));
+    System.out.println(divNoCatch2(1, 0, 2));
+    System.out.println(divCatch(1, 0, 3));
+    System.out.println(divCatch2(1, 0, 4));
+
+    System.out.println(divCatchCatch(0, 0, 1));
+    System.out.println(divCatchSharedCatchHandler(0, 0, 1));
+
+    try {
+      divNoCatch(0, 0, 1);
+      throw new RuntimeException("UNEXPECTED");
+    } catch (ArithmeticException e) {
+      // Expected "divide by zero".
+    }
+
+    try {
+      divNoCatch2(0, 0, 1);
+      throw new RuntimeException("UNEXPECTED");
+    } catch (ArithmeticException e) {
+      // Expected "divide by zero".
+    }
+
+    try {
+      divCatch(0, 0, 1);
+      throw new RuntimeException("UNEXPECTED");
+    } catch (ArithmeticException e) {
+      // Expected "divide by zero".
+    }
+
+    try {
+      divCatch2(0, 0, 1);
+      throw new RuntimeException("UNEXPECTED");
+    } catch (ArithmeticException e) {
+      // Expected "divide by zero".
+    }
+  }
+}
