diff --git a/pkg/compiler/lib/src/js_backend/annotations.dart b/pkg/compiler/lib/src/js_backend/annotations.dart
index 677a87e..1879291 100644
--- a/pkg/compiler/lib/src/js_backend/annotations.dart
+++ b/pkg/compiler/lib/src/js_backend/annotations.dart
@@ -317,14 +317,6 @@
   /// annotation.
   bool hasNoSideEffects(MemberEntity member);
 
-  /// Calls [f] for all functions with a `@pragma('dart2js:noThrows')`
-  /// annotation.
-  void forEachNoThrows(void f(FunctionEntity function));
-
-  /// Calls [f] for all functions with a `@pragma('dart2js:noSideEffects')`
-  /// annotation.
-  void forEachNoSideEffects(void f(FunctionEntity function));
-
   /// What the compiler should do with parameter type assertions in [member].
   ///
   /// If [member] is `null`, the default policy is returned.
@@ -443,26 +435,6 @@
       _hasPragma(member, PragmaAnnotation.noSideEffects);
 
   @override
-  void forEachNoThrows(void f(FunctionEntity function)) {
-    pragmaAnnotations
-        .forEach((MemberEntity member, EnumSet<PragmaAnnotation> set) {
-      if (set.contains(PragmaAnnotation.noThrows)) {
-        f(member as FunctionEntity);
-      }
-    });
-  }
-
-  @override
-  void forEachNoSideEffects(void f(FunctionEntity function)) {
-    pragmaAnnotations
-        .forEach((MemberEntity member, EnumSet<PragmaAnnotation> set) {
-      if (set.contains(PragmaAnnotation.noSideEffects)) {
-        f(member as FunctionEntity);
-      }
-    });
-  }
-
-  @override
   CheckPolicy getParameterCheckPolicy(MemberEntity? member) {
     if (member != null) {
       EnumSet<PragmaAnnotation>? annotations = pragmaAnnotations[member];
diff --git a/pkg/compiler/lib/src/js_backend/inferred_data.dart b/pkg/compiler/lib/src/js_backend/inferred_data.dart
index 93ee68b..74c8bc0 100644
--- a/pkg/compiler/lib/src/js_backend/inferred_data.dart
+++ b/pkg/compiler/lib/src/js_backend/inferred_data.dart
@@ -49,9 +49,6 @@
 }
 
 abstract class InferredDataBuilder {
-  /// Registers the executing of [element] as without side effects.
-  void registerSideEffectsFree(FunctionEntity element);
-
   /// Returns the [SideEffectBuilder] associated with [element].
   SideEffectsBuilder getSideEffectsBuilder(FunctionEntity member);
 
@@ -68,9 +65,6 @@
   // TODO(johnniwinther): Is this 'potentially called' or 'known to be called'?
   void addFunctionCalledInLoop(MemberEntity element);
 
-  /// Registers that [element] is guaranteed not to throw an exception.
-  void registerCannotThrow(FunctionEntity element);
-
   /// Create a [InferredData] object for the collected information.
   InferredData close(JClosedWorld closedWorld);
 }
@@ -84,8 +78,6 @@
   final Set<MemberEntity> _functionsCalledInLoop;
   final Map<FunctionEntity, SideEffects> _sideEffects;
 
-  final Set<FunctionEntity> _sideEffectsFreeElements;
-
   final Set<FunctionEntity> _elementsThatCannotThrow;
 
   final Set<FunctionEntity> _functionsThatMightBePassedToApply;
@@ -94,7 +86,6 @@
       this._closedWorld,
       this._functionsCalledInLoop,
       this._sideEffects,
-      this._sideEffectsFreeElements,
       this._elementsThatCannotThrow,
       this._functionsThatMightBePassedToApply);
 
@@ -104,20 +95,13 @@
     Set<MemberEntity> functionsCalledInLoop = source.readMembers().toSet();
     Map<FunctionEntity, SideEffects> sideEffects = source.readMemberMap(
         (MemberEntity member) => SideEffects.readFromDataSource(source));
-    Set<FunctionEntity> sideEffectsFreeElements =
-        source.readMembers<FunctionEntity>().toSet();
     Set<FunctionEntity> elementsThatCannotThrow =
         source.readMembers<FunctionEntity>().toSet();
     Set<FunctionEntity> functionsThatMightBePassedToApply =
         source.readMembers<FunctionEntity>().toSet();
     source.end(tag);
-    return InferredDataImpl(
-        closedWorld,
-        functionsCalledInLoop,
-        sideEffects,
-        sideEffectsFreeElements,
-        elementsThatCannotThrow,
-        functionsThatMightBePassedToApply);
+    return InferredDataImpl(closedWorld, functionsCalledInLoop, sideEffects,
+        elementsThatCannotThrow, functionsThatMightBePassedToApply);
   }
 
   @override
@@ -129,7 +113,6 @@
         _sideEffects,
         (MemberEntity member, SideEffects sideEffects) =>
             sideEffects.writeToDataSink(sink));
-    sink.writeMembers(_sideEffectsFreeElements);
     sink.writeMembers(_elementsThatCannotThrow);
     sink.writeMembers(_functionsThatMightBePassedToApply);
     sink.end(tag);
@@ -206,27 +189,24 @@
   Map<MemberEntity, SideEffectsBuilder>? _sideEffectsBuilders = {};
   final Set<FunctionEntity> prematureSideEffectAccesses = {};
 
-  final Set<FunctionEntity> _sideEffectsFreeElements = {};
-
   final Set<FunctionEntity> _elementsThatCannotThrow = {};
 
   final Set<FunctionEntity> _functionsThatMightBePassedToApply = {};
 
-  InferredDataBuilderImpl(AnnotationsData annotationsData) {
-    annotationsData.forEachNoThrows(registerCannotThrow);
-    annotationsData.forEachNoSideEffects(registerSideEffectsFree);
-  }
+  AnnotationsData? _annotationsData;
+
+  InferredDataBuilderImpl(AnnotationsData this._annotationsData);
 
   @override
   SideEffectsBuilder getSideEffectsBuilder(MemberEntity member) {
-    return _sideEffectsBuilders![member] ??= SideEffectsBuilder(member);
+    return _sideEffectsBuilders![member] ??= _createSideEffectsBuilder(member);
   }
 
