19cac4e6dSMatt Arsenault; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -stop-after finalize-isel -o %t.mir %s 2bc6d07caSMatt Arsenault; RUN: llc -run-pass=none -verify-machineinstrs %t.mir -o - | FileCheck %s 3bc6d07caSMatt Arsenault 4bc6d07caSMatt Arsenault; Test that SIMachineFunctionInfo can be round trip serialized through 5bc6d07caSMatt Arsenault; MIR. 6bc6d07caSMatt Arsenault 7bc6d07caSMatt Arsenault@lds = addrspace(3) global [512 x float] undef, align 4 8bc6d07caSMatt Arsenault 9bc6d07caSMatt Arsenault; CHECK-LABEL: {{^}}name: kernel 10bc6d07caSMatt Arsenault; CHECK: machineFunctionInfo: 11bc6d07caSMatt Arsenault; CHECK-NEXT: explicitKernArgSize: 128 12bc6d07caSMatt Arsenault; CHECK-NEXT: maxKernArgAlign: 64 132710171aSNicolai Haehnle; CHECK-NEXT: ldsSize: 0 14bc6d07caSMatt Arsenault; CHECK-NEXT: isEntryFunction: true 15bc6d07caSMatt Arsenault; CHECK-NEXT: noSignedZerosFPMath: false 16bc6d07caSMatt Arsenault; CHECK-NEXT: memoryBound: false 17bc6d07caSMatt Arsenault; CHECK-NEXT: waveLimiter: false 18bc6d07caSMatt Arsenault; CHECK-NEXT: scratchRSrcReg: '$sgpr96_sgpr97_sgpr98_sgpr99' 19bc6d07caSMatt Arsenault; CHECK-NEXT: scratchWaveOffsetReg: '$sgpr101' 20bc6d07caSMatt Arsenault; CHECK-NEXT: frameOffsetReg: '$sgpr101' 21b812b7a4SMatt Arsenault; CHECK-NEXT: stackPtrOffsetReg: '$sgpr101' 22*80177ca5SMichael Liao; CHECK-NEXT: argumentInfo: 23*80177ca5SMichael Liao; CHECK-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' } 24*80177ca5SMichael Liao; CHECK-NEXT: kernargSegmentPtr: { reg: '$sgpr4_sgpr5' } 25*80177ca5SMichael Liao; CHECK-NEXT: workGroupIDX: { reg: '$sgpr6' } 26*80177ca5SMichael Liao; CHECK-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr7' } 27*80177ca5SMichael Liao; CHECK-NEXT: workItemIDX: { reg: '$vgpr0' } 28bc6d07caSMatt Arsenault; CHECK-NEXT: body: 29bc6d07caSMatt Arsenaultdefine amdgpu_kernel void @kernel(i32 %arg0, i64 %arg1, <16 x i32> %arg2) { 30bc6d07caSMatt Arsenault %gep = getelementptr inbounds [512 x float], [512 x float] addrspace(3)* @lds, i32 0, i32 %arg0 31bc6d07caSMatt Arsenault store float 0.0, float addrspace(3)* %gep, align 4 32bc6d07caSMatt Arsenault ret void 33bc6d07caSMatt Arsenault} 34bc6d07caSMatt Arsenault 35bc6d07caSMatt Arsenault; CHECK-LABEL: {{^}}name: ps_shader 36bc6d07caSMatt Arsenault; CHECK: machineFunctionInfo: 37bc6d07caSMatt Arsenault; CHECK-NEXT: explicitKernArgSize: 0 38bc6d07caSMatt Arsenault; CHECK-NEXT: maxKernArgAlign: 0 39bc6d07caSMatt Arsenault; CHECK-NEXT: ldsSize: 0 40bc6d07caSMatt Arsenault; CHECK-NEXT: isEntryFunction: true 41bc6d07caSMatt Arsenault; CHECK-NEXT: noSignedZerosFPMath: false 42bc6d07caSMatt Arsenault; CHECK-NEXT: memoryBound: false 43bc6d07caSMatt Arsenault; CHECK-NEXT: waveLimiter: false 44bc6d07caSMatt Arsenault; CHECK-NEXT: scratchRSrcReg: '$sgpr96_sgpr97_sgpr98_sgpr99' 45bc6d07caSMatt Arsenault; CHECK-NEXT: scratchWaveOffsetReg: '$sgpr101' 46bc6d07caSMatt Arsenault; CHECK-NEXT: frameOffsetReg: '$sgpr101' 47b812b7a4SMatt Arsenault; CHECK-NEXT: stackPtrOffsetReg: '$sgpr101' 48*80177ca5SMichael Liao; CHECK-NEXT: argumentInfo: 49*80177ca5SMichael Liao; CHECK-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr3' } 50*80177ca5SMichael Liao; CHECK-NEXT: implicitBufferPtr: { reg: '$sgpr0_sgpr1' } 51bc6d07caSMatt Arsenault; CHECK-NEXT: body: 52bc6d07caSMatt Arsenaultdefine amdgpu_ps void @ps_shader(i32 %arg0, i32 inreg %arg1) { 53bc6d07caSMatt Arsenault ret void 54bc6d07caSMatt Arsenault} 55bc6d07caSMatt Arsenault 56bc6d07caSMatt Arsenault; CHECK-LABEL: {{^}}name: function 57bc6d07caSMatt Arsenault; CHECK: machineFunctionInfo: 58bc6d07caSMatt Arsenault; CHECK-NEXT: explicitKernArgSize: 0 59bc6d07caSMatt Arsenault; CHECK-NEXT: maxKernArgAlign: 0 60bc6d07caSMatt Arsenault; CHECK-NEXT: ldsSize: 0 61bc6d07caSMatt Arsenault; CHECK-NEXT: isEntryFunction: false 62bc6d07caSMatt Arsenault; CHECK-NEXT: noSignedZerosFPMath: false 63bc6d07caSMatt Arsenault; CHECK-NEXT: memoryBound: false 64bc6d07caSMatt Arsenault; CHECK-NEXT: waveLimiter: false 65bc6d07caSMatt Arsenault; CHECK-NEXT: scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3' 66d88db6d7SMatt Arsenault; CHECK-NEXT: scratchWaveOffsetReg: '$sgpr33' 67bc6d07caSMatt Arsenault; CHECK-NEXT: frameOffsetReg: '$sgpr5' 68bc6d07caSMatt Arsenault; CHECK-NEXT: stackPtrOffsetReg: '$sgpr32' 69*80177ca5SMichael Liao; CHECK-NEXT: argumentInfo: 70*80177ca5SMichael Liao; CHECK-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' } 71*80177ca5SMichael Liao; CHECK-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr33' } 72bc6d07caSMatt Arsenault; CHECK-NEXT: body: 73bc6d07caSMatt Arsenaultdefine void @function() { 74bc6d07caSMatt Arsenault ret void 75bc6d07caSMatt Arsenault} 76bc6d07caSMatt Arsenault 77bc6d07caSMatt Arsenault; CHECK-LABEL: {{^}}name: function_nsz 78bc6d07caSMatt Arsenault; CHECK: machineFunctionInfo: 79bc6d07caSMatt Arsenault; CHECK-NEXT: explicitKernArgSize: 0 80bc6d07caSMatt Arsenault; CHECK-NEXT: maxKernArgAlign: 0 81bc6d07caSMatt Arsenault; CHECK-NEXT: ldsSize: 0 82bc6d07caSMatt Arsenault; CHECK-NEXT: isEntryFunction: false 83bc6d07caSMatt Arsenault; CHECK-NEXT: noSignedZerosFPMath: true 84bc6d07caSMatt Arsenault; CHECK-NEXT: memoryBound: false 85bc6d07caSMatt Arsenault; CHECK-NEXT: waveLimiter: false 86bc6d07caSMatt Arsenault; CHECK-NEXT: scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3' 87d88db6d7SMatt Arsenault; CHECK-NEXT: scratchWaveOffsetReg: '$sgpr33' 88bc6d07caSMatt Arsenault; CHECK-NEXT: frameOffsetReg: '$sgpr5' 89bc6d07caSMatt Arsenault; CHECK-NEXT: stackPtrOffsetReg: '$sgpr32' 90*80177ca5SMichael Liao; CHECK-NEXT: argumentInfo: 91*80177ca5SMichael Liao; CHECK-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' } 92*80177ca5SMichael Liao; CHECK-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr33' } 93bc6d07caSMatt Arsenault; CHECK-NEXT: body: 94bc6d07caSMatt Arsenaultdefine void @function_nsz() #0 { 95bc6d07caSMatt Arsenault ret void 96bc6d07caSMatt Arsenault} 97bc6d07caSMatt Arsenault 98bc6d07caSMatt Arsenaultattributes #0 = { "no-signed-zeros-fp-math" = "true" } 99