diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2011-05-02 19:34:44 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2011-05-02 19:34:44 +0000 |
| commit | 6b943ff3a3f8617113ecbf611cf0f8957e4e19d2 (patch) | |
| tree | fc5f365fb9035b2d0c622bbf06c9bbe8627d7279 /test/Transforms/LICM | |
| parent | d0e4e96dc17a6c1c6de3340842c80f0e187ba349 (diff) | |
Notes
Diffstat (limited to 'test/Transforms/LICM')
| -rw-r--r-- | test/Transforms/LICM/2007-10-01-PromoteSafeValue.ll | 4 | ||||
| -rw-r--r-- | test/Transforms/LICM/2011-04-06-HoistMissedASTUpdate.ll | 32 | ||||
| -rw-r--r-- | test/Transforms/LICM/2011-04-06-PromoteResultOfPromotion.ll | 37 | ||||
| -rw-r--r-- | test/Transforms/LICM/2011-04-09-RAUW-AST.ll | 49 | ||||
| -rw-r--r-- | test/Transforms/LICM/debug-value.ll | 62 |
5 files changed, 183 insertions, 1 deletions
diff --git a/test/Transforms/LICM/2007-10-01-PromoteSafeValue.ll b/test/Transforms/LICM/2007-10-01-PromoteSafeValue.ll index 59f1dcbe2d7b..e3d0d02edd9d 100644 --- a/test/Transforms/LICM/2007-10-01-PromoteSafeValue.ll +++ b/test/Transforms/LICM/2007-10-01-PromoteSafeValue.ll @@ -1,4 +1,4 @@ -; RUN: opt < %s -licm -S | grep promoted +; RUN: opt < %s -licm -S | FileCheck %s ; Promote value if at least one use is safe @@ -15,6 +15,8 @@ cond.true: ; preds = %loop.head store i32 40, i32* %p br label %loop.head +; CHECK: exit: +; CHECK: store i32 20, i32* %p exit: ; preds = %loop.head ret i32 0 } diff --git a/test/Transforms/LICM/2011-04-06-HoistMissedASTUpdate.ll b/test/Transforms/LICM/2011-04-06-HoistMissedASTUpdate.ll new file mode 100644 index 000000000000..5774f587f1c3 --- /dev/null +++ b/test/Transforms/LICM/2011-04-06-HoistMissedASTUpdate.ll @@ -0,0 +1,32 @@ +; RUN: opt < %s -basicaa -licm -S | FileCheck %s +; PR9630 + +@g_39 = external global i16, align 2 + +declare i32* @func_84(i32** nocapture) nounwind readonly + +declare i32** @func_108(i32*** nocapture) nounwind readonly + +define void @func() nounwind { +entry: + br label %for.body4.lr.ph + +for.body4.lr.ph: + br label %for.body4 + +; CHECK: for.body4: +; CHECK: volatile load i16* @g_39 + +for.body4: + %l_612.11 = phi i32* [ undef, %for.body4.lr.ph ], [ %call19, %for.body4 ] + %tmp7 = volatile load i16* @g_39, align 2 + %call = call i32** @func_108(i32*** undef) + %call19 = call i32* @func_84(i32** %call) + br i1 false, label %for.body4, label %for.cond.loopexit + +for.cond.loopexit: + br i1 false, label %for.body4.lr.ph, label %for.end26 + +for.end26: + ret void +} diff --git a/test/Transforms/LICM/2011-04-06-PromoteResultOfPromotion.ll b/test/Transforms/LICM/2011-04-06-PromoteResultOfPromotion.ll new file mode 100644 index 000000000000..86c2679b076a --- /dev/null +++ b/test/Transforms/LICM/2011-04-06-PromoteResultOfPromotion.ll @@ -0,0 +1,37 @@ +; RUN: opt < %s -tbaa -licm -S | FileCheck %s +; PR9634 + +@g_58 = common global i32 0, align 4 +@g_116 = common global i32* null, align 8 + +define void @f() nounwind { + +; CHECK: entry: +; CHECK: alloca [9 x i16] +; CHECK: load i32* @g_58 +; CHECK: br label %for.body + +entry: + %l_87.i = alloca [9 x i16], align 16 + br label %for.body + +for.body: ; preds = %entry, %for.inc + %inc12 = phi i32 [ 0, %entry ], [ %inc, %for.body ] + store i32* @g_58, i32** @g_116, align 8, !tbaa !0 + %tmp2 = load i32** @g_116, align 8, !tbaa !0 + %tmp3 = load i32* %tmp2, !tbaa !4 + %or = or i32 %tmp3, 10 + store i32 %or, i32* %tmp2, !tbaa !4 + %inc = add nsw i32 %inc12, 1 + %cmp = icmp slt i32 %inc, 4 + br i1 %cmp, label %for.body, label %for.end + +for.end: ; preds = %for.inc + ret void +} + +!0 = metadata !{metadata !"any pointer", metadata !1} +!1 = metadata !{metadata !"omnipotent char", metadata !2} +!2 = metadata !{metadata !"Simple C/C++ TBAA", null} +!3 = metadata !{metadata !"short", metadata !1} +!4 = metadata !{metadata !"int", metadata !1} diff --git a/test/Transforms/LICM/2011-04-09-RAUW-AST.ll b/test/Transforms/LICM/2011-04-09-RAUW-AST.ll new file mode 100644 index 000000000000..4285bd19e5f1 --- /dev/null +++ b/test/Transforms/LICM/2011-04-09-RAUW-AST.ll @@ -0,0 +1,49 @@ +; RUN: opt < %s -loop-rotate -licm -S | FileCheck %s +; PR9604 + +@g_3 = global i32 0, align 4 +@.str = private unnamed_addr constant [4 x i8] c"%d\0A\00" + +define i32 @main() nounwind { +entry: + %tmp = load i32* @g_3, align 4 + %tobool = icmp eq i32 %tmp, 0 + br i1 %tobool, label %for.cond, label %if.then + +if.then: ; preds = %entry + br label %for.cond + +for.cond: ; preds = %for.inc10, %if.then, %entry + %g.0 = phi i32* [ %g.0, %for.inc10 ], [ @g_3, %entry ], [ null, %if.then ] + %x.0 = phi i32 [ %inc12, %for.inc10 ], [ 0, %entry ], [ 0, %if.then ] + %cmp = icmp slt i32 %x.0, 5 + br i1 %cmp, label %for.cond4, label %for.end13 + +for.cond4: ; preds = %for.body7, %for.cond + %y.0 = phi i32 [ %inc, %for.body7 ], [ 0, %for.cond ] + %cmp6 = icmp slt i32 %y.0, 5 + br i1 %cmp6, label %for.body7, label %for.inc10 + +; CHECK: for.body7: +; CHECK-NEXT: phi +; CHECK-NEXT: store i32 0 +; CHECK-NEXT: store i32 1 + +for.body7: ; preds = %for.cond4 + store i32 0, i32* @g_3, align 4 + store i32 1, i32* %g.0, align 4 + %inc = add nsw i32 %y.0, 1 + br label %for.cond4 + +for.inc10: ; preds = %for.cond4 + %inc12 = add nsw i32 %x.0, 1 + br label %for.cond + +for.end13: ; preds = %for.cond + %tmp14 = load i32* @g_3, align 4 + %call = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8]* @.str, i64 0, i64 0), i32 %tmp14) nounwind + ret i32 0 +} + +declare i32 @printf(i8* nocapture, ...) nounwind + diff --git a/test/Transforms/LICM/debug-value.ll b/test/Transforms/LICM/debug-value.ll new file mode 100644 index 000000000000..889d4e2e3af9 --- /dev/null +++ b/test/Transforms/LICM/debug-value.ll @@ -0,0 +1,62 @@ +; RUN: opt -licm -basicaa < %s -S | FileCheck %s + +define void @dgefa() nounwind ssp { +entry: + br label %for.body + +for.body: ; preds = %for.cond.backedge, %entry + br i1 undef, label %if.then, label %for.cond.backedge, !dbg !11 + +for.cond.backedge: ; preds = %for.body61, %for.body61.us, %for.body + br i1 undef, label %for.end104, label %for.body, !dbg !15 + +if.then: ; preds = %for.body + br i1 undef, label %if.then27, label %if.end.if.end.split_crit_edge.critedge, !dbg !16 + +if.then27: ; preds = %if.then +; CHECK: tail call void @llvm.dbg.value + tail call void @llvm.dbg.value(metadata !18, i64 0, metadata !19), !dbg !21 + br label %for.body61.us + +if.end.if.end.split_crit_edge.critedge: ; preds = %if.then + br label %for.body61 + +for.body61.us: ; preds = %for.body61.us, %if.then27 + br i1 undef, label %for.cond.backedge, label %for.body61.us, !dbg !23 + +for.body61: ; preds = %for.body61, %if.end.if.end.split_crit_edge.critedge + br i1 undef, label %for.cond.backedge, label %for.body61, !dbg !23 + +for.end104: ; preds = %for.cond.backedge + ret void, !dbg !24 +} + +declare void @llvm.dbg.value(metadata, i64, metadata) nounwind readnone + +!llvm.dbg.sp = !{!0, !6, !9, !10} + +!0 = metadata !{i32 589870, i32 0, metadata !1, metadata !"idamax", metadata !"idamax", metadata !"", metadata !1, i32 112, metadata !3, i1 false, i1 true, i32 0, i32 0, i32 0, i32 256, i1 false, null} ; [ DW_TAG_subprogram ] +!1 = metadata !{i32 589865, metadata !"/Volumes/Lalgate/work/llvm/projects/llvm-test/SingleSource/Benchmarks/CoyoteBench/lpbench.c", metadata !"/private/tmp", metadata !2} ; [ DW_TAG_file_type ] +!2 = metadata !{i32 589841, i32 0, i32 12, metadata !"/Volumes/Lalgate/work/llvm/projects/llvm-test/SingleSource/Benchmarks/CoyoteBench/lpbench.c", metadata !"/private/tmp", metadata !"clang version 2.9 (trunk 127169)", 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 589870, i32 0, metadata !1, metadata !"dscal", metadata !"dscal", metadata !"", metadata !1, i32 206, metadata !7, i1 false, i1 true, i32 0, i32 0, i32 0, i32 256, i1 false, null} ; [ DW_TAG_subprogram ] +!7 = metadata !{i32 589845, metadata !1, metadata !"", metadata !1, i32 0, i64 0, i64 0, i32 0, i32 0, i32 0, metadata !8, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] +!8 = metadata !{null} +!9 = metadata !{i32 589870, i32 0, metadata !1, metadata !"daxpy", metadata !"daxpy", metadata !"", metadata !1, i32 230, metadata !7, i1 false, i1 true, i32 0, i32 0, i32 0, i32 256, i1 false, null} ; [ DW_TAG_subprogram ] +!10 = metadata !{i32 589870, i32 0, metadata !1, metadata !"dgefa", metadata !"dgefa", metadata !"", metadata !1, i32 267, metadata !7, i1 false, i1 true, i32 0, i32 0, i32 0, i32 256, i1 false, null} ; [ DW_TAG_subprogram ] +!11 = metadata !{i32 281, i32 9, metadata !12, null} +!12 = metadata !{i32 589835, metadata !13, i32 272, i32 5, metadata !1, i32 32} ; [ DW_TAG_lexical_block ] +!13 = metadata !{i32 589835, metadata !14, i32 271, i32 5, metadata !1, i32 31} ; [ DW_TAG_lexical_block ] +!14 = metadata !{i32 589835, metadata !10, i32 267, i32 1, metadata !1, i32 30} ; [ DW_TAG_lexical_block ] +!15 = metadata !{i32 271, i32 5, metadata !14, null} +!16 = metadata !{i32 284, i32 10, metadata !17, null} +!17 = metadata !{i32 589835, metadata !12, i32 282, i32 9, metadata !1, i32 33} ; [ DW_TAG_lexical_block ] +!18 = metadata !{double undef} +!19 = metadata !{i32 590080, metadata !14, metadata !"temp", metadata !1, i32 268, metadata !20, i32 0} ; [ DW_TAG_auto_variable ] +!20 = metadata !{i32 589860, metadata !2, metadata !"double", null, i32 0, i64 64, i64 64, i64 0, i32 0, i32 4} ; [ DW_TAG_base_type ] +!21 = metadata !{i32 286, i32 14, metadata !22, null} +!22 = metadata !{i32 589835, metadata !17, i32 285, i32 13, metadata !1, i32 34} ; [ DW_TAG_lexical_block ] +!23 = metadata !{i32 296, i32 13, metadata !17, null} +!24 = metadata !{i32 313, i32 1, metadata !14, null} |
