summaryrefslogtreecommitdiffstats
path: root/compiler/optimizing/nodes.h
diff options
context:
space:
mode:
authorGuillaume "Vermeille" Sanchez <guillaumesa@google.com>2015-04-20 14:41:30 +0100
committerGuillaume "Vermeille" Sanchez <guillaumesa@google.com>2015-04-23 17:53:17 +0100
commitaf88835231c2508509eb19aa2d21b92879351962 (patch)
tree4ef1c8fb3c5b78175767999a888b0c2cb1ea6485 /compiler/optimizing/nodes.h
parentda93333d568f3c5bd8eeb58341d10a332e1d42bf (diff)
downloadart-af88835231c2508509eb19aa2d21b92879351962.tar.gz
art-af88835231c2508509eb19aa2d21b92879351962.tar.bz2
art-af88835231c2508509eb19aa2d21b92879351962.zip
Remove unnecessary null checks in CheckCast and InstanceOf
Change-Id: I6fd81cabd8673be360f369e6318df0de8b18b634
Diffstat (limited to 'compiler/optimizing/nodes.h')
-rw-r--r--compiler/optimizing/nodes.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/compiler/optimizing/nodes.h b/compiler/optimizing/nodes.h
index fe47939359..db1e505ebc 100644
--- a/compiler/optimizing/nodes.h
+++ b/compiler/optimizing/nodes.h
@@ -3329,6 +3329,7 @@ class HInstanceOf : public HExpression<2> {
uint32_t dex_pc)
: HExpression(Primitive::kPrimBoolean, SideEffects::None()),
class_is_final_(class_is_final),
+ must_do_null_check_(true),
dex_pc_(dex_pc) {
SetRawInputAt(0, object);
SetRawInputAt(1, constant);
@@ -3348,10 +3349,15 @@ class HInstanceOf : public HExpression<2> {
bool IsClassFinal() const { return class_is_final_; }
+ // Used only in code generation.
+ bool MustDoNullCheck() const { return must_do_null_check_; }
+ void ClearMustDoNullCheck() { must_do_null_check_ = false; }
+
DECLARE_INSTRUCTION(InstanceOf);
private:
const bool class_is_final_;
+ bool must_do_null_check_;
const uint32_t dex_pc_;
DISALLOW_COPY_AND_ASSIGN(HInstanceOf);
@@ -3392,6 +3398,7 @@ class HCheckCast : public HTemplateInstruction<2> {
uint32_t dex_pc)
: HTemplateInstruction(SideEffects::None()),
class_is_final_(class_is_final),
+ must_do_null_check_(true),
dex_pc_(dex_pc) {
SetRawInputAt(0, object);
SetRawInputAt(1, constant);
@@ -3410,6 +3417,9 @@ class HCheckCast : public HTemplateInstruction<2> {
bool CanThrow() const OVERRIDE { return true; }
+ bool MustDoNullCheck() const { return must_do_null_check_; }
+ void ClearMustDoNullCheck() { must_do_null_check_ = false; }
+
uint32_t GetDexPc() const { return dex_pc_; }
bool IsClassFinal() const { return class_is_final_; }
@@ -3418,6 +3428,7 @@ class HCheckCast : public HTemplateInstruction<2> {
private:
const bool class_is_final_;
+ bool must_do_null_check_;
const uint32_t dex_pc_;
DISALLOW_COPY_AND_ASSIGN(HCheckCast);