-
Notifications
You must be signed in to change notification settings - Fork 15.1k
[AMDGPU][True16][CodeGen] select vgpr16 for asm inline 16bit vreg #140946
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 1 commit
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,48 @@ | ||
| ; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -enable-var-scope -check-prefixes=GFX11 %s | ||
|
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. can you auto generate check lines? 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. Sure |
||
|
|
||
| ; GFX11-LABEL: {{^}}s_input_output_i16: | ||
| ; GFX11: s_mov_b32 s[[REG:[0-9]+]], -1 | ||
| ; GFX11: ; use s[[REG]] | ||
| define amdgpu_kernel void @s_input_output_i16() #0 { | ||
| %v = tail call i16 asm sideeffect "s_mov_b32 $0, -1", "=s"() | ||
| tail call void asm sideeffect "; use $0", "s"(i16 %v) #0 | ||
| ret void | ||
| } | ||
|
|
||
| ; GFX11-LABEL: {{^}}s_input_output_f16: | ||
| ; GFX11: s_mov_b32 s[[REG:[0-9]+]], -1 | ||
| ; GFX11: ; use s[[REG]] | ||
| define amdgpu_kernel void @s_input_output_f16() #0 { | ||
| %v = tail call half asm sideeffect "s_mov_b32 $0, -1", "=s"() #0 | ||
| tail call void asm sideeffect "; use $0", "s"(half %v) | ||
| ret void | ||
| } | ||
|
|
||
| ; GFX11-LABEL: {{^}}v_input_output_f16: | ||
| ; GFX11: v_mov_b32 v[[REG:[0-9]+]], -1 | ||
| ; GFX11: ; use v[[REG]] | ||
| define amdgpu_kernel void @v_input_output_f16() #0 { | ||
| %v = tail call half asm sideeffect "v_mov_b32 $0, -1", "=v"() #0 | ||
| tail call void asm sideeffect "; use $0", "v"(half %v) | ||
| ret void | ||
| } | ||
|
|
||
| ; GFX11-LABEL: {{^}}v_input_output_i16: | ||
| ; GFX11: v_mov_b32 v[[REG:[0-9]+]], -1 | ||
| ; GFX11: ; use v[[REG]] | ||
| define amdgpu_kernel void @v_input_output_i16() #0 { | ||
| %v = tail call i16 asm sideeffect "v_mov_b32 $0, -1", "=v"() #0 | ||
| tail call void asm sideeffect "; use $0", "v"(i16 %v) | ||
| ret void | ||
| } | ||
|
|
||
| ; GFX11-LABEL: {{^}}i16_imm_input_phys_vgpr: | ||
| ; GFX11: v_mov_b32_e32 v0, 0xffff | ||
| ; GFX11: ; use v0 | ||
| define amdgpu_kernel void @i16_imm_input_phys_vgpr() { | ||
| entry: | ||
| call void asm sideeffect "; use $0 ", "{v0}"(i16 65535) | ||
| ret void | ||
| } | ||
|
|
||
| attributes #0 = { nounwind } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,57 @@ | ||
| ; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -enable-var-scope -check-prefixes=GFX11 %s | ||
|
|
||
| ; GFX11-LABEL: {{^}}s_input_output_i16: | ||
| ; GFX11: s_mov_b32 s[[REG:[0-9]+]], -1 | ||
| ; GFX11: ; use s[[REG]] | ||
| define amdgpu_kernel void @s_input_output_i16() #0 { | ||
| %v = tail call i16 asm sideeffect "s_mov_b32 $0, -1", "=s"() | ||
| tail call void asm sideeffect "; use $0", "s"(i16 %v) #0 | ||
| ret void | ||
| } | ||
|
|
||
| ; GFX11-LABEL: {{^}}s_input_output_f16: | ||
| ; GFX11: s_mov_b32 s[[REG:[0-9]+]], -1 | ||
| ; GFX11: ; use s[[REG]] | ||
| define amdgpu_kernel void @s_input_output_f16() #0 { | ||
| %v = tail call half asm sideeffect "s_mov_b32 $0, -1", "=s"() #0 | ||
| tail call void asm sideeffect "; use $0", "s"(half %v) | ||
| ret void | ||
| } | ||
|
|
||
| ; GFX11-LABEL: {{^}}v_input_output_f16: | ||
| ; GFX11: v_mov_b16 v[[REG:[0-9]+.(l|h)]], -1 | ||
| ; GFX11: ; use v[[REG]] | ||
| define amdgpu_kernel void @v_input_output_f16() #0 { | ||
| %v = tail call half asm sideeffect "v_mov_b16 $0, -1", "=v"() #0 | ||
| tail call void asm sideeffect "; use $0", "v"(half %v) | ||
| ret void | ||
| } | ||
|
|
||
| ; GFX11-LABEL: {{^}}v_input_output_i16: | ||
| ; GFX11: v_mov_b16 v[[REG:[0-9]+.(l|h)]], -1 | ||
| ; GFX11: ; use v[[REG]] | ||
| define amdgpu_kernel void @v_input_output_i16() #0 { | ||
| %v = tail call i16 asm sideeffect "v_mov_b16 $0, -1", "=v"() #0 | ||
| tail call void asm sideeffect "; use $0", "v"(i16 %v) | ||
| ret void | ||
| } | ||
|
|
||
| ; GFX11-LABEL: {{^}}i16_imm_input_phys_vgpr_lo: | ||
| ; GFX11: v_mov_b16_e32 v0.l, -1 | ||
| ; GFX11: ; use v0.l | ||
| define amdgpu_kernel void @i16_imm_input_phys_vgpr_lo() { | ||
| entry: | ||
| call void asm sideeffect "; use $0 ", "{v0.l}"(i16 65535) | ||
|
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. Can you please add one more test with v0.h? 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. And do we need a constraint to specify specifically an l or h for a virtual register? 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. Added a .h case 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 do not think it is practically needed. At least it is not needed for correctness at this point. |
||
| ret void | ||
| } | ||
|
|
||
| ; GFX11-LABEL: {{^}}i16_imm_input_phys_vgpr_hi: | ||
| ; GFX11: v_mov_b16_e32 v0.h, -1 | ||
| ; GFX11: ; use v0.h | ||
| define amdgpu_kernel void @i16_imm_input_phys_vgpr_hi() { | ||
| entry: | ||
| call void asm sideeffect "; use $0 ", "{v0.h}"(i16 65535) | ||
| ret void | ||
| } | ||
|
|
||
| attributes #0 = { nounwind } | ||
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.
switchseems overkill here. Could just handle it with: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.
Or even move the handling for the
BitWidth == 16case insidegetVGPRClassForBitWidth?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.
This reminds me we need constraints for the aligned and unaligned versions of register classes