Skip to content

Avoid frame identity for leaf Wasm funclets - #134608

Draft
davidwrighton wants to merge 1 commit into
dotnet:mainfrom
davidwrighton:wasm-leaf-funclet-no-frame-id
Draft

davidwrighton wants to merge 1 commit into
dotnet:mainfrom
davidwrighton:wasm-leaf-funclet-no-frame-id

Conversation

@davidwrighton

Copy link
Copy Markdown
Member

Wasm funclet frames currently store their function-table index even when the funclet cannot call another function. The index identifies a suspended caller during stack walking, so call-free funclets do not need it.

This change determines whether each funclet can emit a call from lowered IR before code generation. Call-free funclets retain their frame and virtual-IP tracking for EH, but omit the function-identity store. Calling funclets and root functions are unchanged. Call emission also retains a Checked assertion and a Release backstop so future implicit-call paths cannot leave the identity slot uninitialized.

Measured on a Release browser Wasm System.Private.CoreLib build:

Measurement Before After Difference
System.Private.CoreLib.wasm 28,499,159 bytes 28,498,071 bytes -1,088 bytes
Wasm Code section 14,148,244 bytes 14,147,115 bytes -1,129 bytes

Disassembly classification found all 162 call-free funclets omitted the identity store, while all 1,833 calling funclets retained it.

Validation:

  • ./build.sh -os browser -c Release -subset clr+libs
  • ./build.sh clr.wasmjit+clr.corelib+clr.nativecorelib -os browser -c Checked
  • JIT formatting and git diff --check

Resolves #134597

Note

This pull request description was generated with GitHub Copilot.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions github-actions Bot added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Sep 24, 2026
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 6 pipeline(s).
10 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Avoid Wasm unwindable-frame identity for call-free funclets

1 participant