-  @override
-  void registerSideEffectsFree(FunctionEntity element) {
-    _sideEffectsFreeElements.add(element);
-    assert(!_sideEffectsBuilders!.containsKey(element));
-    _sideEffectsBuilders![element] = SideEffectsBuilder.free(element);
+  SideEffectsBuilder _createSideEffectsBuilder(MemberEntity member) {
+    if (_annotationsData!.hasNoSideEffects(member)) {
+      return SideEffectsBuilder.free(member);
+    }
+    return SideEffectsBuilder(member);
   }
 
   /// Compute [SideEffects] for all registered [SideEffectBuilder]s.
@@ -238,19 +218,22 @@
     Iterable<SideEffectsBuilder> sideEffectsBuilders =
         _sideEffectsBuilders!.values;
     emptyWorkList(sideEffectsBuilders);
-    for (SideEffectsBuilder sideEffectsBuilder in sideEffectsBuilders) {
-      _sideEffects[sideEffectsBuilder.member as FunctionEntity] =
-          sideEffectsBuilder.sideEffects;
+    for (SideEffectsBuilder builder in sideEffectsBuilders) {
+      final function = builder.member as FunctionEntity;
+      _sideEffects[function] = builder.sideEffects;
+
+      // TODO(sra): We should also infer whether the function cannot throw. This
+      // might be conveniently computed with the closure of the side effects
+      // over the call graph. For now we just use the annotations.
+      if (_annotationsData!.hasNoThrows(function)) {
+        _elementsThatCannotThrow.add(function);
+      }
     }
     _sideEffectsBuilders = null;
+    _annotationsData = null;
 
-    return InferredDataImpl(
-        closedWorld,
-        _functionsCalledInLoop,
-        _sideEffects,
-        _sideEffectsFreeElements,
-        _elementsThatCannotThrow,
-        _functionsThatMightBePassedToApply);
+    return InferredDataImpl(closedWorld, _functionsCalledInLoop, _sideEffects,
+        _elementsThatCannotThrow, _functionsThatMightBePassedToApply);
   }
 
   static void emptyWorkList(Iterable<SideEffectsBuilder> sideEffectsBuilders) {
@@ -281,11 +264,6 @@
   }
 
   @override
-  void registerCannotThrow(FunctionEntity element) {
-    _elementsThatCannotThrow.add(element);
-  }
-
-  @override
   void registerMightBePassedToApply(FunctionEntity element) {
     _functionsThatMightBePassedToApply.add(element);
   }
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index f27676d..4eb1c89 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -103,12 +103,12 @@
 
   /// [FeatureOption]s which default to enabled.
   late final List<FeatureOption> shipping = [
-    deferredSerialization,
     useContentSecurityPolicy,
   ];
 
   /// [FeatureOption]s which default to disabled.
   late final List<FeatureOption> canary = [
+    deferredSerialization,
     writeUtf8,
     newDumpInfo,
     simpleAsyncToFuture,
diff --git a/pkg/compiler/test/dump_info/data/deferred/main.dart b/pkg/compiler/test/dump_info/data/deferred/main.dart
index c4f9945..2ab399c 100644
--- a/pkg/compiler/test/dump_info/data/deferred/main.dart
+++ b/pkg/compiler/test/dump_info/data/deferred/main.dart
@@ -4,122 +4,7 @@
 
 // @dart = 2.7
 
-/*spec.library: 
- constant=[
-  {
-  "id": "constant/B.C_Deferred = A.lib__funky$closure();\n",
-  "kind": "constant",
-  "name": "",
-  "size": 39,
-  "outputUnit": "outputUnit/1",
-  "code": "B.C_Deferred = A.lib__funky$closure();\n"
-},
-  {
-  "id": "constant/B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n",
-  "kind": "constant",
-  "name": "",
-  "size": 131,
-  "outputUnit": "outputUnit/main",
-  "code": "B.C_JS_CONST = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n"
-},
-  {
-  "id": "constant/B.C__RootZone = new A._RootZone();\n",
-  "kind": "constant",
-  "name": "",
-  "size": 35,
-  "outputUnit": "outputUnit/main",
-  "code": "B.C__RootZone = new A._RootZone();\n"
-},
-  {
-  "id": "constant/B.C__StringStackTrace = new A._StringStackTrace();\n",
-  "kind": "constant",
-  "name": "",
-  "size": 51,
-  "outputUnit": "outputUnit/main",
-  "code": "B.C__StringStackTrace = new A._StringStackTrace();\n"
-},
-  {
-  "id": "constant/B.Interceptor_methods = J.Interceptor.prototype;\n",
-  "kind": "constant",
-  "name": "",
-  "size": 49,
-  "outputUnit": "outputUnit/main",
-  "code": "B.Interceptor_methods = J.Interceptor.prototype;\n"
-},
-  {
-  "id": "constant/B.JSArray_methods = J.JSArray.prototype;\n",
-  "kind": "constant",
-  "name": "",
-  "size": 41,
-  "outputUnit": "outputUnit/main",
-  "code": "B.JSArray_methods = J.JSArray.prototype;\n"
-},
-  {
-  "id": "constant/B.JSInt_methods = J.JSInt.prototype;\n",
-  "kind": "constant",
-  "name": "",
-  "size": 37,
-  "outputUnit": "outputUnit/main",
-  "code": "B.JSInt_methods = J.JSInt.prototype;\n"
-},
-  {
-  "id": "constant/B.JSString_methods = J.JSString.prototype;\n",
-  "kind": "constant",
-  "name": "",
-  "size": 43,
-  "outputUnit": "outputUnit/main",
-  "code": "B.JSString_methods = J.JSString.prototype;\n"
-},
-  {
-  "id": "constant/B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n",
-  "kind": "constant",
-  "name": "",
-  "size": 59,
-  "outputUnit": "outputUnit/main",
-  "code": "B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n"
-}],
- deferredFiles=[{
-  "main.dart": {
-    "name": "<unnamed>",
-    "imports": {
-      "lib": [
-        "out_1.part.js"
-      ]
-    }
-  }
-}],
- dependencies=[{}],
- library=[{
-  "id": "library/memory:sdk/tests/web/native/main.dart::",
-  "kind": "library",
-  "name": "<unnamed>",
-  "size": 301,
-  "children": [
-    "function/memory:sdk/tests/web/native/main.dart::main"
-  ],
-  "canonicalUri": "memory:sdk/tests/web/native/main.dart"
-}],
- outputUnits=[
-  {
-  "id": "outputUnit/1",
-  "kind": "outputUnit",
-  "name": "1",
-  "size": 1087,
-  "filename": "out_1.part.js",
-  "imports": [
-    "lib"
-  ]
-},
-  {
-  "id": "outputUnit/main",
-  "kind": "outputUnit",
-  "name": "main",
-  "filename": "out",
-  "imports": []
-}]
-*/
-
-/*canary.library: 
+/*library: 
  constant=[
   {
   "id": "constant/B.C_Deferred = A.lib__funky$closure();\n",
diff --git a/pkg/compiler/test/dump_info/data/deferred_future/main.dart b/pkg/compiler/test/dump_info/data/deferred_future/main.dart
index f9347fc..ed843d7 100644
--- a/pkg/compiler/test/dump_info/data/deferred_future/main.dart
+++ b/pkg/compiler/test/dump_info/data/deferred_future/main.dart
@@ -110,7 +110,7 @@
   "id": "outputUnit/1",
   "kind": "outputUnit",
   "name": "1",
-  "size": 870,
+  "size": 846,
   "filename": "out_1.part.js",
   "imports": [
     "lib1"
diff --git a/runtime/lib/timeline.cc b/runtime/lib/timeline.cc
index 0b3816c..7deea5c 100644
--- a/runtime/lib/timeline.cc
+++ b/runtime/lib/timeline.cc
@@ -24,15 +24,11 @@
   return Bool::False().ptr();
 }
 
-DEFINE_NATIVE_ENTRY(Timeline_getNextAsyncId, 0, 0) {
+DEFINE_NATIVE_ENTRY(Timeline_getNextTaskId, 0, 0) {
 #if !defined(SUPPORT_TIMELINE)
   return Integer::New(0);
 #else
-  TimelineEventRecorder* recorder = Timeline::recorder();
-  if (recorder == NULL) {
-    return Integer::New(0);
-  }
-  return Integer::New(recorder->GetNextAsyncId());
+  return Integer::New(thread->GetNextTaskId());
 #endif
 }
 
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index 6e82679..dbbaa95 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -153,7 +153,7 @@
   V(TypeError_throwNew, 4)                                                     \
   V(Stopwatch_now, 0)                                                          \
   V(Stopwatch_frequency, 0)                                                    \
-  V(Timeline_getNextAsyncId, 0)                                                \
+  V(Timeline_getNextTaskId, 0)                                                 \
   V(Timeline_getTraceClock, 0)                                                 \
   V(Timeline_isDartStreamEnabled, 0)                                           \
   V(Timeline_reportFlowEvent, 5)                                               \
diff --git a/runtime/vm/compiler/aot/aot_call_specializer.cc b/runtime/vm/compiler/aot/aot_call_specializer.cc
index d4aa2e9..c1488d8 100644
--- a/runtime/vm/compiler/aot/aot_call_specializer.cc
+++ b/runtime/vm/compiler/aot/aot_call_specializer.cc
@@ -126,10 +126,7 @@
     const intptr_t receiver_index = call->FirstArgIndex();
     RedefinitionInstr* redefinition = new (Z)
         RedefinitionInstr(new (Z) Value(call->ArgumentAt(receiver_index)));
-    redefinition->set_ssa_temp_index(flow_graph()->alloc_ssa_temp_index());
-    if (FlowGraph::NeedsPairLocation(redefinition->representation())) {
-      flow_graph()->alloc_ssa_temp_index();
-    }
+    flow_graph()->AllocateSSAIndex(redefinition);
     redefinition->InsertAfter(call);
     // Replace all uses of the receiver dominated by this call.
     FlowGraph::RenameDominatedUses(call->ArgumentAt(receiver_index),
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm.cc b/runtime/vm/compiler/asm_intrinsifier_arm.cc
index 5bd61d7..c061a93 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm.cc
@@ -1900,6 +1900,23 @@
 #endif
 }
 
+void AsmIntrinsifier::Timeline_getNextTaskId(Assembler* assembler,
+                                             Label* normal_ir_body) {
+#if !defined(SUPPORT_TIMELINE)
+  __ LoadImmediate(R0, target::ToRawSmi(0));
+  __ Ret();
+#else
+  __ ldr(R1, Address(THR, target::Thread::next_task_id_offset()));
+  __ ldr(R2, Address(THR, target::Thread::next_task_id_offset() + 4));
+  __ SmiTag(R0, R1);  // Ignore loss of precision.
+  __ adds(R1, R1, Operand(1));
+  __ adcs(R2, R2, Operand(0));
+  __ str(R1, Address(THR, target::Thread::next_task_id_offset()));
+  __ str(R2, Address(THR, target::Thread::next_task_id_offset() + 4));
+  __ Ret();
+#endif
+}
+
 #undef __
 
 }  // namespace compiler
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm64.cc b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
index 2cd0d6e..33e850c 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
@@ -2146,6 +2146,20 @@
 #endif
 }
 
+void AsmIntrinsifier::Timeline_getNextTaskId(Assembler* assembler,
+                                             Label* normal_ir_body) {
+#if !defined(SUPPORT_TIMELINE)
+  __ LoadImmediate(R0, target::ToRawSmi(0));
+  __ ret();
+#else
+  __ ldr(R0, Address(THR, target::Thread::next_task_id_offset()));
+  __ add(R1, R0, Operand(1));
+  __ str(R1, Address(THR, target::Thread::next_task_id_offset()));
+  __ SmiTag(R0);  // Ignore loss of precision.
+  __ ret();
+#endif
+}
+
 #undef __
 
 }  // namespace compiler
diff --git a/runtime/vm/compiler/asm_intrinsifier_ia32.cc b/runtime/vm/compiler/asm_intrinsifier_ia32.cc
index 538ce05..bc39517 100644
--- a/runtime/vm/compiler/asm_intrinsifier_ia32.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_ia32.cc
@@ -1937,6 +1937,24 @@
 #endif
 }
 
+void AsmIntrinsifier::Timeline_getNextTaskId(Assembler* assembler,
+                                             Label* normal_ir_body) {
+#if !defined(SUPPORT_TIMELINE)
+  __ LoadImmediate(EAX, target::ToRawSmi(0));
+  __ ret();
+#else
+  __ movl(EBX, Address(THR, target::Thread::next_task_id_offset()));
+  __ movl(ECX, Address(THR, target::Thread::next_task_id_offset() + 4));
+  __ movl(EAX, EBX);
+  __ SmiTag(EAX);  // Ignore loss of precision.
+  __ addl(EBX, Immediate(1));
+  __ adcl(ECX, Immediate(0));
+  __ movl(Address(THR, target::Thread::next_task_id_offset()), EBX);
+  __ movl(Address(THR, target::Thread::next_task_id_offset() + 4), ECX);
+  __ ret();
+#endif
+}
+
 #undef __
 
 }  // namespace compiler
diff --git a/runtime/vm/compiler/asm_intrinsifier_riscv.cc b/runtime/vm/compiler/asm_intrinsifier_riscv.cc
index a1b94de..e6bdde0 100644
--- a/runtime/vm/compiler/asm_intrinsifier_riscv.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_riscv.cc
@@ -2160,6 +2160,30 @@
 #endif
 }
 
+void AsmIntrinsifier::Timeline_getNextTaskId(Assembler* assembler,
+                                             Label* normal_ir_body) {
+#if !defined(SUPPORT_TIMELINE)
+  __ LoadImmediate(A0, target::ToRawSmi(0));
+  __ ret();
+#elif XLEN == 64
+  __ ld(A0, Address(THR, target::Thread::next_task_id_offset()));
+  __ addi(A1, A0, 1);
+  __ sd(A1, Address(THR, target::Thread::next_task_id_offset()));
+  __ SmiTag(A0);  // Ignore loss of precision.
+  __ ret();
+#else
+  __ lw(T0, Address(THR, target::Thread::next_task_id_offset()));
+  __ lw(T1, Address(THR, target::Thread::next_task_id_offset() + 4));
+  __ SmiTag(A0, T0);  // Ignore loss of precision.
+  __ addi(T2, T0, 1);
+  __ sltu(T3, T2, T0);  // Carry.
+  __ add(T1, T1, T3);
+  __ sw(T2, Address(THR, target::Thread::next_task_id_offset()));
+  __ sw(T1, Address(THR, target::Thread::next_task_id_offset() + 4));
+  __ ret();
+#endif
+}
+
 #undef __
 
 }  // namespace compiler
diff --git a/runtime/vm/compiler/asm_intrinsifier_x64.cc b/runtime/vm/compiler/asm_intrinsifier_x64.cc
index 9ff337a..ad0d3a8 100644
--- a/runtime/vm/compiler/asm_intrinsifier_x64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_x64.cc
@@ -2034,6 +2034,21 @@
 #endif
 }
 
+void AsmIntrinsifier::Timeline_getNextTaskId(Assembler* assembler,
+                                             Label* normal_ir_body) {
+#if !defined(SUPPORT_TIMELINE)
+  __ xorq(RAX, RAX);  // Return Smi 0.
+  __ ret();
+#else
+  __ movq(RAX, Address(THR, target::Thread::next_task_id_offset()));
+  __ movq(RBX, RAX);
+  __ incq(RBX);
+  __ movq(Address(THR, target::Thread::next_task_id_offset()), RBX);
+  __ SmiTag(RAX);  // Ignore loss of precision.
+  __ ret();
+#endif
+}
+
 #undef __
 
 }  // namespace compiler
diff --git a/runtime/vm/compiler/backend/block_builder.h b/runtime/vm/compiler/backend/block_builder.h
index 9c4dc68..4a36631 100644
--- a/runtime/vm/compiler/backend/block_builder.h
+++ b/runtime/vm/compiler/backend/block_builder.h
@@ -31,10 +31,7 @@
   }
 
   Definition* AddToInitialDefinitions(Definition* def) {
-    def->set_ssa_temp_index(flow_graph_->alloc_ssa_temp_index());
-    if (FlowGraph::NeedsPairLocation(def->representation())) {
-      flow_graph_->alloc_ssa_temp_index();
-    }
+    flow_graph_->AllocateSSAIndex(def);
     auto normal_entry = flow_graph_->graph_entry()->normal_entry();
     flow_graph_->AddToInitialDefinitions(normal_entry, def);
     return def;
@@ -42,7 +39,7 @@
 
   template <typename T>
   T* AddDefinition(T* def) {
-    flow_graph_->AllocateSSAIndexes(def);
+    flow_graph_->AllocateSSAIndex(def);
     AddInstruction(def);
     return def;
   }
@@ -134,10 +131,7 @@
   }
 
   void AddPhi(PhiInstr* phi) {
-    phi->set_ssa_temp_index(flow_graph_->alloc_ssa_temp_index());
-    if (FlowGraph::NeedsPairLocation(phi->representation())) {
-      flow_graph_->alloc_ssa_temp_index();
-    }
+    flow_graph_->AllocateSSAIndex(phi);
     phi->mark_alive();
     entry_->AsJoinEntry()->InsertPhi(phi);
   }
diff --git a/runtime/vm/compiler/backend/constant_propagator.cc b/runtime/vm/compiler/backend/constant_propagator.cc
index 85595e1..69e28a7 100644
--- a/runtime/vm/compiler/backend/constant_propagator.cc
+++ b/runtime/vm/compiler/backend/constant_propagator.cc
@@ -35,9 +35,8 @@
       unknown_(Object::unknown_constant()),
       non_constant_(Object::non_constant()),
       constant_value_(Object::Handle(Z)),
-      reachable_(new (Z) BitVector(Z, graph->preorder().length())),
-      unwrapped_phis_(new (Z)
-                          BitVector(Z, graph->max_virtual_register_number())),
+      reachable_(new(Z) BitVector(Z, graph->preorder().length())),
+      unwrapped_phis_(new(Z) BitVector(Z, graph->current_ssa_temp_index())),
       block_worklist_(),
       definition_worklist_(graph, 10) {}
 
diff --git a/runtime/vm/compiler/backend/flow_graph.cc b/runtime/vm/compiler/backend/flow_graph.cc
index fd20143..95691ce 100644
--- a/runtime/vm/compiler/backend/flow_graph.cc
+++ b/runtime/vm/compiler/backend/flow_graph.cc
@@ -67,7 +67,7 @@
 
 void FlowGraph::EnsureSSATempIndex(Definition* defn, Definition* replacement) {
   if ((replacement->ssa_temp_index() == -1) && (defn->ssa_temp_index() != -1)) {
-    AllocateSSAIndexes(replacement);
+    AllocateSSAIndex(replacement);
   }
 }
 
@@ -191,10 +191,7 @@
     } else {
       constant = new (zone()) UnboxedConstantInstr(zone_object, representation);
     }
-    constant->set_ssa_temp_index(alloc_ssa_temp_index());
-    if (NeedsPairLocation(constant->representation())) {
-      alloc_ssa_temp_index();
-    }
+    AllocateSSAIndex(constant);
     AddToGraphInitialDefinitions(constant);
     constant_instr_pool_.Insert(constant);
   }
@@ -271,7 +268,7 @@
                             UseKind use_kind) {
   if (use_kind == kValue) {
     ASSERT(instr->IsDefinition());
-    AllocateSSAIndexes(instr->AsDefinition());
+    AllocateSSAIndex(instr->AsDefinition());
   }
   instr->InsertAfter(prev);
   ASSERT(instr->env() == NULL);
@@ -296,7 +293,7 @@
                                  UseKind use_kind) {
   if (use_kind == kValue) {
     ASSERT(instr->IsDefinition());
-    AllocateSSAIndexes(instr->AsDefinition());
+    AllocateSSAIndex(instr->AsDefinition());
   }
   ASSERT(instr->env() == NULL);
   if (env != NULL) {
@@ -1215,8 +1212,7 @@
           new (zone()) ParameterInstr(i, param_offset, function_entry, kTagged);
       param_offset++;
     }
-    param->set_ssa_temp_index(alloc_ssa_temp_index());
-    if (NeedsPairLocation(param->representation())) alloc_ssa_temp_index();
+    AllocateSSAIndex(param);
     AddToInitialDefinitions(function_entry, param);
     (*env)[i] = param;
   }
@@ -1228,7 +1224,7 @@
     if (inlining_parameters != NULL) {
       for (intptr_t i = 0; i < function().NumParameters(); ++i) {
         Definition* defn = (*inlining_parameters)[inlined_type_args_param + i];
-        AllocateSSAIndexes(defn);
+        AllocateSSAIndex(defn);
         AddToInitialDefinitions(function_entry, defn);
 
         intptr_t index = EnvIndex(parsed_function_.RawParameterVariable(i));
@@ -1250,7 +1246,7 @@
       } else {
         defn = (*inlining_parameters)[0];
       }
-      AllocateSSAIndexes(defn);
+      AllocateSSAIndex(defn);
       AddToInitialDefinitions(function_entry, defn);
       (*env)[RawTypeArgumentEnvIndex()] = defn;
     }
@@ -1260,7 +1256,7 @@
       Definition* defn =
           new (Z) SpecialParameterInstr(SpecialParameterInstr::kArgDescriptor,
                                         DeoptId::kNone, function_entry);
-      AllocateSSAIndexes(defn);
+      AllocateSSAIndex(defn);
       AddToInitialDefinitions(function_entry, defn);
       (*env)[ArgumentDescriptorEnvIndex()] = defn;
     }
@@ -1279,7 +1275,7 @@
   for (intptr_t i = 0; i < parameter_count; i++) {
     ParameterInstr* param =
         new (zone()) ParameterInstr(i, i, osr_entry, kTagged);
-    param->set_ssa_temp_index(alloc_ssa_temp_index());
+    AllocateSSAIndex(param);
     AddToInitialDefinitions(osr_entry, param);
     (*env)[i] = param;
   }
@@ -1313,7 +1309,7 @@
       param = new (Z) ParameterInstr(i, i, catch_entry, kTagged);
     }
 
-    param->set_ssa_temp_index(alloc_ssa_temp_index());  // New SSA temp.
+    AllocateSSAIndex(param);  // New SSA temp.
     (*env)[i] = param;
     AddToInitialDefinitions(catch_entry, param);
   }
@@ -1346,7 +1342,7 @@
         PhiInstr* phi = (*join->phis())[i];
         if (phi != nullptr) {
           (*env)[i] = phi;
-          AllocateSSAIndexes(phi);  // New SSA temp.
+          AllocateSSAIndex(phi);  // New SSA temp.
           if (block_entry->InsideTryBlock() && !phi->is_alive()) {
             // This is a safe approximation.  Inside try{} all locals are
             // used at every call implicitly, so we mark all phis as live
@@ -1549,7 +1545,7 @@
         if (Definition* definition = current->AsDefinition()) {
           if (definition->HasTemp()) {
             // Assign fresh SSA temporary and update expression stack.
-            AllocateSSAIndexes(definition);
+            AllocateSSAIndex(definition);
             env->Add(definition);
           }
         }
@@ -2573,7 +2569,7 @@
         Value* redefined = definition->RedefinedValue();
         if (redefined != nullptr) {
           if (!definition->HasSSATemp()) {
-            AllocateSSAIndexes(definition);
+            AllocateSSAIndex(definition);
           }
           Definition* original = redefined->definition();
           RenameDominatedUses(original, definition, definition);
@@ -2821,7 +2817,7 @@
 
   // Short-circuit second comparison and connect through phi.
   condition.oper2->InsertAfter(bt);
-  AllocateSSAIndexes(condition.oper2);
+  AllocateSSAIndex(condition.oper2);
   condition.oper2->InheritDeoptTarget(zone(), inherit);  // must inherit
   PhiInstr* phi =
       AddPhi(mid_point, condition.oper2, GetConstant(Bool::False()));
@@ -2841,7 +2837,7 @@
   Value* v1 = new (zone()) Value(d1);
   Value* v2 = new (zone()) Value(d2);
 
-  AllocateSSAIndexes(phi);
+  AllocateSSAIndex(phi);
 
   phi->mark_alive();
   phi->SetInputAt(0, v1);
diff --git a/runtime/vm/compiler/backend/flow_graph.h b/runtime/vm/compiler/backend/flow_graph.h
index 98341177..3782e75 100644
--- a/runtime/vm/compiler/backend/flow_graph.h
+++ b/runtime/vm/compiler/backend/flow_graph.h
@@ -200,11 +200,6 @@
             env_index == SuspendStateEnvIndex());
   }
 
-  static bool NeedsPairLocation(Representation representation) {
-    return representation == kUnboxedInt64 &&
-           compiler::target::kIntSpillFactor == 2;
-  }
-
   // Flow graph orders.
   const GrowableArray<BlockEntryInstr*>& preorder() const { return preorder_; }
   const GrowableArray<BlockEntryInstr*>& postorder() const {
@@ -246,8 +241,8 @@
     current_ssa_temp_index_ = index;
   }
 
-  intptr_t max_virtual_register_number() const {
-    return current_ssa_temp_index();
+  intptr_t max_vreg() const {
+    return current_ssa_temp_index() * kMaxLocationCount;
   }
 
   enum class ToCheck { kNoCheck, kCheckNull, kCheckCid };
@@ -272,14 +267,9 @@
 
   ConstantInstr* constant_dead() const { return constant_dead_; }
 
-  intptr_t alloc_ssa_temp_index() { return current_ssa_temp_index_++; }
-
-  void AllocateSSAIndexes(Definition* def) {
-    ASSERT(def);
-    def->set_ssa_temp_index(alloc_ssa_temp_index());
-    // Always allocate a second index. This index is unused except
-    // for Definitions with register pair outputs.
-    alloc_ssa_temp_index();
+  void AllocateSSAIndex(Definition* def) {
+    def->set_ssa_temp_index(current_ssa_temp_index_);
+    current_ssa_temp_index_++;
   }
 
   intptr_t InstructionCount() const;
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index 5506aec..bee10a9 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -2321,14 +2321,14 @@
   }
   bool HasSSATemp() const { return ssa_temp_index_ >= 0; }
   void ClearSSATempIndex() { ssa_temp_index_ = -1; }
-  bool HasPairRepresentation() const {
-    if (compiler::target::kWordSize == 8) {
-      return representation() == kPairOfTagged;
-    } else {
-      return (representation() == kPairOfTagged) ||
-             (representation() == kUnboxedInt64);
-    }
+
+  intptr_t vreg(intptr_t index) const {
+    ASSERT((index >= 0) && (index < location_count()));
+    if (ssa_temp_index_ == -1) return -1;
+    return ssa_temp_index_ * kMaxLocationCount + index;
   }
+  intptr_t location_count() const { return LocationCount(representation()); }
+  bool HasPairRepresentation() const { return location_count() == 2; }
 
   // Compile time type of the definition, which may be requested before type
   // propagation during graph building.
diff --git a/runtime/vm/compiler/backend/il_printer.cc b/runtime/vm/compiler/backend/il_printer.cc
index 10f9fa5..076755b 100644
--- a/runtime/vm/compiler/backend/il_printer.cc
+++ b/runtime/vm/compiler/backend/il_printer.cc
@@ -439,12 +439,7 @@
 
 static void PrintUse(BaseTextBuffer* f, const Definition& definition) {
   if (definition.HasSSATemp()) {
-    if (definition.HasPairRepresentation()) {
-      f->Printf("(v%" Pd ", v%" Pd ")", definition.ssa_temp_index(),
-                definition.ssa_temp_index() + 1);
-    } else {
-      f->Printf("v%" Pd "", definition.ssa_temp_index());
-    }
+    f->Printf("v%" Pd "", definition.ssa_temp_index());
   } else if (definition.HasTemp()) {
     f->Printf("t%" Pd "", definition.temp_index());
   }
@@ -1142,12 +1137,7 @@
 }
 
 void PhiInstr::PrintTo(BaseTextBuffer* f) const {
-  if (HasPairRepresentation()) {
-    f->Printf("(v%" Pd ", v%" Pd ") <- phi(", ssa_temp_index(),
-              ssa_temp_index() + 1);
-  } else {
-    f->Printf("v%" Pd " <- phi(", ssa_temp_index());
-  }
+  f->Printf("v%" Pd " <- phi(", ssa_temp_index());
   for (intptr_t i = 0; i < inputs_.length(); ++i) {
     if (inputs_[i] != NULL) inputs_[i]->PrintTo(f);
     if (i < inputs_.length() - 1) f->AddString(", ");
diff --git a/runtime/vm/compiler/backend/inliner.cc b/runtime/vm/compiler/backend/inliner.cc
index 4c8e06f..4de28c1 100644
--- a/runtime/vm/compiler/backend/inliner.cc
+++ b/runtime/vm/compiler/backend/inliner.cc
@@ -782,10 +782,7 @@
             callee_signature, first_arg_index, i)) {
       RedefinitionInstr* redefinition =
           new (zone) RedefinitionInstr(actual->Copy(zone));
-      redefinition->set_ssa_temp_index(caller_graph->alloc_ssa_temp_index());
-      if (FlowGraph::NeedsPairLocation(redefinition->representation())) {
-        caller_graph->alloc_ssa_temp_index();
-      }
+      caller_graph->AllocateSSAIndex(redefinition);
       if (is_polymorphic_receiver && target_info->IsSingleCid()) {
         redefinition->UpdateType(CompileType::FromCid(target_info->cid_start));
       }
@@ -831,11 +828,7 @@
           LoadFieldInstr* context_load = new (zone) LoadFieldInstr(
               new Value((*arguments)[first_arg_index]->definition()),
               Slot::Closure_context(), call_data->call->source());
-          context_load->set_ssa_temp_index(
-              caller_graph->alloc_ssa_temp_index());
-          if (FlowGraph::NeedsPairLocation(context_load->representation())) {
-            caller_graph->alloc_ssa_temp_index();
-          }
+          caller_graph->AllocateSSAIndex(context_load);
           context_load->InsertBefore(callee_entry->next());
           param->ReplaceUsesWith(context_load);
           break;
@@ -1290,7 +1283,7 @@
         {
           // Compute SSA on the callee graph, catching bailouts.
           COMPILER_TIMINGS_TIMER_SCOPE(thread(), ComputeSSA);
-          callee_graph->ComputeSSA(caller_graph_->max_virtual_register_number(),
+          callee_graph->ComputeSSA(caller_graph_->current_ssa_temp_index(),
                                    param_stubs);
 #if defined(DEBUG)
           // The inlining IDs of instructions in the callee graph are unset
@@ -1977,11 +1970,7 @@
   Definition* receiver = call_->Receiver()->definition();
   RedefinitionInstr* redefinition =
       new (Z) RedefinitionInstr(new (Z) Value(receiver));
-  redefinition->set_ssa_temp_index(
-      owner_->caller_graph()->alloc_ssa_temp_index());
-  if (FlowGraph::NeedsPairLocation(redefinition->representation())) {
-    owner_->caller_graph()->alloc_ssa_temp_index();
-  }
+  owner_->caller_graph()->AllocateSSAIndex(redefinition);
   if (FlowGraphInliner::TryInlineRecognizedMethod(
           owner_->caller_graph(), receiver_cid, target, call_, redefinition,
           call_->source(), call_->ic_data(), graph_entry, &entry, &last,
@@ -2038,7 +2027,7 @@
   // at least one branch on the class id.
   LoadClassIdInstr* load_cid =
       new (Z) LoadClassIdInstr(new (Z) Value(receiver));
-  load_cid->set_ssa_temp_index(owner_->caller_graph()->alloc_ssa_temp_index());
+  owner_->caller_graph()->AllocateSSAIndex(load_cid);
   cursor = AppendInstruction(cursor, load_cid);
   for (intptr_t i = 0; i < inlined_variants_.length(); ++i) {
     const CidRange& variant = inlined_variants_[i];
@@ -2054,8 +2043,7 @@
       if (!call_->complete()) {
         RedefinitionInstr* cid_redefinition =
             new RedefinitionInstr(new (Z) Value(load_cid));
-        cid_redefinition->set_ssa_temp_index(
-            owner_->caller_graph()->alloc_ssa_temp_index());
+        owner_->caller_graph()->AllocateSSAIndex(cid_redefinition);
         cursor = AppendInstruction(cursor, cid_redefinition);
         CheckClassIdInstr* check_class_id = new (Z) CheckClassIdInstr(
             new (Z) Value(cid_redefinition), variant, call_->deopt_id());
@@ -2242,11 +2230,7 @@
     PolymorphicInstanceCallInstr* fallback_call =
         PolymorphicInstanceCallInstr::FromCall(Z, call_, *non_inlined_variants_,
                                                call_->complete());
-    fallback_call->set_ssa_temp_index(
-        owner_->caller_graph()->alloc_ssa_temp_index());
-    if (FlowGraph::NeedsPairLocation(fallback_call->representation())) {
-      owner_->caller_graph()->alloc_ssa_temp_index();
-    }
+    owner_->caller_graph()->AllocateSSAIndex(fallback_call);
     fallback_call->InheritDeoptTarget(zone(), call_);
     fallback_call->set_total_call_count(call_->CallCount());
     ReturnInstr* fallback_return = new ReturnInstr(
diff --git a/runtime/vm/compiler/backend/linearscan.cc b/runtime/vm/compiler/backend/linearscan.cc
index 68e5b3e..3597362 100644
--- a/runtime/vm/compiler/backend/linearscan.cc
+++ b/runtime/vm/compiler/backend/linearscan.cc
@@ -33,19 +33,6 @@
 static const intptr_t kTempVirtualRegister = -2;
 static const intptr_t kIllegalPosition = -1;
 static const intptr_t kMaxPosition = 0x7FFFFFFF;
-static const intptr_t kPairVirtualRegisterOffset = 1;
-
-// Definitions which have pair representations
-// (kPairOfTagged) use two virtual register names.
-// At SSA index allocation time each definition reserves two SSA indexes,
-// the second index is only used for pairs. This function maps from the first
-// SSA index to the second.
-static intptr_t ToSecondPairVreg(intptr_t vreg) {
-  // Map vreg to its pair vreg.
-  ASSERT((vreg == kNoVirtualRegister) || vreg >= 0);
-  return (vreg == kNoVirtualRegister) ? kNoVirtualRegister
-                                      : (vreg + kPairVirtualRegisterOffset);
-}
 
 static intptr_t MinPosition(intptr_t a, intptr_t b) {
   return (a < b) ? a : b;
@@ -93,15 +80,15 @@
                                        bool intrinsic_mode)
     : flow_graph_(flow_graph),
       reaching_defs_(flow_graph),
-      value_representations_(flow_graph.max_virtual_register_number()),
+      value_representations_(flow_graph.max_vreg()),
       block_order_(flow_graph.reverse_postorder()),
       postorder_(flow_graph.postorder()),
       instructions_(),
       block_entries_(),
       extra_loop_info_(),
       liveness_(flow_graph),
-      vreg_count_(flow_graph.max_virtual_register_number()),
-      live_ranges_(flow_graph.max_virtual_register_number()),
+      vreg_count_(flow_graph.max_vreg()),
+      live_ranges_(flow_graph.max_vreg()),
       unallocated_cpu_(),
       unallocated_fpu_(),
       cpu_regs_(),
@@ -165,7 +152,7 @@
       if (inner_mat != NULL) {
         DeepLiveness(inner_mat, live_in);
       } else {
-        intptr_t idx = defn->ssa_temp_index();
+        intptr_t idx = defn->vreg(0);
         live_in->Add(idx);
       }
     }
@@ -195,11 +182,11 @@
       // Handle definitions.
       Definition* current_def = current->AsDefinition();
       if ((current_def != NULL) && current_def->HasSSATemp()) {
-        kill->Add(current_def->ssa_temp_index());
-        live_in->Remove(current_def->ssa_temp_index());
+        kill->Add(current_def->vreg(0));
+        live_in->Remove(current_def->vreg(0));
         if (current_def->HasPairRepresentation()) {
-          kill->Add(ToSecondPairVreg(current_def->ssa_temp_index()));
-          live_in->Remove(ToSecondPairVreg(current_def->ssa_temp_index()));
+          kill->Add(current_def->vreg(1));
+          live_in->Remove(current_def->vreg(1));
         }
       }
 
@@ -211,9 +198,9 @@
         ASSERT(!locs->in(j).IsConstant() || input->BindsToConstant());
         if (locs->in(j).IsConstant()) continue;
 
-        live_in->Add(input->definition()->ssa_temp_index());
+        live_in->Add(input->definition()->vreg(0));
         if (input->definition()->HasPairRepresentation()) {
-          live_in->Add(ToSecondPairVreg(input->definition()->ssa_temp_index()));
+          live_in->Add(input->definition()->vreg(1));
         }
       }
 
@@ -228,9 +215,9 @@
             // Treat its inputs as part of the environment.
             DeepLiveness(defn->AsMaterializeObject(), live_in);
           } else if (!defn->IsPushArgument() && !defn->IsConstant()) {
-            live_in->Add(defn->ssa_temp_index());
+            live_in->Add(defn->vreg(0));
             if (defn->HasPairRepresentation()) {
-              live_in->Add(ToSecondPairVreg(defn->ssa_temp_index()));
+              live_in->Add(defn->vreg(1));
             }
           }
         }
@@ -243,11 +230,11 @@
       for (PhiIterator it(join); !it.Done(); it.Advance()) {
         PhiInstr* phi = it.Current();
         ASSERT(phi != NULL);
-        kill->Add(phi->ssa_temp_index());
-        live_in->Remove(phi->ssa_temp_index());
+        kill->Add(phi->vreg(0));
+        live_in->Remove(phi->vreg(0));
         if (phi->HasPairRepresentation()) {
-          kill->Add(ToSecondPairVreg(phi->ssa_temp_index()));
-          live_in->Remove(ToSecondPairVreg(phi->ssa_temp_index()));
+          kill->Add(phi->vreg(1));
+          live_in->Remove(phi->vreg(1));
         }
 
         // If a phi input is not defined by the corresponding predecessor it
@@ -257,12 +244,12 @@
           if (val->BindsToConstant()) continue;
 
           BlockEntryInstr* pred = block->PredecessorAt(k);
-          const intptr_t use = val->definition()->ssa_temp_index();
+          const intptr_t use = val->definition()->vreg(0);
           if (!kill_[pred->postorder_number()]->Contains(use)) {
             live_in_[pred->postorder_number()]->Add(use);
           }
           if (phi->HasPairRepresentation()) {
-            const intptr_t second_use = ToSecondPairVreg(use);
+            const intptr_t second_use = val->definition()->vreg(1);
             if (!kill_[pred->postorder_number()]->Contains(second_use)) {
               live_in_[pred->postorder_number()]->Add(second_use);
             }
@@ -273,12 +260,12 @@
       // Process initial definitions, i.e. parameters and special parameters.
       for (intptr_t i = 0; i < entry->initial_definitions()->length(); i++) {
         Definition* def = (*entry->initial_definitions())[i];
-        const intptr_t vreg = def->ssa_temp_index();
+        const intptr_t vreg = def->vreg(0);
         kill_[entry->postorder_number()]->Add(vreg);
         live_in_[entry->postorder_number()]->Remove(vreg);
         if (def->HasPairRepresentation()) {
-          kill_[entry->postorder_number()]->Add(ToSecondPairVreg((vreg)));
-          live_in_[entry->postorder_number()]->Remove(ToSecondPairVreg(vreg));
+          kill_[entry->postorder_number()]->Add(def->vreg(1));
+          live_in_[entry->postorder_number()]->Remove(def->vreg(1));
         }
       }
     }
@@ -598,8 +585,8 @@
       } else {
         // All values flowing into the loop header are live at the
         // back edge and can interfere with phi moves.
-        current_interference_set = new (zone)
-            BitVector(zone, flow_graph_.max_virtual_register_number());
+        current_interference_set =
+            new (zone) BitVector(zone, flow_graph_.max_vreg());
         current_interference_set->AddAll(
             liveness_.GetLiveInSet(loop_info->header()));
         extra_loop_info_[loop_info->id()]->backedge_interference =
@@ -643,7 +630,7 @@
       for (intptr_t i = 0; i < catch_entry->initial_definitions()->length();
            i++) {
         Definition* defn = (*catch_entry->initial_definitions())[i];
-        LiveRange* range = GetLiveRange(defn->ssa_temp_index());
+        LiveRange* range = GetLiveRange(defn->vreg(0));
         range->DefineAt(catch_entry->start_pos());  // Defined at block entry.
         ProcessInitialDefinition(defn, range, catch_entry, i);
       }
@@ -654,14 +641,13 @@
         Definition* defn = initial_definitions[i];
         if (defn->HasPairRepresentation()) {
           // The lower bits are pushed after the higher bits
-          LiveRange* range =
-              GetLiveRange(ToSecondPairVreg(defn->ssa_temp_index()));
+          LiveRange* range = GetLiveRange(defn->vreg(1));
           range->AddUseInterval(entry->start_pos(), entry->start_pos() + 2);
           range->DefineAt(entry->start_pos());
           ProcessInitialDefinition(defn, range, entry, i,
                                    /*second_location_for_definition=*/true);
         }
