diff options
author | Mathieu Chartier <mathieuc@google.com> | 2016-09-02 17:11:57 -0700 |
---|---|---|
committer | Mathieu Chartier <mathieuc@google.com> | 2016-09-07 10:13:48 -0700 |
commit | 31b12e32073f458950e96d0d1b44e48508cf67e4 (patch) | |
tree | b6f818dfa6b45342d6b69283c10e1db9817b8b0e /compiler/optimizing/instruction_builder.cc | |
parent | 038cb84f792501ae01561fe5ea4e8144f1918b7e (diff) |
Avoid read barrier for image HLoadClass
Concurrent copying baker:
X86_64 core-optimizing-pic.oat: 28583112 -> 27906824 (2.4% smaller)
Around 0.4% of 2.4% is from re-enabling kBootImageLinkTimeAddress,
kBootImageLinkTimePcRelative, and kBootImageAddress.
N6P boot.oat 32: 73042140 -> 71891956 (1.57% smaller)
N6P boot.oat 64: 83831608 -> 82531456 (1.55% smaller)
EAAC: 1252 -> 1245 (32 samples)
Bug: 29516974
Test: test-art-host CC baker, N6P booting
Change-Id: I9a196cf0157058836981c43c93872e9f0c4919aa
Diffstat (limited to 'compiler/optimizing/instruction_builder.cc')
-rw-r--r-- | compiler/optimizing/instruction_builder.cc | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/compiler/optimizing/instruction_builder.cc b/compiler/optimizing/instruction_builder.cc index 32dcc2814b..d7e4c53df0 100644 --- a/compiler/optimizing/instruction_builder.cc +++ b/compiler/optimizing/instruction_builder.cc @@ -935,7 +935,8 @@ bool HInstructionBuilder::BuildNewInstance(uint16_t type_index, uint32_t dex_pc) IsOutermostCompilingClass(type_index), dex_pc, needs_access_check, - /* is_in_dex_cache */ false); + /* is_in_dex_cache */ false, + /* is_in_boot_image */ false); AppendInstruction(load_class); HInstruction* cls = load_class; @@ -1026,7 +1027,8 @@ HClinitCheck* HInstructionBuilder::ProcessClinitCheckForInvoke( is_outer_class, dex_pc, /*needs_access_check*/ false, - /* is_in_dex_cache */ false); + /* is_in_dex_cache */ false, + /* is_in_boot_image */ false); AppendInstruction(load_class); clinit_check = new (arena_) HClinitCheck(load_class, dex_pc); AppendInstruction(clinit_check); @@ -1384,7 +1386,8 @@ bool HInstructionBuilder::BuildStaticFieldAccess(const Instruction& instruction, is_outer_class, dex_pc, /*needs_access_check*/ false, - /* is_in_dex_cache */ false); + /* is_in_dex_cache */ false, + /* is_in_boot_image */ false); AppendInstruction(constant); HInstruction* cls = constant; @@ -1659,7 +1662,8 @@ void HInstructionBuilder::BuildTypeCheck(const Instruction& instruction, IsOutermostCompilingClass(type_index), dex_pc, !can_access, - /* is_in_dex_cache */ false); + /* is_in_dex_cache */ false, + /* is_in_boot_image */ false); AppendInstruction(cls); TypeCheckKind check_kind = ComputeTypeCheckKind(resolved_class); @@ -2634,7 +2638,8 @@ bool HInstructionBuilder::ProcessDexInstruction(const Instruction& instruction, IsOutermostCompilingClass(type_index), dex_pc, !can_access, - /* is_in_dex_cache */ false)); + /* is_in_dex_cache */ false, + /* is_in_boot_image */ false)); UpdateLocal(instruction.VRegA_21c(), current_block_->GetLastInstruction()); break; } |