| ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=fiji < %s | FileCheck %s | 
 |  | 
 | ; Make sure we do not crash during scheduling when DBG_VALUE is the first | 
 | ; instruction in the basic block. | 
 |  | 
 | ; LLVM IR generated with the following command and OpenCL source: | 
 | ; | 
 | ; $clang -cl-std=CL2.0 -g -O2 -target amdgcn-amd-amdhsa -S -emit-llvm <path-to-file> | 
 | ; | 
 | ; kernel void kernel1(global int *A, global int *B) { | 
 | ;   if (*A == 1) { | 
 | ;     *B = 12; | 
 | ;   } | 
 | ;   if (*A == 2) { | 
 | ;     *B = 13; | 
 | ;   } | 
 | ; } | 
 |  | 
 | declare void @llvm.dbg.value(metadata, metadata, metadata) | 
 |  | 
 | ; CHECK-LABEL: {{^}}kernel1: | 
 | define amdgpu_kernel void @kernel1( | 
 |     ptr addrspace(1) nocapture readonly %A, | 
 |     ptr addrspace(1) nocapture %B) !dbg !7  { | 
 | entry: | 
 |   tail call void @llvm.dbg.value(metadata ptr addrspace(1) %A, metadata !13, metadata !19), !dbg !20 | 
 |   tail call void @llvm.dbg.value(metadata ptr addrspace(1) %B, metadata !14, metadata !19), !dbg !21 | 
 |   %0 = load i32, ptr addrspace(1) %A, align 4, !dbg !22, !tbaa !24 | 
 |   %cmp = icmp eq i32 %0, 1, !dbg !28 | 
 |   br i1 %cmp, label %if.then, label %if.end, !dbg !29 | 
 |  | 
 | if.then:                                          ; preds = %entry | 
 |   store i32 12, ptr addrspace(1) %B, align 4, !dbg !30, !tbaa !24 | 
 |   %.pr = load i32, ptr addrspace(1) %A, align 4, !dbg !32, !tbaa !24 | 
 |   br label %if.end, !dbg !34 | 
 |  | 
 | if.end:                                           ; preds = %if.then, %entry | 
 |   %1 = phi i32 [ %.pr, %if.then ], [ %0, %entry ], !dbg !32 | 
 |   %cmp1 = icmp eq i32 %1, 2, !dbg !35 | 
 |   br i1 %cmp1, label %if.then2, label %if.end3, !dbg !36 | 
 |  | 
 | if.then2:                                         ; preds = %if.end | 
 |   store i32 13, ptr addrspace(1) %B, align 4, !dbg !37, !tbaa !24 | 
 |   br label %if.end3, !dbg !39 | 
 |  | 
 | if.end3:                                          ; preds = %if.then2, %if.end | 
 |   ret void, !dbg !40 | 
 | } | 
 |  | 
 | !llvm.dbg.cu = !{!0} | 
 | !opencl.ocl.version = !{!3} | 
 | !llvm.module.flags = !{!4, !5} | 
 | !llvm.ident = !{!6} | 
 |  | 
 | !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 4.0 ", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2) | 
 | !1 = !DIFile(filename: "dbg-value-sched-crash.cl", directory: "/some/random/directory") | 
 | !2 = !{} | 
 | !3 = !{i32 2, i32 0} | 
 | !4 = !{i32 2, !"Dwarf Version", i32 2} | 
 | !5 = !{i32 2, !"Debug Info Version", i32 3} | 
 | !6 = !{!"clang version 4.0 "} | 
 | !7 = distinct !DISubprogram(name: "kernel1", scope: !1, file: !1, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !12) | 
 | !8 = !DISubroutineType(types: !9) | 
 | !9 = !{null, !10, !10} | 
 | !10 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !11, size: 64) | 
 | !11 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) | 
 | !12 = !{!13, !14} | 
 | !13 = !DILocalVariable(name: "A", arg: 1, scope: !7, file: !1, line: 1, type: !10) | 
 | !14 = !DILocalVariable(name: "B", arg: 2, scope: !7, file: !1, line: 1, type: !10) | 
 | !15 = !{i32 1, i32 1} | 
 | !16 = !{!"none", !"none"} | 
 | !17 = !{!"int*", !"int*"} | 
 | !18 = !{!"", !""} | 
 | !19 = !DIExpression(DW_OP_constu, 1, DW_OP_swap, DW_OP_xderef) | 
 | !20 = !DILocation(line: 1, column: 33, scope: !7) | 
 | !21 = !DILocation(line: 1, column: 48, scope: !7) | 
 | !22 = !DILocation(line: 2, column: 7, scope: !23) | 
 | !23 = distinct !DILexicalBlock(scope: !7, file: !1, line: 2, column: 7) | 
 | !24 = !{!25, !25, i64 0} | 
 | !25 = !{!"int", !26, i64 0} | 
 | !26 = !{!"omnipotent char", !27, i64 0} | 
 | !27 = !{!"Simple C/C++ TBAA"} | 
 | !28 = !DILocation(line: 2, column: 10, scope: !23) | 
 | !29 = !DILocation(line: 2, column: 7, scope: !7) | 
 | !30 = !DILocation(line: 3, column: 8, scope: !31) | 
 | !31 = distinct !DILexicalBlock(scope: !23, file: !1, line: 2, column: 16) | 
 | !32 = !DILocation(line: 5, column: 7, scope: !33) | 
 | !33 = distinct !DILexicalBlock(scope: !7, file: !1, line: 5, column: 7) | 
 | !34 = !DILocation(line: 4, column: 3, scope: !31) | 
 | !35 = !DILocation(line: 5, column: 10, scope: !33) | 
 | !36 = !DILocation(line: 5, column: 7, scope: !7) | 
 | !37 = !DILocation(line: 6, column: 8, scope: !38) | 
 | !38 = distinct !DILexicalBlock(scope: !33, file: !1, line: 5, column: 16) | 
 | !39 = !DILocation(line: 7, column: 3, scope: !38) | 
 | !40 = !DILocation(line: 8, column: 1, scope: !7) |