You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
6.8 KiB
172 lines
6.8 KiB
# 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: bb2:
|
|
# CHECK: ret
|
|
# CHECK-LABEL: bb4:
|
|
# 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
|
|
...
|