Index: llvm/docs/AMDGPUUsage.rst =================================================================== --- llvm/docs/AMDGPUUsage.rst +++ llvm/docs/AMDGPUUsage.rst @@ -12107,6 +12107,8 @@ :ref:`amdgpu-amdhsa-compute_pgm_rsrc1-gfx6-gfx10-table`. ``.amdhsa_forward_progress`` 0 GFX10 Controls FWD_PROGRESS in :ref:`amdgpu-amdhsa-compute_pgm_rsrc1-gfx6-gfx10-table`. + ``.amdhsa_shared_vgpr_count`` 0 GFX10 Controls SHARED_VGPR_COUNT in + :ref:`amdgpu-amdhsa-compute_pgm_rsrc3-gfx10-table`. ``.amdhsa_exception_fp_ieee_invalid_op`` 0 GFX6-GFX10 Controls ENABLE_EXCEPTION_IEEE_754_FP_INVALID_OPERATION in :ref:`amdgpu-amdhsa-compute_pgm_rsrc2-gfx6-gfx10-table`. ``.amdhsa_exception_fp_denorm_src`` 0 GFX6-GFX10 Controls ENABLE_EXCEPTION_FP_DENORMAL_SOURCE in Index: llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp =================================================================== --- llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp +++ llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp @@ -4761,6 +4761,12 @@ return Error(IDRange.Start, "directive requires gfx10+", IDRange); PARSE_BITS_ENTRY(KD.compute_pgm_rsrc1, COMPUTE_PGM_RSRC1_FWD_PROGRESS, Val, ValRange); + } else if (ID == ".amdhsa_shared_vgpr_count") { + if (IVersion.Major < 10) + return Error(IDRange.Start, "directive requires gfx10+", IDRange); + PARSE_BITS_ENTRY(KD.compute_pgm_rsrc3, + COMPUTE_PGM_RSRC3_GFX10_SHARED_VGPR_COUNT, + Val, ValRange); } else if (ID == ".amdhsa_exception_fp_ieee_invalid_op") { PARSE_BITS_ENTRY( KD.compute_pgm_rsrc2, Index: llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp =================================================================== --- llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp +++ llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp @@ -434,6 +434,9 @@ PRINT_FIELD(OS, ".amdhsa_forward_progress", KD, compute_pgm_rsrc1, amdhsa::COMPUTE_PGM_RSRC1_FWD_PROGRESS); + PRINT_FIELD(OS, ".amdhsa_shared_vgpr_count", KD, + compute_pgm_rsrc3, + amdhsa::COMPUTE_PGM_RSRC3_GFX10_SHARED_VGPR_COUNT); } PRINT_FIELD( OS, ".amdhsa_exception_fp_ieee_invalid_op", KD, Index: llvm/test/MC/AMDGPU/hsa-diag-v3.s =================================================================== --- llvm/test/MC/AMDGPU/hsa-diag-v3.s +++ llvm/test/MC/AMDGPU/hsa-diag-v3.s @@ -225,6 +225,15 @@ .amdhsa_forward_progress 5 .end_amdhsa_kernel +// GCN-LABEL: warning: test_amdhsa_shared_vgpr_count +// NONGFX10: error: directive requires gfx10+ +// GFX10: error: .amdhsa_next_free_vgpr directive is required +// NONAMDHSA: error: unknown directive +.warning "test_amdhsa_shared_vgpr_count" +.amdhsa_kernel test_amdhsa_shared_vgpr_count + .amdhsa_shared_vgpr_count 8 +.end_amdhsa_kernel + // GCN-LABEL: warning: test_next_free_vgpr_invalid // AMDHSA: error: .amdgcn.next_free_{v,s}gpr symbols must be absolute expressions // NONAMDHSA-NOT: error: Index: llvm/test/MC/AMDGPU/hsa-gfx10-v3.s =================================================================== --- llvm/test/MC/AMDGPU/hsa-gfx10-v3.s +++ llvm/test/MC/AMDGPU/hsa-gfx10-v3.s @@ -25,7 +25,7 @@ // minimal // OBJDUMP-NEXT: 0000 00000000 00000000 00000000 00000000 // OBJDUMP-NEXT: 0010 00000000 00000000 00000000 00000000 -// OBJDUMP-NEXT: 0020 00000000 00000000 00000000 00000000 +// OBJDUMP-NEXT: 0020 00000000 00000000 00000000 08000000 // OBJDUMP-NEXT: 0030 0000ac60 80000000 00000000 00000000 // complete // OBJDUMP-NEXT: 0040 01000000 01000000 08000000 00000000 @@ -68,11 +68,13 @@ .amdhsa_kernel minimal .amdhsa_next_free_vgpr 0 .amdhsa_next_free_sgpr 0 + .amdhsa_shared_vgpr_count 8 .end_amdhsa_kernel // ASM: .amdhsa_kernel minimal // ASM: .amdhsa_next_free_vgpr 0 // ASM-NEXT: .amdhsa_next_free_sgpr 0 +// ASM: .amdhsa_shared_vgpr_count 8 // ASM: .end_amdhsa_kernel // Test that we can specify all available directives with non-default values. @@ -152,6 +154,7 @@ // ASM-NEXT: .amdhsa_workgroup_processor_mode 1 // ASM-NEXT: .amdhsa_memory_ordered 1 // ASM-NEXT: .amdhsa_forward_progress 1 +// ASM-NEXT: .amdhsa_shared_vgpr_count 0 // ASM-NEXT: .amdhsa_exception_fp_ieee_invalid_op 1 // ASM-NEXT: .amdhsa_exception_fp_denorm_src 1 // ASM-NEXT: .amdhsa_exception_fp_ieee_div_zero 1