| # Check that the codegenprepare succeeds in dupRetToEnableTailCallOpts() also |
| # in the presence of a call to @llvm.dbg.value() |
| # |
| # RUN: llc %s -mtriple=s390x-linux-gnu -mcpu=z13 -start-before=codegenprepare \ |
| # RUN: -stop-after codegenprepare -o - | FileCheck %s |
| # |
| # CHECK-LABEL: bb1: |
| # CHECK: ret |
| # CHECK-LABEL: bb2: |
| # CHECK: ret |
| |
| |
| # Generated with: |
| # |
| # bin/llc -mtriple=s390x-linux-gnu -mcpu=z13 -stop-before codegenprepare -simplify-mir |
| # |
| # %0 = type { i32 (...)**, i16, %1* } |
| # %1 = type { i32 (...)** } |
| # %2 = type { i32 (...)**, %1*, i8, i32, i32, i32, i16, i32, i16, i32, i16*, %3*, %6*, %9 } |
| # %3 = type { %4 } |
| # %4 = type { i32 (...)**, i8, i32, i32, %5**, %1* } |
| # %5 = type { i32, i32 } |
| # %6 = type { %7*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %1* } |
| # %7 = type { %8 } |
| # %8 = type { i32 (...)**, i8, i32, i32, %0**, %1* } |
| # %9 = type { i8* } |
| # %10 = type { %0, i32, i32, %0* } |
| # |
| # define %0* @Fun(%2* %arg) !dbg !7 { |
| # bb: |
| # switch i32 undef, label %bb3 [ |
| # i32 58, label %bb1 |
| # i32 41, label %bb2 |
| # ], !dbg !14 |
| # |
| # bb1: ; preds = %bb |
| # br label %bb4, !dbg !15 |
| # |
| # bb2: ; preds = %bb |
| # %tmp = tail call %10* @hoge(%6* undef, %0* undef, i32 signext 0, i32 signext 0), !dbg !16 |
| # call void @llvm.dbg.value(metadata %10* %tmp, metadata !10, metadata !DIExpression()), !dbg !16 |
| # br label %bb4, !dbg !17 |
| # |
| # bb3: ; preds = %bb |
| # unreachable, !dbg !18 |
| # |
| # bb4: ; preds = %bb2, %bb1 |
| # %tmp5 = phi %10* [ undef, %bb1 ], [ %tmp, %bb2 ], !dbg !19 |
| # call void @llvm.dbg.value(metadata %10* %tmp5, metadata !12, metadata !DIExpression()), !dbg !19 |
| # %tmp6 = bitcast %10* %tmp5 to %0*, !dbg !20 |
| # call void @llvm.dbg.value(metadata %0* %tmp6, metadata !13, metadata !DIExpression()), !dbg !20 |
| # ret %0* %tmp6, !dbg !21 |
| # } |
| # |
| # declare %10* @hoge(%6*, %0*, i32, i32) |
| # |
| # ; Function Attrs: nounwind readnone speculatable |
| # declare void @llvm.dbg.value(metadata, metadata, metadata) #1 |
| # |
| # attributes #0 = { "use-soft-float"="false" } |
| # attributes #1 = { nounwind readnone speculatable } |
| # |
| # !llvm.module.flags = !{!0, !1} |
| # !llvm.dbg.cu = !{!2} |
| # !llvm.debugify = !{!5, !6} |
| # |
| # !0 = !{i32 2, !"Debug Info Version", i32 3} |
| # !1 = !{i32 1, !"wchar_size", i32 4} |
| # !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "debugify", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !4) |
| # !3 = !DIFile(filename: "tc.ll", directory: "/") |
| # !4 = !{} |
| # !5 = !{i32 8} |
| # !6 = !{i32 3} |
| # !7 = distinct !DISubprogram(name: "eggs", linkageName: "eggs", scope: null, file: !3, line: 1, type: !8, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !9) |
| # !8 = !DISubroutineType(types: !4) |
| # !9 = !{!10, !12, !13} |
| # !10 = !DILocalVariable(name: "1", scope: !7, file: !3, line: 3, type: !11) |
| # !11 = !DIBasicType(name: "ty64", size: 64, encoding: DW_ATE_unsigned) |
| # !12 = !DILocalVariable(name: "2", scope: !7, file: !3, line: 6, type: !11) |
| # !13 = !DILocalVariable(name: "3", scope: !7, file: !3, line: 7, type: !11) |
| # !14 = !DILocation(line: 1, column: 1, scope: !7) |
| # !15 = !DILocation(line: 2, column: 1, scope: !7) |
| # !16 = !DILocation(line: 3, column: 1, scope: !7) |
| # !17 = !DILocation(line: 4, column: 1, scope: !7) |
| # !18 = !DILocation(line: 5, column: 1, scope: !7) |
| # !19 = !DILocation(line: 6, column: 1, scope: !7) |
| # !20 = !DILocation(line: 7, column: 1, scope: !7) |
| # !21 = !DILocation(line: 8, column: 1, scope: !7) |
| |
| |
| --- | |
| |
| %0 = type { i32 (...)**, i16, %1* } |
| %1 = type { i32 (...)** } |
| %2 = type { i32 (...)**, %1*, i8, i32, i32, i32, i16, i32, i16, i32, i16*, %3*, %6*, %9 } |
| %3 = type { %4 } |
| %4 = type { i32 (...)**, i8, i32, i32, %5**, %1* } |
| %5 = type { i32, i32 } |
| %6 = type { %7*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %1* } |
| %7 = type { %8 } |
| %8 = type { i32 (...)**, i8, i32, i32, %0**, %1* } |
| %9 = type { i8* } |
| %10 = type { %0, i32, i32, %0* } |
| |
| define %0* @Fun(%2* %arg) #0 !dbg !7 { |
| bb: |
| switch i32 undef, label %bb3 [ |
| i32 58, label %bb1 |
| i32 41, label %bb2 |
| ], !dbg !14 |
| |
| bb1: ; preds = %bb |
| br label %bb4, !dbg !15 |
| |
| bb2: ; preds = %bb |
| %tmp = tail call %10* @hoge(%6* undef, %0* undef, i32 signext 0, i32 signext 0), !dbg !16 |
| call void @llvm.dbg.value(metadata %10* %tmp, metadata !10, metadata !DIExpression()), !dbg !16 |
| br label %bb4, !dbg !17 |
| |
| bb3: ; preds = %bb |
| unreachable, !dbg !18 |
| |
| bb4: ; preds = %bb2, %bb1 |
| %tmp5 = phi %10* [ undef, %bb1 ], [ %tmp, %bb2 ], !dbg !19 |
| call void @llvm.dbg.value(metadata %10* %tmp5, metadata !12, metadata !DIExpression()), !dbg !19 |
| %tmp6 = bitcast %10* %tmp5 to %0*, !dbg !20 |
| call void @llvm.dbg.value(metadata %0* %tmp6, metadata !13, metadata !DIExpression()), !dbg !20 |
| ret %0* %tmp6, !dbg !21 |
| } |
| |
| declare %10* @hoge(%6*, %0*, i32, i32) #0 |
| |
| ; Function Attrs: nounwind readnone speculatable |
| declare void @llvm.dbg.value(metadata, metadata, metadata) #1 |
| |
| attributes #0 = { "target-cpu"="z13" } |
| attributes #1 = { nounwind readnone speculatable "target-cpu"="z13" } |
| |
| !llvm.module.flags = !{!0, !1} |
| !llvm.dbg.cu = !{!2} |
| !llvm.debugify = !{!5, !6} |
| |
| !0 = !{i32 2, !"Debug Info Version", i32 3} |
| !1 = !{i32 1, !"wchar_size", i32 4} |
| !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "debugify", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !4) |
| !3 = !DIFile(filename: "tc.ll", directory: "/") |
| !4 = !{} |
| !5 = !{i32 8} |
| !6 = !{i32 3} |
| !7 = distinct !DISubprogram(name: "eggs", linkageName: "eggs", scope: null, file: !3, line: 1, type: !8, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !9) |
| !8 = !DISubroutineType(types: !4) |
| !9 = !{!10, !12, !13} |
| !10 = !DILocalVariable(name: "1", scope: !7, file: !3, line: 3, type: !11) |
| !11 = !DIBasicType(name: "ty64", size: 64, encoding: DW_ATE_unsigned) |
| !12 = !DILocalVariable(name: "2", scope: !7, file: !3, line: 6, type: !11) |
| !13 = !DILocalVariable(name: "3", scope: !7, file: !3, line: 7, type: !11) |
| !14 = !DILocation(line: 1, column: 1, scope: !7) |
| !15 = !DILocation(line: 2, column: 1, scope: !7) |
| !16 = !DILocation(line: 3, column: 1, scope: !7) |
| !17 = !DILocation(line: 4, column: 1, scope: !7) |
| !18 = !DILocation(line: 5, column: 1, scope: !7) |
| !19 = !DILocation(line: 6, column: 1, scope: !7) |
| !20 = !DILocation(line: 7, column: 1, scope: !7) |
| !21 = !DILocation(line: 8, column: 1, scope: !7) |
| |
| ... |
| --- |
| name: Fun |
| alignment: 16 |
| tracksRegLiveness: true |
| ... |