Remove some unused LLVM test files.

0.96
Török Edvin 15 years ago
parent 52a8d9f012
commit 3ae7d79401
  1. 18
      libclamav/c++/llvm/test/Analysis/BasicAA/2003-02-26-AccessSizeTest.ll
  2. 7
      libclamav/c++/llvm/test/Analysis/BasicAA/2003-03-04-GEPCrash.ll
  3. 15
      libclamav/c++/llvm/test/Analysis/BasicAA/2003-04-22-GEPProblem.ll
  4. 7
      libclamav/c++/llvm/test/Analysis/BasicAA/2003-04-25-GEPCrash.ll
  5. 21
      libclamav/c++/llvm/test/Analysis/BasicAA/2003-05-21-GEP-Problem.ll
  6. 11
      libclamav/c++/llvm/test/Analysis/BasicAA/2003-06-01-AliasCrash.ll
  7. 10
      libclamav/c++/llvm/test/Analysis/BasicAA/2003-07-03-BasicAACrash.ll
  8. 12
      libclamav/c++/llvm/test/Analysis/BasicAA/2003-09-19-LocalArgument.ll
  9. 16
      libclamav/c++/llvm/test/Analysis/BasicAA/2003-11-04-SimpleCases.ll
  10. 18
      libclamav/c++/llvm/test/Analysis/BasicAA/2003-12-11-ConstExprGEP.ll
  11. 10
      libclamav/c++/llvm/test/Analysis/BasicAA/2004-07-28-MustAliasbug.ll
  12. 22
      libclamav/c++/llvm/test/Analysis/BasicAA/2004-12-08-BasicAACrash.ll
  13. 20
      libclamav/c++/llvm/test/Analysis/BasicAA/2004-12-08-BasicAACrash2.ll
  14. 15
      libclamav/c++/llvm/test/Analysis/BasicAA/2005-03-09-BrokenBasicAA.ll
  15. 31
      libclamav/c++/llvm/test/Analysis/BasicAA/2006-03-03-BadArraySubscript.ll
  16. 48
      libclamav/c++/llvm/test/Analysis/BasicAA/2006-11-03-BasicAAVectorCrash.ll
  17. 35
      libclamav/c++/llvm/test/Analysis/BasicAA/2007-01-13-BasePointerBadNoAlias.ll
  18. 10
      libclamav/c++/llvm/test/Analysis/BasicAA/2007-08-01-NoAliasAndCalls.ll
  19. 17
      libclamav/c++/llvm/test/Analysis/BasicAA/2007-08-01-NoAliasAndGEP.ll
  20. 17
      libclamav/c++/llvm/test/Analysis/BasicAA/2007-08-05-GetOverloadedModRef.ll
  21. 14
      libclamav/c++/llvm/test/Analysis/BasicAA/2007-10-24-ArgumentsGlobals.ll
  22. 34
      libclamav/c++/llvm/test/Analysis/BasicAA/2007-11-05-SizeCrash.ll
  23. 31
      libclamav/c++/llvm/test/Analysis/BasicAA/2007-12-08-OutOfBoundsCrash.ll
  24. 18
      libclamav/c++/llvm/test/Analysis/BasicAA/2008-04-15-Byval.ll
  25. 15
      libclamav/c++/llvm/test/Analysis/BasicAA/2008-06-02-GEPTailCrash.ll
  26. 12
      libclamav/c++/llvm/test/Analysis/BasicAA/2008-11-23-NoaliasRet.ll
  27. 13
      libclamav/c++/llvm/test/Analysis/BasicAA/2009-03-04-GEPNoalias.ll
  28. 17
      libclamav/c++/llvm/test/Analysis/BasicAA/2009-10-13-AtomicModRef.ll
  29. 30
      libclamav/c++/llvm/test/Analysis/BasicAA/2009-10-13-GEP-BaseNoAlias.ll
  30. 18
      libclamav/c++/llvm/test/Analysis/BasicAA/byval.ll
  31. 15
      libclamav/c++/llvm/test/Analysis/BasicAA/cas.ll
  32. 27
      libclamav/c++/llvm/test/Analysis/BasicAA/constant-over-index.ll
  33. 3
      libclamav/c++/llvm/test/Analysis/BasicAA/dg.exp
  34. 83
      libclamav/c++/llvm/test/Analysis/BasicAA/featuretest.ll
  35. 46
      libclamav/c++/llvm/test/Analysis/BasicAA/gcsetest.ll
  36. 171
      libclamav/c++/llvm/test/Analysis/BasicAA/gep-alias.ll
  37. 16
      libclamav/c++/llvm/test/Analysis/BasicAA/global-size.ll
  38. 125
      libclamav/c++/llvm/test/Analysis/BasicAA/modref.ll
  39. 23
      libclamav/c++/llvm/test/Analysis/BasicAA/no-escape-call.ll
  40. 14
      libclamav/c++/llvm/test/Analysis/BasicAA/nocapture.ll
  41. 29
      libclamav/c++/llvm/test/Analysis/BasicAA/phi-aa.ll
  42. 73
      libclamav/c++/llvm/test/Analysis/BasicAA/phi-and-select.ll
  43. 33
      libclamav/c++/llvm/test/Analysis/BasicAA/pure-const-dce.ll
  44. 54
      libclamav/c++/llvm/test/Analysis/BasicAA/store-promote.ll
  45. 16
      libclamav/c++/llvm/test/Analysis/BasicAA/tailcall-modref.ll
  46. 13
      libclamav/c++/llvm/test/Analysis/CallGraph/2008-09-09-DirectCall.ll
  47. 8
      libclamav/c++/llvm/test/Analysis/CallGraph/2008-09-09-UsedByGlobal.ll
  48. 3
      libclamav/c++/llvm/test/Analysis/CallGraph/dg.exp
  49. 20
      libclamav/c++/llvm/test/Analysis/Dominators/2006-10-02-BreakCritEdges.ll
  50. 187
      libclamav/c++/llvm/test/Analysis/Dominators/2007-01-14-BreakCritEdges.ll
  51. 21
      libclamav/c++/llvm/test/Analysis/Dominators/2007-07-11-SplitBlock.ll
  52. 13
      libclamav/c++/llvm/test/Analysis/Dominators/2007-07-12-SplitBlock.ll
  53. 3
      libclamav/c++/llvm/test/Analysis/Dominators/dg.exp
  54. 18
      libclamav/c++/llvm/test/Analysis/GlobalsModRef/2008-09-03-ReadGlobals.ll
  55. 9
      libclamav/c++/llvm/test/Analysis/GlobalsModRef/aliastest.ll
  56. 20
      libclamav/c++/llvm/test/Analysis/GlobalsModRef/chaining-analysis.ll
  57. 3
      libclamav/c++/llvm/test/Analysis/GlobalsModRef/dg.exp
  58. 20
      libclamav/c++/llvm/test/Analysis/GlobalsModRef/indirect-global.ll
  59. 13
      libclamav/c++/llvm/test/Analysis/GlobalsModRef/modreftest.ll
  60. 23
      libclamav/c++/llvm/test/Analysis/GlobalsModRef/purecse.ll
  61. 44
      libclamav/c++/llvm/test/Analysis/LoopDependenceAnalysis/alias.ll
  62. 3
      libclamav/c++/llvm/test/Analysis/LoopDependenceAnalysis/dg.exp
  63. 110
      libclamav/c++/llvm/test/Analysis/LoopDependenceAnalysis/siv-strong.ll
  64. 118
      libclamav/c++/llvm/test/Analysis/LoopDependenceAnalysis/siv-weak-crossing.ll
  65. 56
      libclamav/c++/llvm/test/Analysis/LoopDependenceAnalysis/siv-weak-zero.ll
  66. 63
      libclamav/c++/llvm/test/Analysis/LoopDependenceAnalysis/ziv.ll
  67. 30
      libclamav/c++/llvm/test/Analysis/LoopInfo/2003-05-15-NestingProblem.ll
  68. 3
      libclamav/c++/llvm/test/Analysis/LoopInfo/dg.exp
  69. 3
      libclamav/c++/llvm/test/Analysis/PointerTracking/dg.exp
  70. 86
      libclamav/c++/llvm/test/Analysis/PointerTracking/sizes.ll
  71. 97
      libclamav/c++/llvm/test/Analysis/PostDominators/2006-09-26-PostDominanceFrontier.ll
  72. 692
      libclamav/c++/llvm/test/Analysis/PostDominators/2007-04-17-PostDominanceFrontier.ll
  73. 28
      libclamav/c++/llvm/test/Analysis/PostDominators/2007-04-20-PostDom-Reset.ll
  74. 3
      libclamav/c++/llvm/test/Analysis/PostDominators/dg.exp
  75. 14
      libclamav/c++/llvm/test/Analysis/PostDominators/pr1098.ll
  76. 15
      libclamav/c++/llvm/test/Analysis/PostDominators/pr6047_a.ll
  77. 19
      libclamav/c++/llvm/test/Analysis/PostDominators/pr6047_b.ll
  78. 147
      libclamav/c++/llvm/test/Analysis/PostDominators/pr6047_c.ll
  79. 24
      libclamav/c++/llvm/test/Analysis/PostDominators/pr6047_d.ll
  80. 4
      libclamav/c++/llvm/test/Analysis/Profiling/dg.exp
  81. 139
      libclamav/c++/llvm/test/Analysis/Profiling/edge-profiling.ll
  82. 212
      libclamav/c++/llvm/test/Analysis/Profiling/profiling-tool-chain.ll
  83. 21
      libclamav/c++/llvm/test/Analysis/ScalarEvolution/2007-07-15-NegativeStride.ll
  84. 18
      libclamav/c++/llvm/test/Analysis/ScalarEvolution/2007-08-06-MisinterpretBranch.ll
  85. 30
      libclamav/c++/llvm/test/Analysis/ScalarEvolution/2007-08-06-Unsigned.ll
  86. 22
      libclamav/c++/llvm/test/Analysis/ScalarEvolution/2007-09-27-LargeStepping.ll
  87. 24
      libclamav/c++/llvm/test/Analysis/ScalarEvolution/2007-11-14-SignedAddRec.ll
  88. 21
      libclamav/c++/llvm/test/Analysis/ScalarEvolution/2007-11-18-OrInstruction.ll
  89. 15
      libclamav/c++/llvm/test/Analysis/ScalarEvolution/2008-02-11-ReversedCondition.ll
  90. 16
      libclamav/c++/llvm/test/Analysis/ScalarEvolution/2008-02-12-SMAXTripCount.ll
  91. 17
      libclamav/c++/llvm/test/Analysis/ScalarEvolution/2008-02-15-UMax.ll
  92. 22
      libclamav/c++/llvm/test/Analysis/ScalarEvolution/2008-05-25-NegativeStepToZero.ll
  93. 43
      libclamav/c++/llvm/test/Analysis/ScalarEvolution/2008-06-12-BinomialInt64.ll
  94. 36
      libclamav/c++/llvm/test/Analysis/ScalarEvolution/2008-07-12-UnneededSelect1.ll
  95. 30
      libclamav/c++/llvm/test/Analysis/ScalarEvolution/2008-07-12-UnneededSelect2.ll
  96. 15
      libclamav/c++/llvm/test/Analysis/ScalarEvolution/2008-07-19-InfiniteLoop.ll
  97. 15
      libclamav/c++/llvm/test/Analysis/ScalarEvolution/2008-07-19-WrappingIV.ll
  98. 28
      libclamav/c++/llvm/test/Analysis/ScalarEvolution/2008-07-29-SGTTripCount.ll
  99. 26
      libclamav/c++/llvm/test/Analysis/ScalarEvolution/2008-07-29-SMinExpr.ll
  100. 27
      libclamav/c++/llvm/test/Analysis/ScalarEvolution/2008-08-04-IVOverflow.ll
  101. Some files were not shown because too many files have changed in this diff Show More

@ -1,18 +0,0 @@
; This testcase makes sure that size is taken to account when alias analysis
; is performed. It is not legal to delete the second load instruction because
; the value computed by the first load instruction is changed by the store.
; RUN: opt < %s -gvn -instcombine -S | grep DONOTREMOVE
define i32 @test() {
%A = alloca i32
store i32 0, i32* %A
%X = load i32* %A
%B = bitcast i32* %A to i8*
%C = getelementptr i8* %B, i64 1
store i8 1, i8* %C ; Aliases %A
%Y.DONOTREMOVE = load i32* %A
%Z = sub i32 %X, %Y.DONOTREMOVE
ret i32 %Z
}

@ -1,7 +0,0 @@
; RUN: opt < %s -basicaa -aa-eval -disable-output 2>/dev/null
; Test for a bug in BasicAA which caused a crash when querying equality of P1&P2
define void @test({[2 x i32],[2 x i32]}* %A, i64 %X, i64 %Y) {
%P1 = getelementptr {[2 x i32],[2 x i32]}* %A, i64 0, i32 0, i64 %X
%P2 = getelementptr {[2 x i32],[2 x i32]}* %A, i64 0, i32 1, i64 %Y
ret void
}

@ -1,15 +0,0 @@
; RUN: opt < %s -gvn -instcombine -S | grep sub
; BasicAA was incorrectly concluding that P1 and P2 didn't conflict!
define i32 @test(i32 *%Ptr, i64 %V) {
%P2 = getelementptr i32* %Ptr, i64 1
%P1 = getelementptr i32* %Ptr, i64 %V
%X = load i32* %P1
store i32 5, i32* %P2
%Y = load i32* %P1
%Z = sub i32 %X, %Y
ret i32 %Z
}

@ -1,7 +0,0 @@
; RUN: opt < %s -basicaa -aa-eval -disable-output 2>/dev/null
; Test for a bug in BasicAA which caused a crash when querying equality of P1&P2
define void @test([17 x i16]* %mask_bits) {
%P1 = getelementptr [17 x i16]* %mask_bits, i64 0, i64 0
%P2 = getelementptr [17 x i16]* %mask_bits, i64 252645134, i64 0
ret void
}

