Skip to content

Commit d950783

Browse files
dcharkescommit-bot@chromium.org
authored andcommitted
[vm/ffi] Unify RawTypedData::data and Pointer::data
This does not make FFI Structs with TypedData yet, but makes the loads/stores support using TypedData. Issue: #40767 Issue: #36730 Change-Id: I5d03e324c98c79c07955d70db86ab2e2d8dc4ec2 Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,app-kernel-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-kernel-precomp-linux-debug-x64-try,vm-dartkb-linux-release-x64-abi-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,dart-sdk-linux-try,analyzer-analysis-server-linux-try,analyzer-linux-release-try,front-end-linux-release-x64-try,vm-kernel-precomp-win-release-x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137305 Commit-Queue: Daco Harkes <[email protected]> Reviewed-by: Martin Kustermann <[email protected]>
1 parent b406802 commit d950783

10 files changed

+65
-76
lines changed

runtime/vm/compiler/backend/il.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2607,7 +2607,6 @@ bool LoadFieldInstr::IsImmutableLengthLoad() const {
26072607
case Slot::Kind::kArgumentsDescriptor_count:
26082608
case Slot::Kind::kArgumentsDescriptor_size:
26092609
case Slot::Kind::kTypeArguments:
2610-
case Slot::Kind::kTypedDataBase_data_field:
26112610
case Slot::Kind::kTypedDataView_offset_in_bytes:
26122611
case Slot::Kind::kTypedDataView_data:
26132612
case Slot::Kind::kGrowableObjectArray_data:
@@ -2620,7 +2619,7 @@ bool LoadFieldInstr::IsImmutableLengthLoad() const {
26202619
case Slot::Kind::kClosure_hash:
26212620
case Slot::Kind::kCapturedVariable:
26222621
case Slot::Kind::kDartField:
2623-
case Slot::Kind::kPointer_data:
2622+
case Slot::Kind::kPointerBase_data_field:
26242623
case Slot::Kind::kType_arguments:
26252624
case Slot::Kind::kTypeArgumentsIndex:
26262625
return false;

runtime/vm/compiler/backend/range_analysis.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2703,8 +2703,7 @@ void LoadFieldInstr::InferRange(RangeAnalysis* analysis, Range* range) {
27032703
case Slot::Kind::kClosure_function:
27042704
case Slot::Kind::kClosure_function_type_arguments:
27052705
case Slot::Kind::kClosure_instantiator_type_arguments:
2706-
case Slot::Kind::kPointer_data:
2707-
case Slot::Kind::kTypedDataBase_data_field:
2706+
case Slot::Kind::kPointerBase_data_field:
27082707
case Slot::Kind::kTypedDataView_data:
27092708
case Slot::Kind::kType_arguments:
27102709
case Slot::Kind::kTypeArgumentsIndex:

runtime/vm/compiler/backend/slot.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ class ParsedFunction;
5858
V(Closure, hash, Context, VAR) \
5959
V(GrowableObjectArray, length, Smi, VAR) \
6060
V(GrowableObjectArray, data, Array, VAR) \
61-
V(TypedDataBase, data_field, Dynamic, FINAL) \
6261
V(TypedDataBase, length, Smi, FINAL) \
6362
V(TypedDataView, offset_in_bytes, Smi, FINAL) \
6463
V(TypedDataView, data, Dynamic, FINAL) \
@@ -72,7 +71,7 @@ class ParsedFunction;
7271
V(ArgumentsDescriptor, positional_count, Smi, FINAL) \
7372
V(ArgumentsDescriptor, count, Smi, FINAL) \
7473
V(ArgumentsDescriptor, size, Smi, FINAL) \
75-
V(Pointer, data, Dynamic, FINAL) \
74+
V(PointerBase, data_field, Dynamic, FINAL) \
7675
V(Type, arguments, TypeArguments, FINAL)
7776

7877
// Slot is an abstraction that describes an readable (and possibly writeable)

runtime/vm/compiler/frontend/kernel_to_il.cc

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1224,7 +1224,7 @@ FlowGraph* FlowGraphBuilder::BuildGraphOfRecognizedMethod(
12241224
body += CheckNullOptimized(TokenPosition::kNoSource,
12251225
String::ZoneHandle(Z, function.name()));
12261226
// No GC from here til LoadIndexed.
1227-
body += LoadUntagged(compiler::target::Pointer::data_offset());
1227+
body += LoadUntagged(compiler::target::PointerBase::data_field_offset());
12281228
body += LoadLocal(arg_offset_not_null);
12291229
body += UnboxTruncate(kUnboxedFfiIntPtr);
12301230
body += LoadIndexedTypedData(typed_data_cid, /*index_scale=*/1,
@@ -1267,7 +1267,7 @@ FlowGraph* FlowGraphBuilder::BuildGraphOfRecognizedMethod(
12671267
body += LoadLocal(address);
12681268
body += UnboxTruncate(kUnboxedFfiIntPtr);
12691269
body += ConvertUnboxedToUntagged(kUnboxedFfiIntPtr);
1270-
body += StoreUntagged(compiler::target::Pointer::data_offset());
1270+
body += StoreUntagged(compiler::target::Pointer::data_field_offset());
12711271
body += DropTempsPreserveTop(1); // Drop [address] keep [pointer].
12721272
}
12731273
}
@@ -1344,13 +1344,13 @@ FlowGraph* FlowGraphBuilder::BuildGraphOfRecognizedMethod(
13441344
body += CheckNullOptimized(TokenPosition::kNoSource,
13451345
String::ZoneHandle(Z, function.name()));
13461346
// No GC from here til StoreIndexed.
1347-
body += LoadUntagged(compiler::target::Pointer::data_offset());
1347+
body += LoadUntagged(compiler::target::PointerBase::data_field_offset());
13481348
body += LoadLocal(arg_offset_not_null);
13491349
body += UnboxTruncate(kUnboxedFfiIntPtr);
13501350
body += LoadLocal(arg_value_not_null);
13511351
if (kind == MethodRecognizer::kFfiStorePointer) {
13521352
// This can only be Pointer, so it is always safe to LoadUntagged.
1353-
body += LoadUntagged(compiler::target::Pointer::data_offset());
1353+
body += LoadUntagged(compiler::target::Pointer::data_field_offset());
13541354
body += ConvertUntaggedToUnboxed(kUnboxedFfiIntPtr);
13551355
} else if (kind == MethodRecognizer::kFfiStoreFloat ||
13561356
kind == MethodRecognizer::kFfiStoreDouble) {
@@ -1383,15 +1383,15 @@ FlowGraph* FlowGraphBuilder::BuildGraphOfRecognizedMethod(
13831383
String::ZoneHandle(Z, function.name()));
13841384
body += UnboxTruncate(kUnboxedFfiIntPtr);
13851385
body += ConvertUnboxedToUntagged(kUnboxedFfiIntPtr);
1386-
body += StoreUntagged(compiler::target::Pointer::data_offset());
1386+
body += StoreUntagged(compiler::target::Pointer::data_field_offset());
13871387
} break;
13881388
case MethodRecognizer::kFfiGetAddress: {
13891389
ASSERT(function.NumParameters() == 1);
13901390
body += LoadLocal(parsed_function_->RawParameterVariable(0)); // Pointer.
13911391
body += CheckNullOptimized(TokenPosition::kNoSource,
13921392
String::ZoneHandle(Z, function.name()));
13931393
// This can only be Pointer, so it is always safe to LoadUntagged.
1394-
body += LoadUntagged(compiler::target::Pointer::data_offset());
1394+
body += LoadUntagged(compiler::target::Pointer::data_field_offset());
13951395
body += ConvertUntaggedToUnboxed(kUnboxedFfiIntPtr);
13961396
body += Box(kUnboxedFfiIntPtr);
13971397
} break;
@@ -2793,7 +2793,7 @@ Fragment FlowGraphBuilder::FfiPointerFromAddress(const Type& result_type) {
27932793
code += LoadLocal(address);
27942794
code += UnboxTruncate(kUnboxedFfiIntPtr);
27952795
code += ConvertUnboxedToUntagged(kUnboxedFfiIntPtr);
2796-
code += StoreUntagged(compiler::target::Pointer::data_offset());
2796+
code += StoreUntagged(compiler::target::Pointer::data_field_offset());
27972797
code += StoreLocal(TokenPosition::kNoSource, result);
27982798
code += Drop(); // StoreLocal^
27992799
code += Drop(); // address
@@ -2842,7 +2842,7 @@ Fragment FlowGraphBuilder::FfiConvertArgumentToNative(
28422842

28432843
if (marshaller.IsPointer(arg_index)) {
28442844
// This can only be Pointer, so it is always safe to LoadUntagged.
2845-
body += LoadUntagged(compiler::target::Pointer::data_offset());
2845+
body += LoadUntagged(compiler::target::Pointer::data_field_offset());
28462846
body += ConvertUntaggedToUnboxed(kUnboxedFfiIntPtr);
28472847
} else {
28482848
body += UnboxTruncate(marshaller.RepInDart(arg_index));
@@ -2901,7 +2901,7 @@ FlowGraph* FlowGraphBuilder::BuildGraphOfFfiNative(const Function& function) {
29012901
->context_variables()[0]));
29022902

29032903
// This can only be Pointer, so it is always safe to LoadUntagged.
2904-
body += LoadUntagged(compiler::target::Pointer::data_offset());
2904+
body += LoadUntagged(compiler::target::Pointer::data_field_offset());
29052905
body += ConvertUntaggedToUnboxed(kUnboxedFfiIntPtr);
29062906
body += FfiCall(marshaller);
29072907

runtime/vm/compiler/runtime_api.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -517,9 +517,13 @@ class GrowableObjectArray : public AllStatic {
517517
static word NextFieldOffset();
518518
};
519519

520-
class TypedDataBase : public AllStatic {
520+
class PointerBase : public AllStatic {
521521
public:
522522
static word data_field_offset();
523+
};
524+
525+
class TypedDataBase : public PointerBase {
526+
public:
523527
static word length_offset();
524528
static word InstanceSize();
525529
static word NextFieldOffset();
@@ -578,9 +582,8 @@ class ArgumentsDescriptor : public AllStatic {
578582
static word positional_count_offset();
579583
};
580584

581-
class Pointer : public AllStatic {
585+
class Pointer : public PointerBase {
582586
public:
583-
static word data_offset();
584587
static word type_arguments_offset();
585588
static word InstanceSize();
586589
static word NextFieldOffset();

0 commit comments

Comments
 (0)