From a21eb118c8c1e9d362b7465327f1fae8db48a572 Mon Sep 17 00:00:00 2001 From: Santiago Aboy Solanes Date: Thu, 14 Nov 2024 15:09:41 +0000 Subject: Allow the inliner to devirtualize intrinsics To do so update: * TryReplaceStringBuilderAppend * Code paths relevant to previously InvokeVirtual that are now InvokeStaticOrDirect * checker tests. Bug: 369206455 Test: art/test/testrunner/testrunner.py --host --64 -b --optimizing Change-Id: I4d40980e416f3130d3c344c5f07b7b331deb5c97 --- compiler/optimizing/nodes.cc | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'compiler/optimizing/nodes.cc') diff --git a/compiler/optimizing/nodes.cc b/compiler/optimizing/nodes.cc index e7aabb223a..31e999a282 100644 --- a/compiler/optimizing/nodes.cc +++ b/compiler/optimizing/nodes.cc @@ -3263,17 +3263,35 @@ std::ostream& operator<<(std::ostream& os, HInvokeStaticOrDirect::ClinitCheckReq } bool HInvokeStaticOrDirect::CanBeNull() const { - if (GetType() != DataType::Type::kReference || IsStringInit()) { + if (IsStringInit()) { return false; } + return HInvoke::CanBeNull(); +} + +bool HInvoke::CanBeNull() const { switch (GetIntrinsic()) { + case Intrinsics::kThreadCurrentThread: + case Intrinsics::kStringBufferAppend: + case Intrinsics::kStringBufferToString: + case Intrinsics::kStringBuilderAppendObject: + case Intrinsics::kStringBuilderAppendString: + case Intrinsics::kStringBuilderAppendCharSequence: + case Intrinsics::kStringBuilderAppendCharArray: + case Intrinsics::kStringBuilderAppendBoolean: + case Intrinsics::kStringBuilderAppendChar: + case Intrinsics::kStringBuilderAppendInt: + case Intrinsics::kStringBuilderAppendLong: + case Intrinsics::kStringBuilderAppendFloat: + case Intrinsics::kStringBuilderAppendDouble: + case Intrinsics::kStringBuilderToString: #define DEFINE_BOXED_CASE(name, unused1, unused2, unused3, unused4) \ - case Intrinsics::k##name##ValueOf: \ - return false; + case Intrinsics::k##name##ValueOf: BOXED_TYPES(DEFINE_BOXED_CASE) #undef DEFINE_BOXED_CASE + return false; default: - return true; + return GetType() == DataType::Type::kReference; } } -- cgit v1.2.3-59-g8ed1b