-        LiveRange* range = GetLiveRange(defn->ssa_temp_index());
+        LiveRange* range = GetLiveRange(defn->vreg(0));
         range->AddUseInterval(entry->start_pos(), entry->start_pos() + 2);
         range->DefineAt(entry->start_pos());
         ProcessInitialDefinition(defn, range, entry, i);
@@ -676,13 +662,13 @@
     Definition* defn = (*graph_entry->initial_definitions())[i];
     if (defn->HasPairRepresentation()) {
       // The lower bits are pushed after the higher bits
-      LiveRange* range = GetLiveRange(ToSecondPairVreg(defn->ssa_temp_index()));
+      LiveRange* range = GetLiveRange(defn->vreg(1));
       range->AddUseInterval(graph_entry->start_pos(), graph_entry->end_pos());
       range->DefineAt(graph_entry->start_pos());
       ProcessInitialDefinition(defn, range, graph_entry, i,
                                /*second_location_for_definition=*/true);
     }
-    LiveRange* range = GetLiveRange(defn->ssa_temp_index());
+    LiveRange* range = GetLiveRange(defn->vreg(0));
     range->AddUseInterval(graph_entry->start_pos(), graph_entry->end_pos());
     range->DefineAt(graph_entry->start_pos());
     ProcessInitialDefinition(defn, range, graph_entry, i);
