brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.5 KiB · 29cdbc0 Raw
184 lines · plain
1# RUN: llc %s -start-before=livedebugvalues -o - | \2# RUN:     FileCheck %s --implicit-check-not=prologue_end3#4## When picking a "backup" location of the first non-trivial instruction in5## a function, don't select a location outside of the entry block. We have to6## give it the function's scope-line, and installing that outside of the entry7## block is liable to be misleading.8##9## Produced from the C below with "clang -O2 -g -mllvm10## -stop-before=livedebugvalues", then modified to unrotate and shift early11## insts into the loop block. This means the MIR is meaningless, we only test12## whether the scope-line will leak into the loop block or not.13##14## int glob = 0;15## int foo(int arg, int sum) {16##   arg += sum;17##   while (arg) {18##     glob--;19##     arg %= glob;20##   }21##   return 0;22## }23#24# CHECK-LABEL: foo:25# CHECK:        .loc    0 2 026# CHECK:        # %bb.0:27# CHECK-NEXT:   movl    %edi, %edx28# CHECK-NEXT:   .loc    0 0 0 is_stmt 029# CHECK-NEXT:   .Ltmp0:30# CHECK-NEXT:   .p2align        431# CHECK-NEXT:   .LBB0_1:32# CHECK-LABEL:  addl    %esi, %edx33 34## Second function in this file: test that we don't crash when having trailing35## empty blocks and no location for a prologue. Test that a .loc is produced,36## with an implicit-not check for there being no prologue_end.37#38# CHECK-LABEL: f:39# CHECK: .loc    0 1234 040 41 42--- |43  ; ModuleID = 'out2.ll'44  source_filename = "foo.c"45  target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"46  target triple = "x86_64-unknown-linux-gnu"47  48  @glob = dso_local local_unnamed_addr global i32 0, align 4, !dbg !049  50  define dso_local noundef i32 @foo(i32 noundef %arg, i32 noundef %sum) local_unnamed_addr !dbg !9 {51  entry:52    %add = add nsw i32 %sum, %arg53    br label %while.body.preheader54  55  while.body.preheader:                             ; preds = %entry56    %glob.promoted = load i32, ptr @glob, align 457    br label %while.body, !dbg !1358  59  while.body:                                       ; preds = %while.body, %while.body.preheader60    %arg.addr.06 = phi i32 [ %rem, %while.body ], [ %add, %while.body.preheader ]61    %dec35 = phi i32 [ %dec, %while.body ], [ %glob.promoted, %while.body.preheader ]62    %dec = add nsw i32 %dec35, -1, !dbg !1463    %0 = add i32 %dec35, -1, !dbg !1664    %rem = srem i32 %arg.addr.06, %0, !dbg !1665    %tobool.not = icmp eq i32 %rem, 0, !dbg !1366    br i1 %tobool.not, label %while.cond.while.end_crit_edge, label %while.body, !dbg !1367  68  while.cond.while.end_crit_edge:                   ; preds = %while.body69    store i32 %dec, ptr @glob, align 4, !dbg !1470    br label %while.end, !dbg !1371  72  while.end:                                        ; preds = %while.cond.while.end_crit_edge73    ret i32 0, !dbg !1774  }75  76  define void @f() !dbg !18 {77  entry:78    %0 = call ptr @llvm.returnaddress(i32 0)79    br label %do.body80 81  do.body:82    unreachable83  }84 85  declare ptr @llvm.returnaddress(i32 immarg)86 87  !llvm.dbg.cu = !{!2}88  !llvm.module.flags = !{!6, !7}89  !llvm.ident = !{!8}90  91  !0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())92  !1 = distinct !DIGlobalVariable(name: "glob", scope: !2, file: !3, line: 1, type: !5, isLocal: false, isDefinition: true)93  !2 = distinct !DICompileUnit(language: DW_LANG_C11, file: !3, producer: "clang", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, globals: !4, splitDebugInlining: false, nameTableKind: None)94  !3 = !DIFile(filename: "foo.c", directory: "")95  !4 = !{!0}96  !5 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)97  !6 = !{i32 7, !"Dwarf Version", i32 5}98  !7 = !{i32 2, !"Debug Info Version", i32 3}99  !8 = !{!"clang"}100  !9 = distinct !DISubprogram(name: "foo", scope: !3, file: !3, line: 2, type: !10, scopeLine: 2, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !12)101  !10 = !DISubroutineType(types: !11)102  !11 = !{!5, !5, !5}103  !12 = !{}104  !13 = !DILocation(line: 4, column: 3, scope: !9)105  !14 = !DILocation(line: 5, column: 9, scope: !15)106  !15 = distinct !DILexicalBlock(scope: !9, file: !3, line: 4, column: 15)107  !16 = !DILocation(line: 6, column: 9, scope: !15)108  !17 = !DILocation(line: 8, column: 3, scope: !9)109  !18 = distinct !DISubprogram(name: "f", scope: !3, file: !3, line: 37, type: !10, scopeLine: 1234, flags: DIFlagPrototyped, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !2)110 111...112---113name:            foo114alignment:       16115tracksRegLiveness: true116debugInstrRef:   true117tracksDebugUserValues: true118liveins:119  - { reg: '$edi' }120  - { reg: '$esi' }121frameInfo:122  maxAlignment:    1123  maxCallFrameSize: 0124  isCalleeSavedInfoValid: true125machineFunctionInfo:126  amxProgModel:    None127body:             |128  bb.0.entry:129    liveins: $edi, $esi130  131    $edx = MOV32rr $edi132  133  bb.1.while.body (align 16):134    successors: %bb.2(0x04000000), %bb.1(0x7c000000)135    liveins: $ecx, $edx, $esi136 137    renamable $edx = nsw ADD32rr killed renamable $edx, renamable $esi, implicit-def dead $eflags138    renamable $ecx = MOV32rm $rip, 1, $noreg, @glob, $noreg :: (dereferenceable load (s32) from @glob)139    renamable $ecx = DEC32r killed renamable $ecx, implicit-def dead $eflags140    $eax = MOV32rr killed $edx141    CDQ implicit-def $eax, implicit-def $edx, implicit $eax142    IDIV32r renamable $ecx, implicit-def dead $eax, implicit-def $edx, implicit-def dead $eflags, implicit $eax, implicit $edx143    TEST32rr renamable $edx, renamable $edx, implicit-def $eflags144    JCC_1 %bb.1, 5, implicit killed $eflags145  146  bb.2.while.cond.while.end_crit_edge:147    liveins: $ecx, $esi148  149    MOV32mr $rip, 1, $noreg, @glob, $noreg, killed renamable $ecx, debug-location !14 :: (store (s32) into @glob)150    $eax = XOR32rr undef $eax, undef $eax, implicit-def dead $eflags, debug-location !17151    RET64 $eax, debug-location !17152 153...154---155name:            f156alignment:       16157tracksRegLiveness: true158noPhis:          true159isSSA:           false160noVRegs:         true161hasFakeUses:     false162tracksDebugUserValues: true163frameInfo:164  stackSize:       8165  offsetAdjustment: -8166  maxAlignment:    1167  maxCallFrameSize: 0168  isCalleeSavedInfoValid: true169fixedStack:170  - { id: 0, type: spill-slot, offset: -16, size: 8, alignment: 16 }171machineFunctionInfo:172  amxProgModel:    None173body:             |174  bb.0.entry:175    frame-setup PUSH64r killed $rbp, implicit-def $rsp, implicit $rsp176    frame-setup CFI_INSTRUCTION def_cfa_offset 16177    frame-setup CFI_INSTRUCTION offset $rbp, -16178    $rbp = frame-setup MOV64rr $rsp179    frame-setup CFI_INSTRUCTION def_cfa_register $rbp180 181  bb.1.do.body:182 183...184