We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
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
The register allocator does not handle certain functions that use the 'LDDWRdPtrQ' instructions which have high register pressure.
The error message is:
LLVM ERROR: ran out of registers during register allocation
In order to work around this, we restricted the allowable registers of LDDWRdPtrQ to disallow Z.
First noticed in avr-rust/rust-legacy-fork#37
The text was updated successfully, but these errors were encountered:
I think this is the same issues as llvm/llvm-bugzilla-archive#39391 . The proposed patch resolves this as well.
Sorry, something went wrong.
Huh, thanks for fixing the root cause Nirav.
I've raised avr-rust/rust-legacy-fork#126 to track the removal of our AVR-specific workaround (the DREGS_WITHOUT_Z_WORKAROUND register class).
Now LDDWRdPtrQ can use Z as base address without any error.
LDDWRdPtrQ
Z
int aff(int *arr) { return arr[4]; }
is compiled to
aff: ; @aff ; %bb.0: ; %entry movw r30, r24 ldd r24, Z+8 ldd r25, Z+9 ret
benshi001
No branches or pull requests
Extended Description
The register allocator does not handle certain functions that use the 'LDDWRdPtrQ' instructions which have high register pressure.
The error message is:
LLVM ERROR: ran out of registers during register allocation
In order to work around this, we restricted the allowable registers of LDDWRdPtrQ to disallow Z.
First noticed in avr-rust/rust-legacy-fork#37
The text was updated successfully, but these errors were encountered: