[llvm] [AMDGPU] Allocate i1 argument to SGPRs (PR #72461)

Jun Wang via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 25 11:17:42 PST 2024


================
@@ -185,9 +185,12 @@ def CSR_AMDGPU_NoRegs : CalleeSavedRegs<(add)>;
 // Calling convention for leaf functions
 def CC_AMDGPU_Func : CallingConv<[
   CCIfByVal<CCPassByVal<4, 4>>,
-  CCIfType<[i1], CCPromoteToType<i32>>,
   CCIfType<[i8, i16], CCIfExtend<CCPromoteToType<i32>>>,
 
+  CCIfType<[i1] , CCCustom<"CC_AMDGPU_Custom_I1">>,
+
+  CCIfType<[i1], CCPromoteToType<i32>>,
----------------
jwanggit86 wrote:

I think the promotion needs to be done regardless of inreg. The problem is as follows:
```
foo(a bunch of args, i1 %argX, ...)
```
If the bunch of args (i1 or inreg) before argX takes all the SGPRs, then argX is going to get a VGPR regardless of inreg or not. If it's not promoted to i32, we end up with the COPY from 32b VGPR to 64b VGPR as shown above.

https://github.com/llvm/llvm-project/pull/72461


More information about the llvm-commits mailing list