# RUN: llc -o - %s -start-after=patchable-function -O0 -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
# Test dwarf codegen of DW_OP_minus.
#
# This was built by compiling the following source with SafeStack and
# simplifying the result a little.
# extern "C" {
# void Capture(int *);
# void f() {
#   int buf[100];
#   Capture(buf);
# }
# }
# The interesting part is !DIExpression(DW_OP_constu, 400, DW_OP_minus)
#
# RCX - 400
# CHECK:      .short    3                       # Loc expr size
# CHECK-NEXT: .byte     114                     # DW_OP_breg2
# CHECK-NEXT: .byte     240                     # -400
# CHECK-NEXT: .byte     124
#
# RCX is clobbered in call @Capture, but there is a spilled copy.
# *(RSP + 8) - 400
# CHECK:      .short    7                       # Loc expr size
# CHECK-NEXT: .byte     119                     # DW_OP_breg7
# CHECK-NEXT: .byte     8                       # 8
# CHECK-NEXT: .byte     6                       # DW_OP_deref
# CHECK-NEXT: .byte     16                      # DW_OP_constu
# CHECK-NEXT: .byte     144                     # 400
# CHECK-NEXT: .byte     3                       #
# CHECK-NEXT: .byte     28                      # DW_OP_minus
--- |
  @__safestack_unsafe_stack_ptr = external thread_local(initialexec) global i8*
  
  define void @f() !dbg !5 {
  entry:
    %unsafe_stack_ptr = load i8*, i8** @__safestack_unsafe_stack_ptr
    %unsafe_stack_static_top = getelementptr i8, i8* %unsafe_stack_ptr, i32 -400
    store i8* %unsafe_stack_static_top, i8** @__safestack_unsafe_stack_ptr
    %0 = getelementptr i8, i8* %unsafe_stack_ptr, i32 -400
    %buf = bitcast i8* %0 to [100 x i32]*
    %1 = bitcast [100 x i32]* %buf to i8*, !dbg !14
    call void @llvm.dbg.declare(metadata i8* %unsafe_stack_ptr, metadata !9, metadata !DIExpression(DW_OP_constu, 400, DW_OP_minus)), !dbg !15
    %arraydecay = getelementptr inbounds [100 x i32], [100 x i32]* %buf, i64 0, i64 0, !dbg !16
    call void @Capture(i32* %arraydecay), !dbg !17
    store i8* %unsafe_stack_ptr, i8** @__safestack_unsafe_stack_ptr, !dbg !18
    ret void, !dbg !18
  }
  
  ; Function Attrs: nounwind readnone speculatable
  declare void @llvm.dbg.declare(metadata, metadata, metadata) #0
  
  declare void @Capture(i32*)
  
  ; Function Attrs: nounwind
  declare void @llvm.stackprotector(i8*, i8**) #1
  
  attributes #0 = { nounwind readnone speculatable }
  attributes #1 = { nounwind }
  
  !llvm.dbg.cu = !{!0}
  !llvm.module.flags = !{!3, !4}
  
  !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 3.8.0 (trunk 248518) (llvm/trunk 248512)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
  !1 = !DIFile(filename: "1.cc", directory: "/tmp")
  !2 = !{}
  !3 = !{i32 2, !"Dwarf Version", i32 4}
  !4 = !{i32 2, !"Debug Info Version", i32 3}
  !5 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 4, type: !6, isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !8)
  !6 = !DISubroutineType(types: !7)
  !7 = !{null}
  !8 = !{!9}
  !9 = !DILocalVariable(name: "buf", scope: !5, file: !1, line: 5, type: !10)
  !10 = !DICompositeType(tag: DW_TAG_array_type, baseType: !11, size: 3200, align: 32, elements: !12)
  !11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
  !12 = !{!13}
  !13 = !DISubrange(count: 100)
  !14 = !DILocation(line: 5, column: 3, scope: !5)
  !15 = !DILocation(line: 5, column: 7, scope: !5)
  !16 = !DILocation(line: 6, column: 11, scope: !5)
  !17 = !DILocation(line: 6, column: 3, scope: !5)
  !18 = !DILocation(line: 7, column: 1, scope: !5)

...
---
name:            f
alignment:       4
tracksRegLiveness: true
frameInfo:       
  stackSize:       24
  maxAlignment:    8
  adjustsStack:    true
  hasCalls:        true
  maxCallFrameSize: 0
stack:           
  - { id: 0, type: spill-slot, offset: -16, size: 8, alignment: 8, stack-id: 0 }
  - { id: 1, type: spill-slot, offset: -24, size: 8, alignment: 8, stack-id: 0 }
body:             |
  bb.0.entry:
    $rsp = frame-setup SUB64ri8 $rsp, 24, implicit-def dead $eflags
    CFI_INSTRUCTION def_cfa_offset 32
    renamable $rax = MOV64rm $rip, 1, $noreg, target-flags(x86-gottpoff) @__safestack_unsafe_stack_ptr, $noreg :: (load 8 from got)
    renamable $rcx = MOV64rm renamable $rax, 1, $noreg, 0, $fs :: (dereferenceable load 8 from @__safestack_unsafe_stack_ptr)
    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_constu, 400, DW_OP_minus), debug-location !15
    $rdx = MOV64rr $rcx
    renamable $rdx = ADD64ri32 renamable $rdx, -400, implicit-def dead $eflags
    MOV64mr renamable $rax, 1, $noreg, 0, $fs, renamable $rdx :: (store 8 into @__safestack_unsafe_stack_ptr)
    $rdi = MOV64rr killed $rdx, debug-location !17
    MOV64mr $rsp, 1, $noreg, 16, $noreg, killed $rax :: (store 8 into %stack.0)
    MOV64mr $rsp, 1, $noreg, 8, $noreg, killed $rcx :: (store 8 into %stack.1)
    DBG_VALUE $rsp, 0, !9, !DIExpression(DW_OP_plus_uconst, 8, DW_OP_deref, DW_OP_constu, 400, DW_OP_minus), debug-location !15
    CALL64pcrel32 @Capture, csr_64, implicit $rsp, implicit $ssp, implicit killed $rdi, implicit-def $rsp, implicit-def $ssp, debug-location !17
    $rax = MOV64rm $rsp, 1, $noreg, 16, $noreg :: (load 8 from %stack.0)
    $rcx = MOV64rm $rsp, 1, $noreg, 8, $noreg :: (load 8 from %stack.1)
    MOV64mr killed renamable $rax, 1, $noreg, 0, $fs, killed renamable $rcx, debug-location !18 :: (store 8 into @__safestack_unsafe_stack_ptr)
    $rsp = frame-destroy ADD64ri8 $rsp, 24, implicit-def dead $eflags, debug-location !18
    CFI_INSTRUCTION def_cfa_offset 8, debug-location !18
    RETQ debug-location !18

...
