From 64a42600ea55ae2b434f4b776db7f9a5f00a2a60 Mon Sep 17 00:00:00 2001 From: Aart Bik Date: Mon, 26 Aug 2019 20:34:22 +0000 Subject: [PATCH] [vm/compiler] Avoid unnessary checks on 64-bit Rationale: Follow up from two previous CLs. Use of 64-bit macro (requested by Martin) and avoid unnessary check on 64-bit platforms (requested by Alex) https://github.com/dart-lang/sdk/issues/37868 https://github.com/dart-lang/sdk/issues/37895 Change-Id: I80e6825953090f5079377d0452b70e48c5be92a2 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114550 Reviewed-by: Alexander Markov Commit-Queue: Aart Bik --- runtime/vm/compiler/backend/type_propagator.cc | 2 +- runtime/vm/compiler/graph_intrinsifier.cc | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/runtime/vm/compiler/backend/type_propagator.cc b/runtime/vm/compiler/backend/type_propagator.cc index 7043c362850..b8704b8ceec 100644 --- a/runtime/vm/compiler/backend/type_propagator.cc +++ b/runtime/vm/compiler/backend/type_propagator.cc @@ -662,7 +662,7 @@ CompileType CompileType::Int() { } CompileType CompileType::Int32() { -#if defined(TARGET_ARCH_X64) || defined(TARGET_ARCH_ARM64) +#if defined(TARGET_ARCH_IS_64_BIT) return FromCid(kSmiCid); #else return Int(); diff --git a/runtime/vm/compiler/graph_intrinsifier.cc b/runtime/vm/compiler/graph_intrinsifier.cc index f3a2313f7bc..728aee51d26 100644 --- a/runtime/vm/compiler/graph_intrinsifier.cc +++ b/runtime/vm/compiler/graph_intrinsifier.cc @@ -280,11 +280,15 @@ static bool IntrinsifyArraySetIndexed(FlowGraph* flow_graph, switch (array_cid) { case kTypedDataUint8ClampedArrayCid: case kExternalTypedDataUint8ClampedArrayCid: - // Clamping operations need the exact value for proper operations. - // All others get away with truncating even non-smi values. +#if defined(TARGET_ARCH_IS_32_BIT) + // On 32-bit architectures, clamping operations need the exact value + // for proper operations. On 64-bit architectures, kUnboxedIntPtr + // maps to kUnboxedInt64. All other situations get away with + // truncating even non-smi values. builder.AddInstruction(new CheckSmiInstr(new Value(value), DeoptId::kNone, builder.TokenPos())); FALL_THROUGH; +#endif case kTypedDataInt8ArrayCid: case kTypedDataInt16ArrayCid: case kTypedDataUint8ArrayCid: