xref: /llvm-project/llvm/test/tools/llvm-reduce/mir/preserve-machine-function-info-amdgpu.mir (revision 3a20597776a5d2920e511d81653b4d2b6ca0c855)
1# REQUIRES: amdgpu-registered-target
2# RUN: llvm-reduce -abort-on-invalid-reduction -simplify-mir -mtriple=amdgcn-amd-amdhsa -mcpu=gfx908 --test FileCheck --test-arg --check-prefix=CHECK-INTERESTINGNESS --test-arg %s --test-arg --input-file %s -o %t 2> %t.log
3# RUN: FileCheck --check-prefix=RESULT %s < %t
4
5# CHECK-INTERESTINGNESS-COUNT-6: S_NOP
6
7# RESULT: name: func
8
9--- |
10  define void @func() {
11    ret void
12  }
13
14...
15
16# RESULT: machineFunctionInfo:
17# RESULT-NEXT: explicitKernArgSize: 108
18# RESULT-NEXT: maxKernArgAlign: 32
19# RESULT-NEXT: ldsSize:         256
20# RESULT-NEXT: gdsSize:         128
21# RESULT-NEXT: dynLDSAlign:     16
22# RESULT-NEXT: isEntryFunction: true
23# RESULT-NEXT: noSignedZerosFPMath: true
24# RESULT-NEXT: memoryBound:     true
25# RESULT-NEXT: waveLimiter:     true
26# RESULT-NEXT: hasSpilledSGPRs: true
27# RESULT-NEXT: hasSpilledVGPRs: true
28# RESULT-NEXT: scratchRSrcReg:  '$sgpr48_sgpr49_sgpr50_sgpr51'
29# RESULT-NEXT: frameOffsetReg:  '$sgpr44'
30# RESULT-NEXT: stackPtrOffsetReg: '$sgpr45'
31# RESULT-NEXT: bytesInStackArgArea: 112
32# RESULT-NEXT: returnsVoid:     false
33# RESULT-NEXT: argumentInfo:
34# RESULT-NEXT: privateSegmentBuffer: { reg: '$sgpr60_sgpr61_sgpr62_sgpr63' }
35# RESULT-NEXT: dispatchPtr:     { reg: '$sgpr6_sgpr7' }
36# RESULT-NEXT: queuePtr:        { reg: '$sgpr4_sgpr5' }
37# RESULT-NEXT: dispatchID:      { reg: '$sgpr12_sgpr13' }
38# RESULT-NEXT: workGroupIDX:    { reg: '$sgpr20' }
39# RESULT-NEXT: workGroupIDY:    { reg: '$sgpr19' }
40# RESULT-NEXT: workGroupIDZ:    { reg: '$sgpr18' }
41# RESULT-NEXT: LDSKernelId:     { reg: '$sgpr15' }
42# RESULT-NEXT: implicitArgPtr:  { reg: '$sgpr10_sgpr11' }
43# RESULT-NEXT: workItemIDX:     { reg: '$vgpr34', mask: 1023 }
44# RESULT-NEXT: workItemIDY:     { reg: '$vgpr34', mask: 1047552 }
45# RESULT-NEXT: workItemIDZ:     { reg: '$vgpr34', mask: 1072693248 }
46# RESULT-NEXT: mode:
47# RESULT-NEXT: ieee:            false
48# RESULT-NEXT: dx10-clamp:      false
49# RESULT-NEXT: fp32-input-denormals: false
50# RESULT-NEXT: fp32-output-denormals: false
51# RESULT-NEXT: fp64-fp16-input-denormals: false
52# RESULT-NEXT: fp64-fp16-output-denormals: false
53# RESULT-NEXT: highBitsOf32BitAddress: 4276993775
54# RESULT-NEXT: occupancy:       8
55# RESULT-NEXT: wwmReservedRegs:
56# RESULT-NEXT: - '$vgpr2'
57# RESULT-NEXT: - '$vgpr3'
58# RESULT-NEXT: vgprForAGPRCopy: '$vgpr33'
59
60# RESULT: S_NOP 0, implicit $sgpr48_sgpr49_sgpr50_sgpr51
61# RESULT: S_NOP 0, implicit $vgpr33
62# RESULT: S_NOP 0, implicit $sgpr44
63# RESULT: S_NOP 0, implicit $sgpr45
64# RESULT: S_NOP 0, implicit $vgpr2
65# RESULT: S_NOP 0, implicit $vgpr3
66
67---
68name: func
69tracksRegLiveness: true
70machineFunctionInfo:
71  explicitKernArgSize: 108
72  maxKernArgAlign: 32
73  ldsSize:         256
74  gdsSize:         128
75  dynLDSAlign:     16
76  isEntryFunction: true
77  noSignedZerosFPMath: true
78  memoryBound:     true
79  waveLimiter:     true
80  hasSpilledSGPRs: true
81  hasSpilledVGPRs: true
82  scratchRSrcReg:  '$sgpr48_sgpr49_sgpr50_sgpr51'
83  frameOffsetReg:  '$sgpr44'
84  stackPtrOffsetReg: '$sgpr45'
85  bytesInStackArgArea: 112
86  returnsVoid:     false
87  argumentInfo:
88    privateSegmentBuffer: { reg: '$sgpr60_sgpr61_sgpr62_sgpr63' }
89    dispatchPtr:     { reg: '$sgpr6_sgpr7' }
90    queuePtr:        { reg: '$sgpr4_sgpr5' }
91    dispatchID:      { reg: '$sgpr12_sgpr13' }
92    workGroupIDX:    { reg: '$sgpr20' }
93    workGroupIDY:    { reg: '$sgpr19' }
94    workGroupIDZ:    { reg: '$sgpr18' }
95    implicitArgPtr:  { reg: '$sgpr10_sgpr11' }
96    workItemIDX:     { reg: '$vgpr34', mask: 1023 }
97    workItemIDY:     { reg: '$vgpr34', mask: 1047552 }
98    workItemIDZ:     { reg: '$vgpr34', mask: 1072693248 }
99  mode:
100    ieee:            false
101    dx10-clamp:      false
102    fp32-input-denormals: false
103    fp32-output-denormals: false
104    fp64-fp16-input-denormals: false
105    fp64-fp16-output-denormals: false
106  highBitsOf32BitAddress: 0xfeedbeef
107  occupancy:       8
108  wwmReservedRegs:
109    - '$vgpr2'
110    - '$vgpr3'
111  vgprForAGPRCopy: '$vgpr33'
112body:             |
113  bb.0:
114    S_WAITCNT 0
115    %0:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
116
117    ; Test some register uses that are undef unless the reserved
118    ; registers are respected.
119    S_NOP 0, implicit $sgpr48_sgpr49_sgpr50_sgpr51
120    S_NOP 0, implicit $vgpr33
121    S_NOP 0, implicit $sgpr44
122    S_NOP 0, implicit $sgpr45
123    S_NOP 0, implicit $vgpr2
124    S_NOP 0, implicit $vgpr3
125    S_ENDPGM 0, implicit %0
126...
127