Skip to content

Commit 46bc5cd

Browse files
dcharkescommit-bot@chromium.org
authored andcommitted
[vm] Support using different representations in ConvertUnboxedToUntagged
Change-Id: Ie84e7f5c966a428c69ef5017e89cf41e52031a42 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137792 Reviewed-by: Martin Kustermann <[email protected]>
1 parent c135e2a commit 46bc5cd

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

runtime/vm/compiler/frontend/base_flow_graph_builder.cc

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -365,19 +365,25 @@ Fragment BaseFlowGraphBuilder::StoreUntagged(intptr_t offset) {
365365
return Fragment(store);
366366
}
367367

368-
Fragment BaseFlowGraphBuilder::ConvertUntaggedToIntptr() {
368+
Fragment BaseFlowGraphBuilder::ConvertUntaggedToUnboxed(
369+
Representation to_representation) {
370+
ASSERT(to_representation == kUnboxedIntPtr ||
371+
to_representation == kUnboxedFfiIntPtr);
369372
Value* value = Pop();
370373
auto converted = new (Z)
371-
IntConverterInstr(kUntagged, kUnboxedIntPtr, value, DeoptId::kNone);
374+
IntConverterInstr(kUntagged, to_representation, value, DeoptId::kNone);
372375
converted->mark_truncating();
373376
Push(converted);
374377
return Fragment(converted);
375378
}
376379

377-
Fragment BaseFlowGraphBuilder::ConvertIntptrToUntagged() {
380+
Fragment BaseFlowGraphBuilder::ConvertUnboxedToUntagged(
381+
Representation from_representation) {
382+
ASSERT(from_representation == kUnboxedIntPtr ||
383+
from_representation == kUnboxedFfiIntPtr);
378384
Value* value = Pop();
379385
auto converted = new (Z)
380-
IntConverterInstr(kUnboxedIntPtr, kUntagged, value, DeoptId::kNone);
386+
IntConverterInstr(from_representation, kUntagged, value, DeoptId::kNone);
381387
converted->mark_truncating();
382388
Push(converted);
383389
return Fragment(converted);

runtime/vm/compiler/frontend/base_flow_graph_builder.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,8 @@ class BaseFlowGraphBuilder {
165165

166166
Fragment LoadUntagged(intptr_t offset);
167167
Fragment StoreUntagged(intptr_t offset);
168-
Fragment ConvertUntaggedToIntptr();
169-
Fragment ConvertIntptrToUntagged();
168+
Fragment ConvertUntaggedToUnboxed(Representation to);
169+
Fragment ConvertUnboxedToUntagged(Representation from);
170170
Fragment UnboxSmiToIntptr();
171171
Fragment FloatToDouble();
172172
Fragment DoubleToFloat();

runtime/vm/compiler/frontend/kernel_to_il.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1220,7 +1220,7 @@ FlowGraph* FlowGraphBuilder::BuildGraphOfRecognizedMethod(
12201220
String::ZoneHandle(Z, function.name()));
12211221
body += LoadNativeField(Slot::Pointer_c_memory_address());
12221222
body += UnboxTruncate(kUnboxedFfiIntPtr);
1223-
body += ConvertIntptrToUntagged();
1223+
body += ConvertUnboxedToUntagged(kUnboxedFfiIntPtr);
12241224
body += LoadLocal(arg_offset);
12251225
body += CheckNullOptimized(TokenPosition::kNoSource,
12261226
String::ZoneHandle(Z, function.name()));
@@ -1332,7 +1332,7 @@ FlowGraph* FlowGraphBuilder::BuildGraphOfRecognizedMethod(
13321332
String::ZoneHandle(Z, function.name()));
13331333
body += LoadNativeField(Slot::Pointer_c_memory_address());
13341334
body += UnboxTruncate(kUnboxedFfiIntPtr);
1335-
body += ConvertIntptrToUntagged();
1335+
body += ConvertUnboxedToUntagged(kUnboxedFfiIntPtr);
13361336
body += LoadLocal(arg_offset); // Offset.
13371337
body += CheckNullOptimized(TokenPosition::kNoSource,
13381338
String::ZoneHandle(Z, function.name()));
@@ -1440,11 +1440,11 @@ Fragment FlowGraphBuilder::BuildTypedDataViewFactoryConstructor(
14401440
body += LoadLocal(view_object);
14411441
body += LoadLocal(typed_data);
14421442
body += LoadUntagged(compiler::target::TypedDataBase::data_field_offset());
1443-
body += ConvertUntaggedToIntptr();
1443+
body += ConvertUntaggedToUnboxed(kUnboxedIntPtr);
14441444
body += LoadLocal(offset_in_bytes);
14451445
body += UnboxSmiToIntptr();
14461446
body += AddIntptrIntegers();
1447-
body += ConvertIntptrToUntagged();
1447+
body += ConvertUnboxedToUntagged(kUnboxedIntPtr);
14481448
body += StoreUntagged(compiler::target::TypedDataBase::data_field_offset());
14491449

14501450
return body;

0 commit comments

Comments
 (0)