@ -1,21 +0,0 @@
; RUN: opt < %s -licm -disable-output
%struct..apr_array_header_t = type { i32*, i32, i32, i32, i8* }
%struct..apr_table_t = type { %struct..apr_array_header_t, i32, [32 x i32], [32 x i32] }
define void @table_reindex(%struct..apr_table_t* %t.1) { ; No predecessors!
br label %loopentry
loopentry: ; preds = %0, %no_exit
%tmp.101 = getelementptr %struct..apr_table_t* %t.1, i64 0, i32 0, i32 2
%tmp.11 = load i32* %tmp.101 ; <i32> [#uses=0]
br i1 false, label %no_exit, label %UnifiedExitNode
no_exit: ; preds = %loopentry
%tmp.25 = sext i32 0 to i64 ; <i64> [#uses=1]
%tmp.261 = getelementptr %struct..apr_table_t* %t.1, i64 0, i32 3, i64 %tmp.25 ; <i32*> [#uses=1]
store i32 0, i32* %tmp.261
br label %loopentry
UnifiedExitNode: ; preds = %loopentry
ret void
}

@ -1,11 +0,0 @@
; RUN: opt < %s -basicaa -aa-eval -disable-output 2>/dev/null
define i32 @MTConcat([3 x i32]* %a.1) {
%tmp.961 = getelementptr [3 x i32]* %a.1, i64 0, i64 4
%tmp.97 = load i32* %tmp.961
%tmp.119 = getelementptr [3 x i32]* %a.1, i64 1, i64 0
%tmp.120 = load i32* %tmp.119
%tmp.1541 = getelementptr [3 x i32]* %a.1, i64 0, i64 4
%tmp.155 = load i32* %tmp.1541
ret i32 0
}

@ -1,10 +0,0 @@
; RUN: opt < %s -basicaa -aa-eval -disable-output 2>/dev/null
%struct..RefPoint = type { i32, { i32, i8, i8 } }
%struct..RefRect = type { %struct..RefPoint, %struct..RefPoint }
define i32 @BMT_CommitPartDrawObj() {
%tmp.19111 = getelementptr %struct..RefRect* null, i64 0, i32 0, i32 1, i32 2
%tmp.20311 = getelementptr %struct..RefRect* null, i64 0, i32 1, i32 1, i32 2
ret i32 0
}

@ -1,12 +0,0 @@
; In this test, a local alloca cannot alias an incoming argument.
; RUN: opt < %s -gvn -instcombine -S | not grep sub
define i32 @test(i32* %P) {
%X = alloca i32
%V1 = load i32* %P
store i32 0, i32* %X
%V2 = load i32* %P
%Diff = sub i32 %V1, %V2
ret i32 %Diff
}

@ -1,16 +0,0 @@
; This testcase consists of alias relations which should be completely
; resolvable by basicaa.
; RUN: opt < %s -aa-eval -print-may-aliases -disable-output \
; RUN: |& not grep May:
%T = type { i32, [10 x i8] }
define void @test(%T* %P) {
%A = getelementptr %T* %P, i64 0
%B = getelementptr %T* %P, i64 0, i32 0
%C = getelementptr %T* %P, i64 0, i32 1
%D = getelementptr %T* %P, i64 0, i32 1, i64 0
%E = getelementptr %T* %P, i64 0, i32 1, i64 5
ret void
}

@ -1,18 +0,0 @@
; This testcase consists of alias relations which should be completely
; resolvable by basicaa, but require analysis of getelementptr constant exprs.
; RUN: opt < %s -aa-eval -print-may-aliases -disable-output \
; RUN: |& not grep May:
%T = type { i32, [10 x i8] }
@G = external global %T
define void @test() {
%D = getelementptr %T* @G, i64 0, i32 0
%E = getelementptr %T* @G, i64 0, i32 1, i64 5
%F = getelementptr i32* getelementptr (%T* @G, i64 0, i32 0), i64 0
%X = getelementptr [10 x i8]* getelementptr (%T* @G, i64 0, i32 1), i64 0, i64 5
ret void
}

@ -1,10 +0,0 @@
; RUN: opt < %s -dse -S | grep {store i32 0}
define void @test({i32,i32 }* %P) {
%Q = getelementptr {i32,i32}* %P, i32 1
%X = getelementptr {i32,i32}* %Q, i32 0, i32 1
%Y = getelementptr {i32,i32}* %Q, i32 1, i32 1
store i32 0, i32* %X
store i32 1, i32* %Y
ret void
}

@ -1,22 +0,0 @@
; RUN: opt < %s -licm
%"java/lang/Object" = type { %struct.llvm_java_object_base }
%"java/lang/StringBuffer" = type { "java/lang/Object", i32, { "java/lang/Object", i32, [0 x i8] }*, i1 }
%struct.llvm_java_object_base = type opaque
define void @"java/lang/StringBuffer/setLength(I)V"(%struct.llvm_java_object_base*) {
bc0:
br i1 false, label %bc40, label %bc65
bc65: ; preds = %bc0, %bc40
ret void
bc40: ; preds = %bc0, %bc40
%tmp75 = bitcast %struct.llvm_java_object_base* %0 to %"java/lang/StringBuffer"* ; <"java/lang/StringBuffer"*> [#uses=1]
%tmp76 = getelementptr %"java/lang/StringBuffer"* %tmp75, i32 0, i32 1 ; <i32*> [#uses=1]
store i32 0, i32* %tmp76
%tmp381 = bitcast %struct.llvm_java_object_base* %0 to %"java/lang/StringBuffer"* ; <"java/lang/StringBuffer"*> [#uses=1]
%tmp392 = getelementptr %"java/lang/StringBuffer"* %tmp381, i32 0, i32 1 ; <i32*> [#uses=1]
%tmp403 = load i32* %tmp392 ; <i32> [#uses=0]
br i1 false, label %bc40, label %bc65
}

@ -1,20 +0,0 @@
; RUN: opt < %s -dse
%"java/lang/Object" = type { %struct.llvm_java_object_base }
%"java/lang/StringBuffer" = type { "java/lang/Object", i32, { "java/lang/Object", i32, [0 x i8] }*, i1 }
%struct.llvm_java_object_base = type opaque
define void @"java/lang/StringBuffer/ensureCapacity_unsynchronized(I)V"() {
bc0:
%tmp = getelementptr %"java/lang/StringBuffer"* null, i32 0, i32 3 ; <i1*> [#uses=1]
br i1 false, label %bc16, label %bc7
bc16: ; preds = %bc0
%tmp91 = getelementptr %"java/lang/StringBuffer"* null, i32 0, i32 2 ; <{ "java/lang/Object", i32, [0 x i8] }**> [#uses=1]
store { %"java/lang/Object", i32, [0 x i8] }* null, { %"java/lang/Object", i32, [0 x i8] }** %tmp91
store i1 false, i1* %tmp
ret void
bc7: ; preds = %bc0
ret void
}

@ -1,15 +0,0 @@
; RUN: opt < %s -basicaa -gvn -instcombine |\
; RUN: llvm-dis | grep {load i32\\* %A}
declare double* @useit(i32*)
define i32 @foo(i32 %Amt) {
%A = malloc i32, i32 %Amt
%P = call double* @useit(i32* %A)
%X = load i32* %A
store double 0.0, double* %P
%Y = load i32* %A
%Z = sub i32 %X, %Y
ret i32 %Z
}

@ -1,31 +0,0 @@
; RUN: opt < %s -aa-eval -disable-output |& grep {2 no alias respon}
; TEST that A[1][0] may alias A[0][i].
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
define void @test(i32 %N) {
entry:
%X = alloca [3 x [3 x i32]] ; <[3 x [3 x i32]]*> [#uses=4]
%tmp.24 = icmp sgt i32 %N, 0 ; <i1> [#uses=1]
br i1 %tmp.24, label %no_exit, label %loopexit
no_exit: ; preds = %no_exit, %entry
%i.0.0 = phi i32 [ 0, %entry ], [ %inc, %no_exit ] ; <i32> [#uses=2]
%tmp.6 = getelementptr [3 x [3 x i32]]* %X, i32 0, i32 0, i32 %i.0.0 ; <i32*> [#uses=1]
store i32 1, i32* %tmp.6
%tmp.8 = getelementptr [3 x [3 x i32]]* %X, i32 0, i32 0, i32 0 ; <i32*> [#uses=1]
%tmp.9 = load i32* %tmp.8 ; <i32> [#uses=1]
%tmp.11 = getelementptr [3 x [3 x i32]]* %X, i32 0, i32 1, i32 0 ; <i32*> [#uses=1]
%tmp.12 = load i32* %tmp.11 ; <i32> [#uses=1]
%tmp.13 = add i32 %tmp.12, %tmp.9 ; <i32> [#uses=1]
%inc = add i32 %i.0.0, 1 ; <i32> [#uses=2]
%tmp.2 = icmp slt i32 %inc, %N ; <i1> [#uses=1]
br i1 %tmp.2, label %no_exit, label %loopexit
loopexit: ; preds = %no_exit, %entry
%Y.0.1 = phi i32 [ 0, %entry ], [ %tmp.13, %no_exit ] ; <i32> [#uses=1]
%tmp.4 = getelementptr [3 x [3 x i32]]* %X, i32 0, i32 0 ; <[3 x i32]*> [#uses=1]
%tmp.15 = call i32 (...)* @foo( [3 x i32]* %tmp.4, i32 %Y.0.1 ) ; <i32> [#uses=0]
ret void
}
declare i32 @foo(...)

@ -1,48 +0,0 @@
; RUN: opt < %s -licm -disable-output
target datalayout = "E-p:32:32"
target triple = "powerpc-apple-darwin8.7.0"
define void @glgRunProcessor() {
entry:
br i1 false, label %bb2037.i, label %cond_true.i18
cond_true.i18: ; preds = %entry
ret void
bb205.i: ; preds = %bb2037.i
switch i32 0, label %bb1013.i [
i32 14, label %bb239.i
i32 15, label %bb917.i
]
bb239.i: ; preds = %bb205.i
br i1 false, label %cond_false277.i, label %cond_true264.i
cond_true264.i: ; preds = %bb239.i
ret void
cond_false277.i: ; preds = %bb239.i
%tmp1062.i = getelementptr [2 x <4 x i32>]* null, i32 0, i32 1 ; <<4 x i32>*> [#uses=1]
store <4 x i32> zeroinitializer, <4 x i32>* %tmp1062.i
br i1 false, label %cond_true1032.i, label %cond_false1063.i85
bb917.i: ; preds = %bb205.i
ret void
bb1013.i: ; preds = %bb205.i
ret void
cond_true1032.i: ; preds = %cond_false277.i
%tmp1187.i = getelementptr [2 x <4 x i32>]* null, i32 0, i32 0, i32 7 ; <i32*> [#uses=1]
store i32 0, i32* %tmp1187.i
br label %bb2037.i
cond_false1063.i85: ; preds = %cond_false277.i
ret void
bb2037.i: ; preds = %cond_true1032.i, %entry
br i1 false, label %bb205.i, label %cond_next2042.i
cond_next2042.i: ; preds = %bb2037.i
ret void
}

@ -1,35 +0,0 @@
; PR1109
; RUN: opt < %s -basicaa -gvn -instcombine -S | \
; RUN: grep {sub i32}
; RUN: opt < %s -basicaa -gvn -instcombine -S | \
; RUN: not grep {ret i32 0}
; END.
target datalayout = "e-p:32:32"
target triple = "i686-apple-darwin8"
%struct.CONSTRAINT = type { i32, i32, i32, i32 }
%struct.FILE_POS = type { i8, i8, i16, i32 }
%struct.FIRST_UNION = type { %struct.FILE_POS }
%struct.FOURTH_UNION = type { %struct.CONSTRAINT }
%struct.GAP = type { i8, i8, i16 }
%struct.LIST = type { %struct.rec*, %struct.rec* }
%struct.SECOND_UNION = type { { i16, i8, i8 } }
%struct.STYLE = type { { %struct.GAP }, { %struct.GAP }, i16, i16, i16, i8, i8 }
%struct.THIRD_UNION = type { { [2 x i32], [2 x i32] } }
%struct.closure_type = type { [2 x %struct.LIST], %struct.FIRST_UNION, %struct.SECOND_UNION, %struct.THIRD_UNION, %struct.FOURTH_UNION, %struct.rec*, { %struct.rec* } }
%struct.head_type = type { [2 x %struct.LIST], %struct.FIRST_UNION, %struct.SECOND_UNION, %struct.THIRD_UNION, %struct.FOURTH_UNION, %struct.rec*, { %struct.rec* }, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, i32 }
%struct.rec = type { %struct.head_type }
define i32 @test(%struct.closure_type* %tmp18169) {
%tmp18174 = getelementptr %struct.closure_type* %tmp18169, i32 0, i32 4, i32 0, i32 0 ; <i32*> [#uses=2]
%tmp18269 = bitcast i32* %tmp18174 to %struct.STYLE* ; <%struct.STYLE*> [#uses=1]
%A = load i32* %tmp18174 ; <i32> [#uses=1]
%tmp18272 = getelementptr %struct.STYLE* %tmp18269, i32 0, i32 0, i32 0, i32 2 ; <i16*> [#uses=1]
store i16 123, i16* %tmp18272
%Q = load i32* %tmp18174 ; <i32> [#uses=1]
%Z = sub i32 %A, %Q ; <i32> [#uses=1]
ret i32 %Z
}

@ -1,10 +0,0 @@
; RUN: opt < %s -basicaa -aa-eval -print-all-alias-modref-info -disable-output |& grep {MayAlias:.*i32\\* %., i32\\* %.} | grep {%x} | grep {%y}
declare i32* @unclear(i32* %a)
define void @foo(i32* noalias %x) {
%y = call i32* @unclear(i32* %x)
store i32 0, i32* %x
store i32 0, i32* %y
ret void
}

@ -1,17 +0,0 @@
; RUN: opt < %s -basicaa -aa-eval -print-all-alias-modref-info -disable-output |& grep {9 no alias}
; RUN: opt < %s -basicaa -aa-eval -print-all-alias-modref-info -disable-output |& grep {6 may alias}
; RUN: opt < %s -basicaa -aa-eval -print-all-alias-modref-info -disable-output |& grep {MayAlias:.*i32\\* %Ipointer, i32\\* %Jpointer}
define void @foo(i32* noalias %p, i32* noalias %q, i32 %i, i32 %j) {
%Ipointer = getelementptr i32* %p, i32 %i
%qi = getelementptr i32* %q, i32 %i
%Jpointer = getelementptr i32* %p, i32 %j
%qj = getelementptr i32* %q, i32 %j
store i32 0, i32* %p
store i32 0, i32* %Ipointer
store i32 0, i32* %Jpointer
store i32 0, i32* %q
store i32 0, i32* %qi
store i32 0, i32* %qj
ret void
}

@ -1,17 +0,0 @@
; PR1600
; RUN: opt < %s -basicaa -gvn -instcombine -S | \
; RUN: grep {ret i32 0}
; END.
declare i16 @llvm.cttz.i16(i16)
define i32 @test(i32* %P, i16* %Q) {
%A = load i16* %Q ; <i16> [#uses=1]
%x = load i32* %P ; <i32> [#uses=1]
%B = call i16 @llvm.cttz.i16( i16 %A ) ; <i16> [#uses=1]
%y = load i32* %P ; <i32> [#uses=1]
store i16 %B, i16* %Q
%z = sub i32 %x, %y ; <i32> [#uses=1]
ret i32 %z
}

@ -1,14 +0,0 @@
; RUN: opt < %s -basicaa -gvn -dce -S | grep tmp7
%struct.A = type { i32 }
%struct.B = type { %struct.A }
@a = global %struct.B zeroinitializer ; <%struct.B*> [#uses=2]
define i32 @_Z3fooP1A(%struct.A* %b) {
entry:
store i32 1, i32* getelementptr (%struct.B* @a, i32 0, i32 0, i32 0), align 8
%tmp4 = getelementptr %struct.A* %b, i32 0, i32 0 ;<i32*> [#uses=1]
store i32 0, i32* %tmp4, align 4
%tmp7 = load i32* getelementptr (%struct.B* @a, i32 0, i32 0, i32 0), align 8 ; <i32> [#uses=1]
ret i32 %tmp7
}

@ -1,34 +0,0 @@
; RUN: opt < %s -gvn -disable-output
; PR1774
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
target triple = "x86_64-unknown-linux-gnu"
%struct.device = type { [20 x i8] }
%struct.pci_device_id = type { i32, i32, i32, i32, i32, i32, i64 }
%struct.usb_bus = type { %struct.device* }
%struct.usb_hcd = type { %struct.usb_bus, i64, [0 x i64] }
@uhci_pci_ids = external constant [1 x %struct.pci_device_id] ; <[1 x %struct.pci_device_id]*> [#uses=1]
@__mod_pci_device_table = alias [1 x %struct.pci_device_id]* @uhci_pci_ids
; <[1 x %struct.pci_device_id]*> [#uses=0]
define i32 @uhci_suspend(%struct.usb_hcd* %hcd) {
entry:
%tmp17 = getelementptr %struct.usb_hcd* %hcd, i32 0, i32 2, i64 1
; <i64*> [#uses=1]
%tmp1718 = bitcast i64* %tmp17 to i32* ; <i32*> [#uses=1]
%tmp19 = load i32* %tmp1718, align 4 ; <i32> [#uses=0]
br i1 false, label %cond_true34, label %done_okay
cond_true34: ; preds = %entry
%tmp631 = getelementptr %struct.usb_hcd* %hcd, i32 0, i32 2, i64
2305843009213693950 ; <i64*> [#uses=1]
%tmp70 = bitcast i64* %tmp631 to %struct.device**
%tmp71 = load %struct.device** %tmp70, align 8
ret i32 undef
done_okay: ; preds = %entry
ret i32 undef
}

@ -1,31 +0,0 @@
; RUN: opt < %s -gvn -disable-output
; PR1782
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
target triple = "x86_64-unknown-linux-gnu"
%struct.device = type { [20 x i8] }
%struct.pci_device_id = type { i32, i32, i32, i32, i32, i32, i64 }
%struct.usb_bus = type { %struct.device* }
%struct.usb_hcd = type { %struct.usb_bus, [0 x i64] }
@pci_ids = external constant [1 x %struct.pci_device_id] ; <[1 x %struct.pci_device_id]*> [#uses=1]
@__mod_pci_device_table = alias [1 x %struct.pci_device_id]* @pci_ids ; <[1 x %struct.pci_device_id]*> [#uses=0]
define i32 @ehci_pci_setup(%struct.usb_hcd* %hcd) {
entry:
%tmp14 = getelementptr %struct.usb_hcd* %hcd, i32 0, i32 0, i32 0 ; <%struct.device**> [#uses=1]
%tmp15 = load %struct.device** %tmp14, align 8 ; <%struct.device*> [#uses=0]
br i1 false, label %bb25, label %return
bb25: ; preds = %entry
br i1 false, label %cond_true, label %return
cond_true: ; preds = %bb25
%tmp601 = getelementptr %struct.usb_hcd* %hcd, i32 0, i32 1, i64 2305843009213693951 ; <i64*> [#uses=1]
%tmp67 = bitcast i64* %tmp601 to %struct.device** ; <%struct.device**> [#uses=1]
%tmp68 = load %struct.device** %tmp67, align 8 ; <%struct.device*> [#uses=0]
ret i32 undef
return: ; preds = %bb25, %entry
ret i32 undef
}

@ -1,18 +0,0 @@
; RUN: opt < %s -std-compile-opts -S | grep store
; ModuleID = 'small2.c'
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
target triple = "i386-apple-darwin8"
%struct.x = type { [4 x i32] }
define void @foo(%struct.x* byval align 4 %X) nounwind {
entry:
%tmp = getelementptr %struct.x* %X, i32 0, i32 0 ; <[4 x i32]*> [#uses=1]
%tmp1 = getelementptr [4 x i32]* %tmp, i32 0, i32 3 ; <i32*> [#uses=1]
store i32 2, i32* %tmp1, align 4
%tmp2 = call i32 (...)* @bar( %struct.x* byval align 4 %X ) nounwind ; <i32> [#uses=0]
br label %return
return: ; preds = %entry
ret void
}
declare i32 @bar(...)

@ -1,15 +0,0 @@
; RUN: opt < %s -gvn -disable-output
; PR2395
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32"
target triple = "i686-pc-linux-gnu"
%struct.S291 = type <{ %union.anon, i32 }>
%union.anon = type { }
@a291 = external global [5 x %struct.S291] ; <[5 x %struct.S291]*> [#uses=2]
define void @test291() nounwind {
entry:
store i32 1138410269, i32* getelementptr ([5 x %struct.S291]* @a291, i32 0, i32 2, i32 1)
%tmp54 = load i32* bitcast (%struct.S291* getelementptr ([5 x %struct.S291]* @a291, i32 0, i32 2) to i32*), align 4 ; <i32> [#uses=0]
unreachable
}

@ -1,12 +0,0 @@
; RUN: opt < %s -aa-eval |& grep {1 no alias response}
declare noalias i32* @_Znwj(i32 %x) nounwind
define i32 @foo() {
%A = call i32* @_Znwj(i32 4)
%B = call i32* @_Znwj(i32 4)
store i32 1, i32* %A
store i32 2, i32* %B
%C = load i32* %A
ret i32 %C
}

@ -1,13 +0,0 @@
; RUN: opt < %s -basicaa -gvn -S | grep load
declare noalias i32* @noalias()
define i32 @test(i32 %x) {
%a = call i32* @noalias()
store i32 1, i32* %a
%b = getelementptr i32* %a, i32 %x
store i32 2, i32* %b
%c = load i32* %a
ret i32 %c
}

@ -1,17 +0,0 @@
; RUN: opt -gvn -instcombine -S < %s | FileCheck %s
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
declare i8 @llvm.atomic.load.add.i8.p0i8(i8*, i8)
define i8 @foo(i8* %ptr) {
%P = getelementptr i8* %ptr, i32 0
%Q = getelementptr i8* %ptr, i32 1
; CHECK: getelementptr
%X = load i8* %P
%Y = call i8 @llvm.atomic.load.add.i8.p0i8(i8* %Q, i8 1)
%Z = load i8* %P
; CHECK-NOT: = load
%A = sub i8 %X, %Z
ret i8 %A
; CHECK: ret i8 0
}

@ -1,30 +0,0 @@
; RUN: opt < %s -aa-eval -print-all-alias-modref-info -disable-output |& grep {NoAlias:.*%P,.*@Z}
; If GEP base doesn't alias Z, then GEP doesn't alias Z.
; rdar://7282591
@Y = common global i32 0
@Z = common global i32 0
define void @foo(i32 %cond) nounwind ssp {
entry:
%a = alloca i32
%tmp = icmp ne i32 %cond, 0
br i1 %tmp, label %bb, label %bb1
bb:
%b = getelementptr i32* %a, i32 0
br label %bb2
bb1:
br label %bb2
bb2:
%P = phi i32* [ %b, %bb ], [ @Y, %bb1 ]
%tmp1 = load i32* @Z, align 4
store i32 123, i32* %P, align 4
%tmp2 = load i32* @Z, align 4
br label %return
return:
ret void
}

@ -1,18 +0,0 @@
; RUN: opt < %s -gvn -S | grep {ret i32 1}
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
target triple = "i686-apple-darwin8"
%struct.x = type { i32, i32, i32, i32 }
@g = weak global i32 0 ; <i32*> [#uses=1]
define i32 @foo(%struct.x* byval %a) nounwind {
entry:
%tmp1 = tail call i32 (...)* @bar( %struct.x* %a ) nounwind ; <i32> [#uses=0]
%tmp2 = getelementptr %struct.x* %a, i32 0, i32 0 ; <i32*> [#uses=2]
store i32 1, i32* %tmp2, align 4
store i32 2, i32* @g, align 4
%tmp4 = load i32* %tmp2, align 4 ; <i32> [#uses=1]
ret i32 %tmp4
}
declare i32 @bar(...)

@ -1,15 +0,0 @@
; RUN: opt < %s -basicaa -gvn -instcombine -S | grep {ret i32 0}
@flag0 = internal global i32 zeroinitializer
@turn = internal global i32 zeroinitializer
define i32 @main() {
%a = load i32* @flag0
%b = tail call i32 @llvm.atomic.swap.i32.p0i32(i32* @turn, i32 1)
%c = load i32* @flag0
%d = sub i32 %a, %c
ret i32 %d
}
declare i32 @llvm.atomic.swap.i32.p0i32(i32*, i32) nounwind

@ -1,27 +0,0 @@
; RUN: opt < %s -aa-eval -print-all-alias-modref-info \
; RUN: |& grep {MayAlias: double\\* \[%\]p.0.i.0, double\\* \[%\]p3\$}
; PR4267
; %p3 is equal to %p.0.i.0 on the second iteration of the loop,
; so MayAlias is needed.
define void @foo([3 x [3 x double]]* noalias %p) {
entry:
%p3 = getelementptr [3 x [3 x double]]* %p, i64 0, i64 0, i64 3
br label %loop
loop:
%i = phi i64 [ 0, %entry ], [ %i.next, %loop ]
%p.0.i.0 = getelementptr [3 x [3 x double]]* %p, i64 0, i64 %i, i64 0
volatile store double 0.0, double* %p3
volatile store double 0.1, double* %p.0.i.0
%i.next = add i64 %i, 1
%cmp = icmp slt i64 %i.next, 3
br i1 %cmp, label %loop, label %exit
exit:
ret void
}

@ -1,3 +0,0 @@
load_lib llvm.exp
RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]]

@ -1,83 +0,0 @@
; This testcase tests for various features the basicaa test should be able to
; determine, as noted in the comments.
; RUN: opt < %s -basicaa -gvn -instcombine -dce -S | not grep REMOVE
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
@Global = external global { i32 }
; Array test: Test that operations on one local array do not invalidate
; operations on another array. Important for scientific codes.
;
define i32 @different_array_test(i64 %A, i64 %B) {
%Array1 = alloca i32, i32 100
%Array2 = alloca i32, i32 200
%pointer = getelementptr i32* %Array1, i64 %A
%val = load i32* %pointer
%pointer2 = getelementptr i32* %Array2, i64 %B
store i32 7, i32* %pointer2
%REMOVE = load i32* %pointer ; redundant with above load
%retval = sub i32 %REMOVE, %val
ret i32 %retval
}
; Constant index test: Constant indexes into the same array should not
; interfere with each other. Again, important for scientific codes.
;
define i32 @constant_array_index_test() {
%Array = alloca i32, i32 100
%P1 = getelementptr i32* %Array, i64 7
%P2 = getelementptr i32* %Array, i64 6
%A = load i32* %P1
store i32 1, i32* %P2 ; Should not invalidate load
%BREMOVE = load i32* %P1
%Val = sub i32 %A, %BREMOVE
ret i32 %Val
}
; Test that if two pointers are spaced out by a constant getelementptr, that
; they cannot alias.
define i32 @gep_distance_test(i32* %A) {
%REMOVEu = load i32* %A
%B = getelementptr i32* %A, i64 2 ; Cannot alias A
store i32 7, i32* %B
%REMOVEv = load i32* %A
%r = sub i32 %REMOVEu, %REMOVEv
ret i32 %r
}
; Test that if two pointers are spaced out by a constant offset, that they
; cannot alias, even if there is a variable offset between them...
define i32 @gep_distance_test2({i32,i32}* %A, i64 %distance) {
%A1 = getelementptr {i32,i32}* %A, i64 0, i32 0
%REMOVEu = load i32* %A1
%B = getelementptr {i32,i32}* %A, i64 %distance, i32 1
store i32 7, i32* %B ; B cannot alias A, it's at least 4 bytes away
%REMOVEv = load i32* %A1
%r = sub i32 %REMOVEu, %REMOVEv
ret i32 %r
}
; Test that we can do funny pointer things and that distance calc will still
; work.
define i32 @gep_distance_test3(i32 * %A) {
%X = load i32* %A
%B = bitcast i32* %A to i8*
%C = getelementptr i8* %B, i64 4
%Y = load i8* %C
ret i32 8
}
; Test that we can disambiguate globals reached through constantexpr geps
define i32 @constexpr_test() {
%X = alloca i32
%Y = load i32* %X
store i32 5, i32* getelementptr ({ i32 }* @Global, i64 0, i32 0)
%REMOVE = load i32* %X
%retval = sub i32 %Y, %REMOVE
ret i32 %retval
}

@ -1,46 +0,0 @@
; Test that GCSE uses basicaa to do alias analysis, which is capable of
; disambiguating some obvious cases. All loads should be removable in
; this testcase.
; RUN: opt < %s -basicaa -gvn -instcombine -dce -S \
; RUN: | not grep load
@A = global i32 7
@B = global i32 8
define i32 @test() {
%A1 = load i32* @A
store i32 123, i32* @B ; Store cannot alias @A
%A2 = load i32* @A
%X = sub i32 %A1, %A2
ret i32 %X
}
define i32 @test2() {
%A1 = load i32* @A
br label %Loop
Loop:
%AP = phi i32 [0, %0], [%X, %Loop]
store i32 %AP, i32* @B ; Store cannot alias @A
%A2 = load i32* @A
%X = sub i32 %A1, %A2
%c = icmp eq i32 %X, 0
br i1 %c, label %out, label %Loop
out:
ret i32 %X
}
declare void @external()
define i32 @test3() {
%X = alloca i32
store i32 7, i32* %X
call void @external()
%V = load i32* %X
ret i32 %V
}

@ -1,171 +0,0 @@
; RUN: opt < %s -gvn -instcombine -S |& FileCheck %s
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
; Make sure that basicaa thinks R and r are must aliases.
define i32 @test1(i8 * %P) {
entry:
%Q = bitcast i8* %P to {i32, i32}*
%R = getelementptr {i32, i32}* %Q, i32 0, i32 1
%S = load i32* %R
%q = bitcast i8* %P to {i32, i32}*
%r = getelementptr {i32, i32}* %q, i32 0, i32 1
%s = load i32* %r
%t = sub i32 %S, %s
ret i32 %t
; CHECK: @test1
; CHECK: ret i32 0
}
define i32 @test2(i8 * %P) {
entry:
%Q = bitcast i8* %P to {i32, i32, i32}*
%R = getelementptr {i32, i32, i32}* %Q, i32 0, i32 1
%S = load i32* %R
%r = getelementptr {i32, i32, i32}* %Q, i32 0, i32 2
store i32 42, i32* %r
%s = load i32* %R
%t = sub i32 %S, %s
ret i32 %t
; CHECK: @test2
; CHECK: ret i32 0
}
; This was a miscompilation.
define i32 @test3({float, {i32, i32, i32}}* %P) {
entry:
%P2 = getelementptr {float, {i32, i32, i32}}* %P, i32 0, i32 1
%R = getelementptr {i32, i32, i32}* %P2, i32 0, i32 1
%S = load i32* %R
%r = getelementptr {i32, i32, i32}* %P2, i32 0, i32 2
store i32 42, i32* %r
%s = load i32* %R
%t = sub i32 %S, %s
ret i32 %t
; CHECK: @test3
; CHECK: ret i32 0
}
;; This is reduced from the SmallPtrSet constructor.
%SmallPtrSetImpl = type { i8**, i32, i32, i32, [1 x i8*] }
%SmallPtrSet64 = type { %SmallPtrSetImpl, [64 x i8*] }
define i32 @test4(%SmallPtrSet64* %P) {
entry:
%tmp2 = getelementptr inbounds %SmallPtrSet64* %P, i64 0, i32 0, i32 1
store i32 64, i32* %tmp2, align 8
%tmp3 = getelementptr inbounds %SmallPtrSet64* %P, i64 0, i32 0, i32 4, i64 64
store i8* null, i8** %tmp3, align 8
%tmp4 = load i32* %tmp2, align 8
ret i32 %tmp4
; CHECK: @test4
; CHECK: ret i32 64
}
; P[i] != p[i+1]
define i32 @test5(i32* %p, i64 %i) {
%pi = getelementptr i32* %p, i64 %i
%i.next = add i64 %i, 1
%pi.next = getelementptr i32* %p, i64 %i.next
%x = load i32* %pi
store i32 42, i32* %pi.next
%y = load i32* %pi
%z = sub i32 %x, %y
ret i32 %z
; CHECK: @test5
; CHECK: ret i32 0
}
; P[i] != p[(i*4)|1]
define i32 @test6(i32* %p, i64 %i1) {
%i = shl i64 %i1, 2
%pi = getelementptr i32* %p, i64 %i
%i.next = or i64 %i, 1
%pi.next = getelementptr i32* %p, i64 %i.next
%x = load i32* %pi
store i32 42, i32* %pi.next
%y = load i32* %pi
%z = sub i32 %x, %y
ret i32 %z
; CHECK: @test6
; CHECK: ret i32 0
}
; P[1] != P[i*4]
define i32 @test7(i32* %p, i64 %i) {
%pi = getelementptr i32* %p, i64 1
%i.next = shl i64 %i, 2
%pi.next = getelementptr i32* %p, i64 %i.next
%x = load i32* %pi
store i32 42, i32* %pi.next
%y = load i32* %pi
%z = sub i32 %x, %y
ret i32 %z
; CHECK: @test7
; CHECK: ret i32 0
}
; P[zext(i)] != p[zext(i+1)]
; PR1143
define i32 @test8(i32* %p, i32 %i) {
%i1 = zext i32 %i to i64
%pi = getelementptr i32* %p, i64 %i1
%i.next = add i32 %i, 1
%i.next2 = zext i32 %i.next to i64
%pi.next = getelementptr i32* %p, i64 %i.next2
%x = load i32* %pi
store i32 42, i32* %pi.next
%y = load i32* %pi
%z = sub i32 %x, %y
ret i32 %z
; CHECK: @test8
; CHECK: ret i32 0
}
define i8 @test9([4 x i8] *%P, i32 %i, i32 %j) {
%i2 = shl i32 %i, 2
%i3 = add i32 %i2, 1
; P2 = P + 1 + 4*i
%P2 = getelementptr [4 x i8] *%P, i32 0, i32 %i3
%j2 = shl i32 %j, 2
; P4 = P + 4*j
%P4 = getelementptr [4 x i8]* %P, i32 0, i32 %j2
%x = load i8* %P2
store i8 42, i8* %P4
%y = load i8* %P2
%z = sub i8 %x, %y
ret i8 %z
; CHECK: @test9
; CHECK: ret i8 0
}
define i8 @test10([4 x i8] *%P, i32 %i) {
%i2 = shl i32 %i, 2
%i3 = add i32 %i2, 4
; P2 = P + 4 + 4*i
%P2 = getelementptr [4 x i8] *%P, i32 0, i32 %i3
; P4 = P + 4*i
%P4 = getelementptr [4 x i8]* %P, i32 0, i32 %i2
%x = load i8* %P2
store i8 42, i8* %P4
%y = load i8* %P2
%z = sub i8 %x, %y
ret i8 %z
; CHECK: @test10
; CHECK: ret i8 0
}

@ -1,16 +0,0 @@
; A store or load cannot alias a global if the accessed amount is larger then
; the global.
; RUN: opt < %s -basicaa -gvn -instcombine -S | not grep load
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
@B = global i16 8 ; <i16*> [#uses=2]
define i16 @test(i32* %P) {
%X = load i16* @B ; <i16> [#uses=1]
store i32 7, i32* %P
%Y = load i16* @B ; <i16> [#uses=1]
%Z = sub i16 %Y, %X ; <i16> [#uses=1]
ret i16 %Z
}

@ -1,125 +0,0 @@
; RUN: opt < %s -basicaa -gvn -dse -S | FileCheck %s
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
declare void @llvm.memset.i32(i8*, i8, i32, i32)
declare void @llvm.memset.i8(i8*, i8, i8, i32)
declare void @llvm.memcpy.i8(i8*, i8*, i8, i32)
declare void @llvm.memcpy.i32(i8*, i8*, i32, i32)
declare void @llvm.lifetime.end(i64, i8* nocapture)
declare void @external(i32*)
define i32 @test0(i8* %P) {
%A = alloca i32
call void @external(i32* %A)
store i32 0, i32* %A
call void @llvm.memset.i32(i8* %P, i8 0, i32 42, i32 1)
%B = load i32* %A
ret i32 %B
; CHECK: @test0
; CHECK: ret i32 0
}
declare void @llvm.memcpy.i8(i8*, i8*, i8, i32)
define i8 @test1() {
; CHECK: @test1
%A = alloca i8
%B = alloca i8
store i8 2, i8* %B ;; Not written to by memcpy
call void @llvm.memcpy.i8(i8* %A, i8* %B, i8 -1, i32 0)
%C = load i8* %B
ret i8 %C
; CHECK: ret i8 2
}
define i8 @test2(i8* %P) {
; CHECK: @test2
%P2 = getelementptr i8* %P, i32 127
store i8 1, i8* %P2 ;; Not dead across memset
call void @llvm.memset.i8(i8* %P, i8 2, i8 127, i32 0)
%A = load i8* %P2
ret i8 %A
; CHECK: ret i8 1
}
define i8 @test2a(i8* %P) {
; CHECK: @test2
%P2 = getelementptr i8* %P, i32 126
;; FIXME: DSE isn't zapping this dead store.
store i8 1, i8* %P2 ;; Dead, clobbered by memset.
call void @llvm.memset.i8(i8* %P, i8 2, i8 127, i32 0)
%A = load i8* %P2
ret i8 %A
; CHECK-NOT: load
; CHECK: ret i8 2
}
define void @test3(i8* %P, i8 %X) {
; CHECK: @test3
; CHECK-NOT: store
; CHECK-NOT: %Y
%Y = add i8 %X, 1 ;; Dead, because the only use (the store) is dead.
%P2 = getelementptr i8* %P, i32 2
store i8 %Y, i8* %P2 ;; Not read by lifetime.end, should be removed.
; CHECK: store i8 2, i8* %P2
call void @llvm.lifetime.end(i64 1, i8* %P)
store i8 2, i8* %P2
; CHECK-NOT: store
ret void
; CHECK: ret void
}
define void @test3a(i8* %P, i8 %X) {
; CHECK: @test3a
%Y = add i8 %X, 1 ;; Dead, because the only use (the store) is dead.
%P2 = getelementptr i8* %P, i32 2
store i8 %Y, i8* %P2 ;; FIXME: Killed by llvm.lifetime.end, should be zapped.
; CHECK: store i8 %Y, i8* %P2
call void @llvm.lifetime.end(i64 10, i8* %P)
ret void
; CHECK: ret void
}
@G1 = external global i32
@G2 = external global [4000 x i32]
define i32 @test4(i8* %P) {
%tmp = load i32* @G1
call void @llvm.memset.i32(i8* bitcast ([4000 x i32]* @G2 to i8*), i8 0, i32 4000, i32 1)
%tmp2 = load i32* @G1
%sub = sub i32 %tmp2, %tmp
ret i32 %sub
; CHECK: @test4
; CHECK: load i32* @G
; CHECK: memset.i32
; CHECK-NOT: load
; CHECK: sub i32 %tmp, %tmp
}
; Verify that basicaa is handling variable length memcpy, knowing it doesn't
; write to G1.
define i32 @test5(i8* %P, i32 %Len) {
%tmp = load i32* @G1
call void @llvm.memcpy.i32(i8* bitcast ([4000 x i32]* @G2 to i8*), i8* bitcast (i32* @G1 to i8*), i32 %Len, i32 1)
%tmp2 = load i32* @G1
%sub = sub i32 %tmp2, %tmp
ret i32 %sub
; CHECK: @test5
; CHECK: load i32* @G
; CHECK: memcpy.i32
; CHECK-NOT: load
; CHECK: sub i32 %tmp, %tmp
}

@ -1,23 +0,0 @@
; RUN: opt < %s -basicaa -gvn -instcombine -S | grep {ret i1 true}
; PR2436
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
target triple = "i386-apple-darwin8"
define i1 @foo(i32 %i) nounwind {
entry:
%arr = alloca [10 x i8*] ; <[10 x i8*]*> [#uses=1]
%tmp2 = call i8* @getPtr( ) nounwind ; <i8*> [#uses=2]
%tmp4 = getelementptr [10 x i8*]* %arr, i32 0, i32 %i ; <i8**> [#uses=2]
store i8* %tmp2, i8** %tmp4, align 4
%tmp10 = getelementptr i8* %tmp2, i32 10 ; <i8*> [#uses=1]
store i8 42, i8* %tmp10, align 1
%tmp14 = load i8** %tmp4, align 4 ; <i8*> [#uses=1]
%tmp16 = getelementptr i8* %tmp14, i32 10 ; <i8*> [#uses=1]
%tmp17 = load i8* %tmp16, align 1 ; <i8> [#uses=1]
%tmp19 = icmp eq i8 %tmp17, 42 ; <i1> [#uses=1]
ret i1 %tmp19
}
declare i8* @getPtr()
declare void @abort() noreturn nounwind

@ -1,14 +0,0 @@
; RUN: opt < %s -basicaa -gvn -instcombine -S | grep {ret i32 0}
declare i32* @test(i32* nocapture)
define i32 @test2() {
%P = alloca i32
%Q = call i32* @test(i32* %P)
%a = load i32* %P
store i32 4, i32* %Q ;; cannot clobber P since it is nocapture.
%b = load i32* %P
%c = sub i32 %a, %b
ret i32 %c
}

@ -1,29 +0,0 @@
; RUN: opt < %s -basicaa -aa-eval -print-all-alias-modref-info -disable-output |& grep {NoAlias:.*%P,.*@Z}
; rdar://7282591
@X = common global i32 0
@Y = common global i32 0
@Z = common global i32 0
define void @foo(i32 %cond) nounwind ssp {
entry:
%"alloca point" = bitcast i32 0 to i32
%tmp = icmp ne i32 %cond, 0
br i1 %tmp, label %bb, label %bb1
bb:
br label %bb2
bb1:
br label %bb2
bb2:
%P = phi i32* [ @X, %bb ], [ @Y, %bb1 ]
%tmp1 = load i32* @Z, align 4
store i32 123, i32* %P, align 4
%tmp2 = load i32* @Z, align 4
br label %return
return:
ret void
}

@ -1,73 +0,0 @@
; RUN: opt < %s -aa-eval -print-all-alias-modref-info -disable-output \
; RUN: |& grep {NoAlias: double\\* \[%\]a, double\\* \[%\]b\$} | count 4
; BasicAA should detect NoAliases in PHIs and Selects.
; Two PHIs in the same block.
define void @foo(i1 %m, double* noalias %x, double* noalias %y) {
entry:
br i1 %m, label %true, label %false
true:
br label %exit
false:
br label %exit
exit:
%a = phi double* [ %x, %true ], [ %y, %false ]
%b = phi double* [ %x, %false ], [ %y, %true ]
volatile store double 0.0, double* %a
volatile store double 1.0, double* %b
ret void
}
; Two selects with the same condition.
define void @bar(i1 %m, double* noalias %x, double* noalias %y) {
entry:
%a = select i1 %m, double* %x, double* %y
%b = select i1 %m, double* %y, double* %x
volatile store double 0.000000e+00, double* %a
volatile store double 1.000000e+00, double* %b
ret void
}
; Two PHIs with disjoint sets of inputs.
define void @qux(i1 %m, double* noalias %x, double* noalias %y,
i1 %n, double* noalias %v, double* noalias %w) {
entry:
br i1 %m, label %true, label %false
true:
br label %exit
false:
br label %exit
exit:
%a = phi double* [ %x, %true ], [ %y, %false ]
br i1 %n, label %ntrue, label %nfalse
ntrue:
br label %nexit
nfalse:
br label %nexit
nexit:
%b = phi double* [ %v, %ntrue ], [ %w, %nfalse ]
volatile store double 0.0, double* %a
volatile store double 1.0, double* %b
ret void
}
; Two selects with disjoint sets of arms.
define void @fin(i1 %m, double* noalias %x, double* noalias %y,
i1 %n, double* noalias %v, double* noalias %w) {
entry:
%a = select i1 %m, double* %x, double* %y
%b = select i1 %n, double* %v, double* %w
volatile store double 0.000000e+00, double* %a
volatile store double 1.000000e+00, double* %b
ret void
}

@ -1,33 +0,0 @@
; RUN: opt < %s -basicaa -gvn -S | grep TestConst | count 2
; RUN: opt < %s -basicaa -gvn -S | grep TestPure | count 3
; RUN: opt < %s -basicaa -gvn -S | grep TestNone | count 4
@g = global i32 0 ; <i32*> [#uses=1]
define i32 @test() {
entry:
%tmp0 = call i32 @TestConst( i32 5 ) readnone ; <i32> [#uses=1]
%tmp1 = call i32 @TestPure( i32 6 ) readonly ; <i32> [#uses=1]
%tmp2 = call i32 @TestNone( i32 7 ) ; <i32> [#uses=1]
store i32 1, i32* @g
%tmp3 = call i32 @TestConst( i32 5 ) readnone ; <i32> [#uses=1]
%tmp4 = call i32 @TestConst( i32 5 ) readnone ; <i32> [#uses=1]
%tmp5 = call i32 @TestPure( i32 6 ) readonly ; <i32> [#uses=1]
%tmp6 = call i32 @TestPure( i32 6 ) readonly ; <i32> [#uses=1]
%tmp7 = call i32 @TestNone( i32 7 ) ; <i32> [#uses=1]
%tmp8 = call i32 @TestNone( i32 7 ) ; <i32> [#uses=1]
%sum0 = add i32 %tmp0, %tmp1 ; <i32> [#uses=1]
%sum1 = add i32 %sum0, %tmp2 ; <i32> [#uses=1]
%sum2 = add i32 %sum1, %tmp3 ; <i32> [#uses=1]
%sum3 = add i32 %sum2, %tmp4 ; <i32> [#uses=1]
%sum4 = add i32 %sum3, %tmp5 ; <i32> [#uses=1]
%sum5 = add i32 %sum4, %tmp6 ; <i32> [#uses=1]
%sum6 = add i32 %sum5, %tmp7 ; <i32> [#uses=1]
%sum7 = add i32 %sum6, %tmp8 ; <i32> [#uses=1]
ret i32 %sum7
}
declare i32 @TestConst(i32) readnone
declare i32 @TestPure(i32) readonly
declare i32 @TestNone(i32)

@ -1,54 +0,0 @@
; Test that LICM uses basicaa to do alias analysis, which is capable of
; disambiguating some obvious cases. If LICM is able to disambiguate the
; two pointers, then the load should be hoisted, and the store sunk.
; RUN: opt < %s -basicaa -licm -S | FileCheck %s
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
@A = global i32 7 ; <i32*> [#uses=3]
@B = global i32 8 ; <i32*> [#uses=2]
@C = global [2 x i32] [ i32 4, i32 8 ] ; <[2 x i32]*> [#uses=2]
define i32 @test1(i1 %c) {
%Atmp = load i32* @A ; <i32> [#uses=2]
br label %Loop
Loop: ; preds = %Loop, %0
%ToRemove = load i32* @A ; <i32> [#uses=1]
store i32 %Atmp, i32* @B
br i1 %c, label %Out, label %Loop
Out: ; preds = %Loop
%X = sub i32 %ToRemove, %Atmp ; <i32> [#uses=1]
ret i32 %X
; The Loop block should be empty after the load/store are promoted.
; CHECK: @test1
; CHECK: load i32* @B
; CHECK: Loop:
; CHECK-NEXT: br i1 %c, label %Out, label %Loop
; CHECK: Out:
; CHECK: store i32 %Atmp, i32* @B
}
define i32 @test2(i1 %c) {
br label %Loop
Loop: ; preds = %Loop, %0
%AVal = load i32* @A ; <i32> [#uses=2]
%C0 = getelementptr [2 x i32]* @C, i64 0, i64 0 ; <i32*> [#uses=1]
store i32 %AVal, i32* %C0
%BVal = load i32* @B ; <i32> [#uses=2]
%C1 = getelementptr [2 x i32]* @C, i64 0, i64 1 ; <i32*> [#uses=1]
store i32 %BVal, i32* %C1
br i1 %c, label %Out, label %Loop
Out: ; preds = %Loop
%X = sub i32 %AVal, %BVal ; <i32> [#uses=1]
ret i32 %X
; The Loop block should be empty after the load/store are promoted.
; CHECK: @test2
; CHECK: Loop:
; CHECK-NEXT: br i1 %c, label %Out, label %Loop
}

@ -1,16 +0,0 @@
; RUN: opt < %s -basicaa -gvn -instcombine |\
; RUN: llvm-dis | grep {ret i32 0}
declare void @foo(i32*)
declare void @bar()
define i32 @test() {
%A = alloca i32 ; <i32*> [#uses=3]
call void @foo( i32* %A )
%X = load i32* %A ; <i32> [#uses=1]
tail call void @bar( )
%Y = load i32* %A ; <i32> [#uses=1]
%Z = sub i32 %X, %Y ; <i32> [#uses=1]
ret i32 %Z
}

@ -1,13 +0,0 @@
; RUN: opt < %s -print-callgraph -disable-output |& \
; RUN: grep {Calls function 'callee'} | count 2
define internal void @callee(...) {
entry:
unreachable
}
define void @caller() {
entry:
call void (...)* @callee( void (...)* @callee )
unreachable
}

@ -1,8 +0,0 @@
; RUN: opt < %s -print-callgraph -disable-output |& \
; RUN: grep {Calls function}
@a = global void ()* @f ; <void ()**> [#uses=0]
define internal void @f() {
unreachable
}

@ -1,3 +0,0 @@
load_lib llvm.exp
RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]]

@ -1,20 +0,0 @@
; RUN: opt < %s -domtree -break-crit-edges -analyze \
; RUN: -domtree | grep {3.*%brtrue }
; PR932
declare void @use1(i32)
define void @f(i32 %i, i1 %c) {
entry:
%A = icmp eq i32 %i, 0 ; <i1> [#uses=1]
br i1 %A, label %brtrue, label %brfalse
brtrue: ; preds = %brtrue, %entry
%B = phi i1 [ true, %brtrue ], [ false, %entry ] ; <i1> [#uses=1]
call void @use1( i32 %i )
br i1 %B, label %brtrue, label %brfalse
brfalse: ; preds = %brtrue, %entry
call void @use1( i32 %i )
ret void
}

@ -1,187 +0,0 @@
; RUN: opt < %s -domtree -break-crit-edges -domtree -disable-output
; PR1110
%struct.OggVorbis_File = type { i8*, i32, i64, i64, %struct.ogg_sync_state, i32, i64*, i64*, i32*, i64*, %struct.vorbis_info*, %struct.vorbis_comment*, i64, i32, i32, i32, double, double, %struct.ogg_stream_state, %struct.vorbis_dsp_state, %struct.vorbis_block, %struct.ov_callbacks }
%struct.alloc_chain = type { i8*, %struct.alloc_chain* }
%struct.ogg_stream_state = type { i8*, i32, i32, i32, i32*, i64*, i32, i32, i32, i32, [282 x i8], i32, i32, i32, i32, i32, i64, i64 }
%struct.ogg_sync_state = type { i8*, i32, i32, i32, i32, i32, i32 }
%struct.oggpack_buffer = type { i32, i32, i8*, i8*, i32 }
%struct.ov_callbacks = type { i32 (i8*, i32, i32, i8*)*, i32 (i8*, i64, i32)*, i32 (i8*)*, i32 (i8*)* }
%struct.vorbis_block = type { float**, %struct.oggpack_buffer, i32, i32, i32, i32, i32, i32, i64, i64, %struct.vorbis_dsp_state*, i8*, i32, i32, i32, %struct.alloc_chain*, i32, i32, i32, i32, i8* }
%struct.vorbis_comment = type { i8**, i32*, i32, i8* }
%struct.vorbis_dsp_state = type { i32, %struct.vorbis_info*, float**, float**, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i64, i8* }
%struct.vorbis_info = type { i32, i32, i32, i32, i32, i32, i32, i8* }
define void @ov_read() {
entry:
br i1 false, label %bb, label %return
bb: ; preds = %cond_next22, %entry
br i1 false, label %cond_true8, label %cond_next15
cond_true8: ; preds = %bb
br i1 false, label %cond_next15, label %bb29
cond_next15: ; preds = %cond_true8, %bb
br i1 false, label %return, label %cond_next22
cond_next22: ; preds = %cond_next15
br i1 false, label %bb, label %return
bb29: ; preds = %cond_true8
br i1 false, label %cond_true32, label %return
cond_true32: ; preds = %bb29
br i1 false, label %cond_false37.i, label %cond_true.i11
cond_true.i11: ; preds = %cond_true32
br i1 false, label %cond_true8.i, label %ov_info.exit
cond_true8.i: ; preds = %cond_true.i11
br i1 false, label %cond_true44, label %cond_next48
cond_false37.i: ; preds = %cond_true32
br label %ov_info.exit
ov_info.exit: ; preds = %cond_false37.i, %cond_true.i11
br i1 false, label %cond_true44, label %cond_next48
cond_true44: ; preds = %ov_info.exit, %cond_true8.i
br label %cond_next48
cond_next48: ; preds = %cond_true44, %ov_info.exit, %cond_true8.i
br i1 false, label %cond_next53, label %return
cond_next53: ; preds = %cond_next48
br i1 false, label %cond_true56, label %cond_false97
cond_true56: ; preds = %cond_next53
br i1 false, label %bb85, label %cond_next304
bb63: ; preds = %bb85
br i1 false, label %cond_next78, label %cond_false73
cond_false73: ; preds = %bb63
br i1 false, label %cond_true76, label %cond_next78
cond_true76: ; preds = %cond_false73
br label %cond_next78
cond_next78: ; preds = %cond_true76, %cond_false73, %bb63
br label %bb85
bb85: ; preds = %bb89, %cond_next78, %cond_true56
br i1 false, label %bb63, label %bb89
bb89: ; preds = %bb85
br i1 false, label %bb85, label %cond_next304
cond_false97: ; preds = %cond_next53
br i1 false, label %cond_true108, label %bb248
cond_true108: ; preds = %cond_false97
br i1 false, label %bb196, label %bb149
bb112: ; preds = %bb149, %bb146
br i1 false, label %bb119, label %bb146
bb119: ; preds = %cond_next134, %bb112
br i1 false, label %cond_next134, label %cond_false129
cond_false129: ; preds = %bb119
br i1 false, label %cond_true132, label %cond_next134
cond_true132: ; preds = %cond_false129
br label %cond_next134
cond_next134: ; preds = %cond_true132, %cond_false129, %bb119
br i1 false, label %bb119, label %bb146
bb146: ; preds = %cond_next134, %bb112
br i1 false, label %bb112, label %cond_next304
bb149: ; preds = %cond_true108
br i1 false, label %bb112, label %cond_next304
bb155: ; preds = %bb196, %bb193
br i1 false, label %bb165, label %bb193
bb165: ; preds = %cond_next180, %bb155
br i1 false, label %cond_next180, label %cond_false175
cond_false175: ; preds = %bb165
br i1 false, label %cond_true178, label %cond_next180
cond_true178: ; preds = %cond_false175
br label %cond_next180
cond_next180: ; preds = %cond_true178, %cond_false175, %bb165
br i1 false, label %bb165, label %bb193
bb193: ; preds = %cond_next180, %bb155
br i1 false, label %bb155, label %cond_next304
bb196: ; preds = %cond_true108
br i1 false, label %bb155, label %cond_next304
bb207: ; preds = %bb241
br i1 false, label %cond_next225, label %cond_false220
cond_false220: ; preds = %bb207
br i1 false, label %cond_true223, label %cond_next225
cond_true223: ; preds = %cond_false220
br label %cond_next225
cond_next225: ; preds = %cond_true223, %cond_false220, %bb207
br label %bb241
bb241: ; preds = %bb248, %bb245, %cond_next225
br i1 false, label %bb207, label %bb245
bb245: ; preds = %bb241
br i1 false, label %bb241, label %cond_next304
bb248: ; preds = %cond_false97
br i1 false, label %bb241, label %cond_next304
bb256: ; preds = %bb290
br i1 false, label %cond_next274, label %cond_false269
cond_false269: ; preds = %bb256
br i1 false, label %cond_true272, label %cond_next274
cond_true272: ; preds = %cond_false269
br label %cond_next274
cond_next274: ; preds = %cond_true272, %cond_false269, %bb256
br label %bb290
bb290: ; preds = %bb294, %cond_next274
br i1 false, label %bb256, label %bb294
bb294: ; preds = %bb290
br i1 false, label %bb290, label %cond_next304
cond_next304: ; preds = %bb294, %bb248, %bb245, %bb196, %bb193, %bb149, %bb146, %bb89, %cond_true56
br i1 false, label %cond_next11.i, label %cond_true.i
cond_true.i: ; preds = %cond_next304
br i1 false, label %vorbis_synthesis_read.exit, label %cond_next11.i
cond_next11.i: ; preds = %cond_true.i, %cond_next304
br label %vorbis_synthesis_read.exit
vorbis_synthesis_read.exit: ; preds = %cond_next11.i, %cond_true.i
br i1 false, label %cond_next321, label %cond_true316
cond_true316: ; preds = %vorbis_synthesis_read.exit
ret void
cond_next321: ; preds = %vorbis_synthesis_read.exit
ret void
return: ; preds = %cond_next48, %bb29, %cond_next22, %cond_next15, %entry
ret void
}

@ -1,21 +0,0 @@
; RUN: opt < %s -loop-rotate -loop-unswitch -disable-output
define i32 @stringSearch_Clib(i32 %count) {
entry:
br i1 false, label %bb36, label %bb44
cond_true20: ; preds = %bb36
%tmp33 = add i32 0, 0 ; <i32> [#uses=1]
br label %bb36
bb36: ; preds = %cond_true20, %entry
%c.2 = phi i32 [ %tmp33, %cond_true20 ], [ 0, %entry ] ; <i32> [#uses=1]
br i1 false, label %cond_true20, label %bb41
bb41: ; preds = %bb36
%c.2.lcssa = phi i32 [ %c.2, %bb36 ] ; <i32> [#uses=0]
ret i32 0
bb44: ; preds = %entry
ret i32 0
}

@ -1,13 +0,0 @@
; RUN: opt < %s -loop-rotate -licm -loop-unswitch -disable-output
define i32 @main(i32 %argc, i8** %argv) {
entry:
br label %bb7
bb7: ; preds = %bb7, %entry
%tmp54 = icmp slt i32 0, 2000000 ; <i1> [#uses=1]
br i1 %tmp54, label %bb7, label %bb56
bb56: ; preds = %bb7
ret i32 0
}

@ -1,3 +0,0 @@
load_lib llvm.exp
RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]]

@ -1,18 +0,0 @@
; RUN: opt < %s -globalsmodref-aa -gvn -S | grep call | count 2
@g = internal global i32 0 ; <i32*> [#uses=2]
define i32 @r() {
%tmp = load i32* @g ; <i32> [#uses=1]
ret i32 %tmp
}
define i32 @f() {
entry:
%tmp = call i32 @e( ) ; <i32> [#uses=1]
store i32 %tmp, i32* @g
%tmp2 = call i32 @e( ) ; <i32> [#uses=1]
ret i32 %tmp2
}
declare i32 @e() readonly ; might call @r

@ -1,9 +0,0 @@
; RUN: opt < %s -globalsmodref-aa -gvn -S | not grep load
@X = internal global i32 4 ; <i32*> [#uses=1]
define i32 @test(i32* %P) {
store i32 7, i32* %P
store i32 12, i32* @X
%V = load i32* %P ; <i32> [#uses=1]
ret i32 %V
}

@ -1,20 +0,0 @@
; RUN: opt < %s -globalsmodref-aa -gvn -S | not grep load
; This test requires the use of previous analyses to determine that
; doesnotmodX does not modify X (because 'sin' doesn't).
@X = internal global i32 4 ; <i32*> [#uses=2]
declare double @sin(double) readnone
define i32 @test(i32* %P) {
store i32 12, i32* @X
call double @doesnotmodX( double 1.000000e+00 ) ; <double>:1 [#uses=0]
%V = load i32* @X ; <i32> [#uses=1]
ret i32 %V
}
define double @doesnotmodX(double %V) {
%V2 = call double @sin( double %V ) readnone ; <double> [#uses=1]
ret double %V2
}

@ -1,3 +0,0 @@
load_lib llvm.exp
RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]]

@ -1,20 +0,0 @@
; RUN: opt < %s -globalsmodref-aa -gvn -instcombine -S | \
; RUN: grep {ret i32 0}
@G = internal global i32* null ; <i32**> [#uses=3]
define void @test() {
%A = malloc i32 ; <i32*> [#uses=1]
store i32* %A, i32** @G
ret void
}
define i32 @test1(i32* %P) {
%g1 = load i32** @G ; <i32*> [#uses=2]
%h1 = load i32* %g1 ; <i32> [#uses=1]
store i32 123, i32* %P
%g2 = load i32** @G ; <i32*> [#uses=0]
%h2 = load i32* %g1 ; <i32> [#uses=1]
%X = sub i32 %h1, %h2 ; <i32> [#uses=1]
ret i32 %X
}

@ -1,13 +0,0 @@
; RUN: opt < %s -globalsmodref-aa -gvn -S | not grep load
@X = internal global i32 4 ; <i32*> [#uses=2]
define i32 @test(i32* %P) {
store i32 12, i32* @X
call void @doesnotmodX( )
%V = load i32* @X ; <i32> [#uses=1]
ret i32 %V
}
define void @doesnotmodX() {
ret void
}

@ -1,23 +0,0 @@
; Test that pure functions are cse'd away
; RUN: opt < %s -globalsmodref-aa -gvn -instcombine | \
; RUN: llvm-dis | not grep sub
define i32 @pure(i32 %X) {
%Y = add i32 %X, 1 ; <i32> [#uses=1]
ret i32 %Y
}
define i32 @test1(i32 %X) {
%A = call i32 @pure( i32 %X ) ; <i32> [#uses=1]
%B = call i32 @pure( i32 %X ) ; <i32> [#uses=1]
%C = sub i32 %A, %B ; <i32> [#uses=1]
ret i32 %C
}
define i32 @test2(i32 %X, i32* %P) {
%A = call i32 @pure( i32 %X ) ; <i32> [#uses=1]
store i32 %X, i32* %P ;; Does not invalidate 'pure' call.
%B = call i32 @pure( i32 %X ) ; <i32> [#uses=1]
%C = sub i32 %A, %B ; <i32> [#uses=1]
ret i32 %C
}

@ -1,44 +0,0 @@
; RUN: opt < %s -analyze -lda | FileCheck %s
;; x[5] = x[6] // with x being a pointer passed as argument
define void @f1(i32* nocapture %xptr) nounwind {
entry:
%x.ld.addr = getelementptr i32* %xptr, i64 6
%x.st.addr = getelementptr i32* %xptr, i64 5
br label %for.body
for.body:
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
%x = load i32* %x.ld.addr
store i32 %x, i32* %x.st.addr
; CHECK: 0,1: dep
%i.next = add i64 %i, 1
%exitcond = icmp eq i64 %i.next, 256
br i1 %exitcond, label %for.end, label %for.body
for.end:
ret void
}
;; x[5] = x[6] // with x being an array on the stack
define void @foo(...) nounwind {
entry:
%xptr = alloca [256 x i32], align 4
%x.ld.addr = getelementptr [256 x i32]* %xptr, i64 0, i64 6
%x.st.addr = getelementptr [256 x i32]* %xptr, i64 0, i64 5
br label %for.body
for.body:
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
%x = load i32* %x.ld.addr
store i32 %x, i32* %x.st.addr
; CHECK: 0,1: ind
%i.next = add i64 %i, 1
%exitcond = icmp eq i64 %i.next, 256
br i1 %exitcond, label %for.end, label %for.body
for.end:
ret void
}

@ -1,3 +0,0 @@
load_lib llvm.exp
RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]]

@ -1,110 +0,0 @@
; RUN: opt < %s -analyze -lda | FileCheck %s
@x = common global [256 x i32] zeroinitializer, align 4
@y = common global [256 x i32] zeroinitializer, align 4
;; for (i = 0; i < 256; i++)
;; x[i] = x[i] + y[i]
define void @f1(...) nounwind {
entry:
br label %for.body
for.body:
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
%y.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i
%x.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i
%x = load i32* %x.addr ; 0
%y = load i32* %y.addr ; 1
%r = add i32 %y, %x
store i32 %r, i32* %x.addr ; 2
; CHECK: 0,2: dep
; CHECK: 1,2: ind
%i.next = add i64 %i, 1
%exitcond = icmp eq i64 %i.next, 256
br i1 %exitcond, label %for.end, label %for.body
for.end:
ret void
}
;; for (i = 0; i < 256; i++)
;; x[i+1] = x[i] + y[i]
define void @f2(...) nounwind {
entry:
br label %for.body
for.body:
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
%y.ld.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i
%x.ld.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i
%i.next = add i64 %i, 1
%x.st.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i.next
%x = load i32* %x.ld.addr ; 0
%y = load i32* %y.ld.addr ; 1
%r = add i32 %y, %x
store i32 %r, i32* %x.st.addr ; 2
; CHECK: 0,2: dep
; CHECK: 1,2: ind
%exitcond = icmp eq i64 %i.next, 256
br i1 %exitcond, label %for.end, label %for.body
for.end:
ret void
}
;; for (i = 0; i < 10; i++)
;; x[i+20] = x[i] + y[i]
define void @f3(...) nounwind {
entry:
br label %for.body
for.body:
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
%y.ld.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i
%x.ld.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i
%i.20 = add i64 %i, 20
%x.st.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i.20
%x = load i32* %x.ld.addr ; 0
%y = load i32* %y.ld.addr ; 1
%r = add i32 %y, %x
store i32 %r, i32* %x.st.addr ; 2
; CHECK: 0,2: dep
; CHECK: 1,2: ind
%i.next = add i64 %i, 1
%exitcond = icmp eq i64 %i.next, 10
br i1 %exitcond, label %for.end, label %for.body
for.end:
ret void
}
;; for (i = 0; i < 10; i++)
;; x[10*i+1] = x[10*i] + y[i]
define void @f4(...) nounwind {
entry:
br label %for.body
for.body:
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
%i.10 = mul i64 %i, 10
%y.ld.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i.10
%x.ld.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i.10
%i.10.1 = add i64 %i.10, 1
%x.st.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i.10.1
%x = load i32* %x.ld.addr ; 0
%y = load i32* %y.ld.addr ; 1
%r = add i32 %y, %x
store i32 %r, i32* %x.st.addr ; 2
; CHECK: 0,2: dep
; CHECK: 1,2: ind
%i.next = add i64 %i, 1
%exitcond = icmp eq i64 %i.next, 10
br i1 %exitcond, label %for.end, label %for.body
for.end:
ret void
}

@ -1,118 +0,0 @@
; RUN: opt < %s -analyze -lda | FileCheck %s
@x = common global [256 x i32] zeroinitializer, align 4
@y = common global [256 x i32] zeroinitializer, align 4
;; for (i = 0; i < 256; i++)
;; x[i] = x[255 - i] + y[i]
define void @f1(...) nounwind {
entry:
br label %for.body
for.body:
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
%i.255 = sub i64 255, %i
%y.ld.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i
%x.ld.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i.255
%x.st.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i
%x = load i32* %x.ld.addr ; 0
%y = load i32* %y.ld.addr ; 1
%r = add i32 %y, %x
store i32 %r, i32* %x.st.addr ; 2
; CHECK: 0,2: dep
; CHECK: 1,2: ind
%i.next = add i64 %i, 1
%exitcond = icmp eq i64 %i.next, 256
br i1 %exitcond, label %for.end, label %for.body
for.end:
ret void
}
;; for (i = 0; i < 100; i++)
;; x[i] = x[255 - i] + y[i]
define void @f2(...) nounwind {
entry:
br label %for.body
for.body:
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
%i.255 = sub i64 255, %i
%y.ld.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i
%x.ld.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i.255
%x.st.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i
%x = load i32* %x.ld.addr ; 0
%y = load i32* %y.ld.addr ; 1
%r = add i32 %y, %x
store i32 %r, i32* %x.st.addr ; 2
; CHECK: 0,2: dep
; CHECK: 1,2: ind
%i.next = add i64 %i, 1
%exitcond = icmp eq i64 %i.next, 100
br i1 %exitcond, label %for.end, label %for.body
for.end:
ret void
}
;; // the first iteration (i=0) leads to an out-of-bounds access of x. as the
;; // result of this access is undefined, _any_ dependence result is safe.
;; for (i = 0; i < 256; i++)
;; x[i] = x[256 - i] + y[i]
define void @f3(...) nounwind {
entry:
br label %for.body
for.body:
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
%i.256 = sub i64 0, %i
%y.ld.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i
%x.ld.addr = getelementptr [256 x i32]* @x, i64 1, i64 %i.256
%x.st.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i
%x = load i32* %x.ld.addr ; 0
%y = load i32* %y.ld.addr ; 1
%r = add i32 %y, %x
store i32 %r, i32* %x.st.addr ; 2
; CHECK: 0,2: dep
; CHECK: 1,2:
%i.next = add i64 %i, 1
%exitcond = icmp eq i64 %i.next, 256
br i1 %exitcond, label %for.end, label %for.body
for.end:
ret void
}
;; // slightly contrived but valid IR for the following loop, where all
;; // accesses in all iterations are within bounds. while this example's first
;; // (ZIV-)subscript is (0, 1), accesses are dependent.
;; for (i = 1; i < 256; i++)
;; x[i] = x[256 - i] + y[i]
define void @f4(...) nounwind {
entry:
br label %for.body
for.body:
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
%i.1 = add i64 1, %i
%i.256 = sub i64 -1, %i
%y.ld.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i.1
%x.ld.addr = getelementptr [256 x i32]* @x, i64 1, i64 %i.256
%x.st.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i.1
%x = load i32* %x.ld.addr ; 0
%y = load i32* %y.ld.addr ; 1
%r = add i32 %y, %x
store i32 %r, i32* %x.st.addr ; 2
; CHECK: 0,2: dep
; CHECK: 1,2: ind
%i.next = add i64 %i, 1
%exitcond = icmp eq i64 %i.next, 256
br i1 %exitcond, label %for.end, label %for.body
for.end:
ret void
}

@ -1,56 +0,0 @@
; RUN: opt < %s -analyze -lda | FileCheck %s
@x = common global [256 x i32] zeroinitializer, align 4
@y = common global [256 x i32] zeroinitializer, align 4
;; for (i = 0; i < 256; i++)
;; x[i] = x[42] + y[i]
define void @f1(...) nounwind {
entry:
%x.ld.addr = getelementptr [256 x i32]* @x, i64 0, i64 42
br label %for.body
for.body:
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
%x.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i
%y.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i
%x = load i32* %x.ld.addr ; 0
%y = load i32* %y.addr ; 1
%r = add i32 %y, %x
store i32 %r, i32* %x.addr ; 2
; CHECK: 0,2: dep
; CHECK: 1,2: ind
%i.next = add i64 %i, 1
%exitcond = icmp eq i64 %i.next, 256
br i1 %exitcond, label %for.end, label %for.body
for.end:
ret void
}
;; for (i = 0; i < 250; i++)
;; x[i] = x[255] + y[i]
define void @f2(...) nounwind {
entry:
%x.ld.addr = getelementptr [256 x i32]* @x, i64 0, i64 255
br label %for.body
for.body:
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
%x.addr = getelementptr [256 x i32]* @x, i64 0, i64 %i
%y.addr = getelementptr [256 x i32]* @y, i64 0, i64 %i
%x = load i32* %x.ld.addr ; 0
%y = load i32* %y.addr ; 1
%r = add i32 %y, %x
store i32 %r, i32* %x.addr ; 2
; CHECK: 0,2: dep
; CHECK: 1,2: ind
%i.next = add i64 %i, 1
%exitcond = icmp eq i64 %i.next, 250
br i1 %exitcond, label %for.end, label %for.body
for.end:
ret void
}

@ -1,63 +0,0 @@
; RUN: opt < %s -analyze -lda | FileCheck %s
@x = common global [256 x i32] zeroinitializer, align 4
;; x[5] = x[6]
define void @f1(...) nounwind {
entry:
br label %for.body
for.body:
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
%x = load i32* getelementptr ([256 x i32]* @x, i32 0, i64 6)
store i32 %x, i32* getelementptr ([256 x i32]* @x, i32 0, i64 5)
; CHECK: 0,1: ind
%i.next = add i64 %i, 1
%exitcond = icmp eq i64 %i.next, 256
br i1 %exitcond, label %for.end, label %for.body
for.end:
ret void
}
;; x[c] = x[c+1] // with c being a loop-invariant constant
define void @f2(i64 %c0) nounwind {
entry:
%c1 = add i64 %c0, 1
%x.ld.addr = getelementptr [256 x i32]* @x, i64 0, i64 %c0
%x.st.addr = getelementptr [256 x i32]* @x, i64 0, i64 %c1
br label %for.body
for.body:
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
%x = load i32* %x.ld.addr
store i32 %x, i32* %x.st.addr
; CHECK: 0,1: ind
%i.next = add i64 %i, 1
%exitcond = icmp eq i64 %i.next, 256
br i1 %exitcond, label %for.end, label %for.body
for.end:
ret void
}
;; x[6] = x[6]
define void @f3(...) nounwind {
entry:
br label %for.body
for.body:
%i = phi i64 [ 0, %entry ], [ %i.next, %for.body ]
%x = load i32* getelementptr ([256 x i32]* @x, i32 0, i64 6)
store i32 %x, i32* getelementptr ([256 x i32]* @x, i32 0, i64 6)
; CHECK: 0,1: dep
%i.next = add i64 %i, 1
%exitcond = icmp eq i64 %i.next, 256
br i1 %exitcond, label %for.end, label %for.body
for.end:
ret void
}

@ -1,30 +0,0 @@
; This testcase was incorrectly computing that the loopentry.7 loop was
; not a child of the loopentry.6 loop.
;
; RUN: opt < %s -analyze -loops | \
; RUN: grep {^ Loop at depth 4 containing: %loopentry.7<header><latch><exiting>}
define void @getAndMoveToFrontDecode() {
br label %endif.2
endif.2: ; preds = %loopexit.5, %0
br i1 false, label %loopentry.5, label %UnifiedExitNode
loopentry.5: ; preds = %loopexit.6, %endif.2
br i1 false, label %loopentry.6, label %UnifiedExitNode
loopentry.6: ; preds = %loopentry.7, %loopentry.5
br i1 false, label %loopentry.7, label %loopexit.6
loopentry.7: ; preds = %loopentry.7, %loopentry.6
br i1 false, label %loopentry.7, label %loopentry.6
loopexit.6: ; preds = %loopentry.6
br i1 false, label %loopentry.5, label %loopexit.5
loopexit.5: ; preds = %loopexit.6
br i1 false, label %endif.2, label %UnifiedExitNode
UnifiedExitNode: ; preds = %loopexit.5, %loopentry.5, %endif.2
ret void
}

@ -1,3 +0,0 @@
load_lib llvm.exp
RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]]

@ -1,3 +0,0 @@
load_lib llvm.exp
RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]]

@ -1,86 +0,0 @@
; RUN: opt < %s -pointertracking -analyze | FileCheck %s
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
target triple = "x86_64-unknown-linux-gnu"
@.str = internal constant [5 x i8] c"1234\00" ; <[5 x i8]*> [#uses=1]
@test1p = global i8* getelementptr ([5 x i8]* @.str, i32 0, i32 0), align 8 ; <i8**> [#uses=1]
@test1a = global [5 x i8] c"1234\00", align 1 ; <[5 x i8]*> [#uses=1]
@test2a = global [5 x i32] [i32 1, i32 2, i32 3, i32 4, i32 5], align 4 ; <[5 x i32]*> [#uses=2]
@test2p = global i32* getelementptr ([5 x i32]* @test2a, i32 0, i32 0), align 8 ; <i32**> [#uses=1]
@test0p = common global i32* null, align 8 ; <i32**> [#uses=1]
@test0i = common global i32 0, align 4 ; <i32*> [#uses=1]
define i32 @foo0() nounwind {
entry:
%tmp = load i32** @test0p ; <i32*> [#uses=1]
%conv = bitcast i32* %tmp to i8* ; <i8*> [#uses=1]
%call = tail call i32 @bar(i8* %conv) nounwind ; <i32> [#uses=1]
%tmp1 = load i8** @test1p ; <i8*> [#uses=1]
%call2 = tail call i32 @bar(i8* %tmp1) nounwind ; <i32> [#uses=1]
%call3 = tail call i32 @bar(i8* getelementptr ([5 x i8]* @test1a, i32 0, i32 0)) nounwind ; <i32> [#uses=1]
%call5 = tail call i32 @bar(i8* bitcast ([5 x i32]* @test2a to i8*)) nounwind ; <i32> [#uses=1]
%tmp7 = load i32** @test2p ; <i32*> [#uses=1]
%conv8 = bitcast i32* %tmp7 to i8* ; <i8*> [#uses=1]
%call9 = tail call i32 @bar(i8* %conv8) nounwind ; <i32> [#uses=1]
%call11 = tail call i32 @bar(i8* bitcast (i32* @test0i to i8*)) nounwind ; <i32> [#uses=1]
%add = add i32 %call2, %call ; <i32> [#uses=1]
%add4 = add i32 %add, %call3 ; <i32> [#uses=1]
%add6 = add i32 %add4, %call5 ; <i32> [#uses=1]
%add10 = add i32 %add6, %call9 ; <i32> [#uses=1]
%add12 = add i32 %add10, %call11 ; <i32> [#uses=1]
ret i32 %add12
}
declare i32 @bar(i8*)
define i32 @foo1(i32 %n) nounwind {
entry:
; CHECK: 'foo1':
%test4a = alloca [10 x i8], align 1 ; <[10 x i8]*> [#uses=1]
; CHECK: %test4a =
; CHECK: ==> 1 elements, 10 bytes allocated
%test6a = alloca [10 x i32], align 4 ; <[10 x i32]*> [#uses=1]
; CHECK: %test6a =
; CHECK: ==> 1 elements, 40 bytes allocated
%vla = alloca i8, i32 %n, align 1 ; <i8*> [#uses=1]
; CHECK: %vla =
; CHECK: ==> %n elements, %n bytes allocated
%0 = shl i32 %n, 2 ; <i32> [#uses=1]
%vla7 = alloca i8, i32 %0, align 1 ; <i8*> [#uses=1]
; CHECK: %vla7 =
; CHECK: ==> (4 * %n) elements, (4 * %n) bytes allocated
%call = call i32 @bar(i8* %vla) nounwind ; <i32> [#uses=1]
%arraydecay = getelementptr [10 x i8]* %test4a, i64 0, i64 0 ; <i8*> [#uses=1]
%call10 = call i32 @bar(i8* %arraydecay) nounwind ; <i32> [#uses=1]
%call11 = call i32 @bar(i8* %vla7) nounwind ; <i32> [#uses=1]
%ptrconv14 = bitcast [10 x i32]* %test6a to i8* ; <i8*> [#uses=1]
%call15 = call i32 @bar(i8* %ptrconv14) nounwind ; <i32> [#uses=1]
%add = add i32 %call10, %call ; <i32> [#uses=1]
%add12 = add i32 %add, %call11 ; <i32> [#uses=1]
%add16 = add i32 %add12, %call15 ; <i32> [#uses=1]
ret i32 %add16
}
define i32 @foo2(i64 %n) nounwind {
entry:
%call = tail call i8* @malloc(i64 %n) ; <i8*> [#uses=1]
; CHECK: %call =
; CHECK: ==> %n elements, %n bytes allocated
%call2 = tail call i8* @calloc(i64 2, i64 4) nounwind ; <i8*> [#uses=1]
; CHECK: %call2 =
; CHECK: ==> 8 elements, 8 bytes allocated
%call4 = tail call i8* @realloc(i8* null, i64 16) nounwind ; <i8*> [#uses=1]
; CHECK: %call4 =
; CHECK: ==> 16 elements, 16 bytes allocated
%call6 = tail call i32 @bar(i8* %call) nounwind ; <i32> [#uses=1]
%call8 = tail call i32 @bar(i8* %call2) nounwind ; <i32> [#uses=1]
%call10 = tail call i32 @bar(i8* %call4) nounwind ; <i32> [#uses=1]
%add = add i32 %call8, %call6 ; <i32> [#uses=1]
%add11 = add i32 %add, %call10 ; <i32> [#uses=1]
ret i32 %add11
}
declare noalias i8* @malloc(i64) nounwind
declare noalias i8* @calloc(i64, i64) nounwind
declare noalias i8* @realloc(i8* nocapture, i64) nounwind

@ -1,97 +0,0 @@
; RUN: opt < %s -analyze -postdomfrontier \
; RUN: -disable-verify
; ModuleID = '2006-09-26-PostDominanceFrontier.bc'
target datalayout = "e-p:64:64"
target triple = "alphaev67-unknown-linux-gnu"
%struct.FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct.FILE*, i32, i32, i64, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i32, [44 x i8] }
%struct._IO_marker = type { %struct._IO_marker*, %struct.FILE*, i32 }
@TOP = external global i64* ; <i64**> [#uses=1]
@BOT = external global i64* ; <i64**> [#uses=1]
@str = external global [2 x i8] ; <[2 x i8]*> [#uses=0]
declare void @fopen()
define void @main(i8** %argv) {
entry:
%netSelect.i507 = alloca i64, align 8 ; <i64*> [#uses=0]
%topStart.i = alloca i64, align 8 ; <i64*> [#uses=0]
%topEnd.i = alloca i64, align 8 ; <i64*> [#uses=0]
%botStart.i = alloca i64, align 8 ; <i64*> [#uses=0]
%botEnd.i = alloca i64, align 8 ; <i64*> [#uses=0]
%c1.i154 = alloca i32, align 4 ; <i32*> [#uses=0]
%b1.i155 = alloca i32, align 4 ; <i32*> [#uses=0]
%t1.i156 = alloca i32, align 4 ; <i32*> [#uses=0]
%c1.i = alloca i32, align 4 ; <i32*> [#uses=0]
%b1.i = alloca i32, align 4 ; <i32*> [#uses=0]
%t1.i = alloca i32, align 4 ; <i32*> [#uses=0]
%netSelect.i5 = alloca i64, align 8 ; <i64*> [#uses=0]
%netSelect.i = alloca i64, align 8 ; <i64*> [#uses=0]
%tmp2.i = getelementptr i8** %argv, i32 1 ; <i8**> [#uses=1]
%tmp3.i4 = load i8** %tmp2.i ; <i8*> [#uses=0]
call void @fopen( )
br i1 false, label %DimensionChannel.exit, label %bb.backedge.i
bb.backedge.i: ; preds = %entry
ret void
DimensionChannel.exit: ; preds = %entry
%tmp13.i137 = malloc i64, i32 0 ; <i64*> [#uses=1]
%tmp610.i = malloc i64, i32 0 ; <i64*> [#uses=1]
br label %cond_true.i143
cond_true.i143: ; preds = %cond_true.i143, %DimensionChannel.exit
%tmp9.i140 = getelementptr i64* %tmp13.i137, i64 0 ; <i64*> [#uses=0]
%tmp12.i = getelementptr i64* %tmp610.i, i64 0 ; <i64*> [#uses=0]
br i1 false, label %bb18.i144, label %cond_true.i143
bb18.i144: ; preds = %cond_true.i143
call void @fopen( )
%tmp76.i105 = malloc i64, i32 0 ; <i64*> [#uses=3]
%tmp674.i = malloc i64, i32 0 ; <i64*> [#uses=2]
%tmp1072.i = malloc i64, i32 0 ; <i64*> [#uses=2]
%tmp1470.i = malloc i64, i32 0 ; <i64*> [#uses=1]
br label %cond_true.i114
cond_true.i114: ; preds = %cond_true.i114, %bb18.i144
%tmp17.i108 = getelementptr i64* %tmp76.i105, i64 0 ; <i64*> [#uses=0]
%tmp20.i = getelementptr i64* %tmp674.i, i64 0 ; <i64*> [#uses=0]
%tmp23.i111 = getelementptr i64* %tmp1470.i, i64 0 ; <i64*> [#uses=0]
br i1 false, label %cond_true40.i, label %cond_true.i114
cond_true40.i: ; preds = %cond_true40.i, %cond_true.i114
%tmp33.i115 = getelementptr i64* %tmp1072.i, i64 0 ; <i64*> [#uses=0]
br i1 false, label %bb142.i, label %cond_true40.i
cond_next54.i: ; preds = %cond_true76.i
%tmp57.i = getelementptr i64* %tmp55.i, i64 0 ; <i64*> [#uses=0]
br i1 false, label %bb64.i, label %bb69.i
bb64.i: ; preds = %cond_true76.i, %cond_next54.i
%tmp67.i117 = getelementptr i64* %tmp76.i105, i64 0 ; <i64*> [#uses=0]
br i1 false, label %bb114.i, label %cond_true111.i
bb69.i: ; preds = %cond_next54.i
br i1 false, label %bb79.i, label %cond_true76.i
cond_true76.i: ; preds = %bb142.i, %bb69.i
%tmp48.i = getelementptr i64* %tmp46.i, i64 0 ; <i64*> [#uses=0]
br i1 false, label %bb64.i, label %cond_next54.i
bb79.i: ; preds = %bb69.i
br i1 false, label %bb114.i, label %cond_true111.i
cond_true111.i: ; preds = %bb79.i, %bb64.i
%tmp84.i127 = getelementptr i64* %tmp46.i, i64 0 ; <i64*> [#uses=0]
ret void
bb114.i: ; preds = %bb142.i, %bb79.i, %bb64.i
%tmp117.i = getelementptr i64* %tmp76.i105, i64 0 ; <i64*> [#uses=0]
%tmp132.i131 = getelementptr i64* %tmp674.i, i64 0 ; <i64*> [#uses=0]
%tmp122.i = getelementptr i64* %tmp1072.i, i64 0 ; <i64*> [#uses=0]
ret void
bb142.i: ; preds = %cond_true40.i
%tmp46.i = load i64** @BOT ; <i64*> [#uses=2]
%tmp55.i = load i64** @TOP ; <i64*> [#uses=1]
br i1 false, label %bb114.i, label %cond_true76.i
}

@ -1,692 +0,0 @@
; RUN: opt < %s -postdomfrontier -disable-output
define void @SManager() {
entry:
br label %bb.outer
bb.outer: ; preds = %bb193, %entry
br label %bb.outer156
bb.loopexit: ; preds = %bb442
br label %bb.outer156
bb.outer156: ; preds = %bb.loopexit, %bb.outer
br label %bb
bb: ; preds = %bb.backedge, %bb.outer156
br i1 false, label %cond_true, label %bb.cond_next_crit_edge
bb.cond_next_crit_edge: ; preds = %bb
br label %cond_next
cond_true: ; preds = %bb
br label %cond_next
cond_next: ; preds = %cond_true, %bb.cond_next_crit_edge
br i1 false, label %cond_next.bb.backedge_crit_edge, label %cond_next107
cond_next.bb.backedge_crit_edge: ; preds = %cond_next
br label %bb.backedge
bb.backedge: ; preds = %cond_true112.bb.backedge_crit_edge, %cond_next.bb.backedge_crit_edge
br label %bb
cond_next107: ; preds = %cond_next
br i1 false, label %cond_true112, label %cond_next197
cond_true112: ; preds = %cond_next107
br i1 false, label %cond_true118, label %cond_true112.bb.backedge_crit_edge
cond_true112.bb.backedge_crit_edge: ; preds = %cond_true112
br label %bb.backedge
cond_true118: ; preds = %cond_true112
br i1 false, label %bb123.preheader, label %cond_true118.bb148_crit_edge
cond_true118.bb148_crit_edge: ; preds = %cond_true118
br label %bb148
bb123.preheader: ; preds = %cond_true118
br label %bb123
bb123: ; preds = %bb142.bb123_crit_edge, %bb123.preheader
br i1 false, label %bb123.bb142_crit_edge, label %cond_next.i57
bb123.bb142_crit_edge: ; preds = %bb123
br label %bb142
cond_next.i57: ; preds = %bb123
br i1 false, label %cond_true135, label %cond_next.i57.bb142_crit_edge
cond_next.i57.bb142_crit_edge: ; preds = %cond_next.i57
br label %bb142
cond_true135: ; preds = %cond_next.i57
br label %bb142
bb142: ; preds = %cond_true135, %cond_next.i57.bb142_crit_edge, %bb123.bb142_crit_edge
br i1 false, label %bb148.loopexit, label %bb142.bb123_crit_edge
bb142.bb123_crit_edge: ; preds = %bb142
br label %bb123
bb148.loopexit: ; preds = %bb142
br label %bb148
bb148: ; preds = %bb148.loopexit, %cond_true118.bb148_crit_edge
br i1 false, label %bb151.preheader, label %bb148.bb177_crit_edge
bb148.bb177_crit_edge: ; preds = %bb148
br label %bb177
bb151.preheader: ; preds = %bb148
br label %bb151
bb151: ; preds = %bb171.bb151_crit_edge, %bb151.preheader
br i1 false, label %bb151.bb171_crit_edge, label %cond_next.i49
bb151.bb171_crit_edge: ; preds = %bb151
br label %bb171
cond_next.i49: ; preds = %bb151
br i1 false, label %cond_true164, label %cond_next.i49.bb171_crit_edge
cond_next.i49.bb171_crit_edge: ; preds = %cond_next.i49
br label %bb171
cond_true164: ; preds = %cond_next.i49
br label %bb171
bb171: ; preds = %cond_true164, %cond_next.i49.bb171_crit_edge, %bb151.bb171_crit_edge
br i1 false, label %bb177.loopexit, label %bb171.bb151_crit_edge
bb171.bb151_crit_edge: ; preds = %bb171
br label %bb151
bb177.loopexit: ; preds = %bb171
br label %bb177
bb177: ; preds = %bb177.loopexit, %bb148.bb177_crit_edge
br i1 false, label %bb180.preheader, label %bb177.bb193_crit_edge
bb177.bb193_crit_edge: ; preds = %bb177
br label %bb193
bb180.preheader: ; preds = %bb177
br label %bb180
bb180: ; preds = %bb180.bb180_crit_edge, %bb180.preheader
br i1 false, label %bb193.loopexit, label %bb180.bb180_crit_edge
bb180.bb180_crit_edge: ; preds = %bb180
br label %bb180
bb193.loopexit: ; preds = %bb180
br label %bb193
bb193: ; preds = %bb193.loopexit, %bb177.bb193_crit_edge
br label %bb.outer
cond_next197: ; preds = %cond_next107
br i1 false, label %cond_next210, label %cond_true205
cond_true205: ; preds = %cond_next197
br i1 false, label %cond_true205.bb213_crit_edge, label %cond_true205.bb299_crit_edge
cond_true205.bb299_crit_edge: ; preds = %cond_true205
br label %bb299
cond_true205.bb213_crit_edge: ; preds = %cond_true205
br label %bb213
cond_next210: ; preds = %cond_next197
br label %bb293
bb213: ; preds = %bb293.bb213_crit_edge, %cond_true205.bb213_crit_edge
br i1 false, label %bb213.cond_next290_crit_edge, label %cond_true248
bb213.cond_next290_crit_edge: ; preds = %bb213
br label %cond_next290
cond_true248: ; preds = %bb213
br i1 false, label %cond_true248.cond_next290_crit_edge, label %cond_true255
cond_true248.cond_next290_crit_edge: ; preds = %cond_true248
br label %cond_next290
cond_true255: ; preds = %cond_true248
br i1 false, label %cond_true266, label %cond_true255.cond_next271_crit_edge
cond_true255.cond_next271_crit_edge: ; preds = %cond_true255
br label %cond_next271
cond_true266: ; preds = %cond_true255
br label %cond_next271
cond_next271: ; preds = %cond_true266, %cond_true255.cond_next271_crit_edge
br label %cond_next290
cond_next290: ; preds = %cond_next271, %cond_true248.cond_next290_crit_edge, %bb213.cond_next290_crit_edge
br label %bb293
bb293: ; preds = %cond_next290, %cond_next210
br i1 false, label %bb293.bb213_crit_edge, label %bb293.bb299_crit_edge
bb293.bb299_crit_edge: ; preds = %bb293
br label %bb299
bb293.bb213_crit_edge: ; preds = %bb293
br label %bb213
bb299: ; preds = %bb293.bb299_crit_edge, %cond_true205.bb299_crit_edge
br i1 false, label %bb302.preheader, label %bb299.bb390_crit_edge
bb299.bb390_crit_edge: ; preds = %bb299
br label %bb390
bb302.preheader: ; preds = %bb299
br label %bb302
bb302: ; preds = %bb384.bb302_crit_edge, %bb302.preheader
br i1 false, label %bb302.bb384_crit_edge, label %cond_true339
bb302.bb384_crit_edge: ; preds = %bb302
br label %bb384
cond_true339: ; preds = %bb302
br i1 false, label %cond_true339.bb384_crit_edge, label %cond_true346
cond_true339.bb384_crit_edge: ; preds = %cond_true339
br label %bb384
cond_true346: ; preds = %cond_true339
br i1 false, label %cond_true357, label %cond_true346.cond_next361_crit_edge
cond_true346.cond_next361_crit_edge: ; preds = %cond_true346
br label %cond_next361
cond_true357: ; preds = %cond_true346
br label %cond_next361
cond_next361: ; preds = %cond_true357, %cond_true346.cond_next361_crit_edge
br label %bb384
bb384: ; preds = %cond_next361, %cond_true339.bb384_crit_edge, %bb302.bb384_crit_edge
br i1 false, label %bb390.loopexit, label %bb384.bb302_crit_edge
bb384.bb302_crit_edge: ; preds = %bb384
br label %bb302
bb390.loopexit: ; preds = %bb384
br label %bb390
bb390: ; preds = %bb390.loopexit, %bb299.bb390_crit_edge
br i1 false, label %bb391.preheader, label %bb390.bb442.preheader_crit_edge
bb390.bb442.preheader_crit_edge: ; preds = %bb390
br label %bb442.preheader
bb391.preheader: ; preds = %bb390
br label %bb391
bb391: ; preds = %bb413.bb391_crit_edge, %bb391.preheader
br i1 false, label %bb391.bb413_crit_edge, label %cond_next404
bb391.bb413_crit_edge: ; preds = %bb391
br label %bb413
cond_next404: ; preds = %bb391
br i1 false, label %cond_next404.HWrite.exit_crit_edge, label %cond_next.i13
cond_next404.HWrite.exit_crit_edge: ; preds = %cond_next404
br label %HWrite.exit
cond_next.i13: ; preds = %cond_next404
br i1 false, label %cond_next.i13.cond_next13.i_crit_edge, label %cond_true12.i
cond_next.i13.cond_next13.i_crit_edge: ; preds = %cond_next.i13
br label %cond_next13.i
cond_true12.i: ; preds = %cond_next.i13
br label %cond_next13.i
cond_next13.i: ; preds = %cond_true12.i, %cond_next.i13.cond_next13.i_crit_edge
br i1 false, label %cond_next13.i.bb.i22_crit_edge, label %cond_next43.i
cond_next13.i.bb.i22_crit_edge: ; preds = %cond_next13.i
br label %bb.i22
cond_next43.i: ; preds = %cond_next13.i
br i1 false, label %cond_next43.i.bb.i22_crit_edge, label %bb60.i
cond_next43.i.bb.i22_crit_edge: ; preds = %cond_next43.i
br label %bb.i22
bb.i22: ; preds = %cond_next43.i.bb.i22_crit_edge, %cond_next13.i.bb.i22_crit_edge
br label %bb413
bb60.i: ; preds = %cond_next43.i
br i1 false, label %bb60.i.HWrite.exit_crit_edge, label %cond_true81.i
bb60.i.HWrite.exit_crit_edge: ; preds = %bb60.i
br label %HWrite.exit
cond_true81.i: ; preds = %bb60.i
br label %bb413
HWrite.exit: ; preds = %bb60.i.HWrite.exit_crit_edge, %cond_next404.HWrite.exit_crit_edge
br label %bb413
bb413: ; preds = %HWrite.exit, %cond_true81.i, %bb.i22, %bb391.bb413_crit_edge
br i1 false, label %bb442.preheader.loopexit, label %bb413.bb391_crit_edge
bb413.bb391_crit_edge: ; preds = %bb413
br label %bb391
bb442.preheader.loopexit: ; preds = %bb413
br label %bb442.preheader
bb442.preheader: ; preds = %bb442.preheader.loopexit, %bb390.bb442.preheader_crit_edge
br label %bb442.outer
bb420: ; preds = %bb442
br i1 false, label %bb439.loopexit, label %cond_next433
cond_next433: ; preds = %bb420
br i1 false, label %cond_next433.HRead.exit.loopexit_crit_edge, label %cond_next.i
cond_next433.HRead.exit.loopexit_crit_edge: ; preds = %cond_next433
br label %HRead.exit.loopexit
cond_next.i: ; preds = %cond_next433
br i1 false, label %cond_true9.i, label %cond_false223.i
cond_true9.i: ; preds = %cond_next.i
switch i32 0, label %cond_false.i [
i32 1, label %cond_true9.i.cond_true15.i_crit_edge
i32 5, label %cond_true9.i.cond_true15.i_crit_edge9
]
cond_true9.i.cond_true15.i_crit_edge9: ; preds = %cond_true9.i
br label %cond_true15.i
cond_true9.i.cond_true15.i_crit_edge: ; preds = %cond_true9.i
br label %cond_true15.i
cond_true15.i: ; preds = %cond_true9.i.cond_true15.i_crit_edge, %cond_true9.i.cond_true15.i_crit_edge9
br i1 false, label %cond_true15.i.cond_true44.i_crit_edge, label %cond_true15.i.cond_false49.i_crit_edge
cond_true15.i.cond_false49.i_crit_edge: ; preds = %cond_true15.i
br label %cond_false49.i
cond_true15.i.cond_true44.i_crit_edge: ; preds = %cond_true15.i
br label %cond_true44.i
cond_false.i: ; preds = %cond_true9.i
br i1 false, label %cond_false.i.cond_next39.i_crit_edge, label %cond_true30.i
cond_false.i.cond_next39.i_crit_edge: ; preds = %cond_false.i
br label %cond_next39.i
cond_true30.i: ; preds = %cond_false.i
br label %cond_next39.i
cond_next39.i: ; preds = %cond_true30.i, %cond_false.i.cond_next39.i_crit_edge
br i1 false, label %cond_next39.i.cond_true44.i_crit_edge, label %cond_next39.i.cond_false49.i_crit_edge
cond_next39.i.cond_false49.i_crit_edge: ; preds = %cond_next39.i
br label %cond_false49.i
cond_next39.i.cond_true44.i_crit_edge: ; preds = %cond_next39.i
br label %cond_true44.i
cond_true44.i: ; preds = %cond_next39.i.cond_true44.i_crit_edge, %cond_true15.i.cond_true44.i_crit_edge
br i1 false, label %cond_true44.i.cond_next70.i_crit_edge, label %cond_true44.i.cond_true61.i_crit_edge
cond_true44.i.cond_true61.i_crit_edge: ; preds = %cond_true44.i
br label %cond_true61.i
cond_true44.i.cond_next70.i_crit_edge: ; preds = %cond_true44.i
br label %cond_next70.i
cond_false49.i: ; preds = %cond_next39.i.cond_false49.i_crit_edge, %cond_true15.i.cond_false49.i_crit_edge
br i1 false, label %cond_false49.i.cond_next70.i_crit_edge, label %cond_false49.i.cond_true61.i_crit_edge
cond_false49.i.cond_true61.i_crit_edge: ; preds = %cond_false49.i
br label %cond_true61.i
cond_false49.i.cond_next70.i_crit_edge: ; preds = %cond_false49.i
br label %cond_next70.i
cond_true61.i: ; preds = %cond_false49.i.cond_true61.i_crit_edge, %cond_true44.i.cond_true61.i_crit_edge
br i1 false, label %cond_true61.i.cond_next70.i_crit_edge, label %cond_true67.i
cond_true61.i.cond_next70.i_crit_edge: ; preds = %cond_true61.i
br label %cond_next70.i
cond_true67.i: ; preds = %cond_true61.i
br label %cond_next70.i
cond_next70.i: ; preds = %cond_true67.i, %cond_true61.i.cond_next70.i_crit_edge, %cond_false49.i.cond_next70.i_crit_edge, %cond_true44.i.cond_next70.i_crit_edge
br i1 false, label %cond_true77.i, label %cond_next81.i
cond_true77.i: ; preds = %cond_next70.i
br label %bb442.outer.backedge
cond_next81.i: ; preds = %cond_next70.i
br i1 false, label %cond_true87.i, label %cond_false94.i
cond_true87.i: ; preds = %cond_next81.i
br i1 false, label %cond_true87.i.cond_true130.i_crit_edge, label %cond_true87.i.cond_next135.i_crit_edge
cond_true87.i.cond_next135.i_crit_edge: ; preds = %cond_true87.i
br label %cond_next135.i
cond_true87.i.cond_true130.i_crit_edge: ; preds = %cond_true87.i
br label %cond_true130.i
cond_false94.i: ; preds = %cond_next81.i
switch i32 0, label %cond_false94.i.cond_next125.i_crit_edge [
i32 1, label %cond_false94.i.cond_true100.i_crit_edge
i32 5, label %cond_false94.i.cond_true100.i_crit_edge10
]
cond_false94.i.cond_true100.i_crit_edge10: ; preds = %cond_false94.i
br label %cond_true100.i
cond_false94.i.cond_true100.i_crit_edge: ; preds = %cond_false94.i
br label %cond_true100.i
cond_false94.i.cond_next125.i_crit_edge: ; preds = %cond_false94.i
br label %cond_next125.i
cond_true100.i: ; preds = %cond_false94.i.cond_true100.i_crit_edge, %cond_false94.i.cond_true100.i_crit_edge10
br i1 false, label %cond_true107.i, label %cond_true100.i.cond_next109.i_crit_edge
cond_true100.i.cond_next109.i_crit_edge: ; preds = %cond_true100.i
br label %cond_next109.i
cond_true107.i: ; preds = %cond_true100.i
br label %cond_next109.i
cond_next109.i: ; preds = %cond_true107.i, %cond_true100.i.cond_next109.i_crit_edge
br i1 false, label %cond_next109.i.cond_next125.i_crit_edge, label %cond_true116.i
cond_next109.i.cond_next125.i_crit_edge: ; preds = %cond_next109.i
br label %cond_next125.i
cond_true116.i: ; preds = %cond_next109.i
br label %cond_next125.i
cond_next125.i: ; preds = %cond_true116.i, %cond_next109.i.cond_next125.i_crit_edge, %cond_false94.i.cond_next125.i_crit_edge
br i1 false, label %cond_next125.i.cond_true130.i_crit_edge, label %cond_next125.i.cond_next135.i_crit_edge
cond_next125.i.cond_next135.i_crit_edge: ; preds = %cond_next125.i
br label %cond_next135.i
cond_next125.i.cond_true130.i_crit_edge: ; preds = %cond_next125.i
br label %cond_true130.i
cond_true130.i: ; preds = %cond_next125.i.cond_true130.i_crit_edge, %cond_true87.i.cond_true130.i_crit_edge
br label %cond_next135.i
cond_next135.i: ; preds = %cond_true130.i, %cond_next125.i.cond_next135.i_crit_edge, %cond_true87.i.cond_next135.i_crit_edge
br i1 false, label %cond_true142.i, label %cond_next135.i.cond_next149.i_crit_edge
cond_next135.i.cond_next149.i_crit_edge: ; preds = %cond_next135.i
br label %cond_next149.i
cond_true142.i: ; preds = %cond_next135.i
br label %cond_next149.i
cond_next149.i: ; preds = %cond_true142.i, %cond_next135.i.cond_next149.i_crit_edge
br i1 false, label %cond_true156.i, label %cond_next149.i.cond_next163.i_crit_edge
cond_next149.i.cond_next163.i_crit_edge: ; preds = %cond_next149.i
br label %cond_next163.i
cond_true156.i: ; preds = %cond_next149.i
br label %cond_next163.i
cond_next163.i: ; preds = %cond_true156.i, %cond_next149.i.cond_next163.i_crit_edge
br i1 false, label %cond_true182.i, label %cond_next163.i.cond_next380.i_crit_edge
cond_next163.i.cond_next380.i_crit_edge: ; preds = %cond_next163.i
br label %cond_next380.i
cond_true182.i: ; preds = %cond_next163.i
br i1 false, label %cond_true182.i.cond_next380.i_crit_edge, label %cond_true196.i
cond_true182.i.cond_next380.i_crit_edge: ; preds = %cond_true182.i
br label %cond_next380.i
cond_true196.i: ; preds = %cond_true182.i
br i1 false, label %cond_true210.i, label %cond_true196.i.cond_next380.i_crit_edge
cond_true196.i.cond_next380.i_crit_edge: ; preds = %cond_true196.i
br label %cond_next380.i
cond_true210.i: ; preds = %cond_true196.i
br i1 false, label %cond_true216.i, label %cond_true210.i.cond_next380.i_crit_edge
cond_true210.i.cond_next380.i_crit_edge: ; preds = %cond_true210.i
br label %cond_next380.i
cond_true216.i: ; preds = %cond_true210.i
br label %cond_next380.i
cond_false223.i: ; preds = %cond_next.i
br i1 false, label %cond_true229.i, label %cond_false355.i
cond_true229.i: ; preds = %cond_false223.i
br i1 false, label %cond_true229.i.HRead.exit.loopexit_crit_edge, label %cond_next243.i
cond_true229.i.HRead.exit.loopexit_crit_edge: ; preds = %cond_true229.i
br label %HRead.exit.loopexit
cond_next243.i: ; preds = %cond_true229.i
br i1 false, label %cond_true248.i, label %cond_false255.i
cond_true248.i: ; preds = %cond_next243.i
br label %cond_next260.i
cond_false255.i: ; preds = %cond_next243.i
br label %cond_next260.i
cond_next260.i: ; preds = %cond_false255.i, %cond_true248.i
br i1 false, label %cond_true267.i, label %cond_next273.i
cond_true267.i: ; preds = %cond_next260.i
br label %bb442.backedge
bb442.backedge: ; preds = %bb.i, %cond_true267.i
br label %bb442
cond_next273.i: ; preds = %cond_next260.i
br i1 false, label %cond_true281.i, label %cond_next273.i.cond_next288.i_crit_edge
cond_next273.i.cond_next288.i_crit_edge: ; preds = %cond_next273.i
br label %cond_next288.i
cond_true281.i: ; preds = %cond_next273.i
br label %cond_next288.i
cond_next288.i: ; preds = %cond_true281.i, %cond_next273.i.cond_next288.i_crit_edge
br i1 false, label %cond_true295.i, label %cond_next288.i.cond_next302.i_crit_edge
cond_next288.i.cond_next302.i_crit_edge: ; preds = %cond_next288.i
br label %cond_next302.i
cond_true295.i: ; preds = %cond_next288.i
br label %cond_next302.i
cond_next302.i: ; preds = %cond_true295.i, %cond_next288.i.cond_next302.i_crit_edge
br i1 false, label %cond_next302.i.cond_next380.i_crit_edge, label %cond_true328.i
cond_next302.i.cond_next380.i_crit_edge: ; preds = %cond_next302.i
br label %cond_next380.i
cond_true328.i: ; preds = %cond_next302.i
br i1 false, label %cond_true343.i, label %cond_true328.i.cond_next380.i_crit_edge
cond_true328.i.cond_next380.i_crit_edge: ; preds = %cond_true328.i
br label %cond_next380.i
cond_true343.i: ; preds = %cond_true328.i
br i1 false, label %cond_true349.i, label %cond_true343.i.cond_next380.i_crit_edge
cond_true343.i.cond_next380.i_crit_edge: ; preds = %cond_true343.i
br label %cond_next380.i
cond_true349.i: ; preds = %cond_true343.i
br label %cond_next380.i
cond_false355.i: ; preds = %cond_false223.i
br i1 false, label %cond_false355.i.bb.i_crit_edge, label %cond_next363.i
cond_false355.i.bb.i_crit_edge: ; preds = %cond_false355.i
br label %bb.i
cond_next363.i: ; preds = %cond_false355.i
br i1 false, label %bb377.i, label %cond_next363.i.bb.i_crit_edge
cond_next363.i.bb.i_crit_edge: ; preds = %cond_next363.i
br label %bb.i
bb.i: ; preds = %cond_next363.i.bb.i_crit_edge, %cond_false355.i.bb.i_crit_edge
br label %bb442.backedge
bb377.i: ; preds = %cond_next363.i
br label %cond_next380.i
cond_next380.i: ; preds = %bb377.i, %cond_true349.i, %cond_true343.i.cond_next380.i_crit_edge, %cond_true328.i.cond_next380.i_crit_edge, %cond_next302.i.cond_next380.i_crit_edge, %cond_true216.i, %cond_true210.i.cond_next380.i_crit_edge, %cond_true196.i.cond_next380.i_crit_edge, %cond_true182.i.cond_next380.i_crit_edge, %cond_next163.i.cond_next380.i_crit_edge
br i1 false, label %cond_next380.i.HRead.exit_crit_edge, label %cond_true391.i
cond_next380.i.HRead.exit_crit_edge: ; preds = %cond_next380.i
br label %HRead.exit
cond_true391.i: ; preds = %cond_next380.i
br label %bb442.outer.backedge
bb442.outer.backedge: ; preds = %bb439, %cond_true391.i, %cond_true77.i
br label %bb442.outer
HRead.exit.loopexit: ; preds = %cond_true229.i.HRead.exit.loopexit_crit_edge, %cond_next433.HRead.exit.loopexit_crit_edge
br label %HRead.exit
HRead.exit: ; preds = %HRead.exit.loopexit, %cond_next380.i.HRead.exit_crit_edge
br label %bb439
bb439.loopexit: ; preds = %bb420
br label %bb439
bb439: ; preds = %bb439.loopexit, %HRead.exit
br label %bb442.outer.backedge
bb442.outer: ; preds = %bb442.outer.backedge, %bb442.preheader
br label %bb442
bb442: ; preds = %bb442.outer, %bb442.backedge
br i1 false, label %bb420, label %bb.loopexit
}
define void @Invalidate() {
entry:
br i1 false, label %cond_false, label %cond_true
cond_true: ; preds = %entry
br i1 false, label %cond_true40, label %cond_true.cond_next_crit_edge
cond_true.cond_next_crit_edge: ; preds = %cond_true
br label %cond_next
cond_true40: ; preds = %cond_true
br label %cond_next
cond_next: ; preds = %cond_true40, %cond_true.cond_next_crit_edge
br i1 false, label %cond_true68, label %cond_next.cond_next73_crit_edge
cond_next.cond_next73_crit_edge: ; preds = %cond_next
br label %cond_next73
cond_true68: ; preds = %cond_next
br label %cond_next73
cond_next73: ; preds = %cond_true68, %cond_next.cond_next73_crit_edge
br i1 false, label %cond_true91, label %cond_next73.cond_next96_crit_edge
cond_next73.cond_next96_crit_edge: ; preds = %cond_next73
br label %cond_next96
cond_true91: ; preds = %cond_next73
br label %cond_next96
cond_next96: ; preds = %cond_true91, %cond_next73.cond_next96_crit_edge
br i1 false, label %cond_next96.cond_next112_crit_edge, label %cond_true105
cond_next96.cond_next112_crit_edge: ; preds = %cond_next96
br label %cond_next112
cond_true105: ; preds = %cond_next96
br label %cond_next112
cond_next112: ; preds = %cond_true105, %cond_next96.cond_next112_crit_edge
br i1 false, label %cond_next112.cond_next127_crit_edge, label %cond_true119
cond_next112.cond_next127_crit_edge: ; preds = %cond_next112
br label %cond_next127
cond_true119: ; preds = %cond_next112
br label %cond_next127
cond_next127: ; preds = %cond_true119, %cond_next112.cond_next127_crit_edge
br i1 false, label %cond_next141, label %cond_true134
cond_true134: ; preds = %cond_next127
br i1 false, label %cond_true134.bb161_crit_edge, label %cond_true134.bb_crit_edge
cond_true134.bb_crit_edge: ; preds = %cond_true134
br label %bb
cond_true134.bb161_crit_edge: ; preds = %cond_true134
br label %bb161
cond_next141: ; preds = %cond_next127
br label %bb154
bb: ; preds = %bb154.bb_crit_edge, %cond_true134.bb_crit_edge
br label %bb154
bb154: ; preds = %bb, %cond_next141
br i1 false, label %bb154.bb161_crit_edge, label %bb154.bb_crit_edge
bb154.bb_crit_edge: ; preds = %bb154
br label %bb
bb154.bb161_crit_edge: ; preds = %bb154
br label %bb161
bb161: ; preds = %bb154.bb161_crit_edge, %cond_true134.bb161_crit_edge
br i1 false, label %bb161.cond_next201_crit_edge, label %cond_true198
bb161.cond_next201_crit_edge: ; preds = %bb161
br label %cond_next201
cond_true198: ; preds = %bb161
br label %cond_next201
cond_next201: ; preds = %cond_true198, %bb161.cond_next201_crit_edge
br i1 false, label %cond_next212, label %cond_true206
cond_true206: ; preds = %cond_next201
br label %UnifiedReturnBlock
cond_false: ; preds = %entry
br label %UnifiedReturnBlock
cond_next212: ; preds = %cond_next201
br label %UnifiedReturnBlock
UnifiedReturnBlock: ; preds = %cond_next212, %cond_false, %cond_true206
ret void
}

@ -1,28 +0,0 @@
; RUN: opt < %s -postdomfrontier -disable-output
define void @args_out_of_range() {
entry:
br label %bb
bb: ; preds = %bb, %entry
br label %bb
}
define void @args_out_of_range_3() {
entry:
br label %bb
bb: ; preds = %bb, %entry
br label %bb
}
define void @Feq() {
entry:
br i1 false, label %cond_true, label %cond_next
cond_true: ; preds = %entry
unreachable
cond_next: ; preds = %entry
unreachable
}

@ -1,3 +0,0 @@
load_lib llvm.exp
RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]]

@ -1,14 +0,0 @@
; RUN: opt < %s -postdomtree -analyze | grep entry
; PR932
define void @foo(i1 %x) {
entry:
br i1 %x, label %bb1, label %bb0
bb0: ; preds = %entry, bb0
br label %bb0
bb1: ; preds = %entry
br label %bb2
bb2: ; preds = %bb1
ret void
}

@ -1,15 +0,0 @@
; RUN: opt < %s -postdomtree -analyze | FileCheck %s
define internal void @f() {
entry:
br i1 undef, label %bb35, label %bb3.i
bb3.i:
br label %bb3.i
bb35.loopexit3:
br label %bb35
bb35:
ret void
}
; CHECK: [3] %entry

@ -1,19 +0,0 @@
; RUN: opt < %s -postdomtree -analyze | FileCheck %s
define internal void @f() {
entry:
br i1 undef, label %a, label %bb3.i
a:
br i1 undef, label %bb35, label %bb3.i
bb3.i:
br label %bb3.i
bb35.loopexit3:
br label %bb35
bb35:
ret void
}
; CHECK: [4] %entry

@ -1,147 +0,0 @@
; RUN: opt < %s -postdomtree -analyze | FileCheck %s
define internal void @f() {
entry:
br i1 undef, label %bb35, label %bb3.i
bb3.i:
br label %bb3.i
bb:
br label %bb35
bb.i:
br label %bb35
_float32_unpack.exit:
br label %bb35
bb.i5:
br label %bb35
_float32_unpack.exit8:
br label %bb35
bb32.preheader:
br label %bb35
bb3:
br label %bb35
bb3.split.us:
br label %bb35
bb.i4.us:
br label %bb35
bb7.i.us:
br label %bb35
bb.i4.us.backedge:
br label %bb35
bb1.i.us:
br label %bb35
bb6.i.us:
br label %bb35
bb4.i.us:
br label %bb35
bb8.i.us:
br label %bb35
bb3.i.loopexit.us:
br label %bb35
bb.nph21:
br label %bb35
bb4:
br label %bb35
bb5:
br label %bb35
bb14.preheader:
br label %bb35
bb.nph18:
br label %bb35
bb8.us.preheader:
br label %bb35
bb8.preheader:
br label %bb35
bb8.us:
br label %bb35
bb8:
br label %bb35
bb15.loopexit:
br label %bb35
bb15.loopexit2:
br label %bb35
bb15:
br label %bb35
bb16:
br label %bb35
bb17.loopexit.split:
br label %bb35
bb.nph14:
br label %bb35
bb19:
br label %bb35
bb20:
br label %bb35
bb29.preheader:
br label %bb35
bb.nph:
br label %bb35
bb23.us.preheader:
br label %bb35
bb23.preheader:
br label %bb35
bb23.us:
br label %bb35
bb23:
br label %bb35
bb30.loopexit:
br label %bb35
bb30.loopexit1:
br label %bb35
bb30:
br label %bb35
bb31:
br label %bb35
bb35.loopexit:
br label %bb35
bb35.loopexit3:
br label %bb35
bb35:
ret void
}
; CHECK: [3] %entry

@ -1,24 +0,0 @@
; RUN: opt < %s -postdomtree -analyze | FileCheck %s
define internal void @f() {
entry:
br i1 1, label %a, label %b
a:
br label %c
b:
br label %c
c:
br i1 undef, label %bb35, label %bb3.i
bb3.i:
br label %bb3.i
bb35.loopexit3:
br label %bb35
bb35:
ret void
}
; CHECK: [4] %entry

@ -1,4 +0,0 @@
load_lib llvm.exp
RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]]

@ -1,139 +0,0 @@
; Test the edge profiling instrumentation.
; RUN: opt < %s -insert-edge-profiling -S | FileCheck %s
; ModuleID = '<stdin>'
@.str = private constant [12 x i8] c"hello world\00", align 1 ; <[12 x i8]*> [#uses=1]
@.str1 = private constant [6 x i8] c"franz\00", align 1 ; <[6 x i8]*> [#uses=1]
@.str2 = private constant [9 x i8] c"argc > 2\00", align 1 ; <[9 x i8]*> [#uses=1]
@.str3 = private constant [9 x i8] c"argc = 1\00", align 1 ; <[9 x i8]*> [#uses=1]
@.str4 = private constant [6 x i8] c"fritz\00", align 1 ; <[6 x i8]*> [#uses=1]
@.str5 = private constant [10 x i8] c"argc <= 1\00", align 1 ; <[10 x i8]*> [#uses=1]
; CHECK:@EdgeProfCounters
; CHECK:[19 x i32]
; CHECK:zeroinitializer
define void @oneblock() nounwind {
entry:
; CHECK:entry:
; CHECK:%OldFuncCounter
; CHECK:load
; CHECK:getelementptr
; CHECK:@EdgeProfCounters
; CHECK:i32 0
; CHECK:i32 0
; CHECK:%NewFuncCounter
; CHECK:add
; CHECK:%OldFuncCounter
; CHECK:store
; CHECK:%NewFuncCounter
; CHECK:getelementptr
; CHECK:@EdgeProfCounters
%0 = call i32 @puts(i8* getelementptr inbounds ([12 x i8]* @.str, i64 0, i64 0)) nounwind ; <i32> [#uses=0]
ret void
}
declare i32 @puts(i8*)
define i32 @main(i32 %argc, i8** %argv) nounwind {
entry:
; CHECK:entry:
%argc_addr = alloca i32 ; <i32*> [#uses=4]
%argv_addr = alloca i8** ; <i8***> [#uses=1]
%retval = alloca i32 ; <i32*> [#uses=2]
%j = alloca i32 ; <i32*> [#uses=4]
%i = alloca i32 ; <i32*> [#uses=4]
%0 = alloca i32 ; <i32*> [#uses=2]
; CHECK:call
; CHECK:@llvm_start_edge_profiling
; CHECK:@EdgeProfCounters
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
store i32 %argc, i32* %argc_addr
store i8** %argv, i8*** %argv_addr
store i32 0, i32* %i, align 4
br label %bb10
bb: ; preds = %bb10
; CHECK:bb:
%1 = load i32* %argc_addr, align 4 ; <i32> [#uses=1]
%2 = icmp sgt i32 %1, 1 ; <i1> [#uses=1]
br i1 %2, label %bb1, label %bb8
bb1: ; preds = %bb
; CHECK:bb1:
store i32 0, i32* %j, align 4
br label %bb6
bb2: ; preds = %bb6
; CHECK:bb2:
%3 = call i32 @puts(i8* getelementptr inbounds ([6 x i8]* @.str1, i64 0, i64 0)) nounwind ; <i32> [#uses=0]
%4 = load i32* %argc_addr, align 4 ; <i32> [#uses=1]
%5 = icmp sgt i32 %4, 2 ; <i1> [#uses=1]
br i1 %5, label %bb3, label %bb4
bb3: ; preds = %bb2
; CHECK:bb3:
%6 = call i32 @puts(i8* getelementptr inbounds ([9 x i8]* @.str2, i64 0, i64 0)) nounwind ; <i32> [#uses=0]
br label %bb5
bb4: ; preds = %bb2
; CHECK:bb4:
%7 = call i32 @puts(i8* getelementptr inbounds ([9 x i8]* @.str3, i64 0, i64 0)) nounwind ; <i32> [#uses=0]
br label %bb11
bb5: ; preds = %bb3
; CHECK:bb5:
%8 = call i32 @puts(i8* getelementptr inbounds ([6 x i8]* @.str4, i64 0, i64 0)) nounwind ; <i32> [#uses=0]
%9 = load i32* %j, align 4 ; <i32> [#uses=1]
%10 = add nsw i32 %9, 1 ; <i32> [#uses=1]
store i32 %10, i32* %j, align 4
br label %bb6
bb6: ; preds = %bb5, %bb1
; CHECK:bb6:
%11 = load i32* %j, align 4 ; <i32> [#uses=1]
%12 = load i32* %argc_addr, align 4 ; <i32> [#uses=1]
%13 = icmp slt i32 %11, %12 ; <i1> [#uses=1]
br i1 %13, label %bb2, label %bb7
bb7: ; preds = %bb6
; CHECK:bb7:
br label %bb9
bb8: ; preds = %bb
; CHECK:bb8:
%14 = call i32 @puts(i8* getelementptr inbounds ([10 x i8]* @.str5, i64 0, i64 0)) nounwind ; <i32> [#uses=0]
br label %bb9
bb9: ; preds = %bb8, %bb7
; CHECK:bb9:
%15 = load i32* %i, align 4 ; <i32> [#uses=1]
%16 = add nsw i32 %15, 1 ; <i32> [#uses=1]
store i32 %16, i32* %i, align 4
br label %bb10
bb10: ; preds = %bb9, %entry
; CHECK:bb10:
%17 = load i32* %i, align 4 ; <i32> [#uses=1]
%18 = icmp ne i32 %17, 3 ; <i1> [#uses=1]
br i1 %18, label %bb, label %bb11
; CHECK:br
; CHECK:label %bb10.bb11_crit_edge
; CHECK:bb10.bb11_crit_edge:
; CHECK:br
; CHECK:label %bb11
bb11: ; preds = %bb10, %bb4
; CHECK:bb11:
call void @oneblock() nounwind
store i32 0, i32* %0, align 4
%19 = load i32* %0, align 4 ; <i32> [#uses=1]
store i32 %19, i32* %retval, align 4
br label %return
return: ; preds = %bb11
; CHECK:return:
%retval12 = load i32* %retval ; <i32> [#uses=1]
ret i32 %retval12
}

@ -1,212 +0,0 @@
; RUN: llvm-as %s -o %t1
; FIXME: The RUX parts of the test are disabled for now, they aren't working on
; llvm-gcc-x86_64-darwin10-selfhost.
; Test the edge optimal profiling instrumentation.
; RUN: opt %t1 -insert-optimal-edge-profiling -o %t2
; RUX: llvm-dis < %t2 | FileCheck --check-prefix=INST %s
; Test the creation, reading and displaying of profile
; RUX: rm -f llvmprof.out
; RUX: lli -load %llvmlibsdir/profile_rt%shlibext %t2
; RUX: lli -load %llvmlibsdir/profile_rt%shlibext %t2 1 2
; RUX: llvm-prof -print-all-code %t1 | FileCheck --check-prefix=PROF %s
; Test the loaded profile also with verifier.
; RUX opt %t1 -profile-loader -profile-verifier -o %t3
; Test profile estimator.
; RUN: opt %t1 -profile-estimator -profile-verifier -o %t3
; PROF: 1. 2/4 oneblock
; PROF: 2. 2/4 main
; PROF: 1. 15.7895% 12/76 main() - bb6
; PROF: 2. 11.8421% 9/76 main() - bb2
; PROF: 3. 11.8421% 9/76 main() - bb3
; PROF: 4. 11.8421% 9/76 main() - bb5
; PROF: 5. 10.5263% 8/76 main() - bb10
; PROF: 6. 7.89474% 6/76 main() - bb
; PROF: 7. 7.89474% 6/76 main() - bb9
; PROF: 8. 3.94737% 3/76 main() - bb1
; PROF: 9. 3.94737% 3/76 main() - bb7
; PROF: 10. 3.94737% 3/76 main() - bb8
; PROF: 11. 2.63158% 2/76 oneblock() - entry
; PROF: 12. 2.63158% 2/76 main() - entry
; PROF: 13. 2.63158% 2/76 main() - bb11
; PROF: 14. 2.63158% 2/76 main() - return
; ModuleID = '<stdin>'
@.str = private constant [12 x i8] c"hello world\00", align 1 ; <[12 x i8]*> [#uses=1]
@.str1 = private constant [6 x i8] c"franz\00", align 1 ; <[6 x i8]*> [#uses=1]
@.str2 = private constant [9 x i8] c"argc > 2\00", align 1 ; <[9 x i8]*> [#uses=1]
@.str3 = private constant [9 x i8] c"argc = 1\00", align 1 ; <[9 x i8]*> [#uses=1]
@.str4 = private constant [6 x i8] c"fritz\00", align 1 ; <[6 x i8]*> [#uses=1]
@.str5 = private constant [10 x i8] c"argc <= 1\00", align 1 ; <[10 x i8]*> [#uses=1]
; INST:@OptEdgeProfCounters
; INST:[21 x i32]
; INST:[i32 0,
; INST:i32 -1,
; INST:i32 -1,
; INST:i32 -1,
; INST:i32 -1,
; INST:i32 -1,
; INST:i32 -1,
; INST:i32 -1,
; INST:i32 -1,
; INST:i32 0,
; INST:i32 0,
; INST:i32 -1,
; INST:i32 -1,
; INST:i32 -1,
; INST:i32 0,
; INST:i32 0,
; INST:i32 -1,
; INST:i32 -1,
; INST:i32 0,
; INST:i32 -1,
; INST:i32 -1]
; PROF:;;; %oneblock called 2 times.
; PROF:;;;
define void @oneblock() nounwind {
entry:
; PROF:entry:
; PROF: ;;; Basic block executed 2 times.
%0 = call i32 @puts(i8* getelementptr inbounds ([12 x i8]* @.str, i64 0, i64 0)) nounwind ; <i32> [#uses=0]
ret void
}
declare i32 @puts(i8*)
; PROF:;;; %main called 2 times.
; PROF:;;;
define i32 @main(i32 %argc, i8** %argv) nounwind {
entry:
; PROF:entry:
; PROF: ;;; Basic block executed 2 times.
%argc_addr = alloca i32 ; <i32*> [#uses=4]
%argv_addr = alloca i8** ; <i8***> [#uses=1]
%retval = alloca i32 ; <i32*> [#uses=2]
%j = alloca i32 ; <i32*> [#uses=4]
%i = alloca i32 ; <i32*> [#uses=4]
%0 = alloca i32 ; <i32*> [#uses=2]
; INST:call
; INST:@llvm_start_opt_edge_profiling
; INST:@OptEdgeProfCounters
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
store i32 %argc, i32* %argc_addr
store i8** %argv, i8*** %argv_addr
store i32 0, i32* %i, align 4
br label %bb10
; PROF: ;;; Out-edge counts: [2.000000e+00 -> bb10]
bb: ; preds = %bb10
; PROF:bb:
; PROF: ;;; Basic block executed 6 times.
%1 = load i32* %argc_addr, align 4 ; <i32> [#uses=1]
%2 = icmp sgt i32 %1, 1 ; <i1> [#uses=1]
br i1 %2, label %bb1, label %bb8
; PROF: ;;; Out-edge counts: [3.000000e+00 -> bb1] [3.000000e+00 -> bb8]
bb1: ; preds = %bb
; PROF:bb1:
; PROF: ;;; Basic block executed 3 times.
store i32 0, i32* %j, align 4
br label %bb6
; PROF: ;;; Out-edge counts: [3.000000e+00 -> bb6]
bb2: ; preds = %bb6
; PROF:bb2:
; PROF: ;;; Basic block executed 9 times.
%3 = call i32 @puts(i8* getelementptr inbounds ([6 x i8]* @.str1, i64 0, i64 0)) nounwind ; <i32> [#uses=0]
%4 = load i32* %argc_addr, align 4 ; <i32> [#uses=1]
%5 = icmp sgt i32 %4, 2 ; <i1> [#uses=1]
br i1 %5, label %bb3, label %bb4
; PROF: ;;; Out-edge counts: [9.000000e+00 -> bb3]
bb3: ; preds = %bb2
; PROF:bb3:
; PROF: ;;; Basic block executed 9 times.
%6 = call i32 @puts(i8* getelementptr inbounds ([9 x i8]* @.str2, i64 0, i64 0)) nounwind ; <i32> [#uses=0]
br label %bb5
; PROF: ;;; Out-edge counts: [9.000000e+00 -> bb5]
bb4: ; preds = %bb2
; PROF:bb4:
; PROF: ;;; Never executed!
%7 = call i32 @puts(i8* getelementptr inbounds ([9 x i8]* @.str3, i64 0, i64 0)) nounwind ; <i32> [#uses=0]
br label %bb11
bb5: ; preds = %bb3
; PROF:bb5:
; PROF: ;;; Basic block executed 9 times.
%8 = call i32 @puts(i8* getelementptr inbounds ([6 x i8]* @.str4, i64 0, i64 0)) nounwind ; <i32> [#uses=0]
%9 = load i32* %j, align 4 ; <i32> [#uses=1]
%10 = add nsw i32 %9, 1 ; <i32> [#uses=1]
store i32 %10, i32* %j, align 4
br label %bb6
; PROF: ;;; Out-edge counts: [9.000000e+00 -> bb6]
bb6: ; preds = %bb5, %bb1
; PROF:bb6:
; PROF: ;;; Basic block executed 12 times.
%11 = load i32* %j, align 4 ; <i32> [#uses=1]
%12 = load i32* %argc_addr, align 4 ; <i32> [#uses=1]
%13 = icmp slt i32 %11, %12 ; <i1> [#uses=1]
br i1 %13, label %bb2, label %bb7
; PROF: ;;; Out-edge counts: [9.000000e+00 -> bb2] [3.000000e+00 -> bb7]
bb7: ; preds = %bb6
; PROF:bb7:
; PROF: ;;; Basic block executed 3 times.
br label %bb9
; PROF: ;;; Out-edge counts: [3.000000e+00 -> bb9]
bb8: ; preds = %bb
; PROF:bb8:
; PROF: ;;; Basic block executed 3 times.
%14 = call i32 @puts(i8* getelementptr inbounds ([10 x i8]* @.str5, i64 0, i64 0)) nounwind ; <i32> [#uses=0]
br label %bb9
; PROF: ;;; Out-edge counts: [3.000000e+00 -> bb9]
bb9: ; preds = %bb8, %bb7
; PROF:bb9:
; PROF: ;;; Basic block executed 6 times.
%15 = load i32* %i, align 4 ; <i32> [#uses=1]
%16 = add nsw i32 %15, 1 ; <i32> [#uses=1]
store i32 %16, i32* %i, align 4
br label %bb10
; PROF: ;;; Out-edge counts: [6.000000e+00 -> bb10]
bb10: ; preds = %bb9, %entry
; PROF:bb10:
; PROF: ;;; Basic block executed 8 times.
%17 = load i32* %i, align 4 ; <i32> [#uses=1]
%18 = icmp ne i32 %17, 3 ; <i1> [#uses=1]
br i1 %18, label %bb, label %bb11
; INST:br
; INST:label %bb10.bb11_crit_edge
; PROF: ;;; Out-edge counts: [6.000000e+00 -> bb] [2.000000e+00 -> bb11]
; INST:bb10.bb11_crit_edge:
; INST:br
; INST:label %bb11
bb11: ; preds = %bb10, %bb4
; PROF:bb11:
; PROF: ;;; Basic block executed 2 times.
call void @oneblock() nounwind
store i32 0, i32* %0, align 4
%19 = load i32* %0, align 4 ; <i32> [#uses=1]
store i32 %19, i32* %retval, align 4
br label %return
; PROF: ;;; Out-edge counts: [2.000000e+00 -> return]
return: ; preds = %bb11
; PROF:return:
; PROF: ;;; Basic block executed 2 times.
%retval12 = load i32* %retval ; <i32> [#uses=1]
ret i32 %retval12
}

@ -1,21 +0,0 @@
; RUN: opt < %s -analyze -scalar-evolution \
; RUN: -scalar-evolution-max-iterations=0 | grep {Loop %bb: backedge-taken count is 100}
; PR1533
@array = weak global [101 x i32] zeroinitializer, align 32 ; <[100 x i32]*> [#uses=1]
define void @loop(i32 %x) {
entry:
br label %bb
bb: ; preds = %bb, %entry
%i.01.0 = phi i32 [ 100, %entry ], [ %tmp4, %bb ] ; <i32> [#uses=2]
%tmp1 = getelementptr [101 x i32]* @array, i32 0, i32 %i.01.0 ; <i32*> [#uses=1]
store i32 %x, i32* %tmp1
%tmp4 = add i32 %i.01.0, -1 ; <i32> [#uses=2]
%tmp7 = icmp sgt i32 %tmp4, -1 ; <i1> [#uses=1]
br i1 %tmp7, label %bb, label %return
return: ; preds = %bb
ret void
}

@ -1,18 +0,0 @@
; RUN: opt < %s -indvars -adce -simplifycfg -S | grep "icmp s"
; PR1598
define i32 @f(i32 %a, i32 %b, i32 %x, i32 %y) {
entry:
%tmp3 = icmp eq i32 %a, %b ; <i1> [#uses=1]
br i1 %tmp3, label %return, label %bb
bb: ; preds = %bb, %entry
%x_addr.0 = phi i32 [ %tmp6, %bb ], [ %x, %entry ] ; <i32> [#uses=1]
%tmp6 = add i32 %x_addr.0, 1 ; <i32> [#uses=3]
%tmp9 = icmp slt i32 %tmp6, %y ; <i1> [#uses=1]
br i1 %tmp9, label %bb, label %return
return: ; preds = %bb, %entry
%x_addr.1 = phi i32 [ %x, %entry ], [ %tmp6, %bb ] ; <i32> [#uses=1]
ret i32 %x_addr.1
}

@ -1,30 +0,0 @@
; RUN: opt < %s -scalar-evolution -analyze | grep {Loop %bb: backedge-taken count is (-1 + (-1 \\* %x) + %y)}
; PR1597
define i32 @f(i32 %x, i32 %y) {
entry:
%tmp63 = icmp ult i32 %x, %y ; <i1> [#uses=1]
br i1 %tmp63, label %bb.preheader, label %bb8
bb.preheader: ; preds = %entry
br label %bb
bb: ; preds = %bb3, %bb.preheader
%x_addr.0 = phi i32 [ %tmp2, %bb3 ], [ %x, %bb.preheader ] ; <i32> [#uses=1]
%tmp2 = add i32 %x_addr.0, 1 ; <i32> [#uses=3]
br label %bb3
bb3: ; preds = %bb
%tmp6 = icmp ult i32 %tmp2, %y ; <i1> [#uses=1]
br i1 %tmp6, label %bb, label %bb8.loopexit
bb8.loopexit: ; preds = %bb3
br label %bb8
bb8: ; preds = %bb8.loopexit, %entry
%x_addr.1 = phi i32 [ %x, %entry ], [ %tmp2, %bb8.loopexit ] ; <i32> [#uses=1]
br label %return
return: ; preds = %bb8
ret i32 %x_addr.1
}

@ -1,22 +0,0 @@
; RUN: opt < %s -analyze -scalar-evolution \
; RUN: -scalar-evolution-max-iterations=0 | grep {backedge-taken count is 13}
; PR1706
define i32 @f() {
entry:
br label %bb5
bb: ; preds = %bb5
%tmp2 = shl i32 %j.0, 1 ; <i32> [#uses=1]
%tmp4 = add i32 %i.0, 268435456 ; <i32> [#uses=1]
br label %bb5
bb5: ; preds = %bb, %entry
%j.0 = phi i32 [ 1, %entry ], [ %tmp2, %bb ] ; <i32> [#uses=2]
%i.0 = phi i32 [ -1879048192, %entry ], [ %tmp4, %bb ] ; <i32> [#uses=2]
%tmp7 = icmp slt i32 %i.0, 1610612736 ; <i1> [#uses=1]
br i1 %tmp7, label %bb, label %return
return: ; preds = %bb5
ret i32 %j.0
}

@ -1,24 +0,0 @@
; RUN: opt < %s -indvars -S | grep printd | grep 1206807378
; PR1798
declare void @printd(i32)
define i32 @test() {
entry:
br label %bb6
bb: ; preds = %bb6
%tmp3 = add i32 %x.0, %i.0 ; <i32> [#uses=1]
%tmp5 = add i32 %i.0, 1 ; <i32> [#uses=1]
br label %bb6
bb6: ; preds = %bb, %entry
%i.0 = phi i32 [ 0, %entry ], [ %tmp5, %bb ] ; <i32> [#uses=3]
%x.0 = phi i32 [ 0, %entry ], [ %tmp3, %bb ] ; <i32> [#uses=3]
%tmp8 = icmp slt i32 %i.0, 123456789 ; <i1> [#uses=1]
br i1 %tmp8, label %bb, label %bb10
bb10: ; preds = %bb6
call void @printd(i32 %x.0)
ret i32 0
}

@ -1,21 +0,0 @@
; RUN: opt < %s -analyze -scalar-evolution | FileCheck %s
; PR1810
define void @fun() {
entry:
br label %header
header:
%i = phi i32 [ 1, %entry ], [ %i.next, %body ]
%cond = icmp eq i32 %i, 10
br i1 %cond, label %exit, label %body
body:
%a = mul i32 %i, 5
%b = or i32 %a, 1
%i.next = add i32 %i, 1
br label %header
exit:
ret void
}
; CHECK: --> %b

@ -1,15 +0,0 @@
; RUN: opt < %s -scalar-evolution -analyze | grep {Loop %header: backedge-taken count is (0 smax %n)}
define void @foo(i32 %n) {
entry:
br label %header
header:
%i = phi i32 [ 0, %entry ], [ %i.inc, %next ]
%cond = icmp sgt i32 %n, %i
br i1 %cond, label %next, label %return
next:
%i.inc = add i32 %i, 1
br label %header
return:
ret void
}

@ -1,16 +0,0 @@
; RUN: opt < %s -scalar-evolution -analyze | grep {Loop %loop: backedge-taken count is (100 + (-100 smax %n))}
; PR2002
define void @foo(i8 %n) {
entry:
br label %loop
loop:
%i = phi i8 [ -100, %entry ], [ %i.inc, %next ]
%cond = icmp slt i8 %i, %n
br i1 %cond, label %next, label %return
next:
%i.inc = add i8 %i, 1
br label %loop
return:
ret void
}

@ -1,17 +0,0 @@
; RUN: opt < %s -analyze -scalar-evolution | grep umax
; PR2003
define i32 @foo(i32 %n) {
entry:
br label %header
header:
%i = phi i32 [ 100, %entry ], [ %i.inc, %next ]
%cond = icmp ult i32 %i, %n
br i1 %cond, label %next, label %return
next:
%i.inc = add i32 %i, 1
br label %header
return:
ret i32 %i
}

@ -1,22 +0,0 @@
; RUN: opt < %s -analyze -scalar-evolution \
; RUN: -scalar-evolution-max-iterations=0 | grep {backedge-taken count is 61}
; PR2364
define i32 @func_6() nounwind {
entry:
br label %bb5
bb: ; preds = %bb5
%tmp2 = add i32 %i.0, 1 ; <i32> [#uses=1]
%tmp4 = add i8 %x.0, -4 ; <i8> [#uses=1]
br label %bb5
bb5: ; preds = %bb, %entry
%x.0 = phi i8 [ 0, %entry ], [ %tmp4, %bb ] ; <i8> [#uses=2]
%i.0 = phi i32 [ 0, %entry ], [ %tmp2, %bb ] ; <i32> [#uses=2]
%tmp7 = icmp eq i8 %x.0, 12 ; <i1> [#uses=1]
br i1 %tmp7, label %return, label %bb
return: ; preds = %bb5
ret i32 %i.0
}

@ -1,43 +0,0 @@
; RUN: opt < %s -analyze -scalar-evolution 2>/dev/null
; PR2433
define i32 @main1(i32 %argc, i8** %argv) nounwind {
entry:
br i1 false, label %bb10, label %bb23
bb10: ; preds = %bb10, %entry
%accum.03 = phi i64 [ %tmp14, %bb10 ], [ 0, %entry ] ; <i64> [#uses=1]
%i.02 = phi i32 [ %tmp16, %bb10 ], [ 0, %entry ] ; <i32> [#uses=1]
%d.1.01 = phi i64 [ %tmp5.i, %bb10 ], [ 0, %entry ] ; <i64> [#uses=1]
%tmp5.i = add i64 %d.1.01, 1 ; <i64> [#uses=2]
%tmp14 = add i64 %accum.03, %tmp5.i ; <i64> [#uses=2]
%tmp16 = add i32 %i.02, 1 ; <i32> [#uses=2]
%tmp20 = icmp slt i32 %tmp16, 0 ; <i1> [#uses=1]
br i1 %tmp20, label %bb10, label %bb23
bb23: ; preds = %bb10, %entry
%accum.0.lcssa = phi i64 [ 0, %entry ], [ %tmp14, %bb10 ] ; <i64> [#uses=0]
ret i32 0
}
define i32 @main2(i32 %argc, i8** %argv) {
entry:
%tmp8 = tail call i32 @atoi( i8* null ) nounwind readonly ; <i32> [#uses=1]
br i1 false, label %bb9, label %bb21
bb9: ; preds = %bb9, %entry
%accum.03 = phi i64 [ %tmp12, %bb9 ], [ 0, %entry ] ; <i64> [#uses=1]
%i.02 = phi i32 [ %tmp14, %bb9 ], [ 0, %entry ] ; <i32> [#uses=1]
%d.1.01 = phi i64 [ %tmp4.i, %bb9 ], [ 0, %entry ] ; <i64> [#uses=1]
%tmp4.i = add i64 %d.1.01, 1 ; <i64> [#uses=2]
%tmp12 = add i64 %accum.03, %tmp4.i ; <i64> [#uses=2]
%tmp14 = add i32 %i.02, 1 ; <i32> [#uses=2]
%tmp18 = icmp slt i32 %tmp14, %tmp8 ; <i1> [#uses=1]
br i1 %tmp18, label %bb9, label %bb21
bb21: ; preds = %bb9, %entry
%accum.0.lcssa = phi i64 [ 0, %entry ], [ %tmp12, %bb9 ] ; <i64> [#uses=0]
ret i32 0
}
declare i32 @atoi(i8*) nounwind readonly

@ -1,36 +0,0 @@
; RUN: opt < %s -analyze -scalar-evolution |& not grep smax
; PR2261
@lut = common global [256 x i8] zeroinitializer, align 32 ; <[256 x i8]*> [#uses=1]
define void @foo(i32 %count, i32* %srcptr, i32* %dstptr) nounwind {
entry:
icmp sgt i32 %count, 0 ; <i1>:0 [#uses=1]
br i1 %0, label %bb.nph, label %return
bb.nph: ; preds = %entry
br label %bb
bb: ; preds = %bb1, %bb.nph
%j.01 = phi i32 [ %8, %bb1 ], [ 0, %bb.nph ] ; <i32> [#uses=1]
load i32* %srcptr, align 4 ; <i32>:1 [#uses=2]
and i32 %1, 255 ; <i32>:2 [#uses=1]
and i32 %1, -256 ; <i32>:3 [#uses=1]
getelementptr [256 x i8]* @lut, i32 0, i32 %2 ; <i8*>:4 [#uses=1]
load i8* %4, align 1 ; <i8>:5 [#uses=1]
zext i8 %5 to i32 ; <i32>:6 [#uses=1]
or i32 %6, %3 ; <i32>:7 [#uses=1]
store i32 %7, i32* %dstptr, align 4
add i32 %j.01, 1 ; <i32>:8 [#uses=2]
br label %bb1
bb1: ; preds = %bb
icmp slt i32 %8, %count ; <i1>:9 [#uses=1]
br i1 %9, label %bb, label %bb1.return_crit_edge
bb1.return_crit_edge: ; preds = %bb1
br label %return
return: ; preds = %bb1.return_crit_edge, %entry
ret void
}

@ -1,30 +0,0 @@
; RUN: opt < %s -analyze -scalar-evolution |& not grep smax
; PR2070
define i32 @a(i32 %x) nounwind {
entry:
icmp sgt i32 %x, 1 ; <i1>:0 [#uses=1]
br i1 %0, label %bb.nph, label %bb2
bb.nph: ; preds = %entry
br label %bb
bb: ; preds = %bb1, %bb.nph
%z.02 = phi i32 [ %1, %bb1 ], [ 1, %bb.nph ] ; <i32> [#uses=1]
%i.01 = phi i32 [ %2, %bb1 ], [ 1, %bb.nph ] ; <i32> [#uses=2]
mul i32 %z.02, %i.01 ; <i32>:1 [#uses=2]
add i32 %i.01, 1 ; <i32>:2 [#uses=2]
br label %bb1
bb1: ; preds = %bb
icmp slt i32 %2, %x ; <i1>:3 [#uses=1]
br i1 %3, label %bb, label %bb1.bb2_crit_edge
bb1.bb2_crit_edge: ; preds = %bb1
%.lcssa = phi i32 [ %1, %bb1 ] ; <i32> [#uses=1]
br label %bb2
bb2: ; preds = %bb1.bb2_crit_edge, %entry
%z.0.lcssa = phi i32 [ %.lcssa, %bb1.bb2_crit_edge ], [ 1, %entry ] ; <i32> [#uses=1]
ret i32 %z.0.lcssa
}

@ -1,15 +0,0 @@
; RUN: opt < %s -analyze -scalar-evolution \
; RUN: -scalar-evolution-max-iterations=0 | grep Unpredictable
; PR2088
define void @fun() {
entry:
br label %loop
loop:
%i = phi i8 [ 0, %entry ], [ %i.next, %loop ]
%i.next = add i8 %i, 4
%cond = icmp ne i8 %i.next, 6
br i1 %cond, label %loop, label %exit
exit:
ret void
}

@ -1,15 +0,0 @@
; RUN: opt < %s -analyze -scalar-evolution \
; RUN: -scalar-evolution-max-iterations=0 | grep {backedge-taken count is 113}
; PR2088
define void @fun() {
entry:
br label %loop
loop:
%i = phi i8 [ 0, %entry ], [ %i.next, %loop ]
%i.next = add i8 %i, 18
%cond = icmp ne i8 %i.next, 4
br i1 %cond, label %loop, label %exit
exit:
ret void
}

@ -1,28 +0,0 @@
; RUN: opt < %s -analyze -scalar-evolution \
; RUN: -scalar-evolution-max-iterations=0 | FileCheck %s
; PR2607
define i32 @_Z1aj(i32 %j) nounwind {
entry:
icmp sgt i32 0, %j ; <i1>:0 [#uses=1]
br i1 %0, label %bb.preheader, label %return
bb.preheader: ; preds = %entry
br label %bb
bb: ; preds = %bb, %bb.preheader
%i.01 = phi i32 [ %1, %bb ], [ 0, %bb.preheader ] ; <i32> [#uses=1]
add i32 %i.01, -1 ; <i32>:1 [#uses=3]
icmp sgt i32 %1, %j ; <i1>:2 [#uses=1]
br i1 %2, label %bb, label %return.loopexit
return.loopexit: ; preds = %bb
br label %return
return: ; preds = %return.loopexit, %entry
%i.0.lcssa = phi i32 [ 0, %entry ], [ %1, %return.loopexit ] ; <i32> [#uses=1]
ret i32 %i.0.lcssa
}
; CHECK: backedge-taken count is (-1 + (-1 * %j))

@ -1,26 +0,0 @@
; RUN: opt < %s -analyze -scalar-evolution \
; RUN: -scalar-evolution-max-iterations=0 | FileCheck %s
; PR2607
define i32 @b(i32 %x, i32 %y) nounwind {
entry:
%cmp2 = icmp slt i32 %y, %x
%cond3 = select i1 %cmp2, i32 %y, i32 %x
%cmp54 = icmp slt i32 %cond3, -2147483632
br i1 %cmp54, label %forinc, label %afterfor
forinc: ; preds = %forinc, %entry
%j.01 = phi i32 [ %dec, %forinc ], [ -2147483632, %entry ]
%dec = add i32 %j.01, -1
%cmp = icmp slt i32 %y, %x
%cond = select i1 %cmp, i32 %y, i32 %x
%cmp5 = icmp sgt i32 %dec, %cond
br i1 %cmp5, label %forinc, label %afterfor
afterfor: ; preds = %forinc, %entry
%j.0.lcssa = phi i32 [ -2147483632, %entry ], [ %dec, %forinc ]
ret i32 %j.0.lcssa
}
; CHECK: backedge-taken count is (-2147483632 + ((-1 + (-1 * %x)) smax (-1 + (-1 * %y))))

@ -1,27 +0,0 @@
; RUN: opt < %s -analyze -scalar-evolution \
; RUN: -scalar-evolution-max-iterations=0 | FileCheck %s
; PR2621
define i32 @a() nounwind {
entry:
br label %bb1
bb:
trunc i32 %i.0 to i16
add i16 %0, %x16.0
add i32 %i.0, 1
br label %bb1
bb1:
%i.0 = phi i32 [ 0, %entry ], [ %2, %bb ]
%x16.0 = phi i16 [ 0, %entry ], [ %1, %bb ]
icmp ult i32 %i.0, 888888
br i1 %3, label %bb, label %bb2
bb2:
zext i16 %x16.0 to i32
ret i32 %4
}
; CHECK: Exits: 20028

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save