-
Couldn't load subscription status.
- Fork 15k
[RISCV] Attach an implicit source operand on vector copies #126155
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
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5 | ||
| # RUN: llc -mtriple=riscv64 -mattr=+v -run-pass=postrapseudos %s -o - | FileCheck %s | ||
|
|
||
| --- | ||
| name: copy | ||
| isSSA: false | ||
| noVRegs: true | ||
| liveins: | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should set tracksRegLiveness |
||
| - { reg: '$v0', virtual-reg: '' } | ||
| body: | | ||
| bb.0: | ||
| liveins: $v0 | ||
| ; CHECK-LABEL: name: copy | ||
| ; CHECK: liveins: $v0 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: $v20m2 = VMV2R_V $v14m2, implicit $vtype, implicit $v14_v15_v16_v17_v18 | ||
| ; CHECK-NEXT: $v22m2 = VMV2R_V $v16m2, implicit $vtype, implicit $v14_v15_v16_v17_v18 | ||
| ; CHECK-NEXT: $v24 = VMV1R_V $v18, implicit $vtype, implicit $v14_v15_v16_v17_v18, implicit $vtype | ||
| ; CHECK-NEXT: PseudoRET implicit $v0 | ||
| renamable $v20_v21_v22_v23_v24 = COPY renamable $v14_v15_v16_v17_v18, implicit $vtype | ||
| PseudoRET implicit $v0 | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Test undef and kill flags |
||
| ... | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
At what time the COPY happens? Why doesn't InitUndef work at this time?
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The case I saw was created by register coalescer where it generates something like this:
what happened was that the first instruction only initializes part of
%8and the second one COPY from another partially initialized (or partially undef) sub-register of%8. In this case we can't mark the source operand of COPY withundef. This COPY will eventually got broken down into smaller copies, in which one of those copies were copied from an undef register, hence the verifier error.An alternative solution would be adding
undefon source operand of the lowered, smaller copy instructions when needed. But that requires LiveIntervalsAnaysis.