brintos

brintos / llvm-project-archived public Read only

0
0
Text · 19.4 KiB · be404f0 Raw
378 lines · plain
1# RUN: llc -o - %s -start-after=patchable-function -O0 -mtriple=x86_64-unknown-linux-gnu | FileCheck %s2 3# Test dwarf codegen of:4#   - DW_OP_constu, X, DW_OP_minus5#   - DW_OP_constu, X, DW_OP_plus6#   - DW_OP_plus_uconst, X7# when feeding a DW_OP_breg.8#9# Internally in LLVM the value X is saved as an "uint64_t".  But when10# DwarfExpression::addMachineRegExpression is trying to simplify the DWARF by11# folding such expressions into a DW_OP_breg (or DW_OP_fbreg) the offset is12# converted to an "int".  We must be careful when doing those folds, checking13# that X is in the range for "int".14 15--- |16  define void @test() !dbg !5 {17  entry:18    ret void, !dbg !1419  }20 21  !llvm.dbg.cu = !{!0}22  !llvm.module.flags = !{!3, !4}23 24  !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)25  !1 = !DIFile(filename: "1.cc", directory: "/tmp")26  !2 = !{}27  !3 = !{i32 2, !"Dwarf Version", i32 4}28  !4 = !{i32 2, !"Debug Info Version", i32 3}29  !5 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 4, type: !6, scopeLine: 4, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !8)30  !6 = !DISubroutineType(types: !7)31  !7 = !{null}32  !8 = !{!9}33  !9 = !DILocalVariable(name: "buf", scope: !5, file: !1, line: 5, type: !10)34  !10 = !DICompositeType(tag: DW_TAG_array_type, baseType: !11, size: 3200, align: 32, elements: !12)35  !11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)36  !12 = !{!13}37  !13 = !DISubrange(count: 100)38  !14 = !DILocation(line: 7, column: 1, scope: !5)39 40...41---42name:            test43tracksRegLiveness: true44body:             |45 46  bb.0: ;-------------------------- DW_OP_plus -------------------------------47 48    ; UINT_MAX49    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs50    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_constu, 4294967295, DW_OP_minus), debug-location !1451 52    ; UINT_MAX+153    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs54    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_constu, 4294967296, DW_OP_minus), debug-location !1455 56    ; INT_MAX57    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs58    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_constu, 2147483647, DW_OP_minus), debug-location !1459 60    ; INT_MAX+161    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs62    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_constu, 2147483648, DW_OP_minus), debug-location !1463 64    ; 065    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs66    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_constu, 0, DW_OP_minus), debug-location !1467 68    ; -169    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs70    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_constu, 18446744073709551615, DW_OP_minus), debug-location !1471 72    ; -273    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs74    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_constu, 18446744073709551614, DW_OP_minus), debug-location !1475 76    RET64 debug-location !1477 78 79  bb.1: ;-------------------------- DW_OP_plus -------------------------------80 81    ; UINT_MAX82    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs83    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_constu, 4294967295, DW_OP_plus), debug-location !1484 85    ; UINT_MAX+186    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs87    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_constu, 4294967296, DW_OP_plus), debug-location !1488 89    ; INT_MAX90    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs91    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_constu, 2147483647, DW_OP_plus), debug-location !1492 93    ; INT_MAX+194    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs95    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_constu, 2147483648, DW_OP_plus), debug-location !1496 97    ; 098    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs99    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_constu, 0, DW_OP_plus), debug-location !14100 101    ; -1102    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs103    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_constu, 18446744073709551615, DW_OP_plus), debug-location !14104 105    ; -2106    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs107    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_constu, 18446744073709551614, DW_OP_plus), debug-location !14108 109    RET64 debug-location !14110 111 112  bb.2: ;-------------------------- DW_OP_plus_uconst -------------------------------113 114    ; UINT_MAX115    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs116    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_plus_uconst, 4294967295), debug-location !14117 118    ; UINT_MAX+1119    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs120    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_plus_uconst, 4294967296), debug-location !14121 122    ; INT_MAX123    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs124    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_plus_uconst, 2147483647), debug-location !14125 126    ; INT_MAX+1127    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs128    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_plus_uconst, 2147483648), debug-location !14129 130    ; 0131    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs132    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_plus_uconst, 0), debug-location !14133 134    ; -1135    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs136    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_plus_uconst, 18446744073709551615), debug-location !14137 138    ; -2139    renamable $rcx = MOV64rm renamable $noreg, 1, $noreg, 0, $fs140    DBG_VALUE renamable $rcx, 0, !9, !DIExpression(DW_OP_plus_uconst, 18446744073709551614), debug-location !14141 142    RET64 debug-location !14143 144...145 146 147# CHECK-LABEL: .Ldebug_loc0:148# CHECK-NEXT:         .quad   .Ltmp0-.Lfunc_begin0149# CHECK-NEXT:         .quad   .Ltmp1-.Lfunc_begin0150# CHECK-NEXT:         .short  9                       # Loc expr size151# CHECK-NEXT:         .byte   114                     # DW_OP_breg2152# CHECK-NEXT:         .byte   0                       # 0153# CHECK-NEXT:         .byte   16                      # DW_OP_constu154# CHECK-NEXT:         .byte   255                     # 4294967295155# CHECK-NEXT:         .byte   255                     #156# CHECK-NEXT:         .byte   255                     #157# CHECK-NEXT:         .byte   255                     #158# CHECK-NEXT:         .byte   15                      #159# CHECK-NEXT:         .byte   28                      # DW_OP_minus160# CHECK-NEXT:         .quad   .Ltmp1-.Lfunc_begin0161# CHECK-NEXT:         .quad   .Ltmp2-.Lfunc_begin0162# CHECK-NEXT:         .short  9                       # Loc expr size163# CHECK-NEXT:         .byte   114                     # DW_OP_breg2164# CHECK-NEXT:         .byte   0                       # 0165# CHECK-NEXT:         .byte   16                      # DW_OP_constu166# CHECK-NEXT:         .byte   128                     # 4294967296167# CHECK-NEXT:         .byte   128                     #168# CHECK-NEXT:         .byte   128                     #169# CHECK-NEXT:         .byte   128                     #170# CHECK-NEXT:         .byte   16                      #171# CHECK-NEXT:         .byte   28                      # DW_OP_minus172# CHECK-NEXT:         .quad   .Ltmp2-.Lfunc_begin0173# CHECK-NEXT:         .quad   .Ltmp3-.Lfunc_begin0174# CHECK-NEXT:         .short  6                       # Loc expr size175# CHECK-NEXT:         .byte   114                     # DW_OP_breg2176# CHECK-NEXT:         .byte   129                     # -2147483647177# CHECK-NEXT:         .byte   128                     #178# CHECK-NEXT:         .byte   128                     #179# CHECK-NEXT:         .byte   128                     #180# CHECK-NEXT:         .byte   120                     #181# CHECK-NEXT:         .quad   .Ltmp3-.Lfunc_begin0182# CHECK-NEXT:         .quad   .Ltmp4-.Lfunc_begin0183# CHECK-NEXT:         .short  6                       # Loc expr size184# CHECK-NEXT:         .byte   114                     # DW_OP_breg2185# CHECK-NEXT:         .byte   128                     # -2147483648186# CHECK-NEXT:         .byte   128                     #187# CHECK-NEXT:         .byte   128                     #188# CHECK-NEXT:         .byte   128                     #189# CHECK-NEXT:         .byte   120                     #190# CHECK-NEXT:         .quad   .Ltmp4-.Lfunc_begin0191# CHECK-NEXT:         .quad   .Ltmp5-.Lfunc_begin0192# CHECK-NEXT:         .short  2                       # Loc expr size193# CHECK-NEXT:         .byte   114                     # DW_OP_breg2194# CHECK-NEXT:         .byte   0                       # 0195# CHECK-NEXT:         .quad   .Ltmp5-.Lfunc_begin0196# CHECK-NEXT:         .quad   .Ltmp6-.Lfunc_begin0197# CHECK-NEXT:         .short  5                       # Loc expr size198# CHECK-NEXT:         .byte   114                     # DW_OP_breg2199# CHECK-NEXT:         .byte   0                       # 0200# CHECK-NEXT:         .byte   48                      # DW_OP_lit0201# CHECK-NEXT:         .byte   32                      # DW_OP_not202# CHECK-NEXT:         .byte   28                      # DW_OP_minus203# CHECK-NEXT:         .quad   .Ltmp6-.Lfunc_begin0204# CHECK-NEXT:         .quad   .Ltmp7-.Lfunc_begin0205# CHECK-NEXT:         .short  14                      # Loc expr size206# CHECK-NEXT:         .byte   114                     # DW_OP_breg2207# CHECK-NEXT:         .byte   0                       # 0208# CHECK-NEXT:         .byte   16                      # DW_OP_constu209# CHECK-NEXT:         .byte   254                     # 18446744073709551614210# CHECK-NEXT:         .byte   255                     #211# CHECK-NEXT:         .byte   255                     #212# CHECK-NEXT:         .byte   255                     #213# CHECK-NEXT:         .byte   255                     #214# CHECK-NEXT:         .byte   255                     #215# CHECK-NEXT:         .byte   255                     #216# CHECK-NEXT:         .byte   255                     #217# CHECK-NEXT:         .byte   255                     #218# CHECK-NEXT:         .byte   1                       #219# CHECK-NEXT:         .byte   28                      # DW_OP_minus220#-----------------------------------------------------------------------221# CHECK-NEXT:         .quad   .Ltmp8-.Lfunc_begin0222# CHECK-NEXT:         .quad   .Ltmp9-.Lfunc_begin0223# CHECK-NEXT:         .short  9                       # Loc expr size224# CHECK-NEXT:         .byte   114                     # DW_OP_breg2225# CHECK-NEXT:         .byte   0                       # 0226# CHECK-NEXT:         .byte   16                      # DW_OP_constu227# CHECK-NEXT:         .byte   255                     # 4294967295228# CHECK-NEXT:         .byte   255                     #229# CHECK-NEXT:         .byte   255                     #230# CHECK-NEXT:         .byte   255                     #231# CHECK-NEXT:         .byte   15                      #232# CHECK-NEXT:         .byte   34                      # DW_OP_plus233# CHECK-NEXT:         .quad   .Ltmp9-.Lfunc_begin0234# CHECK-NEXT:         .quad   .Ltmp10-.Lfunc_begin0235# CHECK-NEXT:         .short  9                       # Loc expr size236# CHECK-NEXT:         .byte   114                     # DW_OP_breg2237# CHECK-NEXT:         .byte   0                       # 0238# CHECK-NEXT:         .byte   16                      # DW_OP_constu239# CHECK-NEXT:         .byte   128                     # 4294967296240# CHECK-NEXT:         .byte   128                     #241# CHECK-NEXT:         .byte   128                     #242# CHECK-NEXT:         .byte   128                     #243# CHECK-NEXT:         .byte   16                      #244# CHECK-NEXT:         .byte   34                      # DW_OP_plus245# CHECK-NEXT:         .quad   .Ltmp10-.Lfunc_begin0246# CHECK-NEXT:         .quad   .Ltmp11-.Lfunc_begin0247# CHECK-NEXT:         .short  6                       # Loc expr size248# CHECK-NEXT:         .byte   114                     # DW_OP_breg2249# CHECK-NEXT:         .byte   255                     # 2147483647250# CHECK-NEXT:         .byte   255                     #251# CHECK-NEXT:         .byte   255                     #252# CHECK-NEXT:         .byte   255                     #253# CHECK-NEXT:         .byte   7                       #254# CHECK-NEXT:         .quad   .Ltmp11-.Lfunc_begin0255# CHECK-NEXT:         .quad   .Ltmp12-.Lfunc_begin0256# CHECK-NEXT:         .short  9                       # Loc expr size257# CHECK-NEXT:         .byte   114                     # DW_OP_breg2258# CHECK-NEXT:         .byte   0                       # 0259# CHECK-NEXT:         .byte   16                      # DW_OP_constu260# CHECK-NEXT:         .byte   128                     # 2147483648261# CHECK-NEXT:         .byte   128                     #262# CHECK-NEXT:         .byte   128                     #263# CHECK-NEXT:         .byte   128                     #264# CHECK-NEXT:         .byte   8                       #265# CHECK-NEXT:         .byte   34                      # DW_OP_plus266# CHECK-NEXT:         .quad   .Ltmp12-.Lfunc_begin0267# CHECK-NEXT:         .quad   .Ltmp13-.Lfunc_begin0268# CHECK-NEXT:         .short  2                       # Loc expr size269# CHECK-NEXT:         .byte   114                     # DW_OP_breg2270# CHECK-NEXT:         .byte   0                       # 0271# CHECK-NEXT:         .quad   .Ltmp13-.Lfunc_begin0272# CHECK-NEXT:         .quad   .Ltmp14-.Lfunc_begin0273# CHECK-NEXT:         .short  5                       # Loc expr size274# CHECK-NEXT:         .byte   114                     # DW_OP_breg2275# CHECK-NEXT:         .byte   0                       # 0276# CHECK-NEXT:         .byte   48                      # DW_OP_lit0277# CHECK-NEXT:         .byte   32                      # DW_OP_not278# CHECK-NEXT:         .byte   34                      # DW_OP_plus279# CHECK-NEXT:         .quad   .Ltmp14-.Lfunc_begin0280# CHECK-NEXT:         .quad   .Ltmp15-.Lfunc_begin0281# CHECK-NEXT:         .short  14                      # Loc expr size282# CHECK-NEXT:         .byte   114                     # DW_OP_breg2283# CHECK-NEXT:         .byte   0                       # 0284# CHECK-NEXT:         .byte   16                      # DW_OP_constu285# CHECK-NEXT:         .byte   254                     # 18446744073709551614286# CHECK-NEXT:         .byte   255                     #287# CHECK-NEXT:         .byte   255                     #288# CHECK-NEXT:         .byte   255                     #289# CHECK-NEXT:         .byte   255                     #290# CHECK-NEXT:         .byte   255                     #291# CHECK-NEXT:         .byte   255                     #292# CHECK-NEXT:         .byte   255                     #293# CHECK-NEXT:         .byte   255                     #294# CHECK-NEXT:         .byte   1                       #295# CHECK-NEXT:         .byte   34                      # DW_OP_plus296#-----------------------------------------------------------------------297# CHECK-NEXT:         .quad   .Ltmp16-.Lfunc_begin0298# CHECK-NEXT:         .quad   .Ltmp17-.Lfunc_begin0299# CHECK-NEXT:         .short  8                       # Loc expr size300# CHECK-NEXT:         .byte   114                     # DW_OP_breg2301# CHECK-NEXT:         .byte   0                       # 0302# CHECK-NEXT:         .byte   35                      # DW_OP_plus_uconst303# CHECK-NEXT:         .byte   255                     # 4294967295304# CHECK-NEXT:         .byte   255                     #305# CHECK-NEXT:         .byte   255                     #306# CHECK-NEXT:         .byte   255                     #307# CHECK-NEXT:         .byte   15                      #308# CHECK-NEXT:         .quad   .Ltmp17-.Lfunc_begin0309# CHECK-NEXT:         .quad   .Ltmp18-.Lfunc_begin0310# CHECK-NEXT:         .short  8                       # Loc expr size311# CHECK-NEXT:         .byte   114                     # DW_OP_breg2312# CHECK-NEXT:         .byte   0                       # 0313# CHECK-NEXT:         .byte   35                      # DW_OP_plus_uconst314# CHECK-NEXT:         .byte   128                     # 4294967296315# CHECK-NEXT:         .byte   128                     #316# CHECK-NEXT:         .byte   128                     #317# CHECK-NEXT:         .byte   128                     #318# CHECK-NEXT:         .byte   16                      #319# CHECK-NEXT:         .quad   .Ltmp18-.Lfunc_begin0320# CHECK-NEXT:         .quad   .Ltmp19-.Lfunc_begin0321# CHECK-NEXT:         .short  6                       # Loc expr size322# CHECK-NEXT:         .byte   114                     # DW_OP_breg2323# CHECK-NEXT:         .byte   255                     # 2147483647324# CHECK-NEXT:         .byte   255                     #325# CHECK-NEXT:         .byte   255                     #326# CHECK-NEXT:         .byte   255                     #327# CHECK-NEXT:         .byte   7                       #328# CHECK-NEXT:         .quad   .Ltmp19-.Lfunc_begin0329# CHECK-NEXT:         .quad   .Ltmp20-.Lfunc_begin0330# CHECK-NEXT:         .short  8                       # Loc expr size331# CHECK-NEXT:         .byte   114                     # DW_OP_breg2332# CHECK-NEXT:         .byte   0                       # 0333# CHECK-NEXT:         .byte   35                      # DW_OP_plus_uconst334# CHECK-NEXT:         .byte   128                     # 2147483648335# CHECK-NEXT:         .byte   128                     #336# CHECK-NEXT:         .byte   128                     #337# CHECK-NEXT:         .byte   128                     #338# CHECK-NEXT:         .byte   8                       #339# CHECK-NEXT:         .quad   .Ltmp20-.Lfunc_begin0340# CHECK-NEXT:         .quad   .Ltmp21-.Lfunc_begin0341# CHECK-NEXT:         .short  2                       # Loc expr size342# CHECK-NEXT:         .byte   114                     # DW_OP_breg2343# CHECK-NEXT:         .byte   0                       # 0344# CHECK-NEXT:         .quad   .Ltmp21-.Lfunc_begin0345# CHECK-NEXT:         .quad   .Ltmp22-.Lfunc_begin0346# CHECK-NEXT:         .short  13                      # Loc expr size347# CHECK-NEXT:         .byte   114                     # DW_OP_breg2348# CHECK-NEXT:         .byte   0                       # 0349# CHECK-NEXT:         .byte   35                      # DW_OP_plus_uconst350# CHECK-NEXT:         .byte   255                     # 18446744073709551615351# CHECK-NEXT:         .byte   255                     #352# CHECK-NEXT:         .byte   255                     #353# CHECK-NEXT:         .byte   255                     #354# CHECK-NEXT:         .byte   255                     #355# CHECK-NEXT:         .byte   255                     #356# CHECK-NEXT:         .byte   255                     #357# CHECK-NEXT:         .byte   255                     #358# CHECK-NEXT:         .byte   255                     #359# CHECK-NEXT:         .byte   1                       #360# CHECK-NEXT:         .quad   .Ltmp22-.Lfunc_begin0361# CHECK-NEXT:         .quad   .Lfunc_end0-.Lfunc_begin0362# CHECK-NEXT:         .short  13                      # Loc expr size363# CHECK-NEXT:         .byte   114                     # DW_OP_breg2364# CHECK-NEXT:         .byte   0                       # 0365# CHECK-NEXT:         .byte   35                      # DW_OP_plus_uconst366# CHECK-NEXT:         .byte   254                     # 18446744073709551614367# CHECK-NEXT:         .byte   255                     #368# CHECK-NEXT:         .byte   255                     #369# CHECK-NEXT:         .byte   255                     #370# CHECK-NEXT:         .byte   255                     #371# CHECK-NEXT:         .byte   255                     #372# CHECK-NEXT:         .byte   255                     #373# CHECK-NEXT:         .byte   255                     #374# CHECK-NEXT:         .byte   255                     #375# CHECK-NEXT:         .byte   1                       #376# CHECK-NEXT:         .quad   0377# CHECK-NEXT:         .quad   0378