diff --git a/runtime/tests/vm/dart/address_local_pointer_il_test.dart b/runtime/tests/vm/dart/address_local_pointer_il_test.dart index 0842756aaaf..eb290f529b9 100644 --- a/runtime/tests/vm/dart/address_local_pointer_il_test.dart +++ b/runtime/tests/vm/dart/address_local_pointer_il_test.dart @@ -17,32 +17,21 @@ import 'package:vm/testing/il_matchers.dart'; int identity(int address) => Pointer.fromAddress(address).address; void matchIL$identity(FlowGraph graph) { - graph.dump(); - if (is32BitConfiguration) { - // The Dart int address is truncated before being returned. - graph.match([ - match.block('Graph'), - match.block('Function', [ - 'address' << match.Parameter(index: 0), - 'int32' << - match.IntConverter('address', - from: 'int64', to: 'int32', is_truncating: true), + final retval = is32BitConfiguration ? 'retval' : 'address'; + graph.match([ + match.block('Graph'), + match.block('Function', [ + 'address' << match.Parameter(index: 0), + if (is32BitConfiguration) ...[ + // The Dart int address is truncated before being returned. 'uint32' << - match.IntConverter('int32', - from: 'int32', to: 'uint32', is_truncating: true), + match.IntConverter('address', + from: 'int64', to: 'uint32', is_truncating: true), 'retval' << match.IntConverter('uint32', from: 'uint32', to: 'int64'), - match.Return('retval'), - ]), - ]); - } else { - graph.match([ - match.block('Graph'), - match.block('Function', [ - 'address' << match.Parameter(index: 0), - match.Return('address'), - ]), - ]); - } + ], + match.Return(retval), + ]), + ]); } void main(List args) { diff --git a/runtime/tests/vm/dart/regress_306327173_il_test.dart b/runtime/tests/vm/dart/regress_306327173_il_test.dart index a9206d3e661..e3c22ff9b5d 100644 --- a/runtime/tests/vm/dart/regress_306327173_il_test.dart +++ b/runtime/tests/vm/dart/regress_306327173_il_test.dart @@ -30,12 +30,7 @@ void matchIL$deref(FlowGraph graph) { // and int64 on 64-bit arches. if (is32BitConfiguration) ...[ // 'unboxed' needs to be converted to int64 before returning. - // - // Note: The first two conversions here should be fixed once all - // kUnboxedIntPtr uses are appropriately converted to kUnboxedFfiIntPtr. - 'extra1' << match.IntConverter('unboxed', from: 'uint32', to: 'int32'), - 'extra2' << match.IntConverter('extra1', from: 'int32', to: 'uint32'), - 'address' << match.IntConverter('extra2', from: 'uint32', to: 'int64'), + 'address' << match.IntConverter('unboxed', from: 'uint32', to: 'int64'), ], match.Return(retvalName), ]), diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc index 17893ddc53c..16c3edfc141 100644 --- a/runtime/vm/compiler/frontend/kernel_to_il.cc +++ b/runtime/vm/compiler/frontend/kernel_to_il.cc @@ -1384,8 +1384,8 @@ FlowGraph* FlowGraphBuilder::BuildGraphOfRecognizedMethod( LocalVariable* pointer = MakeTemporary(); body += LoadLocal(pointer); body += LoadLocal(address); - body += UnboxTruncate(kUnboxedIntPtr); - body += ConvertUnboxedToUntagged(kUnboxedIntPtr); + body += UnboxTruncate(kUnboxedFfiIntPtr); + body += ConvertUnboxedToUntagged(kUnboxedFfiIntPtr); body += StoreNativeField(Slot::PointerBase_data(), InnerPointerAccess::kCannotBeInnerPointer, StoreFieldInstr::Kind::kInitializing); @@ -1467,8 +1467,8 @@ FlowGraph* FlowGraphBuilder::BuildGraphOfRecognizedMethod( body += LoadLocal(MakeTemporary()); // Duplicate Pointer. body += LoadLocal(parsed_function_->RawParameterVariable(0)); // Address. body += CheckNullOptimized(String::ZoneHandle(Z, function.name())); - body += UnboxTruncate(kUnboxedIntPtr); - body += ConvertUnboxedToUntagged(kUnboxedIntPtr); + body += UnboxTruncate(kUnboxedFfiIntPtr); + body += ConvertUnboxedToUntagged(kUnboxedFfiIntPtr); body += StoreNativeField(Slot::PointerBase_data(), InnerPointerAccess::kCannotBeInnerPointer, StoreFieldInstr::Kind::kInitializing); @@ -1800,11 +1800,12 @@ Fragment FlowGraphBuilder::BuildTypedDataViewFactoryConstructor( body += LoadLocal(typed_data); body += LoadNativeField(Slot::PointerBase_data(), InnerPointerAccess::kMayBeInnerPointer); - body += ConvertUntaggedToUnboxed(kUnboxedIntPtr); + body += ConvertUntaggedToUnboxed(kUnboxedFfiIntPtr); body += LoadLocal(offset_in_bytes); - body += UnboxTruncate(kUnboxedIntPtr); - body += BinaryIntegerOp(Token::kADD, kUnboxedIntPtr, /*is_truncating=*/true); - body += ConvertUnboxedToUntagged(kUnboxedIntPtr); + body += UnboxTruncate(kUnboxedFfiIntPtr); + body += + BinaryIntegerOp(Token::kADD, kUnboxedFfiIntPtr, /*is_truncating=*/true); + body += ConvertUnboxedToUntagged(kUnboxedFfiIntPtr); body += StoreNativeField(Slot::PointerBase_data(), InnerPointerAccess::kMayBeInnerPointer, StoreFieldInstr::Kind::kInitializing); @@ -1865,27 +1866,27 @@ Fragment FlowGraphBuilder::BuildTypedDataMemMove(const Function& function, call_memmove += LoadLocal(arg_to); call_memmove += LoadNativeField(Slot::PointerBase_data(), InnerPointerAccess::kMayBeInnerPointer); - call_memmove += ConvertUntaggedToUnboxed(kUnboxedIntPtr); + call_memmove += ConvertUntaggedToUnboxed(kUnboxedFfiIntPtr); call_memmove += LoadLocal(arg_to_start); call_memmove += IntConstant(element_size); call_memmove += SmiBinaryOp(Token::kMUL, /*is_truncating=*/true); - call_memmove += UnboxTruncate(kUnboxedIntPtr); + call_memmove += UnboxTruncate(kUnboxedFfiIntPtr); call_memmove += - BinaryIntegerOp(Token::kADD, kUnboxedIntPtr, /*is_truncating=*/true); + BinaryIntegerOp(Token::kADD, kUnboxedFfiIntPtr, /*is_truncating=*/true); call_memmove += LoadLocal(arg_from); call_memmove += LoadNativeField(Slot::PointerBase_data(), InnerPointerAccess::kMayBeInnerPointer); - call_memmove += ConvertUntaggedToUnboxed(kUnboxedIntPtr); + call_memmove += ConvertUntaggedToUnboxed(kUnboxedFfiIntPtr); call_memmove += LoadLocal(arg_from_start); call_memmove += IntConstant(element_size); call_memmove += SmiBinaryOp(Token::kMUL, /*is_truncating=*/true); - call_memmove += UnboxTruncate(kUnboxedIntPtr); + call_memmove += UnboxTruncate(kUnboxedFfiIntPtr); call_memmove += - BinaryIntegerOp(Token::kADD, kUnboxedIntPtr, /*is_truncating=*/true); + BinaryIntegerOp(Token::kADD, kUnboxedFfiIntPtr, /*is_truncating=*/true); call_memmove += LoadLocal(arg_count); call_memmove += IntConstant(element_size); call_memmove += SmiBinaryOp(Token::kMUL, /*is_truncating=*/true); - call_memmove += UnboxTruncate(kUnboxedIntPtr); + call_memmove += UnboxTruncate(kUnboxedFfiIntPtr); call_memmove += LoadThread(); call_memmove += LoadUntagged( compiler::target::Thread::OffsetFromThread(&kMemoryMoveRuntimeEntry)); @@ -4529,8 +4530,8 @@ Fragment FlowGraphBuilder::FfiPointerFromAddress() { LocalVariable* pointer = MakeTemporary(); code += LoadLocal(pointer); code += LoadLocal(address); - code += UnboxTruncate(kUnboxedIntPtr); - code += ConvertUnboxedToUntagged(kUnboxedIntPtr); + code += UnboxTruncate(kUnboxedFfiIntPtr); + code += ConvertUnboxedToUntagged(kUnboxedFfiIntPtr); code += StoreNativeField(Slot::PointerBase_data(), InnerPointerAccess::kCannotBeInnerPointer, StoreFieldInstr::Kind::kInitializing);