Commit e209e348 authored by Georg Neis's avatar Georg Neis Committed by Commit Bot

[codegen] Don't generate safepoints for arbitrary C calls

These safepoints weren't needed and weren't even valid
(e.g. pointing to the wrong instruction). The exception are
Wasm C API functions, where we do need a safepoint (and can
work around the invalid address).

Bug: v8:10037
Change-Id: I597c33dbd542394990fbd006ba8c16ccff7e260e
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2002530
Commit-Queue: Georg Neis <neis@chromium.org>
Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
Cr-Commit-Position: refs/heads/master@{#65806}
parent 21aedeb4
...@@ -849,7 +849,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( ...@@ -849,7 +849,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
Register func = i.InputRegister(0); Register func = i.InputRegister(0);
__ CallCFunction(func, num_parameters); __ CallCFunction(func, num_parameters);
} }
RecordSafepoint(instr->reference_map(), Safepoint::kNoLazyDeopt); if (linkage()->GetIncomingDescriptor()->IsWasmCapiFunction()) {
RecordSafepoint(instr->reference_map(), Safepoint::kNoLazyDeopt);
}
frame_access_state()->SetFrameAccessToDefault(); frame_access_state()->SetFrameAccessToDefault();
// Ideally, we should decrement SP delta to match the change of stack // Ideally, we should decrement SP delta to match the change of stack
// pointer in CallCFunction. However, for certain architectures (e.g. // pointer in CallCFunction. However, for certain architectures (e.g.
......
...@@ -790,7 +790,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( ...@@ -790,7 +790,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
__ CallCFunction(func, num_parameters, 0); __ CallCFunction(func, num_parameters, 0);
} }
__ Bind(&return_location); __ Bind(&return_location);
RecordSafepoint(instr->reference_map(), Safepoint::kNoLazyDeopt); if (linkage()->GetIncomingDescriptor()->IsWasmCapiFunction()) {
RecordSafepoint(instr->reference_map(), Safepoint::kNoLazyDeopt);
}
frame_access_state()->SetFrameAccessToDefault(); frame_access_state()->SetFrameAccessToDefault();
// Ideally, we should decrement SP delta to match the change of stack // Ideally, we should decrement SP delta to match the change of stack
// pointer in CallCFunction. However, for certain architectures (e.g. // pointer in CallCFunction. However, for certain architectures (e.g.
......
...@@ -848,7 +848,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( ...@@ -848,7 +848,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
__ CallCFunction(func, num_parameters); __ CallCFunction(func, num_parameters);
} }
__ bind(&return_location); __ bind(&return_location);
RecordSafepoint(instr->reference_map(), Safepoint::kNoLazyDeopt); if (linkage()->GetIncomingDescriptor()->IsWasmCapiFunction()) {
RecordSafepoint(instr->reference_map(), Safepoint::kNoLazyDeopt);
}
frame_access_state()->SetFrameAccessToDefault(); frame_access_state()->SetFrameAccessToDefault();
// Ideally, we should decrement SP delta to match the change of stack // Ideally, we should decrement SP delta to match the change of stack
// pointer in CallCFunction. However, for certain architectures (e.g. // pointer in CallCFunction. However, for certain architectures (e.g.
......
...@@ -812,9 +812,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( ...@@ -812,9 +812,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
} }
if (isWasmCapiFunction) { if (isWasmCapiFunction) {
CHECK_EQ(offset, __ SizeOfCodeGeneratedSince(&start_call)); CHECK_EQ(offset, __ SizeOfCodeGeneratedSince(&start_call));
RecordSafepoint(instr->reference_map(), Safepoint::kNoLazyDeopt);
} }
RecordSafepoint(instr->reference_map(), Safepoint::kNoLazyDeopt);
frame_access_state()->SetFrameAccessToDefault(); frame_access_state()->SetFrameAccessToDefault();
// Ideally, we should decrement SP delta to match the change of stack // Ideally, we should decrement SP delta to match the change of stack
// pointer in CallCFunction. However, for certain architectures (e.g. // pointer in CallCFunction. However, for certain architectures (e.g.
......
...@@ -790,9 +790,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( ...@@ -790,9 +790,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
} }
if (isWasmCapiFunction) { if (isWasmCapiFunction) {
CHECK_EQ(offset, __ SizeOfCodeGeneratedSince(&start_call)); CHECK_EQ(offset, __ SizeOfCodeGeneratedSince(&start_call));
RecordSafepoint(instr->reference_map(), Safepoint::kNoLazyDeopt);
} }
RecordSafepoint(instr->reference_map(), Safepoint::kNoLazyDeopt);
frame_access_state()->SetFrameAccessToDefault(); frame_access_state()->SetFrameAccessToDefault();
// Ideally, we should decrement SP delta to match the change of stack // Ideally, we should decrement SP delta to match the change of stack
// pointer in CallCFunction. However, for certain architectures (e.g. // pointer in CallCFunction. However, for certain architectures (e.g.
......
...@@ -1066,10 +1066,10 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( ...@@ -1066,10 +1066,10 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
// counted from where we are binding to the label and ends at this spot. // counted from where we are binding to the label and ends at this spot.
// If failed, replace it with the correct offset suggested. More info on // If failed, replace it with the correct offset suggested. More info on
// f5ab7d3. // f5ab7d3.
if (isWasmCapiFunction) if (isWasmCapiFunction) {
CHECK_EQ(offset, __ SizeOfCodeGeneratedSince(&start_call)); CHECK_EQ(offset, __ SizeOfCodeGeneratedSince(&start_call));
RecordSafepoint(instr->reference_map(), Safepoint::kNoLazyDeopt);
RecordSafepoint(instr->reference_map(), Safepoint::kNoLazyDeopt); }
frame_access_state()->SetFrameAccessToDefault(); frame_access_state()->SetFrameAccessToDefault();
// Ideally, we should decrement SP delta to match the change of stack // Ideally, we should decrement SP delta to match the change of stack
// pointer in CallCFunction. However, for certain architectures (e.g. // pointer in CallCFunction. However, for certain architectures (e.g.
......
...@@ -1531,7 +1531,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( ...@@ -1531,7 +1531,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
__ CallCFunction(func, num_parameters); __ CallCFunction(func, num_parameters);
} }
__ bind(&return_location); __ bind(&return_location);
RecordSafepoint(instr->reference_map(), Safepoint::kNoLazyDeopt); if (linkage()->GetIncomingDescriptor()->IsWasmCapiFunction()) {
RecordSafepoint(instr->reference_map(), Safepoint::kNoLazyDeopt);
}
frame_access_state()->SetFrameAccessToDefault(); frame_access_state()->SetFrameAccessToDefault();
// Ideally, we should decrement SP delta to match the change of stack // Ideally, we should decrement SP delta to match the change of stack
// pointer in CallCFunction. However, for certain architectures (e.g. // pointer in CallCFunction. However, for certain architectures (e.g.
......
...@@ -940,7 +940,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( ...@@ -940,7 +940,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
__ CallCFunction(func, num_parameters); __ CallCFunction(func, num_parameters);
} }
__ bind(&return_location); __ bind(&return_location);
RecordSafepoint(instr->reference_map(), Safepoint::kNoLazyDeopt); if (linkage()->GetIncomingDescriptor()->IsWasmCapiFunction()) {
RecordSafepoint(instr->reference_map(), Safepoint::kNoLazyDeopt);
}
frame_access_state()->SetFrameAccessToDefault(); frame_access_state()->SetFrameAccessToDefault();
// Ideally, we should decrement SP delta to match the change of stack // Ideally, we should decrement SP delta to match the change of stack
// pointer in CallCFunction. However, for certain architectures (e.g. // pointer in CallCFunction. However, for certain architectures (e.g.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment