Skip to content

[Relax][ONNX] Fix Cast operator float->int NaN/Inf handling#19626

Draft
cchung100m wants to merge 5 commits into
apache:mainfrom
cchung100m:issue-19542
Draft

[Relax][ONNX] Fix Cast operator float->int NaN/Inf handling#19626
cchung100m wants to merge 5 commits into
apache:mainfrom
cchung100m:issue-19542

Conversation

@cchung100m
Copy link
Copy Markdown
Contributor

Hi Committers,

This PR is trying to fix issues #19542. Any suggestions would be appreciated if you are available.

Root cause:

FP to INT lowering can be implementation-defined or UB for NaN/Inf and extreme floats, producing backend-dependent results versus ONNX Runtime.

Solution:

Apply a minimal, deterministic frontend sanitization for float to integer Casts: map NaN and ±Inf to 0.0 before astype. This prevents NaN/Inf from reaching backend fptosi/fptoui lowers and yields stable behavior across targets.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the ONNX frontend in TVM Relax to handle casting from floating-point types to integer types by replacing NaN and Inf values with 0.0 before performing the cast. The reviewer suggested simplifying the check for non-finite values by using relax.op.logical_not(relax.op.isfinite(src)) instead of combining isnan and isinf with a logical OR, which reduces the number of operator calls and simplifies the generated Relax graph.

Comment thread python/tvm/relax/frontend/onnx/onnx_frontend.py Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant