| # 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 |
| } |
| |
| ... |