1853b2a84SBrendon Cahoon; RUN: llc -mtriple=amdgcn-amd-amdhsa -verify-machineinstrs -amdgpu-s-branch-bits=4 -stop-after=branch-relaxation -verify-machineinstrs %s -o - | FileCheck %s 2853b2a84SBrendon Cahoon 3853b2a84SBrendon Cahoon; Test that debug instructions do not change long branch reserved serialized through 4853b2a84SBrendon Cahoon; MIR. 5853b2a84SBrendon Cahoon 6853b2a84SBrendon Cahoon; CHECK-LABEL: {{^}}name: uniform_long_forward_branch_debug 7853b2a84SBrendon Cahoon; CHECK: machineFunctionInfo: 8853b2a84SBrendon Cahoon; CHECK-NEXT: explicitKernArgSize: 12 9853b2a84SBrendon Cahoon; CHECK-NEXT: maxKernArgAlign: 8 10853b2a84SBrendon Cahoon; CHECK-NEXT: ldsSize: 0 11853b2a84SBrendon Cahoon; CHECK-NEXT: gdsSize: 0 12853b2a84SBrendon Cahoon; CHECK-NEXT: dynLDSAlign: 1 13853b2a84SBrendon Cahoon; CHECK-NEXT: isEntryFunction: true 145272ae66SDiana Picus; CHECK-NEXT: isChainFunction: false 15853b2a84SBrendon Cahoon; CHECK-NEXT: noSignedZerosFPMath: false 16853b2a84SBrendon Cahoon; CHECK-NEXT: memoryBound: false 17853b2a84SBrendon Cahoon; CHECK-NEXT: waveLimiter: false 18853b2a84SBrendon Cahoon; CHECK-NEXT: hasSpilledSGPRs: false 19853b2a84SBrendon Cahoon; CHECK-NEXT: hasSpilledVGPRs: false 20853b2a84SBrendon Cahoon; CHECK-NEXT: scratchRSrcReg: '$sgpr96_sgpr97_sgpr98_sgpr99' 21853b2a84SBrendon Cahoon; CHECK-NEXT: frameOffsetReg: '$fp_reg' 22853b2a84SBrendon Cahoon; CHECK-NEXT: stackPtrOffsetReg: '$sgpr32' 23853b2a84SBrendon Cahoon; CHECK-NEXT: bytesInStackArgArea: 0 24853b2a84SBrendon Cahoon; CHECK-NEXT: returnsVoid: true 25853b2a84SBrendon Cahoon; CHECK-NEXT: argumentInfo: 26853b2a84SBrendon Cahoon; CHECK-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' } 27853b2a84SBrendon Cahoon; CHECK-NEXT: kernargSegmentPtr: { reg: '$sgpr4_sgpr5' } 28853b2a84SBrendon Cahoon; CHECK-NEXT: workGroupIDX: { reg: '$sgpr6' } 29853b2a84SBrendon Cahoon; CHECK-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr7' } 30853b2a84SBrendon Cahoon; CHECK-NEXT: workItemIDX: { reg: '$vgpr0' } 31853b2a84SBrendon Cahoon; CHECK-NEXT: psInputAddr: 0 32853b2a84SBrendon Cahoon; CHECK-NEXT: psInputEnable: 0 3367c55b1fSRuiling, Song; CHECK-NEXT: maxMemoryClusterDWords: 8 34853b2a84SBrendon Cahoon; CHECK-NEXT: mode: 35853b2a84SBrendon Cahoon; CHECK-NEXT: ieee: true 36853b2a84SBrendon Cahoon; CHECK-NEXT: dx10-clamp: true 37853b2a84SBrendon Cahoon; CHECK-NEXT: fp32-input-denormals: true 38853b2a84SBrendon Cahoon; CHECK-NEXT: fp32-output-denormals: true 39853b2a84SBrendon Cahoon; CHECK-NEXT: fp64-fp16-input-denormals: true 40853b2a84SBrendon Cahoon; CHECK-NEXT: fp64-fp16-output-denormals: true 41853b2a84SBrendon Cahoon; CHECK-NEXT: BitsOf32BitAddress: 0 42*6206f544SLucas Ramirez; CHECK-NEXT: occupancy: 10 43853b2a84SBrendon Cahoon; CHECK-NEXT: vgprForAGPRCopy: '' 44b78b36e1SChristudasan Devadasan; CHECK-NEXT: sgprForEXECCopy: '$sgpr100_sgpr101' 45853b2a84SBrendon Cahoon; CHECK-NEXT: longBranchReservedReg: '$sgpr2_sgpr3' 4633562085SDiana Picus; CHECK-NEXT: hasInitWholeWave: false 47853b2a84SBrendon Cahoon; CHECK-NEXT: body: 48853b2a84SBrendon Cahoon define amdgpu_kernel void @uniform_long_forward_branch_debug(ptr addrspace(1) %arg, i32 %arg1) #0 !dbg !5 { 49853b2a84SBrendon Cahoon bb0: 50853b2a84SBrendon Cahoon %uniform_long_forward_branch_debug.kernarg.segment = call nonnull align 16 dereferenceable(12) ptr addrspace(4) @llvm.amdgcn.kernarg.segment.ptr(), !dbg !11 51853b2a84SBrendon Cahoon %arg1.kernarg.offset = getelementptr inbounds i8, ptr addrspace(4) %uniform_long_forward_branch_debug.kernarg.segment, i64 8, !dbg !11, !amdgpu.uniform !7 52853b2a84SBrendon Cahoon %arg1.load = load i32, ptr addrspace(4) %arg1.kernarg.offset, align 8, !dbg !11, !invariant.load !7 53853b2a84SBrendon Cahoon %tmp = icmp eq i32 %arg1.load, 0, !dbg !11 54853b2a84SBrendon Cahoon call void @llvm.dbg.value(metadata i1 %tmp, metadata !9, metadata !DIExpression()), !dbg !11 55853b2a84SBrendon Cahoon br i1 %tmp, label %bb3, label %Flow, !dbg !12, !amdgpu.uniform !7 56853b2a84SBrendon Cahoon 57853b2a84SBrendon Cahoon Flow: ; preds = %bb3, %bb0 58853b2a84SBrendon Cahoon %0 = phi i1 [ false, %bb3 ], [ true, %bb0 ], !dbg !12 59853b2a84SBrendon Cahoon br i1 %0, label %bb2, label %bb4, !dbg !12, !amdgpu.uniform !7 60853b2a84SBrendon Cahoon 61853b2a84SBrendon Cahoon bb2: ; preds = %Flow 62853b2a84SBrendon Cahoon store volatile i32 17, ptr addrspace(1) undef, align 4, !dbg !13 63853b2a84SBrendon Cahoon br label %bb4, !dbg !14, !amdgpu.uniform !7 64853b2a84SBrendon Cahoon 65853b2a84SBrendon Cahoon bb3: ; preds = %bb0 66853b2a84SBrendon Cahoon call void asm sideeffect "v_nop_e64\0A v_nop_e64\0A v_nop_e64\0A v_nop_e64", ""(), !dbg !15 67853b2a84SBrendon Cahoon br label %Flow, !dbg !16, !amdgpu.uniform !7 68853b2a84SBrendon Cahoon 69853b2a84SBrendon Cahoon bb4: ; preds = %bb2, %Flow 70853b2a84SBrendon Cahoon %arg.kernarg.offset1 = bitcast ptr addrspace(4) %uniform_long_forward_branch_debug.kernarg.segment to ptr addrspace(4), !dbg !11, !amdgpu.uniform !7 71853b2a84SBrendon Cahoon %arg.load = load ptr addrspace(1), ptr addrspace(4) %arg.kernarg.offset1, align 16, !dbg !11, !invariant.load !7 72853b2a84SBrendon Cahoon store volatile i32 63, ptr addrspace(1) %arg.load, align 4, !dbg !17 73853b2a84SBrendon Cahoon ret void, !dbg !18 74853b2a84SBrendon Cahoon } 75853b2a84SBrendon Cahoon 76853b2a84SBrendon Cahoon ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) 77853b2a84SBrendon Cahoon declare void @llvm.dbg.value(metadata, metadata, metadata) #1 78853b2a84SBrendon Cahoon 79853b2a84SBrendon Cahoon ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) 80853b2a84SBrendon Cahoon declare align 4 ptr addrspace(4) @llvm.amdgcn.kernarg.segment.ptr() #1 81853b2a84SBrendon Cahoon 82853b2a84SBrendon Cahoon ; Function Attrs: convergent nocallback nofree nounwind willreturn 83853b2a84SBrendon Cahoon declare { i1, i64 } @llvm.amdgcn.if.i64(i1) #2 84853b2a84SBrendon Cahoon 85853b2a84SBrendon Cahoon ; Function Attrs: convergent nocallback nofree nounwind willreturn 86853b2a84SBrendon Cahoon declare { i1, i64 } @llvm.amdgcn.else.i64.i64(i64) #2 87853b2a84SBrendon Cahoon 88853b2a84SBrendon Cahoon ; Function Attrs: convergent nocallback nofree nounwind willreturn memory(none) 89853b2a84SBrendon Cahoon declare i64 @llvm.amdgcn.if.break.i64(i1, i64) #3 90853b2a84SBrendon Cahoon 91853b2a84SBrendon Cahoon ; Function Attrs: convergent nocallback nofree nounwind willreturn 92853b2a84SBrendon Cahoon declare i1 @llvm.amdgcn.loop.i64(i64) #2 93853b2a84SBrendon Cahoon 94853b2a84SBrendon Cahoon ; Function Attrs: convergent nocallback nofree nounwind willreturn 95853b2a84SBrendon Cahoon declare void @llvm.amdgcn.end.cf.i64(i64) #2 96853b2a84SBrendon Cahoon 97853b2a84SBrendon Cahoon attributes #0 = { "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "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-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "uniform-work-group-size"="false" } 98853b2a84SBrendon Cahoon attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } 99853b2a84SBrendon Cahoon attributes #2 = { convergent nocallback nofree nounwind willreturn } 100853b2a84SBrendon Cahoon attributes #3 = { convergent nocallback nofree nounwind willreturn memory(none) } 101853b2a84SBrendon Cahoon 102853b2a84SBrendon Cahoon !llvm.dbg.cu = !{!0} 103853b2a84SBrendon Cahoon !llvm.debugify = !{!2, !3} 104853b2a84SBrendon Cahoon !llvm.module.flags = !{!4} 105853b2a84SBrendon Cahoon 106853b2a84SBrendon Cahoon !0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "debugify", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug) 107853b2a84SBrendon Cahoon !1 = !DIFile(filename: "temp.ll", directory: "/") 108853b2a84SBrendon Cahoon !2 = !{i32 8} 109853b2a84SBrendon Cahoon !3 = !{i32 1} 110853b2a84SBrendon Cahoon !4 = !{i32 2, !"Debug Info Version", i32 3} 111853b2a84SBrendon Cahoon !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) 112853b2a84SBrendon Cahoon !6 = !DISubroutineType(types: !7) 113853b2a84SBrendon Cahoon !7 = !{} 114853b2a84SBrendon Cahoon !8 = !{!9} 115853b2a84SBrendon Cahoon !9 = !DILocalVariable(name: "1", scope: !5, file: !1, line: 1, type: !10) 116853b2a84SBrendon Cahoon !10 = !DIBasicType(name: "ty8", size: 8, encoding: DW_ATE_unsigned) 117853b2a84SBrendon Cahoon !11 = !DILocation(line: 1, column: 1, scope: !5) 118853b2a84SBrendon Cahoon !12 = !DILocation(line: 2, column: 1, scope: !5) 119853b2a84SBrendon Cahoon !13 = !DILocation(line: 3, column: 1, scope: !5) 120853b2a84SBrendon Cahoon !14 = !DILocation(line: 4, column: 1, scope: !5) 121853b2a84SBrendon Cahoon !15 = !DILocation(line: 5, column: 1, scope: !5) 122853b2a84SBrendon Cahoon !16 = !DILocation(line: 6, column: 1, scope: !5) 123853b2a84SBrendon Cahoon !17 = !DILocation(line: 7, column: 1, scope: !5) 124853b2a84SBrendon Cahoon !18 = !DILocation(line: 8, column: 1, scope: !5) 125