diff --git a/patches/v8/.patches b/patches/v8/.patches index dc98544242..b40f2a5b5e 100644 --- a/patches/v8/.patches +++ b/patches/v8/.patches @@ -1 +1,2 @@ chore_allow_customizing_microtask_policy_per_context.patch +cherry-pick-4508b5dfb26e.patch diff --git a/patches/v8/cherry-pick-4508b5dfb26e.patch b/patches/v8/cherry-pick-4508b5dfb26e.patch new file mode 100644 index 0000000000..b395750f65 --- /dev/null +++ b/patches/v8/cherry-pick-4508b5dfb26e.patch @@ -0,0 +1,63 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Victor Gomes +Date: Fri, 30 Jan 2026 15:18:32 +0100 +Subject: [maglev] Module variables can be the hole + +Module variables are lowered in Maglev to +LoadTaggedField(cell, Cell:kValueOffset). + +Drive-by: order opcodes alphabetically in CanBeTheHoleValue. + +Fixed: 479726070 +Change-Id: I2be5752906cf2ec8fdb4df497724a4d9ad55648d +Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7534881 +Auto-Submit: Victor Gomes +Reviewed-by: Leszek Swirski +Commit-Queue: Leszek Swirski +Commit-Queue: Victor Gomes +Cr-Commit-Position: refs/heads/main@{#105008} + +diff --git a/src/maglev/maglev-ir.cc b/src/maglev/maglev-ir.cc +index fa8d01e37f91a6b1ba3e1acc5c0749bd15c638f5..ee6af1a841d5097ae1aa7144e9415ba5141eaed4 100644 +--- a/src/maglev/maglev-ir.cc ++++ b/src/maglev/maglev-ir.cc +@@ -621,6 +621,13 @@ Tribool ValueNode::IsTheHole() const { + if (const RootConstant* cst = TryCast()) { + return ToTribool(cst->index() == RootIndex::kTheHoleValue); + } ++ if (const LoadTaggedField* load = TryCast()) { ++ // Modules variables can be the hole. ++ if (load->offset() == Cell::kValueOffset) { ++ return Tribool::kMaybe; ++ } ++ return Tribool::kFalse; ++ } + if (const LoadFixedArrayElement* load = TryCast()) { + if (load->load_type() != LoadType::kUnknown) { + return Tribool::kFalse; +diff --git a/src/maglev/maglev-ir.h b/src/maglev/maglev-ir.h +index 7866f05de7ae832e1bda3697fc8cb95a45324c02..f099ff641d414196f92dd1f7a82a519129e4ac65 100644 +--- a/src/maglev/maglev-ir.h ++++ b/src/maglev/maglev-ir.h +@@ -710,17 +710,18 @@ constexpr bool CanBeStoreToNonEscapedObject(Opcode opcode) { + + constexpr bool CanBeTheHoleValue(Opcode opcode) { + switch (opcode) { +- case Opcode::kInitialValue: +- case Opcode::kCallRuntime: + // TODO(victorgomes): Should we have a list of builtins that could + // return the hole? + case Opcode::kCallBuiltin: ++ case Opcode::kCallRuntime: + case Opcode::kGeneratorRestoreRegister: +- case Opcode::kRootConstant: ++ case Opcode::kInitialValue: + case Opcode::kLoadContextSlot: + case Opcode::kLoadContextSlotNoCells: + case Opcode::kLoadFixedArrayElement: ++ case Opcode::kLoadTaggedField: + case Opcode::kPhi: ++ case Opcode::kRootConstant: + return true; + default: + return false;