@@ -920,27 +906,25 @@
     //                 g  g'
     //      value    --*
     //
-    intptr_t vreg = val->definition()->ssa_temp_index();
+    intptr_t vreg = val->definition()->vreg(0);
     LiveRange* range = GetLiveRange(vreg);
     if (interfere_at_backedge != NULL) interfere_at_backedge->Add(vreg);
 
     range->AddUseInterval(block->start_pos(), pos);
-    range->AddHintedUse(
-        pos, move->src_slot(),
-        GetLiveRange(phi->ssa_temp_index())->assigned_location_slot());
+    range->AddHintedUse(pos, move->src_slot(),
+                        GetLiveRange(phi->vreg(0))->assigned_location_slot());
     move->set_src(Location::PrefersRegister());
 
     if (val->definition()->HasPairRepresentation()) {
       move = parallel_move->MoveOperandsAt(move_index++);
-      vreg = ToSecondPairVreg(vreg);
+      vreg = val->definition()->vreg(1);
       range = GetLiveRange(vreg);
       if (interfere_at_backedge != NULL) {
         interfere_at_backedge->Add(vreg);
       }
       range->AddUseInterval(block->start_pos(), pos);
       range->AddHintedUse(pos, move->src_slot(),
-                          GetLiveRange(ToSecondPairVreg(phi->ssa_temp_index()))
-                              ->assigned_location_slot());
+                          GetLiveRange(phi->vreg(1))->assigned_location_slot());
       move->set_src(Location::PrefersRegister());
     }
   }
@@ -962,7 +946,7 @@
   for (PhiIterator it(join); !it.Done(); it.Advance()) {
     PhiInstr* phi = it.Current();
     ASSERT(phi != NULL);
-    const intptr_t vreg = phi->ssa_temp_index();
+    const intptr_t vreg = phi->vreg(0);
     ASSERT(vreg >= 0);
     const bool is_pair_phi = phi->HasPairRepresentation();
 
@@ -976,7 +960,7 @@
     if (is_loop_header) range->mark_loop_phi();
 
     if (is_pair_phi) {
-      LiveRange* second_range = GetLiveRange(ToSecondPairVreg(vreg));
+      LiveRange* second_range = GetLiveRange(phi->vreg(1));
       second_range->DefineAt(pos);  // Shorten live range.
       if (is_loop_header) second_range->mark_loop_phi();
     }
@@ -990,7 +974,7 @@
       move->set_dest(Location::PrefersRegister());
       range->AddUse(pos, move->dest_slot());
       if (is_pair_phi) {
-        LiveRange* second_range = GetLiveRange(ToSecondPairVreg(vreg));
+        LiveRange* second_range = GetLiveRange(phi->vreg(1));
         MoveOperands* second_move =
             goto_instr->parallel_move()->MoveOperandsAt(move_idx + 1);
         second_move->set_dest(Location::PrefersRegister());
@@ -1003,7 +987,7 @@
     AssignSafepoints(phi, range);
     CompleteRange(range, phi->RegisterKindForResult());
     if (is_pair_phi) {
-      LiveRange* second_range = GetLiveRange(ToSecondPairVreg(vreg));
+      LiveRange* second_range = GetLiveRange(phi->vreg(1));
       AssignSafepoints(phi, second_range);
       CompleteRange(second_range, phi->RegisterKindForResult());
     }
@@ -1059,7 +1043,7 @@
           // they are still used when resolving control flow.
           ASSERT(def->IsParameter() || def->IsPhi());
           ASSERT(!def->HasPairRepresentation());
-          LiveRange* range = GetLiveRange(def->ssa_temp_index());
+          LiveRange* range = GetLiveRange(def->vreg(0));
           range->AddUseInterval(block_start_pos, use_pos);
         }
         continue;
@@ -1089,19 +1073,18 @@
         PairLocation* location_pair = locations[i].AsPairLocation();
         {
           // First live range.
-          LiveRange* range = GetLiveRange(def->ssa_temp_index());
+          LiveRange* range = GetLiveRange(def->vreg(0));
           range->AddUseInterval(block_start_pos, use_pos);
           range->AddUse(use_pos, location_pair->SlotAt(0));
         }
         {
           // Second live range.
-          LiveRange* range =
-              GetLiveRange(ToSecondPairVreg(def->ssa_temp_index()));
+          LiveRange* range = GetLiveRange(def->vreg(1));
           range->AddUseInterval(block_start_pos, use_pos);
           range->AddUse(use_pos, location_pair->SlotAt(1));
         }
       } else {
-        LiveRange* range = GetLiveRange(def->ssa_temp_index());
+        LiveRange* range = GetLiveRange(def->vreg(0));
         range->AddUseInterval(block_start_pos, use_pos);
         range->AddUse(use_pos, &locations[i]);
       }
@@ -1141,14 +1124,13 @@
       PairLocation* location_pair = locations[i].AsPairLocation();
       {
         // First live range.
-        LiveRange* range = GetLiveRange(def->ssa_temp_index());
+        LiveRange* range = GetLiveRange(def->vreg(0));
         range->AddUseInterval(block_start_pos, use_pos);
         range->AddUse(use_pos, location_pair->SlotAt(0));
       }
       {
         // Second live range.
-        LiveRange* range =
-            GetLiveRange(ToSecondPairVreg(def->ssa_temp_index()));
+        LiveRange* range = GetLiveRange(def->vreg(1));
         range->AddUseInterval(block_start_pos, use_pos);
         range->AddUse(use_pos, location_pair->SlotAt(1));
       }
@@ -1158,7 +1140,7 @@
                                  def->AsMaterializeObject());
     } else {
       locations[i] = Location::Any();
-      LiveRange* range = GetLiveRange(def->ssa_temp_index());
+      LiveRange* range = GetLiveRange(def->vreg(0));
       range->AddUseInterval(block_start_pos, use_pos);
       range->AddUse(use_pos, &locations[i]);
     }
@@ -1323,7 +1305,7 @@
 
     if ((interference_set != NULL) && (range->vreg() >= 0) &&
         interference_set->Contains(range->vreg())) {
-      interference_set->Add(input->ssa_temp_index());
+      interference_set->Add(input->vreg(0));
     }
   } else {
     // Normal unallocated location that requires a register. Expected shape of
@@ -1355,9 +1337,7 @@
   Definition* def = current->AsDefinition();
   if ((def != NULL) && (def->AsConstant() != NULL)) {
     ASSERT(!def->HasPairRepresentation());
-    LiveRange* range = (def->ssa_temp_index() != -1)
-                           ? GetLiveRange(def->ssa_temp_index())
-                           : NULL;
+    LiveRange* range = (def->vreg(0) != -1) ? GetLiveRange(def->vreg(0)) : NULL;
 
     // Drop definitions of constants that have no uses.
     if ((range == NULL) || (range->first_use() == NULL)) {
@@ -1435,16 +1415,15 @@
       if (in_ref->IsPairLocation()) {
         ASSERT(input->definition()->HasPairRepresentation());
         PairLocation* pair = in_ref->AsPairLocation();
-        const intptr_t vreg = input->definition()->ssa_temp_index();
         // Each element of the pair is assigned it's own virtual register number
         // and is allocated its own LiveRange.
-        ProcessOneInput(block, pos, pair->SlotAt(0), input, vreg,
-                        live_registers);
+        ProcessOneInput(block, pos, pair->SlotAt(0), input,
+                        input->definition()->vreg(0), live_registers);
         ProcessOneInput(block, pos, pair->SlotAt(1), input,
-                        ToSecondPairVreg(vreg), live_registers);
+                        input->definition()->vreg(1), live_registers);
       } else {
-        ProcessOneInput(block, pos, in_ref, input,
-                        input->definition()->ssa_temp_index(), live_registers);
+        ProcessOneInput(block, pos, in_ref, input, input->definition()->vreg(0),
+                        live_registers);
       }
     }
   }
