- MIParser: If the successor list is not specified successors will be added based on basic block operands in the block and possible fallthrough. - MIRPrinter: Adds a new `simplify-mir` option, with that option set: Skip printing of block successor lists in cases where the parser is guaranteed to reconstruct it. This means we still print the list if some successor cannot be determined (happens for example for jump tables), if the successor order changes or branch probabilities being unequal. Differential Revision: https://reviews.llvm.org/D31262 llvm-svn: 302289
160 lines
7.9 KiB
YAML
160 lines
7.9 KiB
YAML
# RUN: llc -mtriple thumbv7 -verify-machineinstrs -run-pass arm-ldst-opt %s -o - | FileCheck %s
|
|
--- |
|
|
; ModuleID = '/Volumes/Data/llvm/test/CodeGen/ARM/sched-it-debug-nodes.ll'
|
|
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
|
|
target triple = "thumbv7"
|
|
|
|
%struct.s = type opaque
|
|
|
|
; Function Attrs: nounwind
|
|
define arm_aapcscc i32 @f(%struct.s* %s, i32 %u, i8* %b, i32 %n) #0 !dbg !4 {
|
|
entry:
|
|
tail call void @llvm.dbg.value(metadata %struct.s* %s, i64 0, metadata !18, metadata !27), !dbg !28
|
|
tail call void @llvm.dbg.value(metadata i32 %u, i64 0, metadata !19, metadata !27), !dbg !28
|
|
tail call void @llvm.dbg.value(metadata i8* %b, i64 0, metadata !20, metadata !27), !dbg !28
|
|
tail call void @llvm.dbg.value(metadata i32 %n, i64 0, metadata !21, metadata !27), !dbg !28
|
|
%cmp = icmp ult i32 %n, 4, !dbg !29
|
|
br i1 %cmp, label %return, label %if.end, !dbg !31
|
|
|
|
if.end: ; preds = %entry
|
|
tail call arm_aapcscc void @g(%struct.s* %s, i8* %b, i32 %n) #3, !dbg !32
|
|
br label %return, !dbg !33
|
|
|
|
return: ; preds = %if.end, %entry
|
|
%retval.0 = phi i32 [ 0, %if.end ], [ -1, %entry ]
|
|
ret i32 %retval.0, !dbg !34
|
|
}
|
|
|
|
declare arm_aapcscc void @g(%struct.s*, i8*, i32) #1
|
|
|
|
; Function Attrs: nounwind readnone
|
|
declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #2
|
|
|
|
attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
|
attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
|
attributes #2 = { nounwind readnone }
|
|
attributes #3 = { nounwind }
|
|
|
|
!llvm.dbg.cu = !{!0}
|
|
!llvm.module.flags = !{!22, !23, !24, !25}
|
|
!llvm.ident = !{!26}
|
|
|
|
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.7.0 (llvm/trunk 237059)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
|
|
!1 = !DIFile(filename: "<stdin>", directory: "/Users/compnerd/Source/llvm")
|
|
!2 = !{}
|
|
!4 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 9, type: !5, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !17)
|
|
!5 = !DISubroutineType(types: !6)
|
|
!6 = !{!7, !8, !11, !12, !16}
|
|
!7 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
|
!8 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !9, size: 32, align: 32)
|
|
!9 = !DIDerivedType(tag: DW_TAG_typedef, name: "s", file: !1, line: 5, baseType: !10)
|
|
!10 = !DICompositeType(tag: DW_TAG_structure_type, name: "s", file: !1, line: 5, flags: DIFlagFwdDecl)
|
|
!11 = !DIBasicType(name: "unsigned int", size: 32, align: 32, encoding: DW_ATE_unsigned)
|
|
!12 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !13, size: 32, align: 32)
|
|
!13 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !14)
|
|
!14 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint8_t", file: !1, line: 2, baseType: !15)
|
|
!15 = !DIBasicType(name: "unsigned char", size: 8, align: 8, encoding: DW_ATE_unsigned_char)
|
|
!16 = !DIDerivedType(tag: DW_TAG_typedef, name: "size_t", file: !1, line: 3, baseType: !11)
|
|
!17 = !{!18, !19, !20, !21}
|
|
!18 = !DILocalVariable(name: "s", arg: 1, scope: !4, file: !1, line: 9, type: !8)
|
|
!19 = !DILocalVariable(name: "u", arg: 2, scope: !4, file: !1, line: 9, type: !11)
|
|
!20 = !DILocalVariable(name: "b", arg: 3, scope: !4, file: !1, line: 9, type: !12)
|
|
!21 = !DILocalVariable(name: "n", arg: 4, scope: !4, file: !1, line: 9, type: !16)
|
|
!22 = !{i32 2, !"Dwarf Version", i32 4}
|
|
!23 = !{i32 2, !"Debug Info Version", i32 3}
|
|
!24 = !{i32 1, !"wchar_size", i32 4}
|
|
!25 = !{i32 1, !"min_enum_size", i32 4}
|
|
!26 = !{!"clang version 3.7.0 (llvm/trunk 237059)"}
|
|
!27 = !DIExpression()
|
|
!28 = !DILocation(line: 9, scope: !4)
|
|
!29 = !DILocation(line: 10, scope: !30)
|
|
!30 = distinct !DILexicalBlock(scope: !4, file: !1, line: 10)
|
|
!31 = !DILocation(line: 10, scope: !4)
|
|
!32 = !DILocation(line: 13, scope: !4)
|
|
!33 = !DILocation(line: 14, scope: !4)
|
|
!34 = !DILocation(line: 15, scope: !4)
|
|
|
|
...
|
|
---
|
|
name: f
|
|
alignment: 1
|
|
exposesReturnsTwice: false
|
|
tracksRegLiveness: true
|
|
liveins:
|
|
- { reg: '%r0' }
|
|
- { reg: '%r1' }
|
|
- { reg: '%r2' }
|
|
- { reg: '%r3' }
|
|
calleeSavedRegisters: [ '%lr', '%d8', '%d9', '%d10', '%d11', '%d12', '%d13',
|
|
'%d14', '%d15', '%q4', '%q5', '%q6', '%q7', '%r4',
|
|
'%r5', '%r6', '%r7', '%r8', '%r9', '%r10', '%r11',
|
|
'%s16', '%s17', '%s18', '%s19', '%s20', '%s21',
|
|
'%s22', '%s23', '%s24', '%s25', '%s26', '%s27',
|
|
'%s28', '%s29', '%s30', '%s31', '%d8_d10', '%d9_d11',
|
|
'%d10_d12', '%d11_d13', '%d12_d14', '%d13_d15',
|
|
'%q4_q5', '%q5_q6', '%q6_q7', '%q4_q5_q6_q7', '%r4_r5',
|
|
'%r6_r7', '%r8_r9', '%r10_r11', '%d8_d9_d10', '%d9_d10_d11',
|
|
'%d10_d11_d12', '%d11_d12_d13', '%d12_d13_d14',
|
|
'%d13_d14_d15', '%d8_d10_d12', '%d9_d11_d13', '%d10_d12_d14',
|
|
'%d11_d13_d15', '%d8_d10_d12_d14', '%d9_d11_d13_d15',
|
|
'%d9_d10', '%d11_d12', '%d13_d14', '%d9_d10_d11_d12',
|
|
'%d11_d12_d13_d14' ]
|
|
frameInfo:
|
|
isFrameAddressTaken: false
|
|
isReturnAddressTaken: false
|
|
hasStackMap: false
|
|
hasPatchPoint: false
|
|
stackSize: 8
|
|
offsetAdjustment: 0
|
|
maxAlignment: 4
|
|
adjustsStack: true
|
|
hasCalls: true
|
|
maxCallFrameSize: 0
|
|
hasOpaqueSPAdjustment: false
|
|
hasVAStart: false
|
|
hasMustTailInVarArgFunc: false
|
|
stack:
|
|
- { id: 0, type: spill-slot, offset: -4, size: 4, alignment: 4, callee-saved-register: '%lr' }
|
|
- { id: 1, type: spill-slot, offset: -8, size: 4, alignment: 4, callee-saved-register: '%r7' }
|
|
body: |
|
|
bb.0.entry:
|
|
liveins: %r0, %r1, %r2, %r3, %lr, %r7
|
|
|
|
DBG_VALUE debug-use %r0, debug-use _, !18, !27, debug-location !28
|
|
DBG_VALUE debug-use %r1, debug-use _, !19, !27, debug-location !28
|
|
DBG_VALUE debug-use %r2, debug-use _, !20, !27, debug-location !28
|
|
DBG_VALUE debug-use %r3, debug-use _, !21, !27, debug-location !28
|
|
t2CMPri %r3, 4, 14, _, implicit-def %cpsr, debug-location !31
|
|
t2Bcc %bb.2.if.end, 2, killed %cpsr
|
|
|
|
bb.1:
|
|
liveins: %lr, %r7
|
|
|
|
DBG_VALUE debug-use %r1, debug-use _, !19, !27, debug-location !28
|
|
%r0 = t2MOVi -1, 14, _, _
|
|
DBG_VALUE debug-use %r1, debug-use _, !19, !27, debug-location !28
|
|
tBX_RET 14, _, implicit %r0, debug-location !34
|
|
|
|
bb.2.if.end:
|
|
liveins: %r0, %r2, %r3, %r7, %lr
|
|
|
|
%sp = frame-setup t2STMDB_UPD %sp, 14, _, killed %r7, killed %lr
|
|
frame-setup CFI_INSTRUCTION def_cfa_offset 8
|
|
frame-setup CFI_INSTRUCTION offset %lr, -4
|
|
frame-setup CFI_INSTRUCTION offset %r7, -8
|
|
DBG_VALUE debug-use %r0, debug-use _, !18, !27, debug-location !28
|
|
DBG_VALUE debug-use %r1, debug-use _, !19, !27, debug-location !28
|
|
DBG_VALUE debug-use %r2, debug-use _, !20, !27, debug-location !28
|
|
DBG_VALUE debug-use %r3, debug-use _, !21, !27, debug-location !28
|
|
%r1 = COPY killed %r2, debug-location !32
|
|
DBG_VALUE debug-use %r1, debug-use _, !19, !27, debug-location !28
|
|
%r2 = COPY killed %r3, debug-location !32
|
|
tBL 14, _, @g, csr_aapcs, implicit-def dead %lr, implicit %sp, implicit %r0, implicit %r1, implicit %r2, implicit-def %sp, debug-location !32
|
|
%r0 = t2MOVi 0, 14, _, _
|
|
%sp = t2LDMIA_UPD %sp, 14, _, def %r7, def %lr
|
|
tBX_RET 14, _, implicit %r0, debug-location !34
|
|
# Verify that the DBG_VALUE is ignored.
|
|
# CHECK: %sp = t2LDMIA_RET %sp, 14, _, def %r7, def %pc, implicit %r0
|
|
|
|
...
|