blob: 401076cfdf87523bd3343ec380e77abcf5dee608 [file] [log] [blame] [edit]
# This test case has been reduced from one of the files from nullstone benchmark.
# It verifies that no stalls are being missed when compiling with '-g'.
# REQUIRES: asserts
# RUN: llc -march=hexagon -mcpu=hexagonv73 -run-pass=global-sched -debug-only=global_sched %s -o /dev/null 2>&1 | FileCheck %s
# CHECK: bb.3:
# CHECK: Could not move packetized instr.
# CHECK-NEXT: Not a single candidate fit.
# CHECK: Home iterator moved to new BB(2)
# CHECH-NOT: Want to move dependent op: S4_storeirif_io
--- |
%struct._Dnk_filet = type { i16, i8, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, [2 x i32], ptr, ptr, ptr, %struct._Mbstatet, ptr, [8 x i8], i8 }
%struct._Mbstatet = type { i32, i16, i16 }
@datafileptr = external dso_local local_unnamed_addr global ptr, align 4
@_Stderr = external dso_local global %struct._Dnk_filet, align 4
@.str = private unnamed_addr constant [49 x i8] c"ERROR: File=%s, Line=%d, Data file is not open.\0A\00", align 1, !dbg !0
@.str.1 = private unnamed_addr constant [6 x i8] c"fem.c\00", align 1, !dbg !7
@.str.2 = private unnamed_addr constant [28 x i8] c"%s=\09\09File=%s, Line=%d, %s.\0A\00", align 1, !dbg !12
@.str.3 = private unnamed_addr constant [6 x i8] c"error\00", align 1, !dbg !17
@.str.4 = private unnamed_addr constant [56 x i8] c"ERROR: File=%s, Line=%d, Unable to write to data file.\0A\00", align 1, !dbg !19
; Function Attrs: noreturn nounwind
define dso_local void @fatal_error_message(ptr noundef %filename, i32 noundef %line, ptr noundef %message) local_unnamed_addr #0 !dbg !31 {
entry:
call void @llvm.dbg.value(metadata ptr %filename, metadata !37, metadata !DIExpression()), !dbg !41
call void @llvm.dbg.value(metadata i32 %line, metadata !38, metadata !DIExpression()), !dbg !41
call void @llvm.dbg.value(metadata ptr %message, metadata !39, metadata !DIExpression()), !dbg !41
call void @llvm.dbg.value(metadata i32 0, metadata !40, metadata !DIExpression()), !dbg !41
%0 = load ptr, ptr @datafileptr, align 4, !dbg !42, !tbaa !44
%cmp = icmp eq ptr %0, null, !dbg !48
br i1 %cmp, label %if.end5.sink.split, label %if.end, !dbg !49
if.end: ; preds = %entry
%call1 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %0, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef %filename, i32 noundef %line, ptr noundef %message) #4, !dbg !50
call void @llvm.dbg.value(metadata i32 %call1, metadata !40, metadata !DIExpression()), !dbg !41
%cmp2 = icmp eq i32 %call1, -1, !dbg !51
br i1 %cmp2, label %if.end5.sink.split, label %if.end5, !dbg !53
if.end5.sink.split: ; preds = %if.end, %entry
%.sink = phi i32 [ 30, %entry ], [ 37, %if.end ]
%.str.sink = phi ptr [ @.str, %entry ], [ @.str.4, %if.end ]
%call = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull @_Stderr, ptr noundef nonnull %.str.sink, ptr noundef nonnull @.str.1, i32 noundef %.sink) #4, !dbg !41
br label %if.end5, !dbg !54
if.end5: ; preds = %if.end5.sink.split, %if.end
tail call void @exit(i32 noundef 1) #5, !dbg !54
unreachable, !dbg !54
}
; Function Attrs: nofree nounwind
declare !dbg !55 dso_local noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #1
; Function Attrs: noreturn
declare !dbg !104 dso_local void @exit(i32 noundef) local_unnamed_addr #2
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare void @llvm.dbg.value(metadata, metadata, metadata) #3
attributes #0 = { noreturn nounwind "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="hexagonv73" "target-features"="+v73,-long-calls" }
attributes #1 = { nofree nounwind "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="hexagonv73" "target-features"="+v73,-long-calls" }
attributes #2 = { noreturn "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="hexagonv73" "target-features"="+v73,-long-calls" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind }
attributes #5 = { noreturn nounwind }
!llvm.dbg.cu = !{!24}
!llvm.module.flags = !{!26, !27, !28, !29}
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = distinct !DIGlobalVariable(scope: null, file: !2, line: 29, type: !3, isLocal: true, isDefinition: true)
!2 = !DIFile(filename: "fem.c", directory: "/tmp/build/v66/benchmark/nullstone/nullstone")
!3 = !DICompositeType(tag: DW_TAG_array_type, baseType: !4, size: 392, elements: !5)
!4 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_unsigned_char)
!5 = !{!6}
!6 = !DISubrange(count: 49)
!7 = !DIGlobalVariableExpression(var: !8, expr: !DIExpression())
!8 = distinct !DIGlobalVariable(scope: null, file: !2, line: 30, type: !9, isLocal: true, isDefinition: true)
!9 = !DICompositeType(tag: DW_TAG_array_type, baseType: !4, size: 48, elements: !10)
!10 = !{!11}
!11 = !DISubrange(count: 6)
!12 = !DIGlobalVariableExpression(var: !13, expr: !DIExpression())
!13 = distinct !DIGlobalVariable(scope: null, file: !2, line: 33, type: !14, isLocal: true, isDefinition: true)
!14 = !DICompositeType(tag: DW_TAG_array_type, baseType: !4, size: 224, elements: !15)
!15 = !{!16}
!16 = !DISubrange(count: 28)
!17 = !DIGlobalVariableExpression(var: !18, expr: !DIExpression())
!18 = distinct !DIGlobalVariable(scope: null, file: !2, line: 34, type: !9, isLocal: true, isDefinition: true)
!19 = !DIGlobalVariableExpression(var: !20, expr: !DIExpression())
!20 = distinct !DIGlobalVariable(scope: null, file: !2, line: 36, type: !21, isLocal: true, isDefinition: true)
!21 = !DICompositeType(tag: DW_TAG_array_type, baseType: !4, size: 448, elements: !22)
!22 = !{!23}
!23 = !DISubrange(count: 56)
!24 = distinct !DICompileUnit(language: DW_LANG_C11, file: !2, producer: "clang", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, globals: !25, splitDebugInlining: false, debugInfoForProfiling: true, nameTableKind: None)
!25 = !{!0, !7, !12, !17, !19}
!26 = !{i32 7, !"Dwarf Version", i32 4}
!27 = !{i32 2, !"Debug Info Version", i32 3}
!28 = !{i32 1, !"wchar_size", i32 4}
!29 = !{i32 7, !"frame-pointer", i32 2}
!31 = distinct !DISubprogram(name: "fatal_error_message", scope: !2, file: !2, line: 24, type: !32, scopeLine: 25, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !24, retainedNodes: !36)
!32 = !DISubroutineType(types: !33)
!33 = !{null, !34, !35, !34}
!34 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !4, size: 32)
!35 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!36 = !{!37, !38, !39, !40}
!37 = !DILocalVariable(name: "filename", arg: 1, scope: !31, file: !2, line: 24, type: !34)
!38 = !DILocalVariable(name: "line", arg: 2, scope: !31, file: !2, line: 24, type: !35)
!39 = !DILocalVariable(name: "message", arg: 3, scope: !31, file: !2, line: 24, type: !34)
!40 = !DILocalVariable(name: "status", scope: !31, file: !2, line: 26, type: !35)
!41 = !DILocation(line: 0, scope: !31)
!42 = !DILocation(line: 28, column: 7, scope: !43)
!43 = distinct !DILexicalBlock(scope: !31, file: !2, line: 28, column: 7)
!44 = !{!45, !45, i64 0}
!45 = !{!"any pointer", !46, i64 0}
!46 = !{!"omnipotent char", !47, i64 0}
!47 = !{!"Simple C/C++ TBAA"}
!48 = !DILocation(line: 28, column: 19, scope: !43)
!49 = !DILocation(line: 28, column: 7, scope: !31)
!50 = !DILocation(line: 32, column: 14, scope: !43)
!51 = !DILocation(line: 35, column: 14, scope: !52)
!52 = distinct !DILexicalBlock(scope: !31, file: !2, line: 35, column: 7)
!53 = !DILocation(line: 35, column: 7, scope: !31)
!54 = !DILocation(line: 38, column: 3, scope: !31)
!55 = !DISubprogram(name: "fprintf", scope: !56, file: !56, line: 129, type: !57, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !103)
!56 = !DIFile(filename: "stdio.h", directory: "/test")
!57 = !DISubroutineType(types: !58)
!58 = !{!35, !59, !101, null}
!59 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !60, size: 32)
!60 = !DIDerivedType(tag: DW_TAG_typedef, name: "FILE", file: !56, line: 107, baseType: !61)
!61 = !DIDerivedType(tag: DW_TAG_typedef, name: "_Filet", file: !56, line: 104, baseType: !62)
!62 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "_Dnk_filet", file: !56, line: 85, size: 640, elements: !63)
!63 = !{!64, !66, !68, !69, !71, !72, !73, !74, !75, !76, !80, !84, !85, !86, !87, !95, !96, !100}
!64 = !DIDerivedType(tag: DW_TAG_member, name: "_Mode", scope: !62, file: !56, line: 87, baseType: !65, size: 16)
!65 = !DIBasicType(name: "unsigned short", size: 16, encoding: DW_ATE_unsigned)
!66 = !DIDerivedType(tag: DW_TAG_member, name: "_Idx", scope: !62, file: !56, line: 88, baseType: !67, size: 8, offset: 16)
!67 = !DIBasicType(name: "unsigned char", size: 8, encoding: DW_ATE_unsigned_char)
!68 = !DIDerivedType(tag: DW_TAG_member, name: "_Handle", scope: !62, file: !56, line: 89, baseType: !35, size: 32, offset: 32)
!69 = !DIDerivedType(tag: DW_TAG_member, name: "_Buf", scope: !62, file: !56, line: 91, baseType: !70, size: 32, offset: 64)
!70 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !67, size: 32)
!71 = !DIDerivedType(tag: DW_TAG_member, name: "_Bend", scope: !62, file: !56, line: 91, baseType: !70, size: 32, offset: 96)
!72 = !DIDerivedType(tag: DW_TAG_member, name: "_Next", scope: !62, file: !56, line: 91, baseType: !70, size: 32, offset: 128)
!73 = !DIDerivedType(tag: DW_TAG_member, name: "_Rend", scope: !62, file: !56, line: 92, baseType: !70, size: 32, offset: 160)
!74 = !DIDerivedType(tag: DW_TAG_member, name: "_Wend", scope: !62, file: !56, line: 92, baseType: !70, size: 32, offset: 192)
!75 = !DIDerivedType(tag: DW_TAG_member, name: "_Rback", scope: !62, file: !56, line: 92, baseType: !70, size: 32, offset: 224)
!76 = !DIDerivedType(tag: DW_TAG_member, name: "_WRback", scope: !62, file: !56, line: 94, baseType: !77, size: 32, offset: 256)
!77 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !78, size: 32)
!78 = !DIDerivedType(tag: DW_TAG_typedef, name: "_Wchart", file: !79, line: 851, baseType: !35)
!79 = !DIFile(filename: "yvals.h", directory: "/test")
!80 = !DIDerivedType(tag: DW_TAG_member, name: "_WBack", scope: !62, file: !56, line: 94, baseType: !81, size: 64, offset: 288)
!81 = !DICompositeType(tag: DW_TAG_array_type, baseType: !78, size: 64, elements: !82)
!82 = !{!83}
!83 = !DISubrange(count: 2)
!84 = !DIDerivedType(tag: DW_TAG_member, name: "_Rsave", scope: !62, file: !56, line: 95, baseType: !70, size: 32, offset: 352)
!85 = !DIDerivedType(tag: DW_TAG_member, name: "_WRend", scope: !62, file: !56, line: 95, baseType: !70, size: 32, offset: 384)
!86 = !DIDerivedType(tag: DW_TAG_member, name: "_WWend", scope: !62, file: !56, line: 95, baseType: !70, size: 32, offset: 416)
!87 = !DIDerivedType(tag: DW_TAG_member, name: "_Wstate", scope: !62, file: !56, line: 97, baseType: !88, size: 64, offset: 448)
!88 = !DIDerivedType(tag: DW_TAG_typedef, name: "_Mbstatet", file: !56, line: 64, baseType: !89)
!89 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "_Mbstatet", file: !56, line: 60, size: 64, elements: !90)
!90 = !{!91, !93, !94}
!91 = !DIDerivedType(tag: DW_TAG_member, name: "_Wchar", scope: !89, file: !56, line: 62, baseType: !92, size: 32)
!92 = !DIBasicType(name: "unsigned long", size: 32, encoding: DW_ATE_unsigned)
!93 = !DIDerivedType(tag: DW_TAG_member, name: "_Byte", scope: !89, file: !56, line: 63, baseType: !65, size: 16, offset: 32)
!94 = !DIDerivedType(tag: DW_TAG_member, name: "_State", scope: !89, file: !56, line: 63, baseType: !65, size: 16, offset: 48)
!95 = !DIDerivedType(tag: DW_TAG_member, name: "_Tmpnam", scope: !62, file: !56, line: 98, baseType: !34, size: 32, offset: 512)
!96 = !DIDerivedType(tag: DW_TAG_member, name: "_Back", scope: !62, file: !56, line: 99, baseType: !97, size: 64, offset: 544)
!97 = !DICompositeType(tag: DW_TAG_array_type, baseType: !67, size: 64, elements: !98)
!98 = !{!99}
!99 = !DISubrange(count: 8)
!100 = !DIDerivedType(tag: DW_TAG_member, name: "_Cbuf", scope: !62, file: !56, line: 99, baseType: !67, size: 8, offset: 608)
!101 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !102, size: 32)
!102 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !4)
!103 = !{}
!104 = !DISubprogram(name: "exit", scope: !105, file: !105, line: 82, type: !106, flags: DIFlagPrototyped | DIFlagNoReturn, spFlags: DISPFlagOptimized, retainedNodes: !103)
!105 = !DIFile(filename: "stdlib.h", directory: "/test")
!106 = !DISubroutineType(types: !107)
!107 = !{null, !35}
...
---
name: fatal_error_message
alignment: 16
exposesReturnsTwice: false
legalized: false
regBankSelected: false
selected: false
failedISel: false
tracksRegLiveness: true
hasWinCFI: false
callsEHReturn: false
callsUnwindInit: false
hasEHContTarget: false
hasEHScopes: false
hasEHFunclets: false
isOutlined: false
debugInstrRef: false
failsVerification: true
tracksDebugUserValues: true
registers: []
liveins:
- { reg: '$r0', virtual-reg: '' }
- { reg: '$r1', virtual-reg: '' }
- { reg: '$r2', virtual-reg: '' }
frameInfo:
isFrameAddressTaken: false
isReturnAddressTaken: false
hasStackMap: false
hasPatchPoint: false
stackSize: 16
offsetAdjustment: 0
maxAlignment: 4
adjustsStack: true
hasCalls: true
stackProtector: ''
functionContext: ''
maxCallFrameSize: 16
cvBytesOfCalleeSavedRegisters: 0
hasOpaqueSPAdjustment: false
hasVAStart: false
hasMustTailInVarArgFunc: false
hasTailCall: false
localFrameSize: 0
savePoint: []
restorePoint: []
fixedStack: []
stack: []
callSites: []
debugValueSubstitutions: []
constants: []
machineFunctionInfo: {}
body: |
bb.0.entry:
successors: %bb.1(0x40000000), %bb.2(0x40000000)
liveins: $r0, $r1, $r2
DBG_VALUE $r0, $noreg, !37, !DIExpression(), debug-location !41
DBG_VALUE $r1, $noreg, !38, !DIExpression(), debug-location !41
DBG_VALUE $r2, $noreg, !39, !DIExpression(), debug-location !41
BUNDLE implicit-def $r3, implicit-def $r29, implicit-def $r30, implicit killed $gp, implicit killed $r29, implicit killed $framekey, implicit killed $framelimit, implicit $r30, implicit killed $r31, debug-location !42 {
renamable $r3 = L2_loadrigp @datafileptr, implicit killed $gp, debug-location !42 :: (dereferenceable load (s32) from @datafileptr, !tbaa !44)
$r29 = frame-setup S2_allocframe killed $r29, 16, implicit-def $r30, implicit killed $framekey, implicit killed $framelimit, implicit $r30, implicit killed $r31, debug-location !42 :: (store (s32) into stack)
}
DBG_VALUE 0, $noreg, !40, !DIExpression(), debug-location !41
DBG_VALUE $r0, $noreg, !37, !DIExpression(), debug-location !41
BUNDLE implicit-def dead $p0, implicit-def $pc, implicit $r3, debug-location !48 {
renamable $p0 = C2_cmpeqi renamable $r3, 0, debug-location !48
J2_jumpfnewpt internal killed renamable $p0, %bb.2, implicit-def $pc, debug-location !49
}
bb.1:
successors: %bb.4(0x80000000)
BUNDLE implicit-def $r1, implicit-def $r2, implicit-def $pc {
renamable $r1 = A2_tfrsi @.str
renamable $r2 = A2_tfrsi 30
J2_jump %bb.4, implicit-def $pc
}
bb.2.if.end:
successors: %bb.3(0x40000000), %bb.5(0x40000000)
liveins: $r0, $r1, $r2, $r3
DBG_VALUE $r4, $noreg, !37, !DIExpression(), debug-location !41
BUNDLE implicit-def $r4, implicit-def $d0, implicit-def $r0, implicit-def $r1, implicit killed $r0, implicit $r29, implicit killed $r1, implicit killed $r3, debug-location !41 {
$r4 = A2_tfr killed $r0
S2_storeri_io $r29, 8, killed renamable $r1, debug-location !50 :: (store (s32) into stack + 8)
$d0 = A4_combineir @.str.2, killed $r3, debug-location !50
}
BUNDLE implicit $r29, implicit killed $r2, implicit killed $r4, debug-location !50 {
S2_storeri_io $r29, 12, killed renamable $r2, debug-location !50 :: (store (s32) into stack + 12)
S2_storeri_io $r29, 4, killed renamable $r4, debug-location !50 :: (store (s32) into stack + 4)
}
DBG_VALUE $r0, $noreg, !40, !DIExpression(), debug-location !41
BUNDLE implicit-def $pc, implicit-def $r31, implicit-def $r29, implicit-def $r0, implicit $r29, implicit $r0, implicit $r1, debug-location !50 {
S4_storeiri_io $r29, 0, @.str.3, debug-location !50 :: (store (s32) into stack)
J2_call @fprintf, hexagoncsr, implicit-def $pc, implicit-def $r31, implicit $r29, implicit $r0, implicit $r1, implicit-def $r29, implicit-def $r0, debug-location !50
}
BUNDLE implicit-def dead $p0, implicit-def $pc, implicit killed $r0, debug-location !51 {
renamable $p0 = C2_cmpeqi killed renamable $r0, -1, debug-location !51
J2_jumpfnewpt internal killed renamable $p0, %bb.5, implicit-def $pc, debug-location !53
}
bb.3:
successors: %bb.4(0x80000000)
BUNDLE implicit-def $r1, implicit-def $r2 {
renamable $r1 = A2_tfrsi @.str.4
renamable $r2 = A2_tfrsi 37
}
bb.4.if.end5.sink.split:
successors: %bb.5(0x80000000)
liveins: $r1, $r2
BUNDLE implicit-def $r0, implicit $r29, implicit killed $r2, debug-location !41 {
$r0 = A2_tfrsi @_Stderr, debug-location !41
S2_storeri_io $r29, 4, killed renamable $r2, debug-location !41 :: (store (s32) into stack + 4)
}
BUNDLE implicit-def $pc, implicit-def $r31, implicit-def $r29, implicit-def $r0, implicit $r29, implicit $r0, implicit $r1, debug-location !41 {
S4_storeiri_io $r29, 0, @.str.1, debug-location !41 :: (store (s32) into stack)
J2_call @fprintf, hexagoncsr, implicit-def $pc, implicit-def $r31, implicit $r29, implicit $r0, implicit $r1, implicit-def $r29, implicit-def $r0, debug-location !41
}
bb.5.if.end5:
BUNDLE implicit-def $r0, implicit-def $r29, debug-location !54 {
$r0 = A2_tfrsi 1, debug-location !54
PS_call_nr @exit, hexagoncsr, implicit internal $r0, implicit-def $r29, debug-location !54
}
...