llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-amdgpu

Author: Shilei Tian (shiltian)

<details>
<summary>Changes</summary>



---
Full diff: https://github.com/llvm/llvm-project/pull/207632.diff


8 Files Affected:

- (modified) llvm/docs/AMDGPUUsage.rst (+1) 
- (modified) llvm/include/llvm/Support/AMDGPUObjLinkingInfo.h (+3-1) 
- (modified) llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp (+1) 
- (modified) llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp (+1) 
- (modified) llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp (+4) 
- (modified) llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.h (+1) 
- (modified) llvm/test/CodeGen/AMDGPU/lds-link-time-codegen.ll (+18) 
- (modified) llvm/test/MC/AMDGPU/amdgpu-info-roundtrip.s (+5-5) 


``````````diff
diff --git a/llvm/docs/AMDGPUUsage.rst b/llvm/docs/AMDGPUUsage.rst
index 85a685c246655..69a3cc894c13f 100644
--- a/llvm/docs/AMDGPUUsage.rst
+++ b/llvm/docs/AMDGPUUsage.rst
@@ -3249,6 +3249,7 @@ if needed.
      0x1   ``FUNC_USES_VCC``           Function uses the VCC register
      0x2   ``FUNC_USES_FLAT_SCRATCH``  Function uses flat scratch addressing
      0x4   ``FUNC_HAS_DYN_STACK``      Function has dynamic stack allocation
+     0x8   ``FUNC_WGP_MODE``           Function uses WGP execution mode
      ===== =========================== 
==========================================
 
   Symbol references (``INFO_FUNC``, ``INFO_USE``, ``INFO_CALL``) generate
