diff options
Diffstat (limited to 'compiler/optimizing/nodes.h')
-rw-r--r-- | compiler/optimizing/nodes.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/compiler/optimizing/nodes.h b/compiler/optimizing/nodes.h index 978e7c419e..16e26dc7bc 100644 --- a/compiler/optimizing/nodes.h +++ b/compiler/optimizing/nodes.h @@ -2288,6 +2288,9 @@ class HInstruction : public ArenaObject<kArenaAllocInstruction> { } virtual bool NeedsEnvironment() const { return false; } + virtual bool NeedsBss() const { + return false; + } uint32_t GetDexPc() const { return dex_pc_; } @@ -4916,6 +4919,9 @@ class HInvokeStaticOrDirect final : public HInvoke { } bool IsClonable() const override { return true; } + bool NeedsBss() const override { + return GetMethodLoadKind() == MethodLoadKind::kBssEntry; + } void SetDispatchInfo(DispatchInfo dispatch_info) { bool had_current_method_input = HasCurrentMethodInput(); @@ -5201,6 +5207,9 @@ class HInvokeInterface final : public HInvoke { } bool IsClonable() const override { return true; } + bool NeedsBss() const override { + return GetHiddenArgumentLoadKind() == MethodLoadKind::kBssEntry; + } bool CanDoImplicitNullCheckOn(HInstruction* obj) const override { // TODO: Add implicit null checks in intrinsics. @@ -6847,6 +6856,12 @@ class HLoadClass final : public HInstruction { bool NeedsEnvironment() const override { return CanCallRuntime(); } + bool NeedsBss() const override { + LoadKind load_kind = GetLoadKind(); + return load_kind == LoadKind::kBssEntry || + load_kind == LoadKind::kBssEntryPublic || + load_kind == LoadKind::kBssEntryPackage; + } void SetMustGenerateClinitCheck(bool generate_clinit_check) { SetPackedFlag<kFlagGenerateClInitCheck>(generate_clinit_check); @@ -7044,6 +7059,9 @@ class HLoadString final : public HInstruction { } bool IsClonable() const override { return true; } + bool NeedsBss() const override { + return GetLoadKind() == LoadKind::kBssEntry; + } void SetLoadKind(LoadKind load_kind); |