You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When SGPR available for argument passing run out, they silently switch to using whole VGPRs to pass arguments.
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx950 -o - %s
target triple = "amdgcn-amd-amdhsa"
define i32 @test0(<8 x i32> inreg %arg0,
<8 x i32> inreg %arg1,
<2 x i32> inreg %arg2,
i32 inreg %arg3,
i32 inreg %arg4) {
%add = add i32 %arg3, %arg4 ; arg3 is v0, arg4 is in v1. These should be packed into a lane and extracted with readlane
ret i32 %add
}
Ideally we would start to pack inreg arguments into individual lanes of VGPRs, not directly into VGPRs.
In this example, we ran out of SGPRs after 18 arguments. %arg3 and %arg4 end up in v0 and v1. We could treat these as WWM values, and pass them in v0.lane0 and v0.lane1.
Either way, we should get a scalar value in downstream code rather than forced VALU usage