summaryrefslogtreecommitdiffstats
path: root/compiler/optimizing/builder.cc
diff options
context:
space:
mode:
authorRoland Levillain <rpl@google.com>2015-04-28 11:00:54 +0100
committerRoland Levillain <rpl@google.com>2015-04-28 11:00:54 +0100
commit3e3d73349a2de81d14e2279f60ffbd9ab3f3ac28 (patch)
tree69ad3378263c9a4b967cb7e27de0027264c12eb6 /compiler/optimizing/builder.cc
parenta0ee862288b702468f8c2b6d0ad0f1c61be0b483 (diff)
downloadandroid_art-3e3d73349a2de81d14e2279f60ffbd9ab3f3ac28.tar.gz
android_art-3e3d73349a2de81d14e2279f60ffbd9ab3f3ac28.tar.bz2
android_art-3e3d73349a2de81d14e2279f60ffbd9ab3f3ac28.zip
Have HInvoke instructions know their number of actual arguments.
Add an art::HInvoke::GetNumberOfArguments routine so that art::HInvoke and its subclasses can return the number of actual arguments of the called method. Use it in code generators and intrinsics handlers. Consequently, no longer remove a clinit check as last input of a static invoke if it is still present during baseline code generation, but ensure that static invokes have no such check as last input in optimized compilations. Change-Id: Iaf9e07d1057a3b15b83d9638538c02b70211e476
Diffstat (limited to 'compiler/optimizing/builder.cc')
-rw-r--r--compiler/optimizing/builder.cc5
1 files changed, 2 insertions, 3 deletions
diff --git a/compiler/optimizing/builder.cc b/compiler/optimizing/builder.cc
index 96e08fd24c..69b46c49c3 100644
--- a/compiler/optimizing/builder.cc
+++ b/compiler/optimizing/builder.cc
@@ -691,7 +691,6 @@ bool HGraphBuilder::BuildInvoke(const Instruction& instruction,
current_block_->AddInstruction(load_class);
clinit_check = new (arena_) HClinitCheck(load_class, dex_pc);
current_block_->AddInstruction(clinit_check);
- ++number_of_arguments;
}
}
}
@@ -730,14 +729,14 @@ bool HGraphBuilder::BuildInvoke(const Instruction& instruction,
i++;
}
}
+ DCHECK_EQ(argument_index, number_of_arguments);
if (clinit_check_requirement == HInvokeStaticOrDirect::ClinitCheckRequirement::kExplicit) {
// Add the class initialization check as last input of `invoke`.
DCHECK(clinit_check != nullptr);
- invoke->SetArgumentAt(argument_index++, clinit_check);
+ invoke->SetArgumentAt(argument_index, clinit_check);
}
- DCHECK_EQ(argument_index, number_of_arguments);
current_block_->AddInstruction(invoke);
latest_result_ = invoke;
return true;