llvm.org GIT mirror llvm / stable test / CodeGen / X86 / dbg-combine.ll
stable

Tree @stable (Download .tar.gz)

dbg-combine.ll @stable

b2f521b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5f220be
b2f521b
 
 
 
 
 
7c9c6ed
b2f521b
 
 
 
 
198d8ba
b2f521b
198d8ba
b2f521b
198d8ba
b2f521b
7c9c6ed
b2f521b
 
 
198d8ba
b2f521b
198d8ba
7c9c6ed
b2f521b
7c9c6ed
b2f521b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4eeaa0d
e56023a
b2f521b
a8a13bc
e56023a
 
b2f521b
e56023a
b2f521b
b056aa7
b2f521b
bf2040f
e56023a
 
 
 
bf2040f
e56023a
b2f521b
e56023a
 
 
 
 
 
 
 
 
 
 
bf2040f
e56023a
 
 
 
 
; RUN: llc -mtriple x86_64-pc-linux -O0 < %s | FileCheck %s

; Make sure that the sequence of debug locations for function foo is correctly
; generated. More specifically, .loc entries for lines 4,5,6,7 must appear in
; the correct sequence.

; $ clang -emit-llvm -S -g dbg-combine.c
; 1.  int foo()
; 2.  {
; 3.     int elems = 3;
; 4.     int array1[elems];
; 5.     array1[0]=0;
; 6.     array1[1]=1;
; 7.     array1[2]=2;
; 8.     int array2[elems];
; 9.     array2[0]=1;
; 10.    return array2[0];
; 11. }

; CHECK: .loc    1 4
; CHECK: .loc    1 5
; CHECK: .loc    1 6
; CHECK: .loc    1 7

; ModuleID = 'dbg-combine.c'
; Function Attrs: nounwind uwtable
define i32 @foo() #0 !dbg !4 {
entry:
  %elems = alloca i32, align 4
  %saved_stack = alloca i8*
  %cleanup.dest.slot = alloca i32
  call void @llvm.dbg.declare(metadata i32* %elems, metadata !12, metadata !13), !dbg !14
  store i32 3, i32* %elems, align 4, !dbg !14
  %0 = load i32, i32* %elems, align 4, !dbg !15
  %1 = zext i32 %0 to i64, !dbg !16
  %2 = call i8* @llvm.stacksave(), !dbg !16
  store i8* %2, i8** %saved_stack, !dbg !16
  %vla = alloca i32, i64 %1, align 16, !dbg !16
  call void @llvm.dbg.declare(metadata i32* %vla, metadata !17, metadata !21), !dbg !22
  %arrayidx = getelementptr inbounds i32, i32* %vla, i64 0, !dbg !23
  store i32 0, i32* %arrayidx, align 4, !dbg !24
  %arrayidx1 = getelementptr inbounds i32, i32* %vla, i64 1, !dbg !25
  store i32 1, i32* %arrayidx1, align 4, !dbg !26
  %arrayidx2 = getelementptr inbounds i32, i32* %vla, i64 2, !dbg !27
  store i32 2, i32* %arrayidx2, align 4, !dbg !28
  %3 = load i32, i32* %elems, align 4, !dbg !29
  %4 = zext i32 %3 to i64, !dbg !30
  %vla3 = alloca i32, i64 %4, align 16, !dbg !30
  call void @llvm.dbg.declare(metadata i32* %vla3, metadata !31, metadata !21), !dbg !32
  %arrayidx4 = getelementptr inbounds i32, i32* %vla3, i64 0, !dbg !33
  store i32 1, i32* %arrayidx4, align 4, !dbg !34
  %arrayidx5 = getelementptr inbounds i32, i32* %vla3, i64 0, !dbg !35
  %5 = load i32, i32* %arrayidx5, align 4, !dbg !35
  store i32 1, i32* %cleanup.dest.slot
  %6 = load i8*, i8** %saved_stack, !dbg !36
  call void @llvm.stackrestore(i8* %6), !dbg !36
  ret i32 %5, !dbg !36
}

; Function Attrs: nounwind readnone
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1

; Function Attrs: nounwind
declare i8* @llvm.stacksave() #2

; Function Attrs: nounwind
declare void @llvm.stackrestore(i8*) #2

attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { nounwind readnone }
attributes #2 = { nounwind }

!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!9, !10}
!llvm.ident = !{!11}

!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.7.0 (trunk 227074)", isOptimized: false, emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
!1 = !DIFile(filename: "dbg-combine.c", directory: "/home/probinson/projects/scratch")
!2 = !{}
!4 = distinct !DISubprogram(name: "foo", line: 1, isLocal: false, isDefinition: true, isOptimized: false, unit: !0, scopeLine: 2, file: !1, scope: !5, type: !6, retainedNodes: !2)
!5 = !DIFile(filename: "dbg-combine.c", directory: "/home/probinson/projects/scratch")
!6 = !DISubroutineType(types: !7)
!7 = !{!8}
!8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!9 = !{i32 2, !"Dwarf Version", i32 4}
!10 = !{i32 2, !"Debug Info Version", i32 3}
!11 = !{!"clang version 3.7.0 (trunk 227074)"}
!12 = !DILocalVariable(name: "elems", line: 3, scope: !4, file: !5, type: !8)
!13 = !DIExpression()
!14 = !DILocation(line: 3, column: 8, scope: !4)
!15 = !DILocation(line: 4, column: 15, scope: !4)
!16 = !DILocation(line: 4, column: 4, scope: !4)
!17 = !DILocalVariable(name: "array1", line: 4, scope: !4, file: !5, type: !18)
!18 = !DICompositeType(tag: DW_TAG_array_type, align: 32, baseType: !8, elements: !19)
!19 = !{!20}
!20 = !DISubrange(count: -1)
!21 = !DIExpression(DW_OP_deref)
!22 = !DILocation(line: 4, column: 8, scope: !4)
!23 = !DILocation(line: 5, column: 4, scope: !4)
!24 = !DILocation(line: 5, column: 13, scope: !4)
!25 = !DILocation(line: 6, column: 4, scope: !4)
!26 = !DILocation(line: 6, column: 13, scope: !4)
!27 = !DILocation(line: 7, column: 4, scope: !4)
!28 = !DILocation(line: 7, column: 13, scope: !4)
!29 = !DILocation(line: 8, column: 15, scope: !4)
!30 = !DILocation(line: 8, column: 4, scope: !4)
!31 = !DILocalVariable(name: "array2", line: 8, scope: !4, file: !5, type: !18)
!32 = !DILocation(line: 8, column: 8, scope: !4)
!33 = !DILocation(line: 9, column: 4, scope: !4)
!34 = !DILocation(line: 9, column: 13, scope: !4)
!35 = !DILocation(line: 10, column: 11, scope: !4)
!36 = !DILocation(line: 11, column: 1, scope: !4)