Implement CatchTargets.

Change-Id: Ia2c872f90ab2d7b5498ed6e57621c8250e9893b8
diff --git a/src/compiler_llvm/compiler_llvm.cc b/src/compiler_llvm/compiler_llvm.cc
index f647c8b..b81bfdd 100644
--- a/src/compiler_llvm/compiler_llvm.cc
+++ b/src/compiler_llvm/compiler_llvm.cc
@@ -158,64 +158,7 @@
 #elif defined(ART_USE_QUICK_COMPILER)
   std::string methodName(PrettyMethod(oat_compilation_unit->GetDexMethodIndex(),
                                       *oat_compilation_unit->GetDexFile()));
-  if ((methodName.find("gdata2.AndroidGDataClient.createAndExecuteMethod") != std::string::npos)
-      || (methodName.find("hG.a") != std::string::npos)
-      || (methodName.find("hT.a(hV, java.lang.String, java.lang.String, java") != std::string::npos)
-      || (methodName.find("AndroidHttpTransport.exchange") != std::string::npos)
-      || (methodName.find("javax.crypto.Cipher.getCipher") != std::string::npos)
-      || (methodName.find("libcore.io.IoBridge.available") != std::string::npos)
-      || (methodName.find("gov.nist.javax.sip.message.SIPMessage.computeContentLength") != std::string::npos)
-      || (methodName.find("gov.nist.javax.sip.message.SIPMessage.encode") != std::string::npos)
-      || (methodName.find("android.appwidget.AppWidgetHostView.updateAppWidget") != std::string::npos)
-      || (methodName.find("android.content.SyncStorageEngine.readAccountInfoLocked") != std::string::npos)
-      || (methodName.find("android.view.AccessibilityInteractionController.findAccessibilityNodeInfosByTextUiThread") != std::string::npos)
-      || (methodName.find("android.webkit.BrowserFrame.downloadStart") != std::string::npos)
-      || (methodName.find("com.android.internal.os.ZygoteConnection.handleChildProc") != std::string::npos)
-      || (methodName.find("com.android.internal.widget.LockPatternUtils.passwordToHash") != std::string::npos)
-      || (methodName.find("com.android.internal.os.ZygoteConnection.runOnce") != std::string::npos)
-      || (methodName.find("com.google.android.gles_jni.GLImpl.allowIndirectBuffers") != std::string::npos)
-      || (methodName.find("com.google.android.mms.util.DrmConvertSession.convert") != std::string::npos)
-      || (methodName.find("com.android.server.BackupManagerService$PerformFullRestoreTask.readAppManifest") != std::string::npos)
-      || (methodName.find("com.android.server.BackupManagerService.bindToAgentSynchronous") != std::string::npos)
-      || (methodName.find("org.apache.xalan.templates.ElemElement.execute") != std::string::npos)
-      || (methodName.find("com.android.server.am.ActivityManagerService.getPackageForIntentSender") != std::string::npos)
-      || (methodName.find("com.android.server.am.ActivityManagerService.startNextMatchingActivity") != std::string::npos)
-      || (methodName.find("com.android.server.wm.WindowManagerService.viewServerWindowCommand") != std::string::npos)
-      || (methodName.find("org.apache.xml.serializer.OutputPropertiesFactory.getDefaultMethodProperties") != std::string::npos)
-      // APK
-      || (methodName.find("org.codehaus.jackson.map.ser.std.ObjectArraySerializer") != std::string::npos)
-      || (methodName.find("com.android.providers.downloads.DrmConvertSession.convert") != std::string::npos)
-      || (methodName.find("com.android.providers.downloads.DownloadThread.run") != std::string::npos)
-      || (methodName.find("com.android.calendar.AllInOneActivity.parseViewAction") != std::string::npos)
-      || (methodName.find("com.android.vcard.VCardEntryCommitter.pushIntoContentResolver") != std::string::npos)
-      || (methodName.find("com.google.android.apps.books.model.VolumeMetadata.earliestPossibleSegmentIndexForPosition") != std::string::npos)
-      || (methodName.find("com.google.android.auth.GoogleAuthSession.authenticate") != std::string::npos)
-      || (methodName.find("com.google.android.syncadapters.bookmarks.BookmarksSyncAdapter") != std::string::npos)
-      || (methodName.find("com.google.analytics.tracking.android.GoogleAnalytics.getTracker") != std::string::npos)
-      || (methodName.find("com.google.apps") != std::string::npos)
-      || (methodName.find("com.android.email.MessagingController.processPendingDeletesSynchronous") != std::string::npos)
-      || (methodName.find("com.google.android.gm.provider.MailEngine.getHttpClient") != std::string::npos)
-      || (methodName.find("com.google.android.gms.auth.login.GLSUser") != std::string::npos)
-      || (methodName.find("com.google.android.backup.BackupTransportService$1.nextRestorePackage") != std::string::npos)
-      || (methodName.find("com.google.earth.EarthActivity$1.run") != std::string::npos)
-      || (methodName.find("com.google.android.gsf") != std::string::npos)
-      || (methodName.find("com.google.googlenav.api.c.a") != std::string::npos)
-      || (methodName.find("com.google.android.music.sync.api.MusicApiClientImpl") != std::string::npos)
-      || (methodName.find("com.google.android.music.utils.MusicTagUtils.getGenreName") != std::string::npos)
-      || (methodName.find("com.google.android.finsky.billing.challenge.ClientLoginApi$2.onErrorResponse") != std::string::npos)
-      || (methodName.find("com.google.android.apps.plus") != std::string::npos)
-      || (methodName.find("com.android.settings.ApnEditor") != std::string::npos)
-      || (methodName.find("com.samsung.dmexthandler.PhoneDataService$1.getIPv6SettingsValue") != std::string::npos)
-      || (methodName.find("com.samsung.syncservice.SyncmlService.getClientPwd") != std::string::npos)
-      || (methodName.find("com.android.systemui.statusbar.BaseStatusBar.applyLegacyRowBackground") != std::string::npos)
-      || (methodName.find("com.tf") != std::string::npos)
-      || (methodName.find("com.google.android.searchcommon.util.JavaNetHttpHelper.extractCharset") != std::string::npos)
-      || (methodName.find("com.google.android.youtube.core.utils.Util.getAppVersionCode") != std::string::npos)
-      || (methodName.find("com.google.android.ytremote.backend.deviceauth.DeviceAuthenticator.encryptToken") != std::string::npos)
-      || (methodName.find("com.google.android.maps.KeyHelper.getSignatureFingerprint") != std::string::npos)
-      || (methodName.find("com.android.commands.content.Content$Command.execute") != std::string::npos)
-      || (methodName.find("com.android.uiautomator.core.InteractionController.getSystemLongPressTime") != std::string::npos)
-      ) {
+  if (insn_set_ == kX86) {
     // Use iceland
     UniquePtr<MethodCompiler> method_compiler(
         new MethodCompiler(cunit.get(), compiler_, oat_compilation_unit));
diff --git a/src/compiler_llvm/gbc_expander.cc b/src/compiler_llvm/gbc_expander.cc
index 471a125..dbedb27 100644
--- a/src/compiler_llvm/gbc_expander.cc
+++ b/src/compiler_llvm/gbc_expander.cc
@@ -455,7 +455,7 @@
     // Set insert point to current basic block.
     irb_.SetInsertPoint(bb_iter);
 
-    old_basic_block_ = bb_iter;
+    old_basic_block_ = bb_iter->getUniquePredecessor();
 
     // Rewrite the basic block
     RewriteBasicBlock(bb_iter);
@@ -3599,6 +3599,15 @@
                              irb_.getJIntTy());
     }
 
+    //==- Exception --------------------------------------------------------==//
+    case IntrinsicHelper::CatchTargets: {
+      llvm::SwitchInst* si = llvm::dyn_cast<llvm::SwitchInst>(call_inst.getNextNode());
+      CHECK(si != NULL);
+      irb_.CreateBr(si->getDefaultDest());
+      si->eraseFromParent();
+      return call_inst.getArgOperand(0);
+    }
+
     //==- Unknown Cases ----------------------------------------------------==//
     case IntrinsicHelper::MaxIntrinsicId:
     case IntrinsicHelper::UnknownId: