Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CIR] Fix Address element type problems #1373

Merged
merged 2 commits into from
Feb 21, 2025
Merged

Conversation

andykaylor
Copy link
Collaborator

@andykaylor andykaylor commented Feb 20, 2025

There were problems with the pointer type and element type of the Address class getting out of sync. In the traditional codegen the pointer has no type, so it was sufficient for the Address class to simply track the type it was supposed to be pointing to. Since ClangIR pointer values are typed, the Address::withType function wasn't really doing what it was supposed to. It returned an object with the same pointer that the original object had, but with a mismatched element type.

This change updates the Address::withType function to perform a bitcast to get the expected pointer type before creating a new Address object. It also adds assertions in the Address class to verify that pointer type and element type are consistent and updates many places that were causing those assertions to fire.

These code changes cause extra bitcasts to be emitted in a few places. Regression tests have been updated as needed to reflect the CIR that is now generated.

There were problems with the pointer type and element type of the
Address class getting out of sync. In the traditional codegen the
pointer has no type, so it was sufficient for the Address class to
simply track the type it was supposed to be pointing to. Since
ClangIR pointer values are typed, the Address::withType function
wasn't really doing what it was supposed to. It returned an object
with the same pointer that the original object had, but with a
mismatched element type.

This change removes the Address::withType function and replaces
calls to it with CIRGenBuilder::createElementBitCast. It also adds
assertions in the Address class to verify that pointer type and
element type are consistent and updates many places that were
causing those assertions to fire.

These code changes cause extra bitcasts to be emitted in a few
places. Regression tests have been updated as needed to reflect
the CIR that is now generated.
@andykaylor andykaylor merged commit a1ab6bf into llvm:main Feb 21, 2025
6 checks passed
lanza pushed a commit that referenced this pull request Mar 18, 2025
There were problems with the pointer type and element type of the
Address class getting out of sync. In the traditional codegen the
pointer has no type, so it was sufficient for the Address class to
simply track the type it was supposed to be pointing to. Since ClangIR
pointer values are typed, the Address::withType function wasn't really
doing what it was supposed to. It returned an object with the same
pointer that the original object had, but with a mismatched element
type.

This change updates the Address::withType function to perform a bitcast
to get the expected pointer type before creating a new Address object.
It also adds assertions in the Address class to verify that pointer type
and element type are consistent and updates many places that were
causing those assertions to fire.

These code changes cause extra bitcasts to be emitted in a few places.
Regression tests have been updated as needed to reflect the CIR that is
now generated.
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.

None yet

2 participants