@@ -1543,7 +1522,7 @@
   }
 
   if (locs->out(0).IsInvalid()) {
-    ASSERT(def->ssa_temp_index() < 0);
+    ASSERT(def->vreg(0) < 0);
     return;
   }
 
@@ -1559,42 +1538,40 @@
       ASSERT(input->HasPairRepresentation());
       // Each element of the pair is assigned it's own virtual register number
       // and is allocated its own LiveRange.
-      ProcessOneOutput(block, pos,             // BlockEntry, seq.
-                       pair->SlotAt(0), def,   // (output) Location, Definition.
-                       def->ssa_temp_index(),  // (output) virtual register.
-                       true,                   // output mapped to first input.
+      ProcessOneOutput(block, pos,            // BlockEntry, seq.
+                       pair->SlotAt(0), def,  // (output) Location, Definition.
+                       def->vreg(0),          // (output) virtual register.
+                       true,                  // output mapped to first input.
                        in_pair->SlotAt(0), input,  // (input) Location, Def.
-                       input->ssa_temp_index(),    // (input) virtual register.
+                       input->vreg(0),             // (input) virtual register.
                        interference_set);
-      ProcessOneOutput(
-          block, pos, pair->SlotAt(1), def,
-          ToSecondPairVreg(def->ssa_temp_index()), true, in_pair->SlotAt(1),
-          input, ToSecondPairVreg(input->ssa_temp_index()), interference_set);
+      ProcessOneOutput(block, pos, pair->SlotAt(1), def, def->vreg(1), true,
+                       in_pair->SlotAt(1), input, input->vreg(1),
+                       interference_set);
     } else {
       // Each element of the pair is assigned it's own virtual register number
       // and is allocated its own LiveRange.
-      ProcessOneOutput(block, pos, pair->SlotAt(0), def, def->ssa_temp_index(),
+      ProcessOneOutput(block, pos, pair->SlotAt(0), def, def->vreg(0),
                        false,           // output is not mapped to first input.
                        NULL, NULL, -1,  // First input not needed.
                        interference_set);
-      ProcessOneOutput(block, pos, pair->SlotAt(1), def,
-                       ToSecondPairVreg(def->ssa_temp_index()), false, NULL,
-                       NULL, -1, interference_set);
+      ProcessOneOutput(block, pos, pair->SlotAt(1), def, def->vreg(1), false,
+                       NULL, NULL, -1, interference_set);
     }
   } else {
     if (output_same_as_first_input) {
       Location* in_ref = locs->in_slot(0);
       Definition* input = current->InputAt(0)->definition();
       ASSERT(!in_ref->IsPairLocation());
-      ProcessOneOutput(block, pos,             // BlockEntry, Instruction, seq.
-                       out, def,               // (output) Location, Definition.
-                       def->ssa_temp_index(),  // (output) virtual register.
-                       true,                   // output mapped to first input.
-                       in_ref, input,          // (input) Location, Def.
-                       input->ssa_temp_index(),  // (input) virtual register.
+      ProcessOneOutput(block, pos,      // BlockEntry, Instruction, seq.
+                       out, def,        // (output) Location, Definition.
+                       def->vreg(0),    // (output) virtual register.
+                       true,            // output mapped to first input.
+                       in_ref, input,   // (input) Location, Def.
+                       input->vreg(0),  // (input) virtual register.
                        interference_set);
     } else {
-      ProcessOneOutput(block, pos, out, def, def->ssa_temp_index(),
+      ProcessOneOutput(block, pos, out, def, def->vreg(0),
                        false,           // output is not mapped to first input.
                        NULL, NULL, -1,  // First input not needed.
                        interference_set);
@@ -2202,8 +2179,7 @@
 void ReachingDefs::AddPhi(PhiInstr* phi) {
   if (phi->reaching_defs() == NULL) {
     Zone* zone = flow_graph_.zone();
-    phi->set_reaching_defs(
-        new (zone) BitVector(zone, flow_graph_.max_virtual_register_number()));
+    phi->set_reaching_defs(new (zone) BitVector(zone, flow_graph_.max_vreg()));
 
     // Compute initial set reaching defs set.
     bool depends_on_phi = false;
@@ -2212,9 +2188,9 @@
       if (input->IsPhi()) {
         depends_on_phi = true;
       }
-      phi->reaching_defs()->Add(input->ssa_temp_index());
+      phi->reaching_defs()->Add(input->vreg(0));
       if (phi->HasPairRepresentation()) {
-        phi->reaching_defs()->Add(ToSecondPairVreg(input->ssa_temp_index()));
+        phi->reaching_defs()->Add(input->vreg(1));
       }
     }
 
@@ -2329,7 +2305,7 @@
          it.Advance()) {
       PhiInstr* phi = it.Current();
       ASSERT(phi->is_alive());
-      const intptr_t phi_vreg = phi->ssa_temp_index();
+      const intptr_t phi_vreg = phi->vreg(0);
       LiveRange* range = GetLiveRange(phi_vreg);
       if (range->assigned_location().kind() == register_kind_) {
         const intptr_t reg = range->assigned_location().register_code();
@@ -2338,7 +2314,7 @@
         }
       }
       if (phi->HasPairRepresentation()) {
-        const intptr_t second_phi_vreg = ToSecondPairVreg(phi_vreg);
+        const intptr_t second_phi_vreg = phi->vreg(1);
         LiveRange* second_range = GetLiveRange(second_phi_vreg);
         if (second_range->assigned_location().kind() == register_kind_) {
           const intptr_t reg =
@@ -3091,10 +3067,10 @@
   auto initial_definitions = graph_entry->initial_definitions();
   for (intptr_t i = 0; i < initial_definitions->length(); ++i) {
     Definition* def = (*initial_definitions)[i];
-    value_representations_[def->ssa_temp_index()] =
+    value_representations_[def->vreg(0)] =
         RepresentationForRange(def->representation());
     if (def->HasPairRepresentation()) {
-      value_representations_[ToSecondPairVreg(def->ssa_temp_index())] =
+      value_representations_[def->vreg(1)] =
           RepresentationForRange(def->representation());
     }
   }
@@ -3107,21 +3083,21 @@
       initial_definitions = entry->initial_definitions();
       for (intptr_t i = 0; i < initial_definitions->length(); ++i) {
         Definition* def = (*initial_definitions)[i];
-        value_representations_[def->ssa_temp_index()] =
+        value_representations_[def->vreg(0)] =
             RepresentationForRange(def->representation());
         if (def->HasPairRepresentation()) {
-          value_representations_[ToSecondPairVreg(def->ssa_temp_index())] =
+          value_representations_[def->vreg(1)] =
               RepresentationForRange(def->representation());
         }
       }
     } else if (auto join = block->AsJoinEntry()) {
       for (PhiIterator it(join); !it.Done(); it.Advance()) {
         PhiInstr* phi = it.Current();
-        ASSERT(phi != NULL && phi->ssa_temp_index() >= 0);
-        value_representations_[phi->ssa_temp_index()] =
+        ASSERT(phi != NULL && phi->vreg(0) >= 0);
+        value_representations_[phi->vreg(0)] =
             RepresentationForRange(phi->representation());
         if (phi->HasPairRepresentation()) {
-          value_representations_[ToSecondPairVreg(phi->ssa_temp_index())] =
+          value_representations_[phi->vreg(1)] =
               RepresentationForRange(phi->representation());
         }
       }
@@ -3131,12 +3107,12 @@
     for (ForwardInstructionIterator instr_it(block); !instr_it.Done();
          instr_it.Advance()) {
       Definition* def = instr_it.Current()->AsDefinition();
-      if ((def != NULL) && (def->ssa_temp_index() >= 0)) {
-        const intptr_t vreg = def->ssa_temp_index();
+      if ((def != NULL) && (def->vreg(0) >= 0)) {
+        const intptr_t vreg = def->vreg(0);
         value_representations_[vreg] =
             RepresentationForRange(def->representation());
         if (def->HasPairRepresentation()) {
-          value_representations_[ToSecondPairVreg(vreg)] =
+          value_representations_[def->vreg(1)] =
               RepresentationForRange(def->representation());
         }
       }
@@ -3290,10 +3266,10 @@
     if (FunctionEntryInstr* entry = block->AsFunctionEntry()) {
       for (auto defn : *entry->initial_definitions()) {
         if (auto param = defn->AsParameter()) {
-          const auto vreg = param->ssa_temp_index();
+          const auto vreg = param->vreg(0);
           fix_location_for(block, param, vreg, 0);
           if (param->HasPairRepresentation()) {
-            fix_location_for(block, param, ToSecondPairVreg(vreg),
+            fix_location_for(block, param, param->vreg(1),
                              /*pair_index=*/1);
           }
         }
diff --git a/runtime/vm/compiler/backend/linearscan.h b/runtime/vm/compiler/backend/linearscan.h
index ea3fb9c..b165d32 100644
--- a/runtime/vm/compiler/backend/linearscan.h
+++ b/runtime/vm/compiler/backend/linearscan.h
@@ -39,8 +39,7 @@
 class SSALivenessAnalysis : public LivenessAnalysis {
  public:
   explicit SSALivenessAnalysis(const FlowGraph& flow_graph)
-      : LivenessAnalysis(flow_graph.max_virtual_register_number(),
-                         flow_graph.postorder()),
+      : LivenessAnalysis(flow_graph.max_vreg(), flow_graph.postorder()),
         graph_entry_(flow_graph.graph_entry()) {}
 
  private:
diff --git a/runtime/vm/compiler/backend/locations.h b/runtime/vm/compiler/backend/locations.h
index 2c59183..aabd12a 100644
--- a/runtime/vm/compiler/backend/locations.h
+++ b/runtime/vm/compiler/backend/locations.h
@@ -66,6 +66,19 @@
       kNumRepresentations
 };
 
+static const intptr_t kMaxLocationCount = 2;
+
+inline intptr_t LocationCount(Representation rep) {
+  switch (rep) {
+    case kPairOfTagged:
+      return 2;
+    case kUnboxedInt64:
+      return compiler::target::kWordSize == 8 ? 1 : 2;
+    default:
+      return 1;
+  }
+}
+
 struct RepresentationUtils : AllStatic {
   // Whether the representation is for a type of unboxed integer.
   static bool IsUnboxedInteger(Representation rep);
diff --git a/runtime/vm/compiler/backend/redundancy_elimination.cc b/runtime/vm/compiler/backend/redundancy_elimination.cc
index 5edf25f..eb1b922 100644
--- a/runtime/vm/compiler/backend/redundancy_elimination.cc
+++ b/runtime/vm/compiler/backend/redundancy_elimination.cc
@@ -2611,7 +2611,7 @@
       replacement->AddInputUse(input);
     }
 
-    graph_->AllocateSSAIndexes(phi);
+    graph_->AllocateSSAIndex(phi);
     phis_.Add(phi);  // Postpone phi insertion until after load forwarding.
 
     if (FLAG_support_il_printer && FLAG_trace_load_optimization) {
@@ -4259,10 +4259,7 @@
         ConstantInstr* orig = cdefs[j]->AsConstant();
         ConstantInstr* copy =
             new (flow_graph_->zone()) ConstantInstr(orig->value());
-        copy->set_ssa_temp_index(flow_graph_->alloc_ssa_temp_index());
-        if (FlowGraph::NeedsPairLocation(copy->representation())) {
-          flow_graph_->alloc_ssa_temp_index();
-        }
+        flow_graph_->AllocateSSAIndex(copy);
         old->ReplaceUsesWith(copy);
         copy->set_previous(old->previous());  // partial link
         (*idefs)[j] = copy;
diff --git a/runtime/vm/compiler/backend/type_propagator.cc b/runtime/vm/compiler/backend/type_propagator.cc
index 02ef88e..30e332c 100644
--- a/runtime/vm/compiler/backend/type_propagator.cc
+++ b/runtime/vm/compiler/backend/type_propagator.cc
@@ -286,7 +286,7 @@
     // motion of the check may still enable valid code motion
     // of the checked code.
     if (check->ssa_temp_index() == -1) {
-      flow_graph_->AllocateSSAIndexes(check);
+      flow_graph_->AllocateSSAIndex(check);
       GrowTypes(check->ssa_temp_index() + 1);
     }
     FlowGraph::RenameDominatedUses(receiver, check, check);
@@ -370,7 +370,7 @@
   auto defn = check->value()->definition();
   SetTypeOf(defn, new (zone()) CompileType(check->ComputeType()));
   if (check->ssa_temp_index() == -1) {
-    flow_graph_->AllocateSSAIndexes(check);
+    flow_graph_->AllocateSSAIndex(check);
     GrowTypes(check->ssa_temp_index() + 1);
   }
   FlowGraph::RenameDominatedUses(defn, check, check);
diff --git a/runtime/vm/compiler/frontend/flow_graph_builder.cc b/runtime/vm/compiler/frontend/flow_graph_builder.cc
index 8b7a394..110dbc0 100644
--- a/runtime/vm/compiler/frontend/flow_graph_builder.cc
+++ b/runtime/vm/compiler/frontend/flow_graph_builder.cc
@@ -41,13 +41,13 @@
   COMPILER_TIMINGS_TIMER_SCOPE(callee_graph->thread(), PrepareGraphs);
   ASSERT(callee_graph->graph_entry()->SuccessorCount() == 1);
   ASSERT(callee_graph->max_block_id() > caller_graph_->max_block_id());
-  ASSERT(callee_graph->max_virtual_register_number() >
-         caller_graph_->max_virtual_register_number());
+  ASSERT(callee_graph->current_ssa_temp_index() >
+         caller_graph_->current_ssa_temp_index());
 
   // Adjust the caller's maximum block id and current SSA temp index.
   caller_graph_->set_max_block_id(callee_graph->max_block_id());
   caller_graph_->set_current_ssa_temp_index(
-      callee_graph->max_virtual_register_number());
+      callee_graph->current_ssa_temp_index());
 
   // Attach the outer environment on each instruction in the callee graph.
   ASSERT(call_->env() != NULL);
@@ -218,7 +218,7 @@
     if (call_->HasUses()) {
       // Add a phi of the return values.
       PhiInstr* phi = new (Z) PhiInstr(join, num_exits);
-      caller_graph_->AllocateSSAIndexes(phi);
+      caller_graph_->AllocateSSAIndex(phi);
       phi->mark_alive();
       for (intptr_t i = 0; i < num_exits; ++i) {
         ReturnAt(i)->RemoveEnvironment();
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index 9fab3a3..b5fa0e5 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -437,6 +437,7 @@
   V(::, _getDefaultTag, UserTag_defaultTag, 0x6c19c8a5)                        \
   V(::, _getCurrentTag, Profiler_getCurrentTag, 0x70ead08e)                    \
   V(::, _isDartStreamEnabled, Timeline_isDartStreamEnabled, 0xc97aafb3)        \
+  V(::, _getNextTaskId, Timeline_getNextTaskId, 0x5b2b0b0b)                    \
 
 #define INTERNAL_LIB_INTRINSIC_LIST(V)                                         \
   V(::, allocateOneByteString, AllocateOneByteString, 0x9e7745d5)              \
diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h
index 0d77869..f30f579 100644
--- a/runtime/vm/compiler/runtime_api.h
+++ b/runtime/vm/compiler/runtime_api.h
@@ -1249,6 +1249,7 @@
   THREAD_XMM_CONSTANT_LIST(DECLARE_CONSTANT_OFFSET_GETTER)
 #undef DECLARE_CONSTANT_OFFSET_GETTER
 
+  static word next_task_id_offset();
   static word random_offset();
 
   static word suspend_state_init_async_entry_point_offset();
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index fd7de86..098de96 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -320,13 +320,13 @@
     Thread_call_to_runtime_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 140;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 896;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 904;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 872;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 900;
+    Thread_service_extension_stream_offset = 908;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     336;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 248;
@@ -370,7 +370,7 @@
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     864;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 904;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 912;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -480,10 +480,11 @@
 static constexpr dart::compiler::target::word Thread_callback_code_offset = 856;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 860;
-static constexpr dart::compiler::target::word Thread_random_offset = 880;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 880;
+static constexpr dart::compiler::target::word Thread_random_offset = 888;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 348;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 888;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 896;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -982,13 +983,13 @@
     Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1776;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1784;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 1744;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1784;
+    Thread_service_extension_stream_offset = 1792;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     648;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 472;
@@ -1033,7 +1034,7 @@
     1728;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1792;
+    1800;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
@@ -1144,10 +1145,11 @@
     1712;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 1720;
-static constexpr dart::compiler::target::word Thread_random_offset = 1752;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1752;
+static constexpr dart::compiler::target::word Thread_random_offset = 1760;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 672;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1760;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1768;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -1645,13 +1647,13 @@
     Thread_call_to_runtime_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 140;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 864;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 872;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 840;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 868;
+    Thread_service_extension_stream_offset = 876;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     336;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 248;
@@ -1695,7 +1697,7 @@
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     832;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 872;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 880;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -1805,10 +1807,11 @@
 static constexpr dart::compiler::target::word Thread_callback_code_offset = 824;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 828;
-static constexpr dart::compiler::target::word Thread_random_offset = 848;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 848;
+static constexpr dart::compiler::target::word Thread_random_offset = 856;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 348;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 856;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 864;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -2304,13 +2307,13 @@
     Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1840;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1848;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 1808;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1848;
+    Thread_service_extension_stream_offset = 1856;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     648;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 472;
@@ -2355,7 +2358,7 @@
     1792;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1856;
+    1864;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
@@ -2466,10 +2469,11 @@
     1776;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 1784;
-static constexpr dart::compiler::target::word Thread_random_offset = 1816;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1816;
+static constexpr dart::compiler::target::word Thread_random_offset = 1824;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 672;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1824;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1832;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -2970,13 +2974,13 @@
     Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1776;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1784;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 1744;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1784;
+    Thread_service_extension_stream_offset = 1792;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     648;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 472;
@@ -3021,7 +3025,7 @@
     1728;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1792;
+    1800;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
@@ -3132,10 +3136,11 @@
     1712;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 1720;
-static constexpr dart::compiler::target::word Thread_random_offset = 1752;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1752;
+static constexpr dart::compiler::target::word Thread_random_offset = 1760;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 672;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1760;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1768;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -3635,13 +3640,13 @@
     Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1840;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1848;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 1808;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1848;
+    Thread_service_extension_stream_offset = 1856;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     648;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 472;
@@ -3686,7 +3691,7 @@
     1792;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1856;
+    1864;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
@@ -3797,10 +3802,11 @@
     1776;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 1784;
-static constexpr dart::compiler::target::word Thread_random_offset = 1816;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1816;
+static constexpr dart::compiler::target::word Thread_random_offset = 1824;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 672;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1824;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1832;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -4299,13 +4305,13 @@
     Thread_call_to_runtime_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 140;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 936;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 944;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 912;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 940;
+    Thread_service_extension_stream_offset = 948;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     336;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 248;
@@ -4349,7 +4355,7 @@
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     904;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 944;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 952;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -4459,10 +4465,11 @@
 static constexpr dart::compiler::target::word Thread_callback_code_offset = 896;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 900;
-static constexpr dart::compiler::target::word Thread_random_offset = 920;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 920;
+static constexpr dart::compiler::target::word Thread_random_offset = 928;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 348;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 928;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 936;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -4963,13 +4970,13 @@
     Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1832;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1840;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 1800;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1840;
+    Thread_service_extension_stream_offset = 1848;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     648;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 472;
@@ -5014,7 +5021,7 @@
     1784;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1848;
+    1856;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
@@ -5125,10 +5132,11 @@
     1768;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 1776;
-static constexpr dart::compiler::target::word Thread_random_offset = 1808;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1808;
+static constexpr dart::compiler::target::word Thread_random_offset = 1816;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 672;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1816;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1824;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -5621,13 +5629,13 @@
     Thread_call_to_runtime_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 140;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 896;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 904;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 872;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 900;
+    Thread_service_extension_stream_offset = 908;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     336;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 248;
@@ -5671,7 +5679,7 @@
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     864;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 904;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 912;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -5781,10 +5789,11 @@
 static constexpr dart::compiler::target::word Thread_callback_code_offset = 856;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 860;
-static constexpr dart::compiler::target::word Thread_random_offset = 880;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 880;
+static constexpr dart::compiler::target::word Thread_random_offset = 888;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 348;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 888;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 896;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -6275,13 +6284,13 @@
     Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1776;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1784;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 1744;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1784;
+    Thread_service_extension_stream_offset = 1792;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     648;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 472;
@@ -6326,7 +6335,7 @@
     1728;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1792;
+    1800;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
@@ -6437,10 +6446,11 @@
     1712;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 1720;
-static constexpr dart::compiler::target::word Thread_random_offset = 1752;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1752;
+static constexpr dart::compiler::target::word Thread_random_offset = 1760;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 672;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1760;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1768;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -6930,13 +6940,13 @@
     Thread_call_to_runtime_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 140;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 864;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 872;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 840;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 868;
+    Thread_service_extension_stream_offset = 876;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     336;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 248;
@@ -6980,7 +6990,7 @@
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     832;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 872;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 880;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -7090,10 +7100,11 @@
 static constexpr dart::compiler::target::word Thread_callback_code_offset = 824;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 828;
-static constexpr dart::compiler::target::word Thread_random_offset = 848;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 848;
+static constexpr dart::compiler::target::word Thread_random_offset = 856;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 348;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 856;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 864;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -7581,13 +7592,13 @@
     Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1840;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1848;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 1808;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1848;
+    Thread_service_extension_stream_offset = 1856;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     648;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 472;
@@ -7632,7 +7643,7 @@
     1792;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1856;
+    1864;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
@@ -7743,10 +7754,11 @@
     1776;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 1784;
-static constexpr dart::compiler::target::word Thread_random_offset = 1816;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1816;
+static constexpr dart::compiler::target::word Thread_random_offset = 1824;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 672;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1824;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1832;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -8239,13 +8251,13 @@
     Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1776;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1784;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 1744;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1784;
+    Thread_service_extension_stream_offset = 1792;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     648;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 472;
@@ -8290,7 +8302,7 @@
     1728;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1792;
+    1800;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
@@ -8401,10 +8413,11 @@
     1712;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 1720;
-static constexpr dart::compiler::target::word Thread_random_offset = 1752;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1752;
+static constexpr dart::compiler::target::word Thread_random_offset = 1760;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 672;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1760;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1768;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -8896,13 +8909,13 @@
     Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1840;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1848;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 1808;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1848;
+    Thread_service_extension_stream_offset = 1856;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     648;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 472;
@@ -8947,7 +8960,7 @@
     1792;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1856;
+    1864;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
@@ -9058,10 +9071,11 @@
     1776;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 1784;
-static constexpr dart::compiler::target::word Thread_random_offset = 1816;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1816;
+static constexpr dart::compiler::target::word Thread_random_offset = 1824;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 672;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1824;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1832;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -9552,13 +9566,13 @@
     Thread_call_to_runtime_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 140;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 936;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 944;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 912;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 940;
+    Thread_service_extension_stream_offset = 948;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     336;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 248;
@@ -9602,7 +9616,7 @@
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     904;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 944;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 952;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -9712,10 +9726,11 @@
 static constexpr dart::compiler::target::word Thread_callback_code_offset = 896;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 900;
-static constexpr dart::compiler::target::word Thread_random_offset = 920;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 920;
+static constexpr dart::compiler::target::word Thread_random_offset = 928;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 348;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 928;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 936;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -10208,13 +10223,13 @@
     Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1832;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1840;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 1800;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1840;
+    Thread_service_extension_stream_offset = 1848;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     648;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 472;
@@ -10259,7 +10274,7 @@
     1784;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1848;
+    1856;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
@@ -10370,10 +10385,11 @@
     1768;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 1776;
-static constexpr dart::compiler::target::word Thread_random_offset = 1808;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1808;
+static constexpr dart::compiler::target::word Thread_random_offset = 1816;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 672;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1816;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1824;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -10904,13 +10920,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 140;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    896;
+    904;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 872;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 900;
+    AOT_Thread_service_extension_stream_offset = 908;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     336;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -10956,7 +10972,7 @@
     AOT_Thread_exit_through_ffi_offset = 864;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    904;
+    912;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 64;
 static constexpr dart::compiler::target::word
@@ -11073,11 +11089,13 @@
     856;
 static constexpr dart::compiler::target::word
     AOT_Thread_callback_stack_return_offset = 860;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 880;
+static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
+    880;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 888;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 348;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    888;
+    896;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -11638,13 +11656,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1776;
+    1784;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 1744;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1784;
+    AOT_Thread_service_extension_stream_offset = 1792;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -11690,7 +11708,7 @@
     AOT_Thread_exit_through_ffi_offset = 1728;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1792;
+    1800;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
@@ -11808,11 +11826,13 @@
     1712;
 static constexpr dart::compiler::target::word
     AOT_Thread_callback_stack_return_offset = 1720;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1752;
+static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
+    1752;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1760;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1760;
+    1768;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -12378,13 +12398,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1840;
+    1848;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 1808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1848;
+    AOT_Thread_service_extension_stream_offset = 1856;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -12430,7 +12450,7 @@
     AOT_Thread_exit_through_ffi_offset = 1792;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1856;
+    1864;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
@@ -12548,11 +12568,13 @@
     1776;
 static constexpr dart::compiler::target::word
     AOT_Thread_callback_stack_return_offset = 1784;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1816;
+static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
+    1816;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1824;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1824;
+    1832;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -13115,13 +13137,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1776;
+    1784;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 1744;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1784;
+    AOT_Thread_service_extension_stream_offset = 1792;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -13167,7 +13189,7 @@
     AOT_Thread_exit_through_ffi_offset = 1728;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1792;
+    1800;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
@@ -13285,11 +13307,13 @@
     1712;
 static constexpr dart::compiler::target::word
     AOT_Thread_callback_stack_return_offset = 1720;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1752;
+static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
+    1752;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1760;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1760;
+    1768;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -13851,13 +13875,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1840;
+    1848;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 1808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1848;
+    AOT_Thread_service_extension_stream_offset = 1856;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -13903,7 +13927,7 @@
     AOT_Thread_exit_through_ffi_offset = 1792;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1856;
+    1864;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
@@ -14021,11 +14045,13 @@
     1776;
 static constexpr dart::compiler::target::word
     AOT_Thread_callback_stack_return_offset = 1784;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1816;
+static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
+    1816;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1824;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1824;
+    1832;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -14588,13 +14614,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 140;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    936;
+    944;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 912;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 940;
+    AOT_Thread_service_extension_stream_offset = 948;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     336;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -14640,7 +14666,7 @@
     AOT_Thread_exit_through_ffi_offset = 904;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    944;
+    952;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 64;
 static constexpr dart::compiler::target::word
@@ -14757,11 +14783,13 @@
     896;
 static constexpr dart::compiler::target::word
     AOT_Thread_callback_stack_return_offset = 900;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 920;
+static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
+    920;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 928;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 348;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    928;
+    936;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -15324,13 +15352,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1832;
+    1840;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 1800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1840;
+    AOT_Thread_service_extension_stream_offset = 1848;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -15376,7 +15404,7 @@
     AOT_Thread_exit_through_ffi_offset = 1784;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1848;
+    1856;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
@@ -15494,11 +15522,13 @@
     1768;
 static constexpr dart::compiler::target::word
     AOT_Thread_callback_stack_return_offset = 1776;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1808;
+static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
+    1808;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1816;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1816;
+    1824;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -16054,13 +16084,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 140;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    896;
+    904;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 872;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 900;
+    AOT_Thread_service_extension_stream_offset = 908;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     336;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -16106,7 +16136,7 @@
     AOT_Thread_exit_through_ffi_offset = 864;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    904;
+    912;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 64;
 static constexpr dart::compiler::target::word
@@ -16223,11 +16253,13 @@
     856;
 static constexpr dart::compiler::target::word
     AOT_Thread_callback_stack_return_offset = 860;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 880;
+static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
+    880;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 888;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 348;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    888;
+    896;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -16779,13 +16811,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1776;
+    1784;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 1744;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1784;
+    AOT_Thread_service_extension_stream_offset = 1792;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -16831,7 +16863,7 @@
     AOT_Thread_exit_through_ffi_offset = 1728;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1792;
+    1800;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
@@ -16949,11 +16981,13 @@
     1712;
 static constexpr dart::compiler::target::word
     AOT_Thread_callback_stack_return_offset = 1720;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1752;
+static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
+    1752;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1760;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1760;
+    1768;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -17510,13 +17544,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1840;
+    1848;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 1808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1848;
+    AOT_Thread_service_extension_stream_offset = 1856;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -17562,7 +17596,7 @@
     AOT_Thread_exit_through_ffi_offset = 1792;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1856;
+    1864;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
@@ -17680,11 +17714,13 @@
     1776;
 static constexpr dart::compiler::target::word
     AOT_Thread_callback_stack_return_offset = 1784;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1816;
+static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
+    1816;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1824;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1824;
+    1832;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -18238,13 +18274,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1776;
+    1784;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 1744;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1784;
+    AOT_Thread_service_extension_stream_offset = 1792;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -18290,7 +18326,7 @@
     AOT_Thread_exit_through_ffi_offset = 1728;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1792;
+    1800;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
@@ -18408,11 +18444,13 @@
     1712;
 static constexpr dart::compiler::target::word
     AOT_Thread_callback_stack_return_offset = 1720;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1752;
+static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
+    1752;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1760;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1760;
+    1768;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -18965,13 +19003,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1840;
+    1848;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 1808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1848;
+    AOT_Thread_service_extension_stream_offset = 1856;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -19017,7 +19055,7 @@
     AOT_Thread_exit_through_ffi_offset = 1792;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1856;
+    1864;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
@@ -19135,11 +19173,13 @@
     1776;
 static constexpr dart::compiler::target::word
     AOT_Thread_callback_stack_return_offset = 1784;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1816;
+static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
+    1816;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1824;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1824;
+    1832;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -19693,13 +19733,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 140;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    936;
+    944;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 912;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 940;
+    AOT_Thread_service_extension_stream_offset = 948;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     336;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -19745,7 +19785,7 @@
     AOT_Thread_exit_through_ffi_offset = 904;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    944;
+    952;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 64;
 static constexpr dart::compiler::target::word
@@ -19862,11 +19902,13 @@
     896;
 static constexpr dart::compiler::target::word
     AOT_Thread_callback_stack_return_offset = 900;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 920;
+static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
+    920;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 928;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 348;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    928;
+    936;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -20420,13 +20462,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1832;
+    1840;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 1800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1840;
+    AOT_Thread_service_extension_stream_offset = 1848;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -20472,7 +20514,7 @@
     AOT_Thread_exit_through_ffi_offset = 1784;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1848;
+    1856;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
@@ -20590,11 +20632,13 @@
     1768;
 static constexpr dart::compiler::target::word
     AOT_Thread_callback_stack_return_offset = 1776;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1808;
+static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
+    1808;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1816;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1816;
+    1824;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
diff --git a/runtime/vm/compiler/runtime_offsets_list.h b/runtime/vm/compiler/runtime_offsets_list.h
index e1cd318..b651415 100644
--- a/runtime/vm/compiler/runtime_offsets_list.h
+++ b/runtime/vm/compiler/runtime_offsets_list.h
@@ -318,6 +318,7 @@
   FIELD(Thread, heap_base_offset)                                              \
   FIELD(Thread, callback_code_offset)                                          \
   FIELD(Thread, callback_stack_return_offset)                                  \
+  FIELD(Thread, next_task_id_offset)                                           \
   FIELD(Thread, random_offset)                                                 \
   FIELD(Thread, jump_to_frame_entry_point_offset)                              \
   FIELD(Thread, tsan_utils_offset)                                             \
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index 9d66e4d..a12f853 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -307,6 +307,7 @@
 #endif
 
   OSThread::Init();
+  Random::Init();
   Zone::Init();
 #if defined(SUPPORT_TIMELINE)
   Timeline::Init();
@@ -779,6 +780,7 @@
   Timeline::Cleanup();
 #endif
   Zone::Cleanup();
+  Random::Cleanup();
   // Delete the current thread's TLS and set it's TLS to null.
   // If it is the last thread then the destructor would call
   // OSThread::Cleanup.
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 32954d6..368fab3 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -6361,10 +6361,10 @@
   if (event != NULL) {
     switch (type) {
       case Dart_Timeline_Event_Begin:
-        event->Begin(label, timestamp0);
+        event->Begin(label, timestamp0, timestamp1_or_async_id);
         break;
       case Dart_Timeline_Event_End:
-        event->End(label, timestamp0);
+        event->End(label, timestamp0, timestamp1_or_async_id);
         break;
       case Dart_Timeline_Event_Instant:
         event->Instant(label, timestamp0);
diff --git a/runtime/vm/random.cc b/runtime/vm/random.cc
index 2cc2335..e14ab64 100644
--- a/runtime/vm/random.cc
+++ b/runtime/vm/random.cc
@@ -75,4 +75,26 @@
   return static_cast<uint32_t>(NextState() & MASK_32);
 }
 
+static Random* global_random = nullptr;
+static Mutex* global_random_mutex = nullptr;
+
+void Random::Init() {
+  ASSERT(global_random_mutex == nullptr);
+  global_random_mutex = new Mutex(NOT_IN_PRODUCT("global_random_mutex"));
+  ASSERT(global_random == nullptr);
+  global_random = new Random();
+}
+
+void Random::Cleanup() {
+  delete global_random_mutex;
+  global_random_mutex = nullptr;
+  delete global_random;
+  global_random = nullptr;
+}
+
+uint64_t Random::GlobalNextUInt64() {
+  MutexLocker locker(global_random_mutex);
+  return global_random->NextUInt64();
+}
+
 }  // namespace dart
diff --git a/runtime/vm/random.h b/runtime/vm/random.h
index 4af724b..077089b 100644
--- a/runtime/vm/random.h
+++ b/runtime/vm/random.h
@@ -28,6 +28,10 @@
            static_cast<uint64_t>(NextUInt32());
   }
 
+  static uint64_t GlobalNextUInt64();
+  static void Init();
+  static void Cleanup();
+
  private:
   uint64_t NextState();
   void Initialize(uint64_t seed);
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index 9689781..1bc5236 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -143,6 +143,12 @@
   if (!is_vm_isolate) {
     InitVMConstants();
   }
+
+#if defined(DART_HOST_OS_FUCHSIA)
+  next_task_id_ = trace_generate_nonce();
+#else
+  next_task_id_ = Random::GlobalNextUInt64();
+#endif
 }
 
 static const double double_nan_constant = NAN;
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index df80a86..bbda502 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -1094,6 +1094,10 @@
 
   void InitVMConstants();
 
+  int64_t GetNextTaskId() { return next_task_id_++; }
+  static intptr_t next_task_id_offset() {
+    return OFFSET_OF(Thread, next_task_id_);
+  }
   Random* random() { return &thread_random_; }
   static intptr_t random_offset() { return OFFSET_OF(Thread, thread_random_); }
 
@@ -1207,6 +1211,7 @@
   uword exit_through_ffi_ = 0;
   ApiLocalScope* api_top_scope_;
   uint8_t double_truncate_round_supported_;
+  ALIGN8 int64_t next_task_id_;
   ALIGN8 Random thread_random_;
 
   TsanUtils* tsan_utils_ = nullptr;
diff --git a/runtime/vm/timeline.cc b/runtime/vm/timeline.cc
index 086b86b..90b0a23 100644
--- a/runtime/vm/timeline.cc
+++ b/runtime/vm/timeline.cc
@@ -498,19 +498,25 @@
 }
 
 void TimelineEvent::Begin(const char* label,
+                          int64_t id,
                           int64_t micros,
                           int64_t thread_micros) {
   Init(kBegin, label);
   set_timestamp0(micros);
   set_thread_timestamp0(thread_micros);
+  // Overload timestamp1_ with the async_id.
+  set_timestamp1(id);
 }
 
 void TimelineEvent::End(const char* label,
+                        int64_t id,
                         int64_t micros,
                         int64_t thread_micros) {
   Init(kEnd, label);
   set_timestamp0(micros);
   set_thread_timestamp0(thread_micros);
+  // Overload timestamp1_ with the async_id.
+  set_timestamp1(id);
 }
 
 void TimelineEvent::Counter(const char* label, int64_t micros) {
@@ -655,31 +661,31 @@
     } break;
     case kAsyncBegin: {
       writer->PrintProperty("ph", "b");
-      writer->PrintfProperty("id", "%" Px64 "", AsyncId());
+      writer->PrintfProperty("id", "%" Px64 "", Id());
     } break;
     case kAsyncInstant: {
       writer->PrintProperty("ph", "n");
-      writer->PrintfProperty("id", "%" Px64 "", AsyncId());
+      writer->PrintfProperty("id", "%" Px64 "", Id());
     } break;
     case kAsyncEnd: {
       writer->PrintProperty("ph", "e");
-      writer->PrintfProperty("id", "%" Px64 "", AsyncId());
+      writer->PrintfProperty("id", "%" Px64 "", Id());
     } break;
     case kCounter: {
       writer->PrintProperty("ph", "C");
     } break;
     case kFlowBegin: {
       writer->PrintProperty("ph", "s");
-      writer->PrintfProperty("id", "%" Px64 "", AsyncId());
+      writer->PrintfProperty("id", "%" Px64 "", Id());
     } break;
     case kFlowStep: {
       writer->PrintProperty("ph", "t");
-      writer->PrintfProperty("id", "%" Px64 "", AsyncId());
+      writer->PrintfProperty("id", "%" Px64 "", Id());
     } break;
     case kFlowEnd: {
       writer->PrintProperty("ph", "f");
       writer->PrintProperty("bp", "e");
-      writer->PrintfProperty("id", "%" Px64 "", AsyncId());
+      writer->PrintfProperty("id", "%" Px64 "", Id());
     } break;
     case kMetadata: {
       writer->PrintProperty("ph", "M");
@@ -728,14 +734,6 @@
   writer->CloseObject();
 }
 
-int64_t TimelineEvent::TimeOrigin() const {
-  return timestamp0_;
-}
-
-int64_t TimelineEvent::AsyncId() const {
-  return timestamp1_;
-}
-
 int64_t TimelineEvent::LowTime() const {
   return timestamp0_;
 }
@@ -841,6 +839,13 @@
     return;
   }
   enabled_ = true;
+  Thread* thread = static_cast<Thread*>(this->thread());
+  if (thread != NULL) {
+    id_ = thread->GetNextTaskId();
+  } else {
+    static RelaxedAtomic<int64_t> next_bootstrap_task_id = {0};
+    id_ = next_bootstrap_task_id.fetch_add(1);
+  }
 }
 
 void TimelineEventScope::SetNumArguments(intptr_t length) {
@@ -919,7 +924,7 @@
   }
   ASSERT(event != NULL);
   // Emit a begin event.
-  event->Begin(label());
+  event->Begin(label(), id());
   event->Complete();
 }
 
@@ -935,7 +940,7 @@
   }
   ASSERT(event != NULL);
   // Emit an end event.
-  event->End(label());
+  event->End(label(), id());
   StealArguments(event);
   event->Complete();
 }
@@ -958,7 +963,7 @@
       isolate_id_(isolate_id) {}
 
 TimelineEventRecorder::TimelineEventRecorder()
-    : async_id_(0), time_low_micros_(0), time_high_micros_(0) {}
+    : time_low_micros_(0), time_high_micros_(0) {}
 
 #ifndef PRODUCT
 void TimelineEventRecorder::PrintJSONMeta(JSONArray* events) const {
@@ -1120,16 +1125,6 @@
 }
 #endif
 
-int64_t TimelineEventRecorder::GetNextAsyncId() {
-  // TODO(johnmccutchan): Gracefully handle wrap around.
-#if defined(DART_HOST_OS_FUCHSIA)
-  return trace_generate_nonce();
-#else
-  uint32_t next = static_cast<uint32_t>(async_id_.fetch_add(1u));
-  return static_cast<int64_t>(next);
-#endif
-}
-
 void TimelineEventRecorder::FinishBlock(TimelineEventBlock* block) {
   if (block == NULL) {
     return;
@@ -1706,10 +1701,10 @@
       event->AsyncEnd(name, id, start);
       break;
     case 'B':
-      event->Begin(name, start, start_cpu);
+      event->Begin(name, id, start, start_cpu);
       break;
     case 'E':
-      event->End(name, start, start_cpu);
+      event->End(name, id, start, start_cpu);
       break;
     default:
       UNREACHABLE();
diff --git a/runtime/vm/timeline.h b/runtime/vm/timeline.h
index 759e09f..7b89e4b 100644
--- a/runtime/vm/timeline.h
+++ b/runtime/vm/timeline.h
@@ -334,10 +334,12 @@
 
   void Begin(
       const char* label,
+      int64_t id,
       int64_t micros = OS::GetCurrentMonotonicMicrosForTimeline(),
       int64_t thread_micros = OS::GetCurrentThreadCPUMicrosForTimeline());
 
   void End(const char* label,
+           int64_t id,
            int64_t micros = OS::GetCurrentMonotonicMicrosForTimeline(),
            int64_t thread_micros = OS::GetCurrentThreadCPUMicrosForTimeline());
 
@@ -390,8 +392,11 @@
   int64_t ThreadCPUTimeDuration() const;
   int64_t ThreadCPUTimeOrigin() const;
 
-  int64_t TimeOrigin() const;
-  int64_t AsyncId() const;
+  int64_t TimeOrigin() const { return timestamp0_; }
+  int64_t Id() const {
+    ASSERT(event_type() != kDuration);
+    return timestamp1_;
+  }
   int64_t TimeDuration() const;
   int64_t TimeEnd() const {
     ASSERT(IsFinishedDuration());
@@ -598,6 +603,8 @@
 
   const char* label() const { return label_; }
 
+  int64_t id() const { return id_; }
+
   TimelineEventArgument* arguments() const { return arguments_.buffer(); }
 
   intptr_t arguments_length() const { return arguments_.length(); }
@@ -613,6 +620,7 @@
 
   TimelineStream* stream_;
   const char* label_;
+  int64_t id_;
   TimelineEventArguments arguments_;
   bool enabled_;
 
@@ -783,7 +791,6 @@
   virtual void PrintTraceEvent(JSONStream* js, TimelineEventFilter* filter) = 0;
 #endif
   virtual const char* name() const = 0;
-  int64_t GetNextAsyncId();
 
   void FinishBlock(TimelineEventBlock* block);
 
@@ -814,7 +821,6 @@
   int64_t TimeExtentMicros() const;
 
   Mutex lock_;
-  RelaxedAtomic<uintptr_t> async_id_;
   int64_t time_low_micros_;
   int64_t time_high_micros_;
 
diff --git a/runtime/vm/timeline_android.cc b/runtime/vm/timeline_android.cc
index f91ee42..37844f7 100644
--- a/runtime/vm/timeline_android.cc
+++ b/runtime/vm/timeline_android.cc
@@ -79,12 +79,12 @@
     }
     case TimelineEvent::kAsyncBegin: {
       length = Utils::SNPrint(buffer, buffer_size, "S|%" Pd64 "|%s|%" Pd64 "",
-                              pid, event->label(), event->AsyncId());
+                              pid, event->label(), event->Id());
       break;
     }
     case TimelineEvent::kAsyncEnd: {
       length = Utils::SNPrint(buffer, buffer_size, "F|%" Pd64 "|%s|%" Pd64 "",
-                              pid, event->label(), event->AsyncId());
+                              pid, event->label(), event->Id());
       break;
     }
     default:
diff --git a/runtime/vm/timeline_fuchsia.cc b/runtime/vm/timeline_fuchsia.cc
index 38bca29..6dd671a 100644
--- a/runtime/vm/timeline_fuchsia.cc
+++ b/runtime/vm/timeline_fuchsia.cc
@@ -78,19 +78,19 @@
           args, num_args);
       break;
     case TimelineEvent::kAsyncBegin:
-      trace_context_write_async_begin_event_record(
-          context, start_time, &thread, &category, &name, event->AsyncId(),
-          args, num_args);
+      trace_context_write_async_begin_event_record(context, start_time, &thread,
+                                                   &category, &name,
+                                                   event->Id(), args, num_args);
       break;
     case TimelineEvent::kAsyncEnd:
-      trace_context_write_async_end_event_record(
-          context, end_time, &thread, &category, &name, event->AsyncId(), args,
-          num_args);
+      trace_context_write_async_end_event_record(context, end_time, &thread,
+                                                 &category, &name, event->Id(),
+                                                 args, num_args);
       break;
     case TimelineEvent::kAsyncInstant:
       trace_context_write_async_instant_event_record(
-          context, start_time, &thread, &category, &name, event->AsyncId(),
-          args, num_args);
+          context, start_time, &thread, &category, &name, event->Id(), args,
+          num_args);
       break;
     case TimelineEvent::kDuration:
       trace_context_write_duration_event_record(context, start_time, end_time,
@@ -98,19 +98,19 @@
                                                 num_args);
       break;
     case TimelineEvent::kFlowBegin:
-      trace_context_write_flow_begin_event_record(
-          context, start_time, &thread, &category, &name, event->AsyncId(),
-          args, num_args);
+      trace_context_write_flow_begin_event_record(context, start_time, &thread,
+                                                  &category, &name, event->Id(),
+                                                  args, num_args);
       break;
     case TimelineEvent::kFlowStep:
-      trace_context_write_flow_step_event_record(
-          context, start_time, &thread, &category, &name, event->AsyncId(),
-          args, num_args);
+      trace_context_write_flow_step_event_record(context, start_time, &thread,
+                                                 &category, &name, event->Id(),
+                                                 args, num_args);
       break;
     case TimelineEvent::kFlowEnd:
-      trace_context_write_flow_end_event_record(
-          context, start_time, &thread, &category, &name, event->AsyncId(),
-          args, num_args);
+      trace_context_write_flow_end_event_record(context, start_time, &thread,
+                                                &category, &name, event->Id(),
+                                                args, num_args);
       break;
     default:
       // TODO(zra): Figure out what to do with kCounter and kMetadata.
diff --git a/runtime/vm/timeline_linux.cc b/runtime/vm/timeline_linux.cc
index a85f9e5..407a790 100644
--- a/runtime/vm/timeline_linux.cc
+++ b/runtime/vm/timeline_linux.cc
@@ -79,12 +79,12 @@
     }
     case TimelineEvent::kAsyncBegin: {
       length = Utils::SNPrint(buffer, buffer_size, "S|%" Pd64 "|%s|%" Pd64 "",
-                              pid, event->label(), event->AsyncId());
+                              pid, event->label(), event->Id());
       break;
     }
     case TimelineEvent::kAsyncEnd: {
       length = Utils::SNPrint(buffer, buffer_size, "F|%" Pd64 "|%s|%" Pd64 "",
-                              pid, event->label(), event->AsyncId());
+                              pid, event->label(), event->Id());
       break;
     }
     default:
