summaryrefslogtreecommitdiff
path: root/compiler/optimizing/nodes.cc
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/optimizing/nodes.cc')
-rw-r--r--compiler/optimizing/nodes.cc26
1 files changed, 22 insertions, 4 deletions
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;
}
}