summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbuzbee <buzbee@google.com>2014-09-08 04:22:20 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-09-08 04:22:21 +0000
commite2c23739c6395a83b30ece38f8a2e9e1bf7cf3ce (patch)
tree6772cee165531f6f6d09f8f14e54243694f5c877
parent9b868cbfa6d74387a80ce52a426f9a5bc3ddbbaf (diff)
parent90a21f8e76028b9f89e91c436fc6fe9e9a354694 (diff)
downloadart-e2c23739c6395a83b30ece38f8a2e9e1bf7cf3ce.zip
art-e2c23739c6395a83b30ece38f8a2e9e1bf7cf3ce.tar.gz
art-e2c23739c6395a83b30ece38f8a2e9e1bf7cf3ce.tar.bz2
Merge "Quick compiler: Fix handling of unused returns"
-rwxr-xr-xcompiler/dex/quick/gen_invoke.cc10
1 files changed, 8 insertions, 2 deletions
diff --git a/compiler/dex/quick/gen_invoke.cc b/compiler/dex/quick/gen_invoke.cc
index e1d3241..78f5c73 100755
--- a/compiler/dex/quick/gen_invoke.cc
+++ b/compiler/dex/quick/gen_invoke.cc
@@ -1107,9 +1107,12 @@ int Mir2Lir::GenDalvikArgsRange(CallInfo* info, int call_state,
RegLocation Mir2Lir::InlineTarget(CallInfo* info) {
RegLocation res;
if (info->result.location == kLocInvalid) {
- res = GetReturn(LocToRegClass(info->result));
+ // If result is unused, return a sink target based on type of invoke target.
+ res = GetReturn(ShortyToRegClass(mir_graph_->GetShortyFromTargetIdx(info->index)[0]));
} else {
res = info->result;
+ DCHECK_EQ(LocToRegClass(res),
+ ShortyToRegClass(mir_graph_->GetShortyFromTargetIdx(info->index)[0]));
}
return res;
}
@@ -1117,9 +1120,12 @@ RegLocation Mir2Lir::InlineTarget(CallInfo* info) {
RegLocation Mir2Lir::InlineTargetWide(CallInfo* info) {
RegLocation res;
if (info->result.location == kLocInvalid) {
- res = GetReturnWide(kCoreReg);
+ // If result is unused, return a sink target based on type of invoke target.
+ res = GetReturnWide(ShortyToRegClass(mir_graph_->GetShortyFromTargetIdx(info->index)[0]));
} else {
res = info->result;
+ DCHECK_EQ(LocToRegClass(res),
+ ShortyToRegClass(mir_graph_->GetShortyFromTargetIdx(info->index)[0]));
}
return res;
}