mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
298016b1b1
This is needed for Fortran assumed shape arrays whose dimensions are defined as, - 'count' is taken from array descriptor passed as parameter by caller, access from descriptor is defined by type DIExpression. - 'lowerBound' is defined by callee. The current alternate way represents using upperBound in place of count, where upperBound is calculated in callee in a temp variable using lowerBound and count Representation with count (DIExpression) is not only clearer as compared to upperBound (DIVariable) but it has another advantage that variable count is accessed by being parameter has better chance of survival at higher optimization level than upperBound being local variable. Reviewed By: aprantl Differential Revision: https://reviews.llvm.org/D99335
43 lines
2.1 KiB
LLVM
43 lines
2.1 KiB
LLVM
;; This test checks DISubrange count bound for DIExpression
|
|
; REQUIRES: x86_64-linux
|
|
|
|
; RUN: %llc_dwarf %s -filetype=obj -o - | llvm-dwarfdump - | FileCheck %s
|
|
|
|
;; Test whether bounds are generated correctly.
|
|
; CHECK-LABEL: DW_TAG_array_type
|
|
; CHECK: DW_TAG_subrange_type
|
|
; CHECK: DW_AT_lower_bound (DW_OP_push_object_address, DW_OP_plus_uconst 0x50, DW_OP_deref)
|
|
; CHECK-NEXT: DW_AT_count (DW_OP_push_object_address, DW_OP_plus_uconst 0x58, DW_OP_deref)
|
|
|
|
; ModuleID = 'fortsubrange.modified.strategy3check-in.ll'
|
|
source_filename = "fortsubrange.ll"
|
|
|
|
define void @MAIN_() !dbg !5 {
|
|
L.entry:
|
|
%"arr$sd1_349" = alloca [16 x i64], align 8
|
|
call void @llvm.dbg.declare(metadata [16 x i64]* %"arr$sd1_349", metadata !8, metadata !DIExpression()), !dbg !13
|
|
ret void, !dbg !14
|
|
}
|
|
|
|
; Function Attrs: nounwind readnone speculatable willreturn
|
|
declare void @llvm.dbg.declare(metadata, metadata, metadata)
|
|
|
|
!llvm.module.flags = !{!0, !1}
|
|
!llvm.dbg.cu = !{!2}
|
|
|
|
!0 = !{i32 2, !"Dwarf Version", i32 4}
|
|
!1 = !{i32 2, !"Debug Info Version", i32 3}
|
|
!2 = distinct !DICompileUnit(language: DW_LANG_Fortran90, file: !3, producer: " F90 Flang - 1.5 2017-05-01", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, retainedTypes: !4, globals: !4, imports: !4)
|
|
!3 = !DIFile(filename: "fortsubrange.f90", directory: "/dir")
|
|
!4 = !{}
|
|
!5 = distinct !DISubprogram(name: "main", scope: !2, file: !3, line: 1, type: !6, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagMainSubprogram, unit: !2)
|
|
!6 = !DISubroutineType(cc: DW_CC_program, types: !7)
|
|
!7 = !{null}
|
|
!8 = !DILocalVariable(name: "arr", scope: !5, file: !3, type: !9)
|
|
!9 = !DICompositeType(tag: DW_TAG_array_type, baseType: !10, size: 32, align: 32, elements: !11)
|
|
!10 = !DIBasicType(name: "integer", size: 32, align: 32, encoding: DW_ATE_signed)
|
|
!11 = !{!12}
|
|
!12 = !DISubrange(count: !DIExpression(DW_OP_push_object_address, DW_OP_plus_uconst, 88, DW_OP_deref), lowerBound: !DIExpression(DW_OP_push_object_address, DW_OP_plus_uconst, 80, DW_OP_deref))
|
|
!13 = !DILocation(line: 0, scope: !5)
|
|
!14 = !DILocation(line: 6, column: 1, scope: !5)
|