diff options
author | 2021-07-20 15:02:33 +0100 | |
---|---|---|
committer | 2021-07-21 12:57:37 +0000 | |
commit | b3a7a6a72d7b91ee5507bd7314a3aae3948e6f29 (patch) | |
tree | f65ecb447173e067fd5bd9437c19380b0d72bf04 /compiler/optimizing/intrinsics.h | |
parent | c4597765f2d7496e428c0b0dc1b26ffb71c61093 (diff) |
Compile time null checks for VarHandle intrinsics.
Create a `VarHandleOptimizations` helper class holding the
optimization flags for VarHandle intrinsics.
Add a flag to avoid emitting the intrinsic implementation
and move shared checks previously duplicated in intrinsic
codegens helpers `HasVarHandleIntrinsicImplementation()` to
the instruction simplifier. Individual intrinsic codegens
perform additional checks as needed.
Add the first optimization flag to avoid null check on the
holder object if it cannot be null. And do not emit the
intrinsic implementation if the holder object is null.
Test: testrunner.py --host --optimizing
Test: testrunner.py --target --optimizing
Bug: 191765508
Change-Id: I53b1b57c327f02a9913f22885c1ce663cd9c3d44
Diffstat (limited to 'compiler/optimizing/intrinsics.h')
-rw-r--r-- | compiler/optimizing/intrinsics.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/compiler/optimizing/intrinsics.h b/compiler/optimizing/intrinsics.h index 62b5faa7d0..9bc8c5126b 100644 --- a/compiler/optimizing/intrinsics.h +++ b/compiler/optimizing/intrinsics.h @@ -224,6 +224,14 @@ class SystemArrayCopyOptimizations : public IntrinsicOptimizations { DISALLOW_COPY_AND_ASSIGN(SystemArrayCopyOptimizations); }; +class VarHandleOptimizations : public IntrinsicOptimizations { + public: + explicit VarHandleOptimizations(HInvoke* invoke) : IntrinsicOptimizations(invoke) {} + + INTRINSIC_OPTIMIZATION(DoNotIntrinsify, 0); // One of the checks is statically known to fail. + INTRINSIC_OPTIMIZATION(SkipObjectNullCheck, 1); // Not applicable for static fields. +}; + #undef INTRISIC_OPTIMIZATION // |