-
Notifications
You must be signed in to change notification settings - Fork 15.1k
[RISCV][GISel] Support nxv16p0 for RV32. #101573
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,79 @@ | ||
| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py | ||
| # RUN: llc -mtriple=riscv32 -mattr=+v -run-pass=legalizer %s -o - | FileCheck %s | ||
|
|
||
| --- | ||
| name: vload_nxv1ptr | ||
| body: | | ||
| bb.1: | ||
| liveins: $x10 | ||
|
|
||
| ; CHECK-LABEL: name: vload_nxv1ptr | ||
| ; CHECK: liveins: $x10 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 | ||
| ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(<vscale x 1 x p0>) = G_LOAD [[COPY]](p0) :: (load (<vscale x 1 x p0>)) | ||
| ; CHECK-NEXT: $v8 = COPY [[LOAD]](<vscale x 1 x p0>) | ||
| ; CHECK-NEXT: PseudoRET implicit $v8 | ||
| %0:_(p0) = COPY $x10 | ||
| %1:_(<vscale x 1 x p0>) = G_LOAD %0(p0) :: (load (<vscale x 1 x p0>), align 4) | ||
| $v8 = COPY %1(<vscale x 1 x p0>) | ||
| PseudoRET implicit $v8 | ||
|
|
||
| ... | ||
| --- | ||
| name: vload_nxv2ptr | ||
| body: | | ||
| bb.1: | ||
| liveins: $x10 | ||
|
|
||
| ; CHECK-LABEL: name: vload_nxv2ptr | ||
| ; CHECK: liveins: $x10 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 | ||
| ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(<vscale x 2 x p0>) = G_LOAD [[COPY]](p0) :: (load (<vscale x 2 x p0>)) | ||
| ; CHECK-NEXT: $v8 = COPY [[LOAD]](<vscale x 2 x p0>) | ||
| ; CHECK-NEXT: PseudoRET implicit $v8 | ||
| %0:_(p0) = COPY $x10 | ||
| %1:_(<vscale x 2 x p0>) = G_LOAD %0(p0) :: (load (<vscale x 2 x p0>), align 8) | ||
| $v8 = COPY %1(<vscale x 2 x p0>) | ||
| PseudoRET implicit $v8 | ||
|
|
||
| ... | ||
| --- | ||
| name: vload_nxv8ptr | ||
| body: | | ||
| bb.1: | ||
| liveins: $x10 | ||
|
|
||
| ; CHECK-LABEL: name: vload_nxv8ptr | ||
| ; CHECK: liveins: $x10 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 | ||
| ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(<vscale x 8 x p0>) = G_LOAD [[COPY]](p0) :: (load (<vscale x 8 x p0>)) | ||
| ; CHECK-NEXT: $v8m4 = COPY [[LOAD]](<vscale x 8 x p0>) | ||
| ; CHECK-NEXT: PseudoRET implicit $v8m4 | ||
| %0:_(p0) = COPY $x10 | ||
| %1:_(<vscale x 8 x p0>) = G_LOAD %0(p0) :: (load (<vscale x 8 x p0>), align 32) | ||
| $v8m4 = COPY %1(<vscale x 8 x p0>) | ||
| PseudoRET implicit $v8m4 | ||
|
|
||
| ... | ||
| --- | ||
| name: vload_nxv16ptr | ||
| body: | | ||
| bb.1: | ||
| liveins: $x10 | ||
|
|
||
| ; CHECK-LABEL: name: vload_nxv16ptr | ||
| ; CHECK: liveins: $x10 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 | ||
| ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(<vscale x 16 x p0>) = G_LOAD [[COPY]](p0) :: (load (<vscale x 16 x p0>)) | ||
| ; CHECK-NEXT: $v8m4 = COPY [[LOAD]](<vscale x 16 x p0>) | ||
| ; CHECK-NEXT: PseudoRET implicit $v8m8 | ||
| %0:_(p0) = COPY $x10 | ||
| %1:_(<vscale x 16 x p0>) = G_LOAD %0(p0) :: (load (<vscale x 16 x p0>), align 64) | ||
| $v8m4 = COPY %1(<vscale x 16 x p0>) | ||
| PseudoRET implicit $v8m8 | ||
|
|
||
| ... |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,60 @@ | ||
| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py | ||
| # RUN: llc -mtriple=riscv64 -mattr=+v -run-pass=legalizer %s -o - | FileCheck %s | ||
|
|
||
| --- | ||
| name: vload_nxv1ptr | ||
| body: | | ||
| bb.1: | ||
| liveins: $x10 | ||
|
|
||
| ; CHECK-LABEL: name: vload_nxv1ptr | ||
| ; CHECK: liveins: $x10 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 | ||
| ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(<vscale x 1 x p0>) = G_LOAD [[COPY]](p0) :: (load (<vscale x 1 x p0>)) | ||
| ; CHECK-NEXT: $v8 = COPY [[LOAD]](<vscale x 1 x p0>) | ||
| ; CHECK-NEXT: PseudoRET implicit $v8 | ||
| %0:_(p0) = COPY $x10 | ||
| %1:_(<vscale x 1 x p0>) = G_LOAD %0(p0) :: (load (<vscale x 1 x p0>), align 8) | ||
| $v8 = COPY %1(<vscale x 1 x p0>) | ||
| PseudoRET implicit $v8 | ||
|
|
||
| ... | ||
| --- | ||
| name: vload_nxv2ptr | ||
| body: | | ||
| bb.1: | ||
| liveins: $x10 | ||
|
|
||
| ; CHECK-LABEL: name: vload_nxv2ptr | ||
| ; CHECK: liveins: $x10 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 | ||
| ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(<vscale x 2 x p0>) = G_LOAD [[COPY]](p0) :: (load (<vscale x 2 x p0>)) | ||
| ; CHECK-NEXT: $v8 = COPY [[LOAD]](<vscale x 2 x p0>) | ||
| ; CHECK-NEXT: PseudoRET implicit $v8m2 | ||
| %0:_(p0) = COPY $x10 | ||
| %1:_(<vscale x 2 x p0>) = G_LOAD %0(p0) :: (load (<vscale x 2 x p0>), align 16) | ||
| $v8 = COPY %1(<vscale x 2 x p0>) | ||
|
Contributor
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. I'm wondering, should we bitcast %1:_(<vscale x 2 x p0>) = G_LOAD %0(p0) :: (load (<vscale x 2 x p0>) from %ir.pa, align 16)
%2:_(<vscale x 2 x s64>) = G_BITCAST %1(<vscale x 2 x p0>)
$v8 = COPY %2(<vscale x 2 x s64>)
Collaborator
Author
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. I don't think so. The user of the load is likely to be something that needs a vector of pointer. |
||
| PseudoRET implicit $v8m2 | ||
|
|
||
| ... | ||
| --- | ||
| name: vload_nxv8ptr | ||
| body: | | ||
| bb.1: | ||
| liveins: $x10 | ||
|
|
||
| ; CHECK-LABEL: name: vload_nxv8ptr | ||
| ; CHECK: liveins: $x10 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 | ||
| ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(<vscale x 8 x p0>) = G_LOAD [[COPY]](p0) :: (load (<vscale x 8 x p0>)) | ||
| ; CHECK-NEXT: $v8m4 = COPY [[LOAD]](<vscale x 8 x p0>) | ||
| ; CHECK-NEXT: PseudoRET implicit $v8m8 | ||
| %0:_(p0) = COPY $x10 | ||
| %1:_(<vscale x 8 x p0>) = G_LOAD %0(p0) :: (load (<vscale x 8 x p0>), align 64) | ||
| $v8m4 = COPY %1(<vscale x 8 x p0>) | ||
| PseudoRET implicit $v8m8 | ||
|
|
||
| ... | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,79 @@ | ||
| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py | ||
| # RUN: llc -mtriple=riscv32 -mattr=+v -run-pass=legalizer %s -o - | FileCheck %s | ||
|
|
||
| --- | ||
| name: vstore_nx1ptr | ||
| body: | | ||
| bb.1: | ||
| liveins: $v8, $x10 | ||
|
|
||
| ; CHECK-LABEL: name: vstore_nx1ptr | ||
| ; CHECK: liveins: $v8, $x10 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 | ||
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<vscale x 1 x p0>) = COPY $v8 | ||
| ; CHECK-NEXT: G_STORE [[COPY1]](<vscale x 1 x p0>), [[COPY]](p0) :: (store (<vscale x 1 x p0>)) | ||
| ; CHECK-NEXT: PseudoRET | ||
| %0:_(p0) = COPY $x10 | ||
| %1:_(<vscale x 1 x p0>) = COPY $v8 | ||
| G_STORE %1(<vscale x 1 x p0>), %0(p0) :: (store (<vscale x 1 x p0>), align 4) | ||
| PseudoRET | ||
|
|
||
| ... | ||
| --- | ||
| name: vstore_nx2ptr | ||
| body: | | ||
| bb.1: | ||
| liveins: $x10, $v8 | ||
|
|
||
| ; CHECK-LABEL: name: vstore_nx2ptr | ||
| ; CHECK: liveins: $x10, $v8 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 | ||
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<vscale x 2 x p0>) = COPY $v8 | ||
| ; CHECK-NEXT: G_STORE [[COPY1]](<vscale x 2 x p0>), [[COPY]](p0) :: (store (<vscale x 2 x p0>)) | ||
| ; CHECK-NEXT: PseudoRET | ||
| %0:_(p0) = COPY $x10 | ||
| %1:_(<vscale x 2 x p0>) = COPY $v8 | ||
| G_STORE %1(<vscale x 2 x p0>), %0(p0) :: (store (<vscale x 2 x p0>), align 8) | ||
| PseudoRET | ||
|
|
||
| ... | ||
| --- | ||
| name: vstore_nx8ptr | ||
| body: | | ||
| bb.1: | ||
| liveins: $x10, $v8m4 | ||
|
|
||
| ; CHECK-LABEL: name: vstore_nx8ptr | ||
| ; CHECK: liveins: $x10, $v8m4 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 | ||
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<vscale x 8 x p0>) = COPY $v8m4 | ||
| ; CHECK-NEXT: G_STORE [[COPY1]](<vscale x 8 x p0>), [[COPY]](p0) :: (store (<vscale x 8 x p0>)) | ||
| ; CHECK-NEXT: PseudoRET | ||
| %0:_(p0) = COPY $x10 | ||
| %1:_(<vscale x 8 x p0>) = COPY $v8m4 | ||
| G_STORE %1(<vscale x 8 x p0>), %0(p0) :: (store (<vscale x 8 x p0>), align 32) | ||
| PseudoRET | ||
|
|
||
| ... | ||
| --- | ||
| name: vstore_nx16ptr | ||
| body: | | ||
| bb.1: | ||
| liveins: $x10, $v8m8 | ||
|
|
||
| ; CHECK-LABEL: name: vstore_nx16ptr | ||
| ; CHECK: liveins: $x10, $v8m8 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 | ||
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<vscale x 16 x p0>) = COPY $v8m8 | ||
| ; CHECK-NEXT: G_STORE [[COPY1]](<vscale x 16 x p0>), [[COPY]](p0) :: (store (<vscale x 8 x p0>), align 64) | ||
| ; CHECK-NEXT: PseudoRET | ||
| %0:_(p0) = COPY $x10 | ||
| %1:_(<vscale x 16 x p0>) = COPY $v8m8 | ||
| G_STORE %1(<vscale x 16 x p0>), %0(p0) :: (store (<vscale x 8 x p0>), align 64) | ||
| PseudoRET | ||
|
|
||
| ... |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,60 @@ | ||
| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py | ||
| # RUN: llc -mtriple=riscv64 -mattr=+v -run-pass=legalizer %s -o - | FileCheck %s | ||
|
|
||
| --- | ||
| name: vstore_nx1ptr | ||
| body: | | ||
| bb.1: | ||
| liveins: $v8, $x10 | ||
|
|
||
| ; CHECK-LABEL: name: vstore_nx1ptr | ||
| ; CHECK: liveins: $v8, $x10 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 | ||
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<vscale x 1 x p0>) = COPY $v8 | ||
| ; CHECK-NEXT: G_STORE [[COPY1]](<vscale x 1 x p0>), [[COPY]](p0) :: (store (<vscale x 1 x p0>)) | ||
| ; CHECK-NEXT: PseudoRET | ||
| %0:_(p0) = COPY $x10 | ||
| %1:_(<vscale x 1 x p0>) = COPY $v8 | ||
| G_STORE %1(<vscale x 1 x p0>), %0(p0) :: (store (<vscale x 1 x p0>), align 8) | ||
| PseudoRET | ||
|
|
||
| ... | ||
| --- | ||
| name: vstore_nx2ptr | ||
| body: | | ||
| bb.1: | ||
| liveins: $x10, $v8m2 | ||
|
|
||
| ; CHECK-LABEL: name: vstore_nx2ptr | ||
| ; CHECK: liveins: $x10, $v8m2 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 | ||
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<vscale x 2 x p0>) = COPY $v8m2 | ||
| ; CHECK-NEXT: G_STORE [[COPY1]](<vscale x 2 x p0>), [[COPY]](p0) :: (store (<vscale x 2 x p0>)) | ||
| ; CHECK-NEXT: PseudoRET | ||
| %0:_(p0) = COPY $x10 | ||
| %1:_(<vscale x 2 x p0>) = COPY $v8m2 | ||
| G_STORE %1(<vscale x 2 x p0>), %0(p0) :: (store (<vscale x 2 x p0>), align 16) | ||
| PseudoRET | ||
|
|
||
| ... | ||
| --- | ||
| name: vstore_nx8ptr | ||
| body: | | ||
| bb.1: | ||
| liveins: $x10, $v8m8 | ||
|
|
||
| ; CHECK-LABEL: name: vstore_nx8ptr | ||
| ; CHECK: liveins: $x10, $v8m8 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 | ||
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<vscale x 8 x p0>) = COPY $v8m8 | ||
| ; CHECK-NEXT: G_STORE [[COPY1]](<vscale x 8 x p0>), [[COPY]](p0) :: (store (<vscale x 8 x p0>)) | ||
| ; CHECK-NEXT: PseudoRET | ||
| %0:_(p0) = COPY $x10 | ||
| %1:_(<vscale x 8 x p0>) = COPY $v8m8 | ||
| G_STORE %1(<vscale x 8 x p0>), %0(p0) :: (store (<vscale x 8 x p0>), align 64) | ||
| PseudoRET | ||
|
|
||
| ... |
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.
Can you help me understand this check?
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.
We only support a 16 element pointer vector when the element size is 32. If the pointer size is 64, then nxv16p0 should not be legal.