diff --git a/runtime/vm/timeline_macos.cc b/runtime/vm/timeline_macos.cc
index cbb2efa..d187617 100644
--- a/runtime/vm/timeline_macos.cc
+++ b/runtime/vm/timeline_macos.cc
@@ -40,28 +40,18 @@
                                        buffer, sizeof(buffer));
       break;
     }
-    case TimelineEvent::kBegin: {
-      _os_signpost_emit_with_name_impl(
-          &__dso_handle, log, OS_SIGNPOST_INTERVAL_BEGIN,
-          OS_SIGNPOST_ID_EXCLUSIVE, label, "", buffer, sizeof(buffer));
-      break;
-    }
-    case TimelineEvent::kEnd: {
-      _os_signpost_emit_with_name_impl(
-          &__dso_handle, log, OS_SIGNPOST_INTERVAL_END,
-          OS_SIGNPOST_ID_EXCLUSIVE, label, "", buffer, sizeof(buffer));
-      break;
-    }
+    case TimelineEvent::kBegin:
     case TimelineEvent::kAsyncBegin: {
-      _os_signpost_emit_with_name_impl(
-          &__dso_handle, log, OS_SIGNPOST_INTERVAL_BEGIN, event->AsyncId(),
-          label, "", buffer, sizeof(buffer));
+      _os_signpost_emit_with_name_impl(&__dso_handle, log,
+                                       OS_SIGNPOST_INTERVAL_BEGIN, event->Id(),
+                                       label, "", buffer, sizeof(buffer));
       break;
     }
