[RISCV] Add shrinkwrap test cases showing gaps in current impl
[llvm-project.git] / llvm / test / CodeGen / X86 / windows-seh-EHa-PreserveCFG.ll
blobedd53b6eb9ad61bbf8eee7d566cfc68aca9994c1
1 ; RUN: llc -mtriple=x86_64-pc-windows-msvc %s -o /dev/null
2 define dso_local void @main(ptr %addr, ptr %src, ptr %dst) personality ptr @__CxxFrameHandler3 !dbg !11 {
3 entry:
4   %tmp0 = load float, ptr %src
5   %src1 = getelementptr inbounds float, ptr %src, i64 1
6   %tmp1 = load float, ptr %src1
7   %src2 = getelementptr inbounds float, ptr %src, i64 2
8   %tmp2 = load float, ptr %src2
9   %src3 = getelementptr inbounds float, ptr %src, i64 3
10   %tmp3 = load float, ptr %src3
11   %src4 = getelementptr inbounds float, ptr %src, i64 4
12   %tmp4 = load float, ptr %src4
13   %src5 = getelementptr inbounds float, ptr %src, i64 5
14   %tmp5 = load float, ptr %src5
15   %src6 = getelementptr inbounds float, ptr %src, i64 6
16   %tmp6 = load float, ptr %src6
17   invoke void @foo(ptr %addr)
18           to label %scope_begin unwind label %ehcleanup1, !dbg !13
20 scope_begin:
21   invoke void @llvm.seh.scope.begin()
22           to label %scope_end unwind label %ehcleanup, !dbg !13
24 scope_end:
25   invoke void @llvm.seh.scope.end()
26           to label %finish unwind label %ehcleanup, !dbg !13
28 ehcleanup:
29   %0 = cleanuppad within none [], !dbg !13
30   call void @llvm.dbg.value(metadata ptr %addr, metadata !12, metadata !DIExpression()), !dbg !13
31   call void @foo(ptr %addr) [ "funclet"(token %0) ], !dbg !13
32   cleanupret from %0 unwind label %ehcleanup1, !dbg !13
34 ehcleanup1:
35   %1 = cleanuppad within none [], !dbg !13
36   call void @foo(ptr %addr) [ "funclet"(token %1) ], !dbg !13
37   cleanupret from %1 unwind to caller, !dbg !13
39 finish:
40   store float %tmp0, ptr %dst
41   %dst1 = getelementptr inbounds float, ptr %dst, i64 1
42   store float %tmp1, ptr %dst1
43   %dst2 = getelementptr inbounds float, ptr %dst, i64 2
44   store float %tmp2, ptr %dst2
45   %dst3 = getelementptr inbounds float, ptr %dst, i64 3
46   store float %tmp3, ptr %dst3
47   %dst4 = getelementptr inbounds float, ptr %dst, i64 4
48   store float %tmp4, ptr %dst4
49   %dst5 = getelementptr inbounds float, ptr %dst, i64 5
50   store float %tmp5, ptr %dst5
51   %dst6 = getelementptr inbounds float, ptr %dst, i64 6
52   store float %tmp6, ptr %dst6
53   ret void
56 declare dso_local void @llvm.seh.scope.begin()
57 declare dso_local void @llvm.seh.scope.end()
58 declare dso_local i32 @__CxxFrameHandler3(...)
59 declare dso_local void @foo(ptr %addr)
60 declare void @llvm.dbg.value(metadata, metadata, metadata)
62 !llvm.module.flags = !{!0, !1, !2, !3}
63 !llvm.dbg.cu = !{!14}
65 !0 = !{i32 2, !"eh-asynch", i32 1}
66 !1 = !{i32 2, !"CodeView", i32 1}
67 !2 = !{i32 2, !"Debug Info Version", i32 3}
68 !3 = !{i32 7, !"uwtable", i32 2}
70 !4 = !DIBasicType(name: "float", size: 32, encoding: DW_ATE_float)
71 !5 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !4, size: 64)
72 !6 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
73 !7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !6, size: 64)
74 !8 = !DISubroutineType(types: !9)
75 !9 = !{null, !7, !5, !5}
76 !10 = !DIFile(filename: "c:/main.cpp", directory: "")
77 !11 = distinct !DISubprogram(name: "main", scope: !10, file: !10, line: 5, type: !8, scopeLine: 11, unit: !14)
78 !12 = !DILocalVariable(name: "addr", scope: !11, file: !10, line: 5, type: !7)
79 !13 = !DILocation(line: 7, scope: !11)
80 !14 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !10, isOptimized: true, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None)