131 lines · plain
1; RUN: llc -mtriple=amdgcn-amd-amdhsa -verify-machineinstrs -amdgpu-s-branch-bits=4 -stop-after=branch-relaxation -verify-machineinstrs %s -o - | FileCheck %s2 3; Test that debug instructions do not change long branch reserved serialized through4; MIR.5 6; CHECK-LABEL: {{^}}name: uniform_long_forward_branch_debug7; CHECK: machineFunctionInfo:8; CHECK-NEXT: explicitKernArgSize: 129; CHECK-NEXT: maxKernArgAlign: 810; CHECK-NEXT: ldsSize: 011; CHECK-NEXT: gdsSize: 012; CHECK-NEXT: dynLDSAlign: 113; CHECK-NEXT: isEntryFunction: true14; CHECK-NEXT: isChainFunction: false15; CHECK-NEXT: noSignedZerosFPMath: false16; CHECK-NEXT: memoryBound: false17; CHECK-NEXT: waveLimiter: false18; CHECK-NEXT: hasSpilledSGPRs: false19; CHECK-NEXT: hasSpilledVGPRs: false20; CHECK-NEXT: numWaveDispatchSGPRs: 021; CHECK-NEXT: numWaveDispatchVGPRs: 022; CHECK-NEXT: scratchRSrcReg: '$sgpr96_sgpr97_sgpr98_sgpr99'23; CHECK-NEXT: frameOffsetReg: '$fp_reg'24; CHECK-NEXT: stackPtrOffsetReg: '$sgpr32'25; CHECK-NEXT: bytesInStackArgArea: 026; CHECK-NEXT: returnsVoid: true27; CHECK-NEXT: argumentInfo:28; CHECK-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }29; CHECK-NEXT: kernargSegmentPtr: { reg: '$sgpr4_sgpr5' }30; CHECK-NEXT: workGroupIDX: { reg: '$sgpr6' }31; CHECK-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr7' }32; CHECK-NEXT: workItemIDX: { reg: '$vgpr0' }33; CHECK-NEXT: psInputAddr: 034; CHECK-NEXT: psInputEnable: 035; CHECK-NEXT: maxMemoryClusterDWords: 836; CHECK-NEXT: mode:37; CHECK-NEXT: ieee: true38; CHECK-NEXT: dx10-clamp: true39; CHECK-NEXT: fp32-input-denormals: true40; CHECK-NEXT: fp32-output-denormals: true41; CHECK-NEXT: fp64-fp16-input-denormals: true42; CHECK-NEXT: fp64-fp16-output-denormals: true43; CHECK-NEXT: BitsOf32BitAddress: 044; CHECK-NEXT: occupancy: 1045; CHECK-NEXT: vgprForAGPRCopy: ''46; CHECK-NEXT: sgprForEXECCopy: '$sgpr100_sgpr101'47; CHECK-NEXT: longBranchReservedReg: '$sgpr2_sgpr3'48; CHECK-NEXT: hasInitWholeWave: false49; CHECK-NEXT: dynamicVGPRBlockSize: 050; CHECK-NEXT: scratchReservedForDynamicVGPRs: 051; CHECK-NEXT: numKernargPreloadSGPRs: 052; CHECK-NEXT: isWholeWaveFunction: false53; CHECK-NEXT: body:54 define amdgpu_kernel void @uniform_long_forward_branch_debug(ptr addrspace(1) %arg, i32 %arg1) #0 !dbg !5 {55 bb0:56 %uniform_long_forward_branch_debug.kernarg.segment = call nonnull align 16 dereferenceable(12) ptr addrspace(4) @llvm.amdgcn.kernarg.segment.ptr(), !dbg !1157 %arg1.kernarg.offset = getelementptr inbounds i8, ptr addrspace(4) %uniform_long_forward_branch_debug.kernarg.segment, i64 8, !dbg !11, !amdgpu.uniform !758 %arg1.load = load i32, ptr addrspace(4) %arg1.kernarg.offset, align 8, !dbg !11, !invariant.load !759 %tmp = icmp eq i32 %arg1.load, 0, !dbg !1160 call void @llvm.dbg.value(metadata i1 %tmp, metadata !9, metadata !DIExpression()), !dbg !1161 br i1 %tmp, label %bb3, label %Flow, !dbg !12, !amdgpu.uniform !762 63 Flow: ; preds = %bb3, %bb064 %0 = phi i1 [ false, %bb3 ], [ true, %bb0 ], !dbg !1265 br i1 %0, label %bb2, label %bb4, !dbg !12, !amdgpu.uniform !766 67 bb2: ; preds = %Flow68 store volatile i32 17, ptr addrspace(1) poison, align 4, !dbg !1369 br label %bb4, !dbg !14, !amdgpu.uniform !770 71 bb3: ; preds = %bb072 call void asm sideeffect "v_nop_e64\0A v_nop_e64\0A v_nop_e64\0A v_nop_e64", ""(), !dbg !1573 br label %Flow, !dbg !16, !amdgpu.uniform !774 75 bb4: ; preds = %bb2, %Flow76 %arg.kernarg.offset1 = bitcast ptr addrspace(4) %uniform_long_forward_branch_debug.kernarg.segment to ptr addrspace(4), !dbg !11, !amdgpu.uniform !777 %arg.load = load ptr addrspace(1), ptr addrspace(4) %arg.kernarg.offset1, align 16, !dbg !11, !invariant.load !778 store volatile i32 63, ptr addrspace(1) %arg.load, align 4, !dbg !1779 ret void, !dbg !1880 }81 82 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)83 declare void @llvm.dbg.value(metadata, metadata, metadata) #184 85 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)86 declare align 4 ptr addrspace(4) @llvm.amdgcn.kernarg.segment.ptr() #187 88 ; Function Attrs: convergent nocallback nofree nounwind willreturn89 declare { i1, i64 } @llvm.amdgcn.if.i64(i1) #290 91 ; Function Attrs: convergent nocallback nofree nounwind willreturn92 declare { i1, i64 } @llvm.amdgcn.else.i64.i64(i64) #293 94 ; Function Attrs: convergent nocallback nofree nounwind willreturn memory(none)95 declare i64 @llvm.amdgcn.if.break.i64(i1, i64) #396 97 ; Function Attrs: convergent nocallback nofree nounwind willreturn98 declare i1 @llvm.amdgcn.loop.i64(i64) #299 100 ; Function Attrs: convergent nocallback nofree nounwind willreturn101 declare void @llvm.amdgcn.end.cf.i64(i64) #2102 103 attributes #0 = { "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-cluster-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-cluster-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-cluster-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "uniform-work-group-size"="false" }104 attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }105 attributes #2 = { convergent nocallback nofree nounwind willreturn }106 attributes #3 = { convergent nocallback nofree nounwind willreturn memory(none) }107 108 !llvm.dbg.cu = !{!0}109 !llvm.debugify = !{!2, !3}110 !llvm.module.flags = !{!4}111 112 !0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "debugify", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug)113 !1 = !DIFile(filename: "temp.ll", directory: "/")114 !2 = !{i32 8}115 !3 = !{i32 1}116 !4 = !{i32 2, !"Debug Info Version", i32 3}117 !5 = distinct !DISubprogram(name: "uniform_long_forward_branch_debug", linkageName: "uniform_long_forward_branch_debug", scope: null, file: !1, line: 1, type: !6, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !8)118 !6 = !DISubroutineType(types: !7)119 !7 = !{}120 !8 = !{!9}121 !9 = !DILocalVariable(name: "1", scope: !5, file: !1, line: 1, type: !10)122 !10 = !DIBasicType(name: "ty8", size: 8, encoding: DW_ATE_unsigned)123 !11 = !DILocation(line: 1, column: 1, scope: !5)124 !12 = !DILocation(line: 2, column: 1, scope: !5)125 !13 = !DILocation(line: 3, column: 1, scope: !5)126 !14 = !DILocation(line: 4, column: 1, scope: !5)127 !15 = !DILocation(line: 5, column: 1, scope: !5)128 !16 = !DILocation(line: 6, column: 1, scope: !5)129 !17 = !DILocation(line: 7, column: 1, scope: !5)130 !18 = !DILocation(line: 8, column: 1, scope: !5)131