diff options
Diffstat (limited to 'test/Transforms/SimplifyCFG')
-rw-r--r-- | test/Transforms/SimplifyCFG/2006-08-03-Crash.ll | 4 | ||||
-rw-r--r-- | test/Transforms/SimplifyCFG/2008-05-16-PHIBlockMerge.ll | 2 | ||||
-rw-r--r-- | test/Transforms/SimplifyCFG/2011-03-08-UnreachableUse.ll | 31 | ||||
-rw-r--r-- | test/Transforms/SimplifyCFG/PhiBlockMerge.ll | 1 | ||||
-rw-r--r-- | test/Transforms/SimplifyCFG/PhiEliminate2.ll | 15 | ||||
-rw-r--r-- | test/Transforms/SimplifyCFG/PhiEliminate3.ll | 34 | ||||
-rw-r--r-- | test/Transforms/SimplifyCFG/UnreachableEliminate.ll | 56 | ||||
-rw-r--r-- | test/Transforms/SimplifyCFG/branch-fold-dbg.ll | 58 | ||||
-rw-r--r-- | test/Transforms/SimplifyCFG/hoist-dbgvalue.ll | 53 | ||||
-rw-r--r-- | test/Transforms/SimplifyCFG/switch-on-const-select.ll | 138 | ||||
-rw-r--r-- | test/Transforms/SimplifyCFG/trap-debugloc.ll | 19 |
11 files changed, 393 insertions, 18 deletions
diff --git a/test/Transforms/SimplifyCFG/2006-08-03-Crash.ll b/test/Transforms/SimplifyCFG/2006-08-03-Crash.ll index 2c84c93..70fbddf 100644 --- a/test/Transforms/SimplifyCFG/2006-08-03-Crash.ll +++ b/test/Transforms/SimplifyCFG/2006-08-03-Crash.ll @@ -1,7 +1,5 @@ -; RUN: opt < %s -gvn -simplifycfg \ -; RUN: -disable-output +; RUN: opt < %s -gvn -simplifycfg -disable-output ; PR867 -; END. target datalayout = "E-p:32:32" target triple = "powerpc-apple-darwin8" diff --git a/test/Transforms/SimplifyCFG/2008-05-16-PHIBlockMerge.ll b/test/Transforms/SimplifyCFG/2008-05-16-PHIBlockMerge.ll index 59e886b..56f43b6 100644 --- a/test/Transforms/SimplifyCFG/2008-05-16-PHIBlockMerge.ll +++ b/test/Transforms/SimplifyCFG/2008-05-16-PHIBlockMerge.ll @@ -1,6 +1,6 @@ ; RUN: opt < %s -simplifycfg -S > %t ; RUN: not grep {^BB.tomerge} %t -; RUN grep {^BB.nomerge} %t | count 2 +; RUN: grep {^BB.nomerge} %t | count 2 ; ModuleID = '<stdin>' declare i1 @foo() diff --git a/test/Transforms/SimplifyCFG/2011-03-08-UnreachableUse.ll b/test/Transforms/SimplifyCFG/2011-03-08-UnreachableUse.ll new file mode 100644 index 0000000..329774e --- /dev/null +++ b/test/Transforms/SimplifyCFG/2011-03-08-UnreachableUse.ll @@ -0,0 +1,31 @@ +; RUN: opt < %s -simplifycfg -S | FileCheck %s +; PR9420 + +; Note that the crash in PR9420 test is sensitive to the ordering of +; the transformations done by SimplifyCFG, so this test is likely to rot +; quickly. + +define noalias i8* @func_29() nounwind { +; CHECK: entry: +; CHECK-NEXT: unreachable +entry: + br label %for.cond + +for.cond: ; preds = %for.inc38, %entry + %p_34.addr.0 = phi i16 [ 1, %entry ], [ %conv40, %for.inc38 ] + br label %for.cond1 + +for.cond1: ; preds = %for.inc29, %for.cond + %p_32.addr.0 = phi i1 [ true, %for.cond ], [ true, %for.inc29 ] + br i1 %p_32.addr.0, label %for.body8, label %for.inc38 + +for.body8: ; preds = %for.cond1 + unreachable + +for.inc29: ; preds = %for.cond17 + br label %for.cond1 + +for.inc38: ; preds = %for.end32 + %conv40 = add i16 %p_34.addr.0, 1 + br label %for.cond +} diff --git a/test/Transforms/SimplifyCFG/PhiBlockMerge.ll b/test/Transforms/SimplifyCFG/PhiBlockMerge.ll index c28d0ba..36b52f5 100644 --- a/test/Transforms/SimplifyCFG/PhiBlockMerge.ll +++ b/test/Transforms/SimplifyCFG/PhiBlockMerge.ll @@ -6,6 +6,7 @@ define i32 @test(i1 %a, i1 %b) { ; CHECK: br i1 %a br i1 %a, label %M, label %O +; CHECK: O: O: ; preds = %0 ; CHECK: select i1 %b, i32 0, i32 1 ; CHECK-NOT: phi diff --git a/test/Transforms/SimplifyCFG/PhiEliminate2.ll b/test/Transforms/SimplifyCFG/PhiEliminate2.ll index c0f6781..0b3893d 100644 --- a/test/Transforms/SimplifyCFG/PhiEliminate2.ll +++ b/test/Transforms/SimplifyCFG/PhiEliminate2.ll @@ -1,14 +1,17 @@ ; RUN: opt < %s -simplifycfg -S | not grep br -define i32 @test(i1 %C, i32 %V1, i32 %V2) { +define i32 @test(i1 %C, i32 %V1, i32 %V2, i16 %V3) { entry: - br i1 %C, label %then, label %Cont + br i1 %C, label %then, label %else then: ; preds = %entry - %V3 = or i32 %V2, %V1 ; <i32> [#uses=1] + %V4 = or i32 %V2, %V1 ; <i32> [#uses=1] br label %Cont -Cont: ; preds = %then, %entry - %V4 = phi i32 [ %V1, %entry ], [ %V3, %then ] ; <i32> [#uses=0] - call i32 @test( i1 false, i32 0, i32 0 ) ; <i32>:0 [#uses=0] +else: ; preds = %entry + %V5 = sext i16 %V3 to i32 ; <i32> [#uses=1] + br label %Cont +Cont: ; preds = %then, %else + %V6 = phi i32 [ %V5, %else ], [ %V4, %then ] ; <i32> [#uses=0] + call i32 @test( i1 false, i32 0, i32 0, i16 0 ) ; <i32>:0 [#uses=0] ret i32 %V1 } diff --git a/test/Transforms/SimplifyCFG/PhiEliminate3.ll b/test/Transforms/SimplifyCFG/PhiEliminate3.ll new file mode 100644 index 0000000..3566b87 --- /dev/null +++ b/test/Transforms/SimplifyCFG/PhiEliminate3.ll @@ -0,0 +1,34 @@ +; Test merging of blocks containing complex expressions, +; with various folding thresholds +; +; RUN: opt < %s -simplifycfg -S -phi-node-folding-threshold=1 | grep N: +; RUN: opt < %s -simplifycfg -S -phi-node-folding-threshold=2 | not grep N: +; RUN: opt < %s -simplifycfg -S -phi-node-folding-threshold=2 | grep M: +; RUN: opt < %s -simplifycfg -S -phi-node-folding-threshold=7 | not grep M: +; + +define i32 @test(i1 %a, i1 %b, i32 %i, i32 %j, i32 %k) { +entry: + br i1 %a, label %M, label %O +O: + br i1 %b, label %P, label %Q +P: + %iaj = add i32 %i, %j + %iajak = add i32 %iaj, %k + br label %N +Q: + %ixj = xor i32 %i, %j + %ixjxk = xor i32 %ixj, %k + br label %N +N: + ; This phi should be foldable if threshold >= 2 + %Wp = phi i32 [ %iajak, %P ], [ %ixjxk, %Q ] + %Wp2 = add i32 %Wp, %Wp + br label %M +M: + ; This phi should be foldable if threshold >= 7 + %W = phi i32 [ %Wp2, %N ], [ 2, %entry ] + %R = add i32 %W, 1 + ret i32 %R +} + diff --git a/test/Transforms/SimplifyCFG/UnreachableEliminate.ll b/test/Transforms/SimplifyCFG/UnreachableEliminate.ll index 7133d98..4a692f3 100644 --- a/test/Transforms/SimplifyCFG/UnreachableEliminate.ll +++ b/test/Transforms/SimplifyCFG/UnreachableEliminate.ll @@ -1,33 +1,73 @@ -; RUN: opt < %s -simplifycfg -S | not grep unreachable +; RUN: opt < %s -simplifycfg -S | FileCheck %s define void @test1(i1 %C, i1* %BP) { +; CHECK: @test1 +; CHECK: entry: +; CHECK-NEXT: ret void +entry: br i1 %C, label %T, label %F -T: ; preds = %0 +T: store i1 %C, i1* %BP unreachable -F: ; preds = %0 +F: ret void } define void @test2() { +; CHECK: @test2 +; CHECK: entry: +; CHECK-NEXT: call void @test2() +; CHECK-NEXT: ret void +entry: invoke void @test2( ) to label %N unwind label %U -U: ; preds = %0 +U: unreachable -N: ; preds = %0 +N: ret void } define i32 @test3(i32 %v) { +; CHECK: @test3 +; CHECK: entry: +; CHECK-NEXT: [[CMP:%[A-Za-z0-9]+]] = icmp eq i32 %v, 2 +; CHECK-NEXT: select i1 [[CMP]], i32 2, i32 1 +; CHECK-NEXT: ret +entry: switch i32 %v, label %default [ i32 1, label %U i32 2, label %T ] -default: ; preds = %0 +default: ret i32 1 -U: ; preds = %0 +U: unreachable -T: ; preds = %0 +T: ret i32 2 } +; PR9450 +define i32 @test4(i32 %v) { +; CHECK: entry: +; CHECK-NEXT: switch i32 %v, label %T [ +; CHECK-NEXT: i32 3, label %V +; CHECK-NEXT: i32 2, label %U +; CHECK-NEXT: ] + +entry: + br label %SWITCH +V: + ret i32 7 +SWITCH: + switch i32 %v, label %default [ + i32 1, label %T + i32 2, label %U + i32 3, label %V + ] +default: + unreachable +U: + ret i32 1 +T: + ret i32 2 +} diff --git a/test/Transforms/SimplifyCFG/branch-fold-dbg.ll b/test/Transforms/SimplifyCFG/branch-fold-dbg.ll new file mode 100644 index 0000000..0897c95 --- /dev/null +++ b/test/Transforms/SimplifyCFG/branch-fold-dbg.ll @@ -0,0 +1,58 @@ +; RUN: opt -simplifycfg -S %s | FileCheck %s + +%0 = type { i32*, i32* } + +@0 = external hidden constant [5 x %0], align 4 + +define void @foo(i32) nounwind ssp { +Entry: + %1 = icmp slt i32 %0, 0, !dbg !5 + br i1 %1, label %BB5, label %BB1, !dbg !5 + +BB1: ; preds = %Entry + %2 = icmp sgt i32 %0, 4, !dbg !5 + br i1 %2, label %BB5, label %BB2, !dbg !5 + +BB2: ; preds = %BB1 + %3 = shl i32 1, %0, !dbg !5 + %4 = and i32 %3, 31, !dbg !5 + %5 = icmp eq i32 %4, 0, !dbg !5 + br i1 %5, label %BB5, label %BB3, !dbg !5 + +;CHECK: icmp eq +;CHECK-NEXT: getelementptr +;CHECK-NEXT: icmp eq + +BB3: ; preds = %BB2 + %6 = getelementptr inbounds [5 x %0]* @0, i32 0, i32 %0, !dbg !6 + call void @llvm.dbg.value(metadata !{%0* %6}, i64 0, metadata !7), !dbg !12 + %7 = icmp eq %0* %6, null, !dbg !13 + br i1 %7, label %BB5, label %BB4, !dbg !13 + +BB4: ; preds = %BB3 + %8 = icmp slt i32 %0, 0, !dbg !5 + ret void, !dbg !14 + +BB5: ; preds = %BB3, %BB2, %BB1, %Entry + ret void, !dbg !14 +} + +declare void @llvm.dbg.value(metadata, i64, metadata) nounwind readnone + +!llvm.dbg.sp = !{!0} + +!0 = metadata !{i32 589870, i32 0, metadata !1, metadata !"foo", metadata !"foo", metadata !"", metadata !1, i32 231, metadata !3, i1 false, i1 true, i32 0, i32 0, i32 0, i32 256, i1 false, void (i32)* @foo, null} ; [ DW_TAG_subprogram ] +!1 = metadata !{i32 589865, metadata !"a.c", metadata !"/private/tmp", metadata !2} ; [ DW_TAG_file_type ] +!2 = metadata !{i32 589841, i32 0, i32 12, metadata !"a.i", metadata !"/private/tmp", metadata !"clang (trunk 129006)", i1 true, i1 false, metadata !"", i32 0} ; [ DW_TAG_compile_unit ] +!3 = metadata !{i32 589845, metadata !1, metadata !"", metadata !1, i32 0, i64 0, i64 0, i32 0, i32 0, i32 0, metadata !4, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] +!4 = metadata !{null} +!5 = metadata !{i32 131, i32 2, metadata !0, null} +!6 = metadata !{i32 134, i32 2, metadata !0, null} +!7 = metadata !{i32 590080, metadata !8, metadata !"bar", metadata !1, i32 232, metadata !9, i32 0} ; [ DW_TAG_auto_variable ] +!8 = metadata !{i32 589835, metadata !0, i32 231, i32 1, metadata !1, i32 3} ; [ DW_TAG_lexical_block ] +!9 = metadata !{i32 589839, metadata !2, metadata !"", null, i32 0, i64 32, i64 32, i64 0, i32 0, metadata !10} ; [ DW_TAG_pointer_type ] +!10 = metadata !{i32 589862, metadata !2, metadata !"", null, i32 0, i64 0, i64 0, i64 0, i32 0, metadata !11} ; [ DW_TAG_const_type ] +!11 = metadata !{i32 589860, metadata !2, metadata !"unsigned int", null, i32 0, i64 32, i64 32, i64 0, i32 0, i32 7} ; [ DW_TAG_base_type ] +!12 = metadata !{i32 232, i32 40, metadata !8, null} +!13 = metadata !{i32 234, i32 2, metadata !8, null} +!14 = metadata !{i32 274, i32 1, metadata !8, null} diff --git a/test/Transforms/SimplifyCFG/hoist-dbgvalue.ll b/test/Transforms/SimplifyCFG/hoist-dbgvalue.ll new file mode 100644 index 0000000..03053f0 --- /dev/null +++ b/test/Transforms/SimplifyCFG/hoist-dbgvalue.ll @@ -0,0 +1,53 @@ +; RUN: opt -simplifycfg -S < %s | FileCheck %s + +define i32 @foo(i32 %i) nounwind ssp { + call void @llvm.dbg.value(metadata !{i32 %i}, i64 0, metadata !6), !dbg !7 + call void @llvm.dbg.value(metadata !8, i64 0, metadata !9), !dbg !11 + %1 = icmp ne i32 %i, 0, !dbg !12 +;CHECK: call i32 (...)* @bar() +;CHECK-NEXT: llvm.dbg.value + br i1 %1, label %2, label %4, !dbg !12 + +; <label>:2 ; preds = %0 + %3 = call i32 (...)* @bar(), !dbg !13 + call void @llvm.dbg.value(metadata !{i32 %3}, i64 0, metadata !9), !dbg !13 + br label %6, !dbg !15 + +; <label>:4 ; preds = %0 + %5 = call i32 (...)* @bar(), !dbg !16 + call void @llvm.dbg.value(metadata !{i32 %5}, i64 0, metadata !9), !dbg !16 + br label %6, !dbg !18 + +; <label>:6 ; preds = %4, %2 + %k.0 = phi i32 [ %3, %2 ], [ %5, %4 ] + ret i32 %k.0, !dbg !19 +} + +declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone + +declare i32 @bar(...) + +declare void @llvm.dbg.value(metadata, i64, metadata) nounwind readnone + +!llvm.dbg.sp = !{!0} + +!0 = metadata !{i32 589870, i32 0, metadata !1, metadata !"foo", metadata !"foo", metadata !"", metadata !1, i32 2, metadata !3, i1 false, i1 true, i32 0, i32 0, i32 0, i32 256, i1 false, i32 (i32)* @foo} ; [ DW_TAG_subprogram ] +!1 = metadata !{i32 589865, metadata !"b.c", metadata !"/private/tmp", metadata !2} ; [ DW_TAG_file_type ] +!2 = metadata !{i32 589841, i32 0, i32 12, metadata !"b.c", metadata !"/private/tmp", metadata !"clang", i1 true, i1 false, metadata !"", i32 0} ; [ DW_TAG_compile_unit ] +!3 = metadata !{i32 589845, metadata !1, metadata !"", metadata !1, i32 0, i64 0, i64 0, i32 0, i32 0, i32 0, metadata !4, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] +!4 = metadata !{metadata !5} +!5 = metadata !{i32 589860, metadata !2, metadata !"int", null, i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ] +!6 = metadata !{i32 590081, metadata !0, metadata !"i", metadata !1, i32 16777218, metadata !5, i32 0} ; [ DW_TAG_arg_variable ] +!7 = metadata !{i32 2, i32 13, metadata !0, null} +!8 = metadata !{i32 0} +!9 = metadata !{i32 590080, metadata !10, metadata !"k", metadata !1, i32 3, metadata !5, i32 0} ; [ DW_TAG_auto_variable ] +!10 = metadata !{i32 589835, metadata !0, i32 2, i32 16, metadata !1, i32 0} ; [ DW_TAG_lexical_block ] +!11 = metadata !{i32 3, i32 12, metadata !10, null} +!12 = metadata !{i32 4, i32 3, metadata !10, null} +!13 = metadata !{i32 5, i32 5, metadata !14, null} +!14 = metadata !{i32 589835, metadata !10, i32 4, i32 10, metadata !1, i32 1} ; [ DW_TAG_lexical_block ] +!15 = metadata !{i32 6, i32 3, metadata !14, null} +!16 = metadata !{i32 7, i32 5, metadata !17, null} +!17 = metadata !{i32 589835, metadata !10, i32 6, i32 10, metadata !1, i32 2} ; [ DW_TAG_lexical_block ] +!18 = metadata !{i32 8, i32 3, metadata !17, null} +!19 = metadata !{i32 9, i32 3, metadata !10, null} diff --git a/test/Transforms/SimplifyCFG/switch-on-const-select.ll b/test/Transforms/SimplifyCFG/switch-on-const-select.ll new file mode 100644 index 0000000..5494a65 --- /dev/null +++ b/test/Transforms/SimplifyCFG/switch-on-const-select.ll @@ -0,0 +1,138 @@ +; RUN: opt < %s -simplifycfg -S | FileCheck %s + +; Test basic folding to a conditional branch. +define i32 @foo(i64 %x, i64 %y) nounwind { +; CHECK: @foo +entry: + %eq = icmp eq i64 %x, %y + br i1 %eq, label %b, label %switch +switch: + %lt = icmp slt i64 %x, %y +; CHECK: br i1 %lt, label %a, label %b + %qux = select i1 %lt, i32 0, i32 2 + switch i32 %qux, label %bees [ + i32 0, label %a + i32 1, label %b + i32 2, label %b + ] +a: + tail call void @bees.a() nounwind + ret i32 1 +; CHECK: b: +; CHECK-NEXT: %retval = phi i32 [ 0, %switch ], [ 2, %entry ] +b: + %retval = phi i32 [0, %switch], [0, %switch], [2, %entry] + tail call void @bees.b() nounwind + ret i32 %retval +; CHECK-NOT: bees: +bees: + tail call void @llvm.trap() nounwind + unreachable +} + +; Test basic folding to an unconditional branch. +define i32 @bar(i64 %x, i64 %y) nounwind { +; CHECK: @bar +entry: +; CHECK-NEXT: entry: +; CHECK-NEXT: tail call void @bees.a() nounwind +; CHECK-NEXT: ret i32 0 + %lt = icmp slt i64 %x, %y + %qux = select i1 %lt, i32 0, i32 2 + switch i32 %qux, label %bees [ + i32 0, label %a + i32 1, label %b + i32 2, label %a + ] +a: + %retval = phi i32 [0, %entry], [0, %entry], [1, %b] + tail call void @bees.a() nounwind + ret i32 0 +b: + tail call void @bees.b() nounwind + br label %a +bees: + tail call void @llvm.trap() nounwind + unreachable +} + +; Test the edge case where both values from the select are the default case. +define void @bazz(i64 %x, i64 %y) nounwind { +; CHECK: @bazz +entry: +; CHECK-NEXT: entry: +; CHECK-NEXT: tail call void @bees.b() nounwind +; CHECK-NEXT: ret void + %lt = icmp slt i64 %x, %y + %qux = select i1 %lt, i32 10, i32 12 + switch i32 %qux, label %b [ + i32 0, label %a + i32 1, label %bees + i32 2, label %bees + ] +a: + tail call void @bees.a() nounwind + ret void +b: + tail call void @bees.b() nounwind + ret void +bees: + tail call void @llvm.trap() + unreachable +} + +; Test the edge case where both values from the select are equal. +define void @quux(i64 %x, i64 %y) nounwind { +; CHECK: @quux +entry: +; CHECK-NEXT: entry: +; CHECK-NEXT: tail call void @bees.a() nounwind +; CHECK-NEXT: ret void + %lt = icmp slt i64 %x, %y + %qux = select i1 %lt, i32 0, i32 0 + switch i32 %qux, label %b [ + i32 0, label %a + i32 1, label %bees + i32 2, label %bees + ] +a: + tail call void @bees.a() nounwind + ret void +b: + tail call void @bees.b() nounwind + ret void +bees: + tail call void @llvm.trap() + unreachable +} + +; A final test, for phi node munging. +define i32 @xyzzy(i64 %x, i64 %y) { +; CHECK: @xyzzy +entry: + %eq = icmp eq i64 %x, %y + br i1 %eq, label %r, label %cont +cont: +; CHECK: %lt = icmp slt i64 %x, %y + %lt = icmp slt i64 %x, %y +; CHECK-NEXT: br i1 %lt, label %a, label %r + %qux = select i1 %lt, i32 0, i32 2 + switch i32 %qux, label %bees [ + i32 0, label %a + i32 1, label %r + i32 2, label %r + ] +r: + %val = phi i32 [0, %entry], [1, %cont], [1, %cont] + ret i32 %val +a: + ret i32 -1 +; CHECK-NOT: bees: +bees: + tail call void @llvm.trap() + unreachable +} + +declare void @llvm.trap() nounwind noreturn +declare void @bees.a() nounwind +declare void @bees.b() nounwind diff --git a/test/Transforms/SimplifyCFG/trap-debugloc.ll b/test/Transforms/SimplifyCFG/trap-debugloc.ll new file mode 100644 index 0000000..24540e5 --- /dev/null +++ b/test/Transforms/SimplifyCFG/trap-debugloc.ll @@ -0,0 +1,19 @@ +; RUN: opt -S -simplifycfg < %s | FileCheck %s +; Radar 9342286 +; Assign DebugLoc to trap instruction. +define void @foo() nounwind ssp { +; CHECK: call void @llvm.trap(), !dbg + store i32 42, i32* null, !dbg !5 + ret void, !dbg !7 +} + +!llvm.dbg.sp = !{!0} + +!0 = metadata !{i32 589870, i32 0, metadata !1, metadata !"foo", metadata !"foo", metadata !"", metadata !1, i32 3, metadata !3, i1 false, i1 true, i32 0, i32 0, i32 0, i32 0, i1 false, void ()* @foo} ; [ DW_TAG_subprogram ] +!1 = metadata !{i32 589865, metadata !"foo.c", metadata !"/private/tmp", metadata !2} ; [ DW_TAG_file_type ] +!2 = metadata !{i32 589841, i32 0, i32 12, metadata !"foo.c", metadata !"/private/tmp", metadata !"Apple clang version 3.0 (tags/Apple/clang-206.1) (based on LLVM 3.0svn)", i1 true, i1 false, metadata !"", i32 0} ; [ DW_TAG_compile_unit ] +!3 = metadata !{i32 589845, metadata !1, metadata !"", metadata !1, i32 0, i64 0, i64 0, i32 0, i32 0, i32 0, metadata !4, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] +!4 = metadata !{null} +!5 = metadata !{i32 4, i32 2, metadata !6, null} +!6 = metadata !{i32 589835, metadata !0, i32 3, i32 12, metadata !1, i32 0} ; [ DW_TAG_lexical_block ] +!7 = metadata !{i32 5, i32 1, metadata !6, null} |