summaryrefslogtreecommitdiff
path: root/compiler/optimizing/nodes_x86.h
diff options
context:
space:
mode:
author Gupta Kumar, Sanjiv <sanjiv.kumar.gupta@intel.com> 2018-02-05 13:35:03 +0530
committer Gupta Kumar, Sanjiv <sanjiv.kumar.gupta@intel.com> 2018-02-21 14:56:13 +0530
commitd9e4d73b20d68aa387f5837e1535b6fc26b2859a (patch)
treeb55a96e66f2db1482571788b33c6d3055cb47396 /compiler/optimizing/nodes_x86.h
parent8dbb4ba7ffdf42cf08c55b117370efc0ec5357e8 (diff)
Fix iCache misses for GetKind on x86,x86_64
GetKind() takes about 2.6% of total compilation time on x86_64. The primary reason is that the target call GetKindInternal() is often beyond the page boundary causing frequent i-cache misses. This patch removes the virtual call to GetKindInternal () and instead keeps the InstructionKind into each constructed instruction. Since we have about 121 instructions in total as of now, it takes about 7 extra bits in each instruction. dex2oat runs about 12% faster with --compiler-filter=everything on an APK of 25MB. Test: Tested the patch by running host art tests. Rebased. Change-Id: Ia7bbcd67180151e4565507164a718acbb6284885 Signed-off-by: Gupta Kumar, Sanjiv <sanjiv.kumar.gupta@intel.com>
Diffstat (limited to 'compiler/optimizing/nodes_x86.h')
-rw-r--r--compiler/optimizing/nodes_x86.h15
1 files changed, 11 insertions, 4 deletions
diff --git a/compiler/optimizing/nodes_x86.h b/compiler/optimizing/nodes_x86.h
index 6326065fe2..4c32be7d15 100644
--- a/compiler/optimizing/nodes_x86.h
+++ b/compiler/optimizing/nodes_x86.h
@@ -24,7 +24,11 @@ class HX86ComputeBaseMethodAddress FINAL : public HExpression<0> {
public:
// Treat the value as an int32_t, but it is really a 32 bit native pointer.
HX86ComputeBaseMethodAddress()
- : HExpression(DataType::Type::kInt32, SideEffects::None(), kNoDexPc) {}
+ : HExpression(kX86ComputeBaseMethodAddress,
+ DataType::Type::kInt32,
+ SideEffects::None(),
+ kNoDexPc) {
+ }
bool CanBeMoved() const OVERRIDE { return true; }
@@ -39,7 +43,10 @@ class HX86LoadFromConstantTable FINAL : public HExpression<2> {
public:
HX86LoadFromConstantTable(HX86ComputeBaseMethodAddress* method_base,
HConstant* constant)
- : HExpression(constant->GetType(), SideEffects::None(), kNoDexPc) {
+ : HExpression(kX86LoadFromConstantTable,
+ constant->GetType(),
+ SideEffects::None(),
+ kNoDexPc) {
SetRawInputAt(0, method_base);
SetRawInputAt(1, constant);
}
@@ -65,7 +72,7 @@ class HX86FPNeg FINAL : public HExpression<2> {
HInstruction* input,
HX86ComputeBaseMethodAddress* method_base,
uint32_t dex_pc)
- : HExpression(result_type, SideEffects::None(), dex_pc) {
+ : HExpression(kX86FPNeg, result_type, SideEffects::None(), dex_pc) {
DCHECK(DataType::IsFloatingPointType(result_type));
SetRawInputAt(0, input);
SetRawInputAt(1, method_base);
@@ -89,7 +96,7 @@ class HX86PackedSwitch FINAL : public HTemplateInstruction<2> {
HInstruction* input,
HX86ComputeBaseMethodAddress* method_base,
uint32_t dex_pc)
- : HTemplateInstruction(SideEffects::None(), dex_pc),
+ : HTemplateInstruction(kX86PackedSwitch, SideEffects::None(), dex_pc),
start_value_(start_value),
num_entries_(num_entries) {
SetRawInputAt(0, input);