diff --git a/llvm/include/llvm/Support/AMDGPUObjLinkingInfo.h 
b/llvm/include/llvm/Support/AMDGPUObjLinkingInfo.h
index ef71e836bfc40..7d36eb08fa620 100644
--- a/llvm/include/llvm/Support/AMDGPUObjLinkingInfo.h
+++ b/llvm/include/llvm/Support/AMDGPUObjLinkingInfo.h
@@ -68,7 +68,9 @@ enum class FuncInfoFlags : uint32_t {
   FUNC_USES_VCC = 1U << 0,
   FUNC_USES_FLAT_SCRATCH = 1U << 1,
   FUNC_HAS_DYN_STACK = 1U << 2,
-  LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/FUNC_HAS_DYN_STACK),
+  /// Function uses WGP mode. If unset, the function uses CU mode.
+  FUNC_WGP_MODE = 1U << 3,
+  LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/FUNC_WGP_MODE),
 };
 
 } // namespace AMDGPU
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp 
b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
index e9c669d744a5c..10e9d5414353c 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
@@ -958,6 +958,7 @@ bool AMDGPUAsmPrinter::runOnMachineFunction(MachineFunction 
&MF) {
          /*NumAccVGPR=*/static_cast<uint32_t>(RU.NumAGPR),
          /*PrivateSegmentSize=*/static_cast<uint32_t>(RU.PrivateSegmentSize),
          /*Occupancy=*/Occupancy,
+         /*UsesWgpMode=*/STM.supportsWGP() && !STM.isCuModeEnabled(),
          /*UsesVCC=*/RU.UsesVCC,
          /*UsesFlatScratch=*/RU.UsesFlatScratch,
          /*HasDynStack=*/RU.HasDynamicallySizedStack,
diff --git a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp 
b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
index 22ed4bfc22ab1..55150cae4a253 100644
--- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
+++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
@@ -6905,6 +6905,7 @@ bool AMDGPUAsmParser::ParseDirectiveAMDGPUInfo() {
       FI.UsesFlatScratch =
           !!(Flags & AMDGPU::FuncInfoFlags::FUNC_USES_FLAT_SCRATCH);
       FI.HasDynStack = !!(Flags & AMDGPU::FuncInfoFlags::FUNC_HAS_DYN_STACK);
+      FI.UsesWgpMode = !!(Flags & AMDGPU::FuncInfoFlags::FUNC_WGP_MODE);
       HasScalarAttrs = true;
     } else if (Dir == "num_sgpr") {
       int64_t Val;
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp 
b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
index a72d38def748c..bbc9a7def0d77 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
@@ -751,6 +751,8 @@ void AMDGPUTargetAsmStreamer::emitAMDGPUInfo(
         Flags |= AMDGPU::FuncInfoFlags::FUNC_USES_FLAT_SCRATCH;
       if (Info->HasDynStack)
         Flags |= AMDGPU::FuncInfoFlags::FUNC_HAS_DYN_STACK;
+      if (Info->UsesWgpMode)
+        Flags |= AMDGPU::FuncInfoFlags::FUNC_WGP_MODE;
       OS << "\t\t.amdgpu_flags " << llvm::to_underlying(Flags) << '\n';
       OS << "\t\t.amdgpu_num_sgpr " << Info->NumSGPR << '\n';
       OS << "\t\t.amdgpu_num_vgpr " << Info->NumArchVGPR << '\n';
@@ -1225,6 +1227,8 @@ void AMDGPUTargetELFStreamer::emitAMDGPUInfo(
         Flags |= AMDGPU::FuncInfoFlags::FUNC_USES_FLAT_SCRATCH;
       if (Info->HasDynStack)
         Flags |= AMDGPU::FuncInfoFlags::FUNC_HAS_DYN_STACK;
+      if (Info->UsesWgpMode)
+        Flags |= AMDGPU::FuncInfoFlags::FUNC_WGP_MODE;
       EmitU32Entry(AMDGPU::InfoKind::INFO_FLAGS, llvm::to_underlying(Flags));
       EmitU32Entry(AMDGPU::InfoKind::INFO_NUM_SGPR, Info->NumSGPR);
       EmitU32Entry(AMDGPU::InfoKind::INFO_NUM_VGPR, Info->NumArchVGPR);
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.h 
b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.h
index dd0759c573606..581bc185b24c9 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.h
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.h
@@ -36,6 +36,7 @@ struct FuncInfo {
   uint32_t NumAccVGPR = 0;
   uint32_t PrivateSegmentSize = 0;
   uint32_t Occupancy = 0;
+  bool UsesWgpMode = false;
   bool UsesVCC = false;
   bool UsesFlatScratch = false;
   bool HasDynStack = false;
diff --git a/llvm/test/CodeGen/AMDGPU/lds-link-time-codegen.ll 
b/llvm/test/CodeGen/AMDGPU/lds-link-time-codegen.ll
index 0020c2272d23e..646248bbbf97b 100644
--- a/llvm/test/CodeGen/AMDGPU/lds-link-time-codegen.ll
+++ b/llvm/test/CodeGen/AMDGPU/lds-link-time-codegen.ll
@@ -1,5 +1,9 @@
 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 
-amdgpu-enable-object-linking < %s | FileCheck -check-prefixes=ASM %s 
--implicit-check-not=.amdgpu_num_agpr
 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 
-amdgpu-enable-object-linking -filetype=obj < %s | llvm-readobj -r --syms 
--sections - | FileCheck -check-prefixes=ELF %s
+; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 
-amdgpu-enable-object-linking -filetype=asm < %s | FileCheck 
-check-prefixes=WGP %s
+; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+wavefrontsize64 
-amdgpu-enable-object-linking -filetype=asm < %s | FileCheck 
-check-prefixes=WGP %s
+; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+cumode 
-amdgpu-enable-object-linking -filetype=asm < %s | FileCheck -check-prefixes=CU 
%s
+; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 
-mattr=+cumode,+wavefrontsize64 -amdgpu-enable-object-linking -filetype=asm < 
%s | FileCheck -check-prefixes=CU %s
 
 ; Test that with object linking enabled, external LDS declarations produce
 ; @abs32@lo relocations, SHN_AMDGPU_LDS symbols, .amdgpu_lds directives,
@@ -38,6 +42,20 @@
 ; ASM-DAG:   .amdgpu_call device_func
 ; ASM-DAG: .end_amdgpu_info
 
+; COM: FUNC_WGP_MODE (0x8): WGP mode is the default on a WGP-capable target
+; COM: (gfx11), so the flag is set on every function; +cumode selects CU mode
+; COM: and clears it. Checked for both +wavefrontsize32 (default) and
+; COM: +wavefrontsize64.
+; WGP:      .amdgpu_info device_func
+; WGP-NEXT:   .amdgpu_flags 8
+; WGP:      .amdgpu_info test_kernel
+; WGP-NEXT:   .amdgpu_flags 8
+
+; CU:       .amdgpu_info device_func
+; CU-NEXT:    .amdgpu_flags 0
+; CU:       .amdgpu_info test_kernel
+; CU-NEXT:    .amdgpu_flags 0
+
 ; SHN_AMDGPU_LDS directives.
 ; ASM-DAG: .amdgpu_lds lds_large, 256, 16
 ; ASM-DAG: .amdgpu_lds lds_small, 128, 4
diff --git a/llvm/test/MC/AMDGPU/amdgpu-info-roundtrip.s 
b/llvm/test/MC/AMDGPU/amdgpu-info-roundtrip.s
index 72406e3ad60a6..85ba86d5918d7 100644
--- a/llvm/test/MC/AMDGPU/amdgpu-info-roundtrip.s
+++ b/llvm/test/MC/AMDGPU/amdgpu-info-roundtrip.s
@@ -31,11 +31,11 @@ addr_taken_func:
 
        .globl  extern_func
 
-// COM: Kernel: flags=7 (KERNEL|VCC|FLAT_SCRATCH), resources, call edge, use
-// COM: edge, indirect call, and type ID. Non-zero AGPR to verify conditional
-// COM: emission.
+// COM: Kernel: flags=15 (VCC|FLAT_SCRATCH|HAS_DYN_STACK|WGP_MODE), resources,
+// COM: call edge, use edge, indirect call, and type ID. Non-zero AGPR to 
verify
+// COM: conditional emission.
        .amdgpu_info my_kernel
-               .amdgpu_flags 7
+               .amdgpu_flags 15
                .amdgpu_num_sgpr 33
                .amdgpu_num_vgpr 32
                .amdgpu_num_agpr 4
@@ -69,7 +69,7 @@ addr_taken_func:
        .end_amdgpu_info
 
 // ASM: .amdgpu_info my_kernel
-// ASM: .amdgpu_flags 7
+// ASM: .amdgpu_flags 15
 // ASM: .amdgpu_num_sgpr 33
 // ASM: .amdgpu_num_vgpr 32
 // ASM: .amdgpu_num_agpr 4

``````````

</details>


https://github.com/llvm/llvm-project/pull/207632
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to