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: