-
Notifications
You must be signed in to change notification settings - Fork 15.4k
Adding support in llvm-exegesis for Aarch64 for handling FPR64/128, PPR16 and ZPR128 reg class. #127564
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
Merged
Merged
Adding support in llvm-exegesis for Aarch64 for handling FPR64/128, PPR16 and ZPR128 reg class. #127564
Changes from 21 commits
Commits
Show all changes
22 commits
Select commit
Hold shift + click to select a range
624a7ee
Adding support for FPR64/128, PPR16 and ZPR128 in setReg of llvm-exeg…
lakshayk-nv 4c4d605
Adding support for FPR64/128, PPR16 and ZPR128 in setReg of llvm-exeg…
lakshayk-nv f8ce0cc
Merge branch 'main' into llvm-exegesis-setreg
lakshayk-nv d34cb6d
Added assert that Value is in range for the generated instructions an…
lakshayk-nv 566081a
Merge branch 'llvm:main' into llvm-exegesis-setreg
lakshayk-nv 803b9e9
Merge branch 'llvm:main' into llvm-exegesis-setreg
lakshayk-nv 3589838
Merge branch 'llvm-exegesis-setreg' of github.com:lakshayk-nv/llvm-pr…
lakshayk-nv 53b9f0b
Added combined testfile for register initialization (PPR,ZPR,FPR64/12…
lakshayk-nv caebb7b
Deleted Indvidual testfiles
lakshayk-nv 230aade
Modified: requirement(aarch64) check only required once for a test
lakshayk-nv aab854b
Modified: PPR register class should be set with immediate value 31 fo…
lakshayk-nv f1e561c
Modified: Testcases to check disassembly, apart from setReg warning a…
lakshayk-nv 25b02b6
Modified: Fixed Typo in assertion message
lakshayk-nv b83b52d
Modified: Simplified regex checks for disassembly
lakshayk-nv 433b62e
Modified: Testcases to strictly check correct order of instruction in…
lakshayk-nv 482a0a3
Modified: Stricter asserts for checking immediate (Value) to be set i…
lakshayk-nv 951e05e
Modified: Base-instruction of FPR64 reg class to MOVID & ZPR reg clas…
lakshayk-nv ea8b28b
Modified: Updated testcases checks for disassembly as be base instruc…
lakshayk-nv b5853a9
Modified: reverted headers
lakshayk-nv 2c16af6
Modified: Simplified testfile to check only disassembly.
lakshayk-nv c21ee8b
Modified: Removed redundant comments and asserts.
lakshayk-nv 5cda550
Modified: Revert back to asserting bit width for GPR Register classes
lakshayk-nv File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,39 @@ | ||
| REQUIRES: aarch64-registered-target | ||
|
|
||
| ## PPR Register Class Initialization Testcase | ||
| ## Ideally, we should use PTRUE_{B/H/S/D} instead of FADDV_VPZ_D for an isolated test case; | ||
| ## However, exegesis does not yet support PTRUE_{B/H/S/D}. | ||
| RUN: llvm-exegesis -mcpu=neoverse-v2 -mode=latency --dump-object-to-disk=%d --opcode-name=FADDV_VPZ_D 2>&1 | ||
| RUN: llvm-objdump -d %d > %t.s | ||
| RUN: FileCheck %s --check-prefix=PPR_ASM < %t.s | ||
| PPR_ASM: <foo>: | ||
| PPR_ASM: ptrue p{{[0-9]+}}.b | ||
| PPR_ASM-NEXT: mov z{{[0-9]+}}.d, #0x0 | ||
| PPR_ASM-NEXT: faddv d{{[0-9]+}}, p{{[0-9]+}}, z{{[0-9]+}} | ||
|
|
||
| ## ZPR Register Class Initialization Testcase | ||
| ## Ideally, we should use DUP_ZI_{B/H/S/D} instead of FADDV_VPZ_D for an isolated test case; | ||
| ## However, exegesis does not yet support DUP_ZI_{B/H/S/D}. | ||
| RUN: llvm-exegesis -mcpu=neoverse-v2 -mode=latency --dump-object-to-disk=%d --opcode-name=FADDV_VPZ_D 2>&1 | ||
| RUN: llvm-objdump -d %d > %t.s | ||
| RUN: FileCheck %s --check-prefix=ZPR_ASM < %t.s | ||
| ZPR_ASM: <foo>: | ||
| ZPR_ASM: ptrue p{{[0-9]+}}.b | ||
| ZPR_ASM-NEXT: mov z{{[0-9]+}}.d, #0x0 | ||
| ZPR_ASM-NEXT: faddv d{{[0-9]+}}, p{{[0-9]+}}, z{{[0-9]+}} | ||
|
|
||
| ## FPR128 Register Class Initialization Testcase | ||
| RUN: llvm-exegesis -mcpu=neoverse-v2 -mode=latency --dump-object-to-disk=%d --opcode-name=ADDVv16i8v 2>&1 | ||
| RUN: llvm-objdump -d %d > %t.s | ||
| RUN: FileCheck %s --check-prefix=FPR128-ASM < %t.s | ||
| FPR128-ASM: <foo>: | ||
| FPR128-ASM: movi v{{[0-9]+}}.2d, #0000000000000000 | ||
| FPR128-ASM-NEXT: addv b{{[0-9]+}}, v{{[0-9]+}}.16b | ||
|
|
||
| ## FPR64 Register Class Initialization Testcase | ||
| RUN: llvm-exegesis -mcpu=neoverse-v2 -mode=latency --dump-object-to-disk=%d --opcode-name=ADDVv4i16v 2>&1 | ||
| RUN: llvm-objdump -d %d > %t.s | ||
| RUN: FileCheck %s --check-prefix=FPR64-ASM < %t.s | ||
| FPR64-ASM: <foo>: | ||
| FPR64-ASM: movi d{{[0-9]+}}, #0000000000000000 | ||
| FPR64-ASM-NEXT: addv h{{[0-9]+}}, v{{[0-9]+}}.4h |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
MOVi32imm and MOVi64imm are pseudo's that should be able to handle any immedated AFAIU. They should be expanded later into a series of MOVs if needed.
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.
Yes,
MOVi32immandMOVi64immare pseudo-instructions that decompose into the MOV instruction, such as mov w21, #0x0, as seen in disassembly using GPR32/64 for opcodes likeLSRVWr.The assertion primarily ensures codebase consistency. In practice, setRegTo is almost always used to set a register to zero.
Since the MOV instruction accepts a 16-bit immediate, the upper bound check is set to 2^16 accordingly. [Referred ISA doc here].
PS: I tried with larger value setting using the pseudo, it works for larger values than 2^16. In my opinion, we can skip the assert. What do you think ?
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.
Yeah removing this assert sounds OK to me.