Skip to content

[GVN] Don't coerce vector store via i128+#8574

Open
llvm-beanz wants to merge 1 commit into
microsoft:mainfrom
llvm-beanz:8573
Open

[GVN] Don't coerce vector store via i128+#8574
llvm-beanz wants to merge 1 commit into
microsoft:mainfrom
llvm-beanz:8573

Conversation

@llvm-beanz

Copy link
Copy Markdown
Collaborator

GVN forwards a wide stored value to a narrow load from the same address by bitcasting the stored value to an integer, then truncating to the loaded value's size. This avoids re-loading a value that was just stored.

For DXIL this is unsafe if the wider size is greater than 64-bits since DXIL doesn't allow integers larger than 64-bits. This change disables coercing in this case. This shouldn't cause any performance regressions in practice because no existing cases can generate valid DXIL of this form, but it does generate less optimal final output.

We could consider more robust load-store optimizations and coercion to integer vectors as an alternative, but at this time the important thing is to make DXC not generate invalid DXIL, which this simplified change does.

Fixes #8573

Assisted by Claude Opus 4.7

GVN forwards a wide stored value to a narrow load from the same addres
by bitcasting the stored value to an integer, then trucating to the
loaded value's size. This avoids re-loading a value that was just
stored.

For DXIL this is unsafe if the wider size is greater than 64-bits since
DXIL doesn't allow integers larger than 64-bits. This change disables
coercing in this case. This shoudln't cause any performance regressions
in practice because no existing cases can generate valid DXIL of this
form, but it does generate less optimal final output.

We could consider more robust load-store optimizations and coersion to
integer vectors as an alternative, but at this time the important thing
is to make DXC not generate invalid DXIL, which this simplified change
does.

Assisted by Claude Opus 4.7
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: New

Development

Successfully merging this pull request may close these issues.

[6.9] Invalid integer size created by GVN

1 participant