+    case TimelineEvent::kEnd:
     case TimelineEvent::kAsyncEnd: {
-      _os_signpost_emit_with_name_impl(
-          &__dso_handle, log, OS_SIGNPOST_INTERVAL_END, event->AsyncId(), label,
-          "", buffer, sizeof(buffer));
+      _os_signpost_emit_with_name_impl(&__dso_handle, log,
+                                       OS_SIGNPOST_INTERVAL_END, event->Id(),
+                                       label, "", buffer, sizeof(buffer));
       break;
     }
     case TimelineEvent::kCounter: {
@@ -69,8 +59,8 @@
       Utils::SNPrint(reinterpret_cast<char*>(buffer), sizeof(buffer), fmt,
                      event->arguments()[0].value);
       _os_signpost_emit_with_name_impl(&__dso_handle, log, OS_SIGNPOST_EVENT,
-                                       event->AsyncId(), label, fmt, buffer,
-                                       sizeof(buffer));
+                                       OS_SIGNPOST_ID_EXCLUSIVE, label, fmt,
+                                       buffer, sizeof(buffer));
       break;
     }
     default:
diff --git a/runtime/vm/timeline_test.cc b/runtime/vm/timeline_test.cc
index 97699cd..3c5ec04 100644
--- a/runtime/vm/timeline_test.cc
+++ b/runtime/vm/timeline_test.cc
@@ -318,8 +318,8 @@
 
   event = stream.StartEvent();
   EXPECT_EQ(0, override.recorder()->CountFor(TimelineEvent::kAsyncBegin));
-  int64_t async_id = override.recorder()->GetNextAsyncId();
-  EXPECT(async_id >= 0);
+  int64_t async_id = thread->GetNextTaskId();
+  EXPECT(async_id != 0);
   event->AsyncBegin("asyncBeginCabbage", async_id);
   EXPECT_EQ(0, override.recorder()->CountFor(TimelineEvent::kAsyncBegin));
   event->Complete();
diff --git a/sdk/lib/_internal/js_dev_runtime/patch/developer_patch.dart b/sdk/lib/_internal/js_dev_runtime/patch/developer_patch.dart
index 729dc22..a8f6c4e 100644
--- a/sdk/lib/_internal/js_dev_runtime/patch/developer_patch.dart
+++ b/sdk/lib/_internal/js_dev_runtime/patch/developer_patch.dart
@@ -157,7 +157,7 @@
 }
 
 @patch
-int _getNextAsyncId() {
+int _getNextTaskId() {
   return 0;
 }
 
diff --git a/sdk/lib/_internal/js_runtime/lib/developer_patch.dart b/sdk/lib/_internal/js_runtime/lib/developer_patch.dart
index 05db6d6..d8439cc 100644
--- a/sdk/lib/_internal/js_runtime/lib/developer_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/developer_patch.dart
@@ -80,7 +80,7 @@
 }
 
 @patch
-int _getNextAsyncId() {
+int _getNextTaskId() {
   return 0;
 }
 
diff --git a/sdk/lib/_internal/vm/lib/timeline.dart b/sdk/lib/_internal/vm/lib/timeline.dart
index e3e172c..d65d975 100644
--- a/sdk/lib/_internal/vm/lib/timeline.dart
+++ b/sdk/lib/_internal/vm/lib/timeline.dart
@@ -13,8 +13,8 @@
 external int _getTraceClock();
 
 @patch
-@pragma("vm:external-name", "Timeline_getNextAsyncId")
-external int _getNextAsyncId();
+@pragma("vm:external-name", "Timeline_getNextTaskId")
+external int _getNextTaskId();
 
 @patch
 @pragma("vm:external-name", "Timeline_reportTaskEvent")
diff --git a/sdk/lib/_internal/wasm/lib/developer.dart b/sdk/lib/_internal/wasm/lib/developer.dart
index 32d3050..32eb53d 100644
--- a/sdk/lib/_internal/wasm/lib/developer.dart
+++ b/sdk/lib/_internal/wasm/lib/developer.dart
@@ -49,7 +49,7 @@
 int _traceClock = 0;
 
 @patch
-int _getNextAsyncId() => 0;
+int _getNextTaskId() => 0;
 
 @patch
 void _reportTaskEvent(int taskId, String phase, String category, String name,
diff --git a/sdk/lib/developer/timeline.dart b/sdk/lib/developer/timeline.dart
index a9990a3..fc4abd4 100644
--- a/sdk/lib/developer/timeline.dart
+++ b/sdk/lib/developer/timeline.dart
@@ -60,7 +60,7 @@
   /// If [id] is not provided, an id that conflicts with no other Dart-generated
   /// flow id's will be generated.
   static Flow begin({int? id}) {
-    return new Flow._(_begin, id ?? _getNextAsyncId());
+    return new Flow._(_begin, id ?? _getNextTaskId());
   }
 
   /// A "step" Flow event.
@@ -112,7 +112,8 @@
       _stack.add(null);
       return;
     }
-    var block = new _SyncBlock._(name, arguments: arguments, flow: flow);
+    var block = new _SyncBlock._(name, _getNextTaskId(),
+        arguments: arguments, flow: flow);
     _stack.add(block);
     block._startSync();
   }
@@ -190,7 +191,7 @@
   TimelineTask({TimelineTask? parent, String? filterKey})
       : _parent = parent,
         _filterKey = filterKey,
-        _taskId = _getNextAsyncId() {}
+        _taskId = _getNextTaskId() {}
 
   /// Create a task with an explicit [taskId]. This is useful if you are
   /// passing a task from one isolate to another.
@@ -335,6 +336,9 @@
   /// The name of this block.
   final String name;
 
+  /// Signpost needs help matching begin and end events.
+  final int taskId;
+
   /// An (optional) set of arguments which will be serialized to JSON and
   /// associated with this block.
   final Map? arguments;
@@ -344,18 +348,18 @@
 
   late final String _jsonArguments = _argumentsAsJson(arguments);
 
-  _SyncBlock._(this.name, {this.arguments, this.flow});
+  _SyncBlock._(this.name, this.taskId, {this.arguments, this.flow});
 
   /// Start this block of time.
   void _startSync() {
-    _reportTaskEvent(0, 'B', category, name, _jsonArguments);
+    _reportTaskEvent(taskId, 'B', category, name, _jsonArguments);
   }
 
   /// Finish this block of time. At this point, this block can no longer be
   /// used.
   void finish() {
     // Report event to runtime.
-    _reportTaskEvent(0, 'E', category, name, _jsonArguments);
+    _reportTaskEvent(taskId, 'E', category, name, _jsonArguments);
     final Flow? tempFlow = flow;
     if (tempFlow != null) {
       _reportFlowEvent(category, "${tempFlow.id}", tempFlow._type, tempFlow.id,
@@ -376,8 +380,9 @@
 @pragma("vm:recognized", "asm-intrinsic")
 external bool _isDartStreamEnabled();
 
-/// Returns the next async task id.
-external int _getNextAsyncId();
+/// Returns the next task id.
+@pragma("vm:recognized", "asm-intrinsic")
+external int _getNextTaskId();
 
 /// Returns the current value from the trace clock.
 external int _getTraceClock();
diff --git a/tools/VERSION b/tools/VERSION
index 768d7f6..497c25a 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 284
+PRERELEASE 285
 PRERELEASE_PATCH 0
\ No newline at end of file
