diff options
author | buzbee <buzbee@google.com> | 2014-09-08 04:22:20 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-09-08 04:22:21 +0000 |
commit | e2c23739c6395a83b30ece38f8a2e9e1bf7cf3ce (patch) | |
tree | 6772cee165531f6f6d09f8f14e54243694f5c877 | |
parent | 9b868cbfa6d74387a80ce52a426f9a5bc3ddbbaf (diff) | |
parent | 90a21f8e76028b9f89e91c436fc6fe9e9a354694 (diff) | |
download | art-e2c23739c6395a83b30ece38f8a2e9e1bf7cf3ce.zip art-e2c23739c6395a83b30ece38f8a2e9e1bf7cf3ce.tar.gz art-e2c23739c6395a83b30ece38f8a2e9e1bf7cf3ce.tar.bz2 |
Merge "Quick compiler: Fix handling of unused returns"
-rwxr-xr-x | compiler/dex/quick/gen_invoke.cc | 10 |
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; } |