diff options
Diffstat (limited to 'llvm/test/Transforms/IndVarSimplify')
164 files changed, 0 insertions, 13435 deletions
diff --git a/llvm/test/Transforms/IndVarSimplify/2002-09-09-PointerIndVar.ll b/llvm/test/Transforms/IndVarSimplify/2002-09-09-PointerIndVar.ll deleted file mode 100644 index 92911ae078c..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2002-09-09-PointerIndVar.ll +++ /dev/null @@ -1,17 +0,0 @@ -; Induction variable pass is doing bad things with pointer induction vars, -; trying to do arithmetic on them directly. -; -; RUN: opt < %s -indvars -; -define void @test(i32 %A, i32 %S, i8* %S.upgrd.1) { -; <label>:0 - br label %Loop - -Loop: ; preds = %Loop, %0 - %PIV = phi i8* [ %S.upgrd.1, %0 ], [ %PIVNext.upgrd.3, %Loop ] ; <i8*> [#uses=1] - %PIV.upgrd.2 = ptrtoint i8* %PIV to i64 ; <i64> [#uses=1] - %PIVNext = add i64 %PIV.upgrd.2, 8 ; <i64> [#uses=1] - %PIVNext.upgrd.3 = inttoptr i64 %PIVNext to i8* ; <i8*> [#uses=1] - br label %Loop -} - diff --git a/llvm/test/Transforms/IndVarSimplify/2003-04-16-ExprAnalysis.ll b/llvm/test/Transforms/IndVarSimplify/2003-04-16-ExprAnalysis.ll deleted file mode 100644 index 38fa112bdb5..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2003-04-16-ExprAnalysis.ll +++ /dev/null @@ -1,17 +0,0 @@ -; This is a test case for the expression analysis code, not really indvars. -; It was assuming any constant of int type was a ConstantInteger. -; -; RUN: opt < %s -indvars - -@X = global i32 7 ; <i32*> [#uses=1] - -define void @test(i32 %A) { -; <label>:0 - br label %Loop - -Loop: ; preds = %Loop, %0 - %IV = phi i32 [ %A, %0 ], [ %IVNext, %Loop ] ; <i32> [#uses=1] - %IVNext = add i32 %IV, ptrtoint (i32* @X to i32) ; <i32> [#uses=1] - br label %Loop -} - diff --git a/llvm/test/Transforms/IndVarSimplify/2003-09-23-NotAtTop.ll b/llvm/test/Transforms/IndVarSimplify/2003-09-23-NotAtTop.ll deleted file mode 100644 index e3de75e36fd..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2003-09-23-NotAtTop.ll +++ /dev/null @@ -1,20 +0,0 @@ -; RUN: opt -S -indvars < %s | FileCheck %s - -; The indvar simplification code should ensure that the first PHI in the block -; is the canonical one! - -define i32 @test() { -; <label>:0 - br label %Loop - -Loop: ; preds = %Loop, %0 -; CHECK: Loop: -; CHECK-NEXT: Canonical - %NonIndvar = phi i32 [ 200, %0 ], [ %NonIndvarNext, %Loop ] ; <i32> [#uses=1] - %Canonical = phi i32 [ 0, %0 ], [ %CanonicalNext, %Loop ] ; <i32> [#uses=2] - store i32 %Canonical, i32* null - %NonIndvarNext = sdiv i32 %NonIndvar, 2 ; <i32> [#uses=1] - %CanonicalNext = add i32 %Canonical, 1 ; <i32> [#uses=1] - br label %Loop -} - diff --git a/llvm/test/Transforms/IndVarSimplify/2003-12-10-RemoveInstrCrash.ll b/llvm/test/Transforms/IndVarSimplify/2003-12-10-RemoveInstrCrash.ll deleted file mode 100644 index 75363314750..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2003-12-10-RemoveInstrCrash.ll +++ /dev/null @@ -1,18 +0,0 @@ -; RUN: opt < %s -indvars -disable-output - -define void @test() { -entry: - %inc.2 = add i32 1, 1 ; <i32> [#uses=1] - br i1 false, label %no_exit, label %loopexit - -no_exit: ; preds = %no_exit, %entry - %j.0.pn = phi i32 [ %inc.3, %no_exit ], [ %inc.2, %entry ] ; <i32> [#uses=1] - %k.0.pn = phi i32 [ %inc.4, %no_exit ], [ 1, %entry ] ; <i32> [#uses=1] - %inc.3 = add i32 %j.0.pn, 1 ; <i32> [#uses=1] - %inc.4 = add i32 %k.0.pn, 1 ; <i32> [#uses=1] - br i1 undef, label %no_exit, label %loopexit - -loopexit: ; preds = %no_exit, %entry - ret void -} - diff --git a/llvm/test/Transforms/IndVarSimplify/2003-12-15-Crash.ll b/llvm/test/Transforms/IndVarSimplify/2003-12-15-Crash.ll deleted file mode 100644 index 662828c749d..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2003-12-15-Crash.ll +++ /dev/null @@ -1,24 +0,0 @@ -; RUN: opt < %s -indvars -disable-output -define void @_ZN17CoinFactorization7cleanupEv() { -entry: - br i1 false, label %loopexit.14, label %cond_continue.3 - -cond_continue.3: ; preds = %entry - ret void - -loopexit.14: ; preds = %entry - %tmp.738 = sub i32 0, 0 ; <i32> [#uses=1] - br i1 undef, label %no_exit.15.preheader, label %loopexit.15 - -no_exit.15.preheader: ; preds = %loopexit.14 - br label %no_exit.15 - -no_exit.15: ; preds = %no_exit.15, %no_exit.15.preheader - %highC.0 = phi i32 [ %tmp.738, %no_exit.15.preheader ], [ %dec.0, %no_exit.15 ] ; <i32> [#uses=1] - %dec.0 = add i32 %highC.0, -1 ; <i32> [#uses=1] - br i1 undef, label %no_exit.15, label %loopexit.15 - -loopexit.15: ; preds = %no_exit.15, %loopexit.14 - ret void -} - diff --git a/llvm/test/Transforms/IndVarSimplify/2004-03-10-PHIInsertionBug.ll b/llvm/test/Transforms/IndVarSimplify/2004-03-10-PHIInsertionBug.ll deleted file mode 100644 index c49819e27af..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2004-03-10-PHIInsertionBug.ll +++ /dev/null @@ -1,26 +0,0 @@ -; RUN: opt < %s -indvars -disable-output - -define void @test() { - br label %endif.0.i - -endif.0.i: ; preds = %0 - br i1 false, label %then.3.i, label %endif.3.i - -then.3.i: ; preds = %endif.0.i - br label %endif.3.i - -endif.3.i: ; preds = %then.3.i, %endif.0.i - %inxm.0.i = phi i32 [ 8, %then.3.i ], [ 0, %endif.0.i ] ; <i32> [#uses=1] - %doinner.1.i = phi i32 [ 0, %then.3.i ], [ 0, %endif.0.i ] ; <i32> [#uses=0] - br label %loopentry.2.i - -loopentry.2.i: ; preds = %no_exit.2.i, %endif.3.i - %inxk.0.i = phi i32 [ %tmp.210.i, %no_exit.2.i ], [ 0, %endif.3.i ] ; <i32> [#uses=1] - br label %no_exit.2.i - -no_exit.2.i: ; preds = %loopentry.2.i - %tmp.210.i = sub i32 %inxk.0.i, %inxm.0.i ; <i32> [#uses=2] - %tmp.213.i = add i32 %tmp.210.i, 0 ; <i32> [#uses=0] - br label %loopentry.2.i -} - diff --git a/llvm/test/Transforms/IndVarSimplify/2004-04-05-InvokeCastCrash.ll b/llvm/test/Transforms/IndVarSimplify/2004-04-05-InvokeCastCrash.ll deleted file mode 100644 index 06eec7dfe28..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2004-04-05-InvokeCastCrash.ll +++ /dev/null @@ -1,291 +0,0 @@ -; RUN: opt < %s -indvars -disable-output -; ModuleID = '2004-04-05-InvokeCastCrash.ll' - %struct.__false_type = type { i8 } - %"struct.__gnu_cxx::_Hashtable_node<const llvm::Constant*>" = type { %"struct.__gnu_cxx::_Hashtable_node<const llvm::Constant*>"*, %"struct.llvm::Constant"* } - %"struct.__gnu_cxx::_Hashtable_node<std::pair<const llvm::Value* const, int> >" = type { %"struct.__gnu_cxx::_Hashtable_node<std::pair<const llvm::Value* const, int> >"*, %"struct.std::pair<const llvm::Value* const,int>" } - %"struct.__gnu_cxx::hash_map<const llvm::Value*,int,__gnu_cxx::hash<const llvm::Value*>,std::equal_to<const llvm::Value*>,std::allocator<int> >" = type { %"struct.__gnu_cxx::hashtable<std::pair<const llvm::Value* const, int>,const llvm::Value*,__gnu_cxx::hash<const llvm::Value*>,std::_Select1st<std::pair<const llvm::Value* const, int> >,std::equal_to<const llvm::Value*>,std::allocator<int> >" } - %"struct.__gnu_cxx::hash_set<const llvm::Constant*,__gnu_cxx::hash<const llvm::Constant*>,std::equal_to<const llvm::Constant*>,std::allocator<const llvm::Constant*> >" = type { %"struct.__gnu_cxx::hashtable<const llvm::Constant*,const llvm::Constant*,__gnu_cxx::hash<const llvm::Constant*>,std::_Identity<const llvm::Constant*>,std::equal_to<const llvm::Constant*>,std::allocator<const llvm::Constant*> >" } - %"struct.__gnu_cxx::hashtable<const llvm::Constant*,const llvm::Constant*,__gnu_cxx::hash<const llvm::Constant*>,std::_Identity<const llvm::Constant*>,std::equal_to<const llvm::Constant*>,std::allocator<const llvm::Constant*> >" = type { %struct.__false_type, %struct.__false_type, %struct.__false_type, %struct.__false_type, %"struct.std::vector<__gnu_cxx::_Hashtable_node<const llvm::Constant*>*,std::allocator<const llvm::Constant*> >", i32 } - %"struct.__gnu_cxx::hashtable<std::pair<const llvm::Value* const, int>,const llvm::Value*,__gnu_cxx::hash<const llvm::Value*>,std::_Select1st<std::pair<const llvm::Value* const, int> >,std::equal_to<const llvm::Value*>,std::allocator<int> >" = type { %struct.__false_type, %struct.__false_type, %struct.__false_type, %struct.__false_type, %"struct.std::vector<__gnu_cxx::_Hashtable_node<std::pair<const llvm::Value* const, int> >*,std::allocator<int> >", i32 } - %"struct.llvm::AbstractTypeUser" = type { i32 (...)** } - %"struct.llvm::Annotable" = type { i32 (...)**, %"struct.llvm::Annotation"* } - %"struct.llvm::Annotation" = type { i32 (...)**, %"struct.llvm::AnnotationID", %"struct.llvm::Annotation"* } - %"struct.llvm::AnnotationID" = type { i32 } - %"struct.llvm::Argument" = type { %"struct.llvm::Value", %"struct.llvm::Function"*, %"struct.llvm::Argument"*, %"struct.llvm::Argument"* } - %"struct.llvm::BasicBlock" = type { %"struct.llvm::Value", %"struct.llvm::iplist<llvm::Instruction,llvm::ilist_traits<llvm::Instruction> >", %"struct.llvm::BasicBlock"*, %"struct.llvm::BasicBlock"* } - %"struct.llvm::Constant" = type opaque - %"struct.llvm::DerivedType" = type { %"struct.llvm::Type", %"struct.llvm::AbstractTypeUser", %"struct.std::vector<llvm::AbstractTypeUser*,std::allocator<llvm::AbstractTypeUser*> >" } - %"struct.llvm::Function" = type { %"struct.llvm::GlobalValue", %"struct.llvm::Annotable", %"struct.llvm::iplist<llvm::BasicBlock,llvm::ilist_traits<llvm::BasicBlock> >", %"struct.llvm::iplist<llvm::Argument,llvm::ilist_traits<llvm::Argument> >", %"struct.llvm::SymbolTable"*, %"struct.llvm::Function"*, %"struct.llvm::Function"* } - %"struct.llvm::FunctionPass" = type { %"struct.llvm::Pass" } - %"struct.llvm::FunctionType" = type { %"struct.llvm::DerivedType", i1 } - %"struct.llvm::GlobalValue" = type { %"struct.llvm::User", i32, %"struct.llvm::Module"* } - %"struct.llvm::Instruction" = type { %"struct.llvm::User", %"struct.llvm::Annotable", %"struct.llvm::BasicBlock"*, %"struct.llvm::Instruction"*, %"struct.llvm::Instruction"*, i32 } - %"struct.llvm::IntrinsicLowering" = type opaque - %"struct.llvm::MachineBasicBlock" = type { %"struct.llvm::ilist<llvm::MachineInstr>", %"struct.llvm::MachineBasicBlock"*, %"struct.llvm::MachineBasicBlock"*, %"struct.llvm::BasicBlock"* } - %"struct.llvm::MachineConstantPool" = type opaque - %"struct.llvm::MachineFrameInfo" = type opaque - %"struct.llvm::MachineFunction" = type { %"struct.llvm::Annotation", %"struct.llvm::Function"*, %"struct.llvm::TargetMachine"*, %"struct.llvm::iplist<llvm::MachineBasicBlock,llvm::ilist_traits<llvm::MachineBasicBlock> >", %"struct.llvm::SSARegMap"*, %"struct.llvm::MachineFunctionInfo"*, %"struct.llvm::MachineFrameInfo"*, %"struct.llvm::MachineConstantPool"* } - %"struct.llvm::MachineFunctionInfo" = type { %"struct.__gnu_cxx::hash_set<const llvm::Constant*,__gnu_cxx::hash<const llvm::Constant*>,std::equal_to<const llvm::Constant*>,std::allocator<const llvm::Constant*> >", %"struct.__gnu_cxx::hash_map<const llvm::Value*,int,__gnu_cxx::hash<const llvm::Value*>,std::equal_to<const llvm::Value*>,std::allocator<int> >", i32, i32, i32, i32, i32, i32, i32, i1, i1, i1, %"struct.llvm::MachineFunction"* } - %"struct.llvm::MachineFunctionPass" = type { %"struct.llvm::FunctionPass" } - %"struct.llvm::MachineInstr" = type { i16, i8, %"struct.std::vector<llvm::MachineOperand,std::allocator<llvm::MachineOperand> >", %"struct.llvm::MachineInstr"*, %"struct.llvm::MachineInstr"*, %"struct.llvm::MachineBasicBlock"* } - %"struct.llvm::MachineInstrBuilder" = type { %"struct.llvm::MachineInstr"* } - %"struct.llvm::MachineOperand" = type { %"union.llvm::MachineOperand::._65", i32, i32 } - %"struct.llvm::Module" = type opaque - %"struct.llvm::PATypeHandle" = type { %"struct.llvm::Type"*, %"struct.llvm::AbstractTypeUser"* } - %"struct.llvm::PATypeHolder" = type { %"struct.llvm::Type"* } - %"struct.llvm::Pass" = type { i32 (...)**, %"struct.llvm::AbstractTypeUser"*, %"struct.llvm::PassInfo"*, %"struct.std::vector<std::pair<const llvm::PassInfo*, llvm::Pass*>,std::allocator<std::pair<const llvm::PassInfo*, llvm::Pass*> > >" } - %"struct.llvm::PassInfo" = type { i8*, i8*, %"struct.std::type_info"*, i8, %"struct.std::vector<const llvm::PassInfo*,std::allocator<const llvm::PassInfo*> >", %"struct.llvm::Pass"* ()*, %"struct.llvm::Pass"* (%"struct.llvm::TargetMachine"*)* } - %"struct.llvm::SSARegMap" = type opaque - %"struct.llvm::SymbolTable" = type opaque - %"struct.llvm::SymbolTableListTraits<llvm::Argument,llvm::Function,llvm::Function,llvm::ilist_traits<llvm::Argument> >" = type { %"struct.llvm::Function"*, %"struct.llvm::Function"* } - %"struct.llvm::SymbolTableListTraits<llvm::Instruction,llvm::BasicBlock,llvm::Function,llvm::ilist_traits<llvm::Instruction> >" = type { %"struct.llvm::Function"*, %"struct.llvm::BasicBlock"* } - %"struct.llvm::DataLayout" = type { %"struct.llvm::FunctionPass", i1, i8, i8, i8, i8, i8, i8, i8, i8 } - %"struct.llvm::TargetFrameInfo" = type { i32 (...)**, i32, i32, i32 } - %"struct.llvm::TargetInstrDescriptor" = type { i8*, i32, i32, i32, i1, i32, i32, i32, i32, i32, i32*, i32* } - %"struct.llvm::TargetInstrInfo" = type { i32 (...)**, %"struct.llvm::TargetInstrDescriptor"*, i32, i32 } - %"struct.llvm::TargetMachine" = type { i32 (...)**, %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >", %"struct.llvm::DataLayout", %"struct.llvm::IntrinsicLowering"* } - %"struct.llvm::TargetRegClassInfo" = type { i32 (...)**, i32, i32, i32 } - %"struct.llvm::TargetRegInfo" = type { i32 (...)**, %"struct.std::vector<const llvm::TargetRegClassInfo*,std::allocator<const llvm::TargetRegClassInfo*> >", %"struct.llvm::TargetMachine"* } - %"struct.llvm::Type" = type { %"struct.llvm::Value", i32, i32, i1, i32, %"struct.llvm::Type"*, %"struct.std::vector<llvm::PATypeHandle,std::allocator<llvm::PATypeHandle> >" } - %"struct.llvm::Use" = type { %"struct.llvm::Value"*, %"struct.llvm::User"*, %"struct.llvm::Use"*, %"struct.llvm::Use"* } - %"struct.llvm::User" = type { %"struct.llvm::Value", %"struct.std::vector<llvm::Use,std::allocator<llvm::Use> >" } - %"struct.llvm::Value" = type { i32 (...)**, %"struct.llvm::iplist<llvm::Use,llvm::ilist_traits<llvm::Use> >", %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >", %"struct.llvm::PATypeHolder", i32 } - %"struct.llvm::_GLOBAL__N_::InsertPrologEpilogCode" = type { %"struct.llvm::MachineFunctionPass" } - %"struct.llvm::ilist<llvm::MachineInstr>" = type { %"struct.llvm::iplist<llvm::MachineInstr,llvm::ilist_traits<llvm::MachineInstr> >" } - %"struct.llvm::ilist_iterator<const llvm::MachineBasicBlock>" = type { %"struct.llvm::MachineBasicBlock"* } - %"struct.llvm::ilist_traits<llvm::Argument>" = type { %"struct.llvm::SymbolTableListTraits<llvm::Argument,llvm::Function,llvm::Function,llvm::ilist_traits<llvm::Argument> >" } - %"struct.llvm::ilist_traits<llvm::Instruction>" = type { %"struct.llvm::SymbolTableListTraits<llvm::Instruction,llvm::BasicBlock,llvm::Function,llvm::ilist_traits<llvm::Instruction> >" } - %"struct.llvm::iplist<llvm::Argument,llvm::ilist_traits<llvm::Argument> >" = type { %"struct.llvm::ilist_traits<llvm::Argument>", %"struct.llvm::Argument"*, %"struct.llvm::Argument"* } - %"struct.llvm::iplist<llvm::BasicBlock,llvm::ilist_traits<llvm::BasicBlock> >" = type { %"struct.llvm::ilist_traits<llvm::Argument>", %"struct.llvm::BasicBlock"*, %"struct.llvm::BasicBlock"* } - %"struct.llvm::iplist<llvm::Instruction,llvm::ilist_traits<llvm::Instruction> >" = type { %"struct.llvm::ilist_traits<llvm::Instruction>", %"struct.llvm::Instruction"*, %"struct.llvm::Instruction"* } - %"struct.llvm::iplist<llvm::MachineBasicBlock,llvm::ilist_traits<llvm::MachineBasicBlock> >" = type { %"struct.llvm::MachineBasicBlock"*, %"struct.llvm::MachineBasicBlock"* } - %"struct.llvm::iplist<llvm::MachineInstr,llvm::ilist_traits<llvm::MachineInstr> >" = type { %"struct.llvm::ilist_iterator<const llvm::MachineBasicBlock>", %"struct.llvm::MachineInstr"*, %"struct.llvm::MachineInstr"* } - %"struct.llvm::iplist<llvm::Use,llvm::ilist_traits<llvm::Use> >" = type { %"struct.llvm::Use"*, %"struct.llvm::Use"* } - %"struct.std::_Vector_alloc_base<__gnu_cxx::_Hashtable_node<const llvm::Constant*>*,std::allocator<const llvm::Constant*>, true>" = type { %"struct.__gnu_cxx::_Hashtable_node<const llvm::Constant*>"**, %"struct.__gnu_cxx::_Hashtable_node<const llvm::Constant*>"**, %"struct.__gnu_cxx::_Hashtable_node<const llvm::Constant*>"** } - %"struct.std::_Vector_alloc_base<__gnu_cxx::_Hashtable_node<std::pair<const llvm::Value* const, int> >*,std::allocator<int>, true>" = type { %"struct.__gnu_cxx::_Hashtable_node<std::pair<const llvm::Value* const, int> >"**, %"struct.__gnu_cxx::_Hashtable_node<std::pair<const llvm::Value* const, int> >"**, %"struct.__gnu_cxx::_Hashtable_node<std::pair<const llvm::Value* const, int> >"** } - %"struct.std::_Vector_alloc_base<const llvm::PassInfo*,std::allocator<const llvm::PassInfo*>, true>" = type { %"struct.llvm::PassInfo"**, %"struct.llvm::PassInfo"**, %"struct.llvm::PassInfo"** } - %"struct.std::_Vector_alloc_base<const llvm::TargetRegClassInfo*,std::allocator<const llvm::TargetRegClassInfo*>, true>" = type { %"struct.llvm::TargetFrameInfo"**, %"struct.llvm::TargetFrameInfo"**, %"struct.llvm::TargetFrameInfo"** } - %"struct.std::_Vector_alloc_base<llvm::AbstractTypeUser*,std::allocator<llvm::AbstractTypeUser*>, true>" = type { %"struct.llvm::AbstractTypeUser"**, %"struct.llvm::AbstractTypeUser"**, %"struct.llvm::AbstractTypeUser"** } - %"struct.std::_Vector_alloc_base<llvm::MachineInstr*,std::allocator<llvm::MachineInstr*>, true>" = type { %"struct.llvm::MachineInstr"**, %"struct.llvm::MachineInstr"**, %"struct.llvm::MachineInstr"** } - %"struct.std::_Vector_alloc_base<llvm::MachineOperand,std::allocator<llvm::MachineOperand>, true>" = type { %"struct.llvm::MachineOperand"*, %"struct.llvm::MachineOperand"*, %"struct.llvm::MachineOperand"* } - %"struct.std::_Vector_alloc_base<llvm::PATypeHandle,std::allocator<llvm::PATypeHandle>, true>" = type { %"struct.llvm::PATypeHandle"*, %"struct.llvm::PATypeHandle"*, %"struct.llvm::PATypeHandle"* } - %"struct.std::_Vector_alloc_base<llvm::Use,std::allocator<llvm::Use>, true>" = type { %"struct.llvm::Use"*, %"struct.llvm::Use"*, %"struct.llvm::Use"* } - %"struct.std::_Vector_alloc_base<std::pair<const llvm::PassInfo*, llvm::Pass*>,std::allocator<std::pair<const llvm::PassInfo*, llvm::Pass*> >, true>" = type { %"struct.std::pair<const llvm::PassInfo*,llvm::Pass*>"*, %"struct.std::pair<const llvm::PassInfo*,llvm::Pass*>"*, %"struct.std::pair<const llvm::PassInfo*,llvm::Pass*>"* } - %"struct.std::_Vector_base<__gnu_cxx::_Hashtable_node<const llvm::Constant*>*,std::allocator<const llvm::Constant*> >" = type { %"struct.std::_Vector_alloc_base<__gnu_cxx::_Hashtable_node<const llvm::Constant*>*,std::allocator<const llvm::Constant*>, true>" } - %"struct.std::_Vector_base<__gnu_cxx::_Hashtable_node<std::pair<const llvm::Value* const, int> >*,std::allocator<int> >" = type { %"struct.std::_Vector_alloc_base<__gnu_cxx::_Hashtable_node<std::pair<const llvm::Value* const, int> >*,std::allocator<int>, true>" } - %"struct.std::_Vector_base<const llvm::PassInfo*,std::allocator<const llvm::PassInfo*> >" = type { %"struct.std::_Vector_alloc_base<const llvm::PassInfo*,std::allocator<const llvm::PassInfo*>, true>" } - %"struct.std::_Vector_base<const llvm::TargetRegClassInfo*,std::allocator<const llvm::TargetRegClassInfo*> >" = type { %"struct.std::_Vector_alloc_base<const llvm::TargetRegClassInfo*,std::allocator<const llvm::TargetRegClassInfo*>, true>" } - %"struct.std::_Vector_base<llvm::AbstractTypeUser*,std::allocator<llvm::AbstractTypeUser*> >" = type { %"struct.std::_Vector_alloc_base<llvm::AbstractTypeUser*,std::allocator<llvm::AbstractTypeUser*>, true>" } - %"struct.std::_Vector_base<llvm::MachineInstr*,std::allocator<llvm::MachineInstr*> >" = type { %"struct.std::_Vector_alloc_base<llvm::MachineInstr*,std::allocator<llvm::MachineInstr*>, true>" } - %"struct.std::_Vector_base<llvm::MachineOperand,std::allocator<llvm::MachineOperand> >" = type { %"struct.std::_Vector_alloc_base<llvm::MachineOperand,std::allocator<llvm::MachineOperand>, true>" } - %"struct.std::_Vector_base<llvm::PATypeHandle,std::allocator<llvm::PATypeHandle> >" = type { %"struct.std::_Vector_alloc_base<llvm::PATypeHandle,std::allocator<llvm::PATypeHandle>, true>" } - %"struct.std::_Vector_base<llvm::Use,std::allocator<llvm::Use> >" = type { %"struct.std::_Vector_alloc_base<llvm::Use,std::allocator<llvm::Use>, true>" } - %"struct.std::_Vector_base<std::pair<const llvm::PassInfo*, llvm::Pass*>,std::allocator<std::pair<const llvm::PassInfo*, llvm::Pass*> > >" = type { %"struct.std::_Vector_alloc_base<std::pair<const llvm::PassInfo*, llvm::Pass*>,std::allocator<std::pair<const llvm::PassInfo*, llvm::Pass*> >, true>" } - %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >" = type { %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Alloc_hider" } - %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Alloc_hider" = type { i8* } - %"struct.std::pair<const llvm::PassInfo*,llvm::Pass*>" = type { %"struct.llvm::PassInfo"*, %"struct.llvm::Pass"* } - %"struct.std::pair<const llvm::Value* const,int>" = type { %"struct.llvm::Value"*, i32 } - %"struct.std::type_info" = type { i32 (...)**, i8* } - %"struct.std::vector<__gnu_cxx::_Hashtable_node<const llvm::Constant*>*,std::allocator<const llvm::Constant*> >" = type { %"struct.std::_Vector_base<__gnu_cxx::_Hashtable_node<const llvm::Constant*>*,std::allocator<const llvm::Constant*> >" } - %"struct.std::vector<__gnu_cxx::_Hashtable_node<std::pair<const llvm::Value* const, int> >*,std::allocator<int> >" = type { %"struct.std::_Vector_base<__gnu_cxx::_Hashtable_node<std::pair<const llvm::Value* const, int> >*,std::allocator<int> >" } - %"struct.std::vector<const llvm::PassInfo*,std::allocator<const llvm::PassInfo*> >" = type { %"struct.std::_Vector_base<const llvm::PassInfo*,std::allocator<const llvm::PassInfo*> >" } - %"struct.std::vector<const llvm::TargetRegClassInfo*,std::allocator<const llvm::TargetRegClassInfo*> >" = type { %"struct.std::_Vector_base<const llvm::TargetRegClassInfo*,std::allocator<const llvm::TargetRegClassInfo*> >" } - %"struct.std::vector<llvm::AbstractTypeUser*,std::allocator<llvm::AbstractTypeUser*> >" = type { %"struct.std::_Vector_base<llvm::AbstractTypeUser*,std::allocator<llvm::AbstractTypeUser*> >" } - %"struct.std::vector<llvm::MachineInstr*,std::allocator<llvm::MachineInstr*> >" = type { %"struct.std::_Vector_base<llvm::MachineInstr*,std::allocator<llvm::MachineInstr*> >" } - %"struct.std::vector<llvm::MachineOperand,std::allocator<llvm::MachineOperand> >" = type { %"struct.std::_Vector_base<llvm::MachineOperand,std::allocator<llvm::MachineOperand> >" } - %"struct.std::vector<llvm::PATypeHandle,std::allocator<llvm::PATypeHandle> >" = type { %"struct.std::_Vector_base<llvm::PATypeHandle,std::allocator<llvm::PATypeHandle> >" } - %"struct.std::vector<llvm::Use,std::allocator<llvm::Use> >" = type { %"struct.std::_Vector_base<llvm::Use,std::allocator<llvm::Use> >" } - %"struct.std::vector<std::pair<const llvm::PassInfo*, llvm::Pass*>,std::allocator<std::pair<const llvm::PassInfo*, llvm::Pass*> > >" = type { %"struct.std::_Vector_base<std::pair<const llvm::PassInfo*, llvm::Pass*>,std::allocator<std::pair<const llvm::PassInfo*, llvm::Pass*> > >" } - %"union.llvm::MachineOperand::._65" = type { %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >"* } - -declare void @_Znwj() - -declare void @_ZN4llvm12MachineInstrC1Esjbb() - -declare void @_ZNSt6vectorIPN4llvm12MachineInstrESaIS2_EE9push_backERKS2_() - -declare void @_ZNK4llvm8Function15getFunctionTypeEv() - -declare void @_ZNK4llvm19MachineInstrBuilder7addMRegEiNS_14MachineOperand7UseTypeE() - -declare void @_ZNK4llvm19MachineInstrBuilder7addSImmEi() - -declare i32 @__gxx_personality_v0(...) - -define void @_ZN4llvm11_GLOBAL__N_22InsertPrologEpilogCode20runOnMachineFunctionERNS_15MachineFunctionE(%"struct.llvm::MachineFunction"* %F) personality i32 (...)* @__gxx_personality_v0 { -entry: - %tmp.8.i = invoke %"struct.llvm::TargetFrameInfo"* null( %"struct.llvm::TargetMachine"* null ) - to label %invoke_cont.0.i unwind label %invoke_catch.0.i ; <%"struct.llvm::TargetFrameInfo"*> [#uses=0] - -invoke_catch.0.i: ; preds = %invoke_cont.49.i, %invoke_cont.48.i, %invoke_cont.47.i, %invoke_cont.i53.i, %no_exit.i, %invoke_cont.44.i, %invoke_cont.43.i, %invoke_cont.42.i, %invoke_cont.41.i, %invoke_cont.40.i, %invoke_cont.39.i, %invoke_cont.38.i, %invoke_cont.37.i, %then.2.i, %invoke_cont.35.i, %invoke_cont.34.i, %then.1.i, %endif.0.i, %invoke_cont.9.i, %invoke_cont.8.i, %invoke_cont.7.i, %invoke_cont.i.i, %then.0.i, %invoke_cont.4.i, %invoke_cont.3.i, %invoke_cont.2.i, %invoke_cont.1.i, %endif.0.i.i, %tmp.7.i.noexc.i, %invoke_cont.0.i, %entry - %exn0.i = landingpad {i8*, i32} - cleanup - ret void - -invoke_cont.0.i: ; preds = %entry - %tmp.7.i1.i = invoke %"struct.llvm::TargetFrameInfo"* null( %"struct.llvm::TargetMachine"* null ) - to label %tmp.7.i.noexc.i unwind label %invoke_catch.0.i ; <%"struct.llvm::TargetFrameInfo"*> [#uses=2] - -tmp.7.i.noexc.i: ; preds = %invoke_cont.0.i - %tmp.17.i2.i = invoke i32 null( %"struct.llvm::TargetFrameInfo"* %tmp.7.i1.i ) - to label %endif.0.i.i unwind label %invoke_catch.0.i ; <i32> [#uses=0] - -endif.0.i.i: ; preds = %tmp.7.i.noexc.i - %tmp.38.i4.i = invoke i32 null( %"struct.llvm::TargetFrameInfo"* %tmp.7.i1.i ) - to label %tmp.38.i.noexc.i unwind label %invoke_catch.0.i ; <i32> [#uses=0] - -tmp.38.i.noexc.i: ; preds = %endif.0.i.i - br i1 false, label %invoke_cont.1.i, label %then.1.i.i - -then.1.i.i: ; preds = %tmp.38.i.noexc.i - ret void - -invoke_cont.1.i: ; preds = %tmp.38.i.noexc.i - %tmp.21.i = invoke %"struct.llvm::TargetRegInfo"* null( %"struct.llvm::TargetMachine"* null ) - to label %invoke_cont.2.i unwind label %invoke_catch.0.i ; <%"struct.llvm::TargetRegInfo"*> [#uses=1] - -invoke_cont.2.i: ; preds = %invoke_cont.1.i - %tmp.28.i = invoke i32 null( %"struct.llvm::TargetRegInfo"* %tmp.21.i ) - to label %invoke_cont.3.i unwind label %invoke_catch.0.i ; <i32> [#uses=0] - -invoke_cont.3.i: ; preds = %invoke_cont.2.i - %tmp.36.i = invoke %"struct.llvm::TargetInstrInfo"* null( %"struct.llvm::TargetMachine"* null ) - to label %invoke_cont.4.i unwind label %invoke_catch.0.i ; <%"struct.llvm::TargetInstrInfo"*> [#uses=1] - -invoke_cont.4.i: ; preds = %invoke_cont.3.i - %tmp.43.i = invoke i1 null( %"struct.llvm::TargetInstrInfo"* %tmp.36.i, i16 383, i64 0 ) - to label %invoke_cont.5.i unwind label %invoke_catch.0.i ; <i1> [#uses=1] - -invoke_cont.5.i: ; preds = %invoke_cont.4.i - br i1 %tmp.43.i, label %then.0.i, label %else.i - -then.0.i: ; preds = %invoke_cont.5.i - invoke void @_Znwj( ) - to label %tmp.0.i.noexc.i unwind label %invoke_catch.0.i - -tmp.0.i.noexc.i: ; preds = %then.0.i - invoke void @_ZN4llvm12MachineInstrC1Esjbb( ) - to label %invoke_cont.i.i unwind label %cond_true.i.i - -cond_true.i.i: ; preds = %tmp.0.i.noexc.i - %exn.i.i = landingpad {i8*, i32} - cleanup - ret void - -invoke_cont.i.i: ; preds = %tmp.0.i.noexc.i - invoke void @_ZNK4llvm19MachineInstrBuilder7addMRegEiNS_14MachineOperand7UseTypeE( ) - to label %invoke_cont.7.i unwind label %invoke_catch.0.i - -invoke_cont.7.i: ; preds = %invoke_cont.i.i - invoke void @_ZNK4llvm19MachineInstrBuilder7addSImmEi( ) - to label %invoke_cont.8.i unwind label %invoke_catch.0.i - -invoke_cont.8.i: ; preds = %invoke_cont.7.i - invoke void @_ZNK4llvm19MachineInstrBuilder7addMRegEiNS_14MachineOperand7UseTypeE( ) - to label %invoke_cont.9.i unwind label %invoke_catch.0.i - -invoke_cont.9.i: ; preds = %invoke_cont.8.i - invoke void @_ZNSt6vectorIPN4llvm12MachineInstrESaIS2_EE9push_backERKS2_( ) - to label %endif.0.i unwind label %invoke_catch.0.i - -else.i: ; preds = %invoke_cont.5.i - ret void - -endif.0.i: ; preds = %invoke_cont.9.i - invoke void @_ZNK4llvm8Function15getFunctionTypeEv( ) - to label %invoke_cont.33.i unwind label %invoke_catch.0.i - -invoke_cont.33.i: ; preds = %endif.0.i - br i1 false, label %then.1.i, label %endif.1.i - -then.1.i: ; preds = %invoke_cont.33.i - invoke void @_ZNK4llvm8Function15getFunctionTypeEv( ) - to label %invoke_cont.34.i unwind label %invoke_catch.0.i - -invoke_cont.34.i: ; preds = %then.1.i - %tmp.121.i = invoke %"struct.llvm::TargetRegInfo"* null( %"struct.llvm::TargetMachine"* null ) - to label %invoke_cont.35.i unwind label %invoke_catch.0.i ; <%"struct.llvm::TargetRegInfo"*> [#uses=1] - -invoke_cont.35.i: ; preds = %invoke_cont.34.i - %tmp.128.i = invoke i32 null( %"struct.llvm::TargetRegInfo"* %tmp.121.i ) - to label %invoke_cont.36.i unwind label %invoke_catch.0.i ; <i32> [#uses=0] - -invoke_cont.36.i: ; preds = %invoke_cont.35.i - br i1 false, label %then.2.i, label %endif.1.i - -then.2.i: ; preds = %invoke_cont.36.i - %tmp.140.i = invoke %"struct.llvm::TargetRegInfo"* null( %"struct.llvm::TargetMachine"* null ) - to label %invoke_cont.37.i unwind label %invoke_catch.0.i ; <%"struct.llvm::TargetRegInfo"*> [#uses=0] - -invoke_cont.37.i: ; preds = %then.2.i - %tmp.148.i = invoke %"struct.llvm::TargetRegInfo"* null( %"struct.llvm::TargetMachine"* null ) - to label %invoke_cont.38.i unwind label %invoke_catch.0.i ; <%"struct.llvm::TargetRegInfo"*> [#uses=1] - -invoke_cont.38.i: ; preds = %invoke_cont.37.i - %tmp.155.i = invoke i32 null( %"struct.llvm::TargetRegInfo"* %tmp.148.i, %"struct.llvm::Type"* null, i1 false ) - to label %invoke_cont.39.i unwind label %invoke_catch.0.i ; <i32> [#uses=0] - -invoke_cont.39.i: ; preds = %invoke_cont.38.i - %tmp.163.i = invoke %"struct.llvm::TargetFrameInfo"* null( %"struct.llvm::TargetMachine"* null ) - to label %invoke_cont.40.i unwind label %invoke_catch.0.i ; <%"struct.llvm::TargetFrameInfo"*> [#uses=1] - -invoke_cont.40.i: ; preds = %invoke_cont.39.i - %tmp.170.i = invoke i32 null( %"struct.llvm::TargetFrameInfo"* %tmp.163.i ) - to label %invoke_cont.41.i unwind label %invoke_catch.0.i ; <i32> [#uses=0] - -invoke_cont.41.i: ; preds = %invoke_cont.40.i - %tmp.177.i = invoke %"struct.llvm::TargetFrameInfo"* null( %"struct.llvm::TargetMachine"* null ) - to label %invoke_cont.42.i unwind label %invoke_catch.0.i ; <%"struct.llvm::TargetFrameInfo"*> [#uses=1] - -invoke_cont.42.i: ; preds = %invoke_cont.41.i - %tmp.184.i = invoke i32 null( %"struct.llvm::TargetFrameInfo"* %tmp.177.i ) - to label %invoke_cont.43.i unwind label %invoke_catch.0.i ; <i32> [#uses=1] - -invoke_cont.43.i: ; preds = %invoke_cont.42.i - %tmp.191.i = invoke %"struct.llvm::TargetFrameInfo"* null( %"struct.llvm::TargetMachine"* null ) - to label %invoke_cont.44.i unwind label %invoke_catch.0.i ; <%"struct.llvm::TargetFrameInfo"*> [#uses=1] - -invoke_cont.44.i: ; preds = %invoke_cont.43.i - %tmp.198.i = invoke i32 null( %"struct.llvm::TargetFrameInfo"* %tmp.191.i, %"struct.llvm::MachineFunction"* %F, i1* null ) - to label %invoke_cont.45.i unwind label %invoke_catch.0.i ; <i32> [#uses=0] - -invoke_cont.45.i: ; preds = %invoke_cont.44.i - br i1 false, label %no_exit.i, label %endif.1.i - -no_exit.i: ; preds = %invoke_cont.50.i, %invoke_cont.45.i - %nextArgOffset.0.i.1 = phi i32 [ %tmp.221.i, %invoke_cont.50.i ], [ 0, %invoke_cont.45.i ] ; <i32> [#uses=1] - invoke void @_Znwj( ) - to label %tmp.0.i.noexc55.i unwind label %invoke_catch.0.i - -tmp.0.i.noexc55.i: ; preds = %no_exit.i - invoke void @_ZN4llvm12MachineInstrC1Esjbb( ) - to label %invoke_cont.i53.i unwind label %cond_true.i52.i - -cond_true.i52.i: ; preds = %tmp.0.i.noexc55.i - %exn.i52.i = landingpad {i8*, i32} - cleanup - ret void - -invoke_cont.i53.i: ; preds = %tmp.0.i.noexc55.i - invoke void @_ZNK4llvm19MachineInstrBuilder7addMRegEiNS_14MachineOperand7UseTypeE( ) - to label %invoke_cont.47.i unwind label %invoke_catch.0.i - -invoke_cont.47.i: ; preds = %invoke_cont.i53.i - invoke void @_ZNK4llvm19MachineInstrBuilder7addMRegEiNS_14MachineOperand7UseTypeE( ) - to label %invoke_cont.48.i unwind label %invoke_catch.0.i - -invoke_cont.48.i: ; preds = %invoke_cont.47.i - invoke void @_ZNK4llvm19MachineInstrBuilder7addSImmEi( ) - to label %invoke_cont.49.i unwind label %invoke_catch.0.i - -invoke_cont.49.i: ; preds = %invoke_cont.48.i - invoke void @_ZNSt6vectorIPN4llvm12MachineInstrESaIS2_EE9push_backERKS2_( ) - to label %invoke_cont.50.i unwind label %invoke_catch.0.i - -invoke_cont.50.i: ; preds = %invoke_cont.49.i - %tmp.221.i = add i32 %nextArgOffset.0.i.1, %tmp.184.i ; <i32> [#uses=1] - br i1 false, label %no_exit.i, label %endif.1.i - -endif.1.i: ; preds = %invoke_cont.50.i, %invoke_cont.45.i, %invoke_cont.36.i, %invoke_cont.33.i - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/2004-04-07-ScalarEvolutionCrash.ll b/llvm/test/Transforms/IndVarSimplify/2004-04-07-ScalarEvolutionCrash.ll deleted file mode 100644 index ec1218bb86d..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2004-04-07-ScalarEvolutionCrash.ll +++ /dev/null @@ -1,27 +0,0 @@ -; RUN: opt < %s -indvars -disable-output - -define void @.outPlank_21() { -entry: - br i1 false, label %loopexit.0, label %no_exit.0 - -no_exit.0: ; preds = %entry - ret void - -loopexit.0: ; preds = %entry - br i1 false, label %no_exit.1, label %loopexit.1 - -no_exit.1: ; preds = %loopexit.2, %loopexit.0 - %i.0.0 = phi i32 [ %inc, %loopexit.2 ], [ 0, %loopexit.0 ] ; <i32> [#uses=1] - br i1 false, label %loopexit.2, label %no_exit.2 - -no_exit.2: ; preds = %no_exit.1 - ret void - -loopexit.2: ; preds = %no_exit.1 - %inc = add i32 %i.0.0, 1 ; <i32> [#uses=1] - br i1 false, label %no_exit.1, label %loopexit.1 - -loopexit.1: ; preds = %loopexit.2, %loopexit.0 - ret void -} - diff --git a/llvm/test/Transforms/IndVarSimplify/2005-02-11-InvokeCrash.ll b/llvm/test/Transforms/IndVarSimplify/2005-02-11-InvokeCrash.ll deleted file mode 100644 index 926b82fdf14..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2005-02-11-InvokeCrash.ll +++ /dev/null @@ -1,27 +0,0 @@ -; RUN: opt < %s -indvars -disable-output - -define void @_ZN5ArrayISt7complexIdEEC2ERK10dim_vector() personality i32 (...)* @__gxx_personality_v0 { -entry: - %tmp.7 = invoke i32 @_ZN5ArrayISt7complexIdEE8get_sizeERK10dim_vector( ) - to label %invoke_cont.0 unwind label %cond_true.1 ; <i32> [#uses=2] - -invoke_cont.0: ; preds = %entry - %tmp.4.i = bitcast i32 %tmp.7 to i32 ; <i32> [#uses=0] - %tmp.14.0.i5 = add i32 %tmp.7, -1 ; <i32> [#uses=1] - br label %no_exit.i - -no_exit.i: ; preds = %no_exit.i, %invoke_cont.0 - %tmp.14.0.i.0 = phi i32 [ %tmp.14.0.i, %no_exit.i ], [ %tmp.14.0.i5, %invoke_cont.0 ] ; <i32> [#uses=1] - %tmp.14.0.i = add i32 %tmp.14.0.i.0, -1 ; <i32> [#uses=1] - br label %no_exit.i - -cond_true.1: ; preds = %entry - %exn = landingpad {i8*, i32} - cleanup - resume { i8*, i32 } %exn -} - -declare i32 @__gxx_personality_v0(...) - -declare i32 @_ZN5ArrayISt7complexIdEE8get_sizeERK10dim_vector() - diff --git a/llvm/test/Transforms/IndVarSimplify/2005-02-17-TruncateExprCrash.ll b/llvm/test/Transforms/IndVarSimplify/2005-02-17-TruncateExprCrash.ll deleted file mode 100644 index a0dac7a29cc..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2005-02-17-TruncateExprCrash.ll +++ /dev/null @@ -1,67 +0,0 @@ -; RUN: opt < %s -indvars -disable-output - -declare void @q_atomic_increment() - -declare void @_Z9qt_assertPKcS0_i() - -define void @_ZN13QMetaResourceC1EPKh() personality i32 (...)* @__gxx_personality_v0 { -entry: - invoke void @_Z9qt_assertPKcS0_i( ) - to label %endif.1 unwind label %then.i.i551 - -then.i.i551: ; preds = %entry - %exn551 = landingpad {i8*, i32} - cleanup - ret void - -endif.1: ; preds = %entry - br i1 false, label %then.2, label %then.i.i - -then.2: ; preds = %endif.1 - invoke void @q_atomic_increment( ) - to label %loopentry.0 unwind label %invoke_catch.6 - -invoke_catch.6: ; preds = %then.2 - %exn6 = landingpad {i8*, i32} - cleanup - ret void - -loopentry.0: ; preds = %then.2 - br i1 false, label %shortcirc_next.i, label %endif.3 - -endif.3: ; preds = %loopentry.0 - ret void - -shortcirc_next.i: ; preds = %loopentry.0 - br i1 false, label %_ZNK7QString2atEi.exit, label %then.i - -then.i: ; preds = %shortcirc_next.i - ret void - -_ZNK7QString2atEi.exit: ; preds = %shortcirc_next.i - br i1 false, label %endif.4, label %then.4 - -then.4: ; preds = %_ZNK7QString2atEi.exit - ret void - -endif.4: ; preds = %_ZNK7QString2atEi.exit - %tmp.115 = load i8, i8* null ; <i8> [#uses=1] - br i1 false, label %loopexit.1, label %no_exit.0 - -no_exit.0: ; preds = %no_exit.0, %endif.4 - %bytes_in_len.4.5 = phi i8 [ %dec, %no_exit.0 ], [ %tmp.115, %endif.4 ] ; <i8> [#uses=1] - %off.5.5.in = phi i32 [ %off.5.5, %no_exit.0 ], [ 0, %endif.4 ] ; <i32> [#uses=1] - %off.5.5 = add i32 %off.5.5.in, 1 ; <i32> [#uses=2] - %dec = add i8 %bytes_in_len.4.5, -1 ; <i8> [#uses=2] - %tmp.123631 = icmp eq i8 %dec, 0 ; <i1> [#uses=1] - br i1 %tmp.123631, label %loopexit.1, label %no_exit.0 - -loopexit.1: ; preds = %no_exit.0, %endif.4 - %off.5.in.6 = phi i32 [ 0, %endif.4 ], [ %off.5.5, %no_exit.0 ] ; <i32> [#uses=0] - ret void - -then.i.i: ; preds = %endif.1 - ret void -} - -declare i32 @__gxx_personality_v0(...) diff --git a/llvm/test/Transforms/IndVarSimplify/2005-02-26-ExitValueCompute.ll b/llvm/test/Transforms/IndVarSimplify/2005-02-26-ExitValueCompute.ll deleted file mode 100644 index 0c48a630407..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2005-02-26-ExitValueCompute.ll +++ /dev/null @@ -1,21 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -define i32 @main() { -; CHECK-LABEL: @main( -; CHECK: ret i32 152 -entry: - br label %no_exit - -no_exit: ; preds = %no_exit, %entry - %i.1.0 = phi i32 [ 0, %entry ], [ %inc, %no_exit ] ; <i32> [#uses=2] - %tmp.4 = icmp sgt i32 %i.1.0, 50 ; <i1> [#uses=1] - %tmp.7 = select i1 %tmp.4, i32 100, i32 0 ; <i32> [#uses=1] - %i.0 = add i32 %i.1.0, 1 ; <i32> [#uses=1] - %inc = add i32 %i.0, %tmp.7 ; <i32> [#uses=3] - %tmp.1 = icmp slt i32 %inc, 100 ; <i1> [#uses=1] - br i1 %tmp.1, label %no_exit, label %loopexit - -loopexit: ; preds = %no_exit - ret i32 %inc -} - diff --git a/llvm/test/Transforms/IndVarSimplify/2005-06-15-InstMoveCrash.ll b/llvm/test/Transforms/IndVarSimplify/2005-06-15-InstMoveCrash.ll deleted file mode 100644 index 0862f1131b5..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2005-06-15-InstMoveCrash.ll +++ /dev/null @@ -1,37 +0,0 @@ -; RUN: opt < %s -indvars -disable-output - -define void @main() { -entry: - br label %no_exit.1.outer - -no_exit.1.outer: ; preds = %endif.0, %entry - %l_14237116.1.0.ph = phi i8 [ -46, %entry ], [ 0, %endif.0 ] ; <i8> [#uses=1] - %i.0.0.0.ph = phi i32 [ 0, %entry ], [ %inc.1, %endif.0 ] ; <i32> [#uses=1] - br label %no_exit.1 - -no_exit.1: ; preds = %_Z13func_47880058cc.exit, %no_exit.1.outer - br i1 false, label %_Z13func_47880058cc.exit, label %then.i - -then.i: ; preds = %no_exit.1 - br label %_Z13func_47880058cc.exit - -_Z13func_47880058cc.exit: ; preds = %then.i, %no_exit.1 - br i1 false, label %then.0, label %no_exit.1 - -then.0: ; preds = %_Z13func_47880058cc.exit - %tmp.6 = bitcast i8 %l_14237116.1.0.ph to i8 ; <i8> [#uses=1] - br i1 false, label %endif.0, label %then.1 - -then.1: ; preds = %then.0 - br label %endif.0 - -endif.0: ; preds = %then.1, %then.0 - %inc.1 = add i32 %i.0.0.0.ph, 1 ; <i32> [#uses=2] - %tmp.2 = icmp sgt i32 %inc.1, 99 ; <i1> [#uses=1] - br i1 %tmp.2, label %loopexit.0, label %no_exit.1.outer - -loopexit.0: ; preds = %endif.0 - %tmp.28 = zext i8 %tmp.6 to i32 ; <i32> [#uses=0] - ret void -} - diff --git a/llvm/test/Transforms/IndVarSimplify/2005-11-18-Crash.ll b/llvm/test/Transforms/IndVarSimplify/2005-11-18-Crash.ll deleted file mode 100644 index 7ef351d4a45..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2005-11-18-Crash.ll +++ /dev/null @@ -1,17 +0,0 @@ -; RUN: opt < %s -indvars -disable-output - -@fixtab = external global [29 x [29 x [2 x i32]]] ; <[29 x [29 x [2 x i32]]]*> [#uses=1] - -define void @init_optabs() { -entry: - br label %no_exit.0 - -no_exit.0: ; preds = %no_exit.0, %entry - %p.0.0 = phi i32* [ getelementptr ([29 x [29 x [2 x i32]]], [29 x [29 x [2 x i32]]]* @fixtab, i32 0, i32 0, i32 0, i32 0), %entry ], [ %inc.0, %no_exit.0 ] ; <i32*> [#uses=1] - %inc.0 = getelementptr i32, i32* %p.0.0, i32 1 ; <i32*> [#uses=1] - br i1 undef, label %no_exit.0, label %no_exit.1 - -no_exit.1: ; preds = %no_exit.0 - ret void -} - diff --git a/llvm/test/Transforms/IndVarSimplify/2006-03-31-NegativeStride.ll b/llvm/test/Transforms/IndVarSimplify/2006-03-31-NegativeStride.ll deleted file mode 100644 index c5e95ba19fb..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2006-03-31-NegativeStride.ll +++ /dev/null @@ -1,23 +0,0 @@ -; PR726 -; RUN: opt < %s -indvars -S | FileCheck %s - -; Make sure to compute the right exit value based on negative strides. - -define i32 @test() { -; CHECK-LABEL: @test( -; CHECK: ret i32 27 -entry: - br label %cond_true - -cond_true: ; preds = %cond_true, %entry - %a.0.0 = phi i32 [ 10, %entry ], [ %tmp4, %cond_true ] ; <i32> [#uses=2] - %b.0.0 = phi i32 [ 0, %entry ], [ %tmp2, %cond_true ] ; <i32> [#uses=1] - %tmp2 = add i32 %b.0.0, %a.0.0 ; <i32> [#uses=2] - %tmp4 = add i32 %a.0.0, -1 ; <i32> [#uses=2] - %tmp = icmp sgt i32 %tmp4, 7 ; <i1> [#uses=1] - br i1 %tmp, label %cond_true, label %bb7 - -bb7: ; preds = %cond_true - ret i32 %tmp2 -} - diff --git a/llvm/test/Transforms/IndVarSimplify/2006-06-16-Indvar-LCSSA-Crash.ll b/llvm/test/Transforms/IndVarSimplify/2006-06-16-Indvar-LCSSA-Crash.ll deleted file mode 100644 index 2d40f88d0d0..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2006-06-16-Indvar-LCSSA-Crash.ll +++ /dev/null @@ -1,22 +0,0 @@ -; RUN: opt < %s -indvars -disable-output - -define void @get_block() { -endif.0: - br label %no_exit.30 - -no_exit.30: ; preds = %no_exit.30, %endif.0 - %x.12.0 = phi i32 [ %inc.28, %no_exit.30 ], [ -2, %endif.0 ] ; <i32> [#uses=1] - %tmp.583 = load i16, i16* null ; <i16> [#uses=1] - %tmp.584 = zext i16 %tmp.583 to i32 ; <i32> [#uses=1] - %tmp.588 = load i32, i32* null ; <i32> [#uses=1] - %tmp.589 = mul i32 %tmp.584, %tmp.588 ; <i32> [#uses=1] - %tmp.591 = add i32 %tmp.589, 0 ; <i32> [#uses=1] - %inc.28 = add i32 %x.12.0, 1 ; <i32> [#uses=2] - %tmp.565 = icmp sgt i32 %inc.28, 3 ; <i1> [#uses=1] - br i1 %tmp.565, label %loopexit.30, label %no_exit.30 - -loopexit.30: ; preds = %no_exit.30 - %tmp.591.lcssa = phi i32 [ %tmp.591, %no_exit.30 ] ; <i32> [#uses=0] - ret void -} - diff --git a/llvm/test/Transforms/IndVarSimplify/2006-09-20-LFTR-Crash.ll b/llvm/test/Transforms/IndVarSimplify/2006-09-20-LFTR-Crash.ll deleted file mode 100644 index 787c9b07bdc..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2006-09-20-LFTR-Crash.ll +++ /dev/null @@ -1,44 +0,0 @@ -; RUN: opt < %s -indvars -disable-output -; ModuleID = '2006-09-20-LFTR-Crash.ll' - %struct.p7prior_s = type { i32, i32, [200 x float], [200 x [7 x float]], i32, [200 x float], [200 x [20 x float]], i32, [200 x float], [200 x [20 x float]] } - -define void @P7DefaultPrior() { -entry: - switch i32 0, label %UnifiedReturnBlock [ - i32 2, label %bb160 - i32 3, label %bb - ] - -bb: ; preds = %entry - br i1 false, label %cond_true.i, label %sre_malloc.exit - -cond_true.i: ; preds = %bb - unreachable - -sre_malloc.exit: ; preds = %bb - br label %cond_true - -cond_true: ; preds = %cond_true66, %cond_true, %sre_malloc.exit - %tmp59 = phi i32 [ 1, %sre_malloc.exit ], [ %phitmp, %cond_true66 ], [ %tmp59, %cond_true ] ; <i32> [#uses=2] - %indvar245.0.ph = phi i32 [ 0, %sre_malloc.exit ], [ %indvar.next246, %cond_true66 ], [ %indvar245.0.ph, %cond_true ] ; <i32> [#uses=2] - br i1 false, label %bb57, label %cond_true - -bb57: ; preds = %cond_true - %tmp65 = icmp sgt i32 0, %tmp59 ; <i1> [#uses=1] - %indvar.next246 = add i32 %indvar245.0.ph, 1 ; <i32> [#uses=2] - br i1 %tmp65, label %cond_true66, label %bb69 - -cond_true66: ; preds = %bb57 - %q.1.0 = bitcast i32 %indvar.next246 to i32 ; <i32> [#uses=1] - %phitmp = add i32 %q.1.0, 1 ; <i32> [#uses=1] - br label %cond_true - -bb69: ; preds = %bb57 - ret void - -bb160: ; preds = %entry - ret void - -UnifiedReturnBlock: ; preds = %entry - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/2006-12-10-BitCast.ll b/llvm/test/Transforms/IndVarSimplify/2006-12-10-BitCast.ll deleted file mode 100644 index 80c9ebf2f01..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2006-12-10-BitCast.ll +++ /dev/null @@ -1,33 +0,0 @@ -; RUN: opt < %s -indvars -disable-output -target datalayout = "e-p:32:32" -target triple = "i686-apple-darwin8" - %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 @_ve_envelope_search() { -entry: - br i1 false, label %cond_true27, label %bb137 - -cond_true27: ; preds = %entry - br i1 false, label %cond_true52, label %bb80 - -cond_true52: ; preds = %cond_true27 - %tmp152.i = bitcast float 0.000000e+00 to i32 ; <i32> [#uses=1] - br label %cond_next182.i - -cond_next182.i: ; preds = %cond_next182.i, %cond_true52 - %decay.i.0 = phi i32 [ %tmp195.i.upgrd.1, %cond_next182.i ], [ %tmp152.i, %cond_true52 ] ; <i32> [#uses=1] - %tmp194.i53 = bitcast i32 %decay.i.0 to float ; <float> [#uses=1] - %tmp195.i = fsub float %tmp194.i53, 8.000000e+00 ; <float> [#uses=1] - %tmp195.i.upgrd.1 = bitcast float %tmp195.i to i32 ; <i32> [#uses=1] - br i1 undef, label %cond_next182.i, label %bb418.i.preheader - -bb418.i.preheader: ; preds = %cond_next182.i - ret void - -bb80: ; preds = %cond_true27 - ret void - -bb137: ; preds = %entry - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/2007-01-06-TripCount.ll b/llvm/test/Transforms/IndVarSimplify/2007-01-06-TripCount.ll deleted file mode 100644 index e6986ca9fe8..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2007-01-06-TripCount.ll +++ /dev/null @@ -1,40 +0,0 @@ -; PR1015 -; RUN: opt < %s -indvars -S | FileCheck %s - -target datalayout = "e-p:32:32" -target triple = "i686-apple-darwin8" -@foo = internal constant [5 x i8] c"\00abc\00" ; <[5 x i8]*> [#uses=1] -@str = internal constant [4 x i8] c"%d\0A\00" ; <[4 x i8]*> [#uses=1] - - -define i32 @test(i32 %J) { -; CHECK-LABEL: @test( -; CHECK-NOT: ret i32 0 -entry: - br label %bb2 - -bb: ; preds = %cond_next, %cond_true - %tmp1 = add i32 %i.0, 1 ; <i32> [#uses=1] - br label %bb2 - -bb2: ; preds = %bb, %entry - %i.0 = phi i32 [ 0, %entry ], [ %tmp1, %bb ] ; <i32> [#uses=4] - %tmp = icmp eq i32 %i.0, 0 ; <i1> [#uses=1] - br i1 %tmp, label %cond_true, label %cond_next - -cond_true: ; preds = %bb2 - br label %bb - -cond_next: ; preds = %bb2 - %tmp2 = getelementptr [5 x i8], [5 x i8]* @foo, i32 0, i32 %i.0 ; <i8*> [#uses=1] - %tmp3 = load i8, i8* %tmp2 ; <i8> [#uses=1] - %tmp5 = icmp eq i8 %tmp3, 0 ; <i1> [#uses=1] - br i1 %tmp5, label %bb6, label %bb - -bb6: ; preds = %cond_next - br label %return - -return: ; preds = %bb6 - ret i32 %i.0 -} - diff --git a/llvm/test/Transforms/IndVarSimplify/2007-06-06-DeleteDanglesPtr.ll b/llvm/test/Transforms/IndVarSimplify/2007-06-06-DeleteDanglesPtr.ll deleted file mode 100644 index fc7d6335910..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2007-06-06-DeleteDanglesPtr.ll +++ /dev/null @@ -1,117 +0,0 @@ -; RUN: opt < %s -indvars -disable-output -; PR1487 - - %struct.AVClass = type { i8*, i8* (i8*)*, %struct.AVOption* } - %struct.AVCodec = type { i8*, i32, i32, i32, i32 (%struct.AVCodecContext*)*, i32 (%struct.AVCodecContext*, i8*, i32, i8*)*, i32 (%struct.AVCodecContext*)*, i32 (%struct.AVCodecContext*, i8*, i32*, i8*, i32)*, i32, %struct.AVCodec*, void (%struct.AVCodecContext*)*, %struct.AVCodecTag*, i32* } - %struct.AVCodecContext = type { %struct.AVClass*, i32, i32, i32, i32, i32, i8*, i32, %struct.AVCodecTag, i32, i32, i32, i32, i32, void (%struct.AVCodecContext*, %struct.AVFrame*, i32*, i32, i32, i32)*, i32, i32, i32, i32, i32, i32, i32, float, float, i32, i32, i32, i32, float, i32, i32, i32, %struct.AVCodec*, i8*, i32, i32, void (%struct.AVCodecContext*, i8*, i32, i32)*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8*, [32 x i8], i32, i32, i32, i32, i32, i32, i32, float, i32, i32 (%struct.AVCodecContext*, %struct.AVFrame*)*, void (%struct.AVCodecContext*, %struct.AVFrame*)*, i32, i32, i32, i32, i8*, i8*, float, float, i32, %struct.RcOverride*, i32, i8*, i32, i32, i32, float, float, float, float, i32, float, float, float, float, float, i32, i32, i32, i32*, i32, i32, i32, i32, %struct.AVCodecTag, %struct.AVFrame*, i32, i32, [4 x i64], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 (%struct.AVCodecContext*, i32*)*, i32, i32, i32, i32, i32, i32, i8*, i32, i32, i32, i32, i32, i32, i16*, i16*, i32, i32, i32, i32, %struct.AVPaletteControl*, i32, i32 (%struct.AVCodecContext*, %struct.AVFrame*)*, i32, i32, i32, i32, i32, i32, i32, i32 (%struct.AVCodecContext*, i32 (%struct.AVCodecContext*, i8*)*, i8**, i32*, i32)*, i8*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, i32, i32, i32, i32, i32, i32, i32, i32, float, i32, i32, i32, i32, i32, i32, float, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64 } - %struct.AVCodecTag = type { i32, i32 } - %struct.AVFrame = type { [4 x i8*], [4 x i32], [4 x i8*], i32, i32, i64, i32, i32, i32, i32, i32, i8*, i32, i8*, [2 x [2 x i16]*], i32*, i8, i8*, [4 x i64], i32, i32, i32, i32, i32, %struct.AVPanScan*, i32, i32, i16*, [2 x i8*] } - %struct.AVOption = type { i8*, i8*, i32, i32, double, double, double, i32, i8* } - %struct.AVPaletteControl = type { i32, [256 x i32] } - %struct.AVPanScan = type { i32, i32, i32, [3 x [2 x i16]] } - %struct.RcOverride = type { i32, i32, i32, float } - -define i32 @smc_decode_frame(%struct.AVCodecContext* %avctx, i8* %data, i32* %data_size, i8* %buf, i32 %buf_size) { -entry: - br i1 false, label %cond_next, label %cond_true - -cond_true: ; preds = %entry - ret i32 -1 - -cond_next: ; preds = %entry - br i1 false, label %bb.outer5.split.split.split.us, label %cond_true194.split - -bb.outer5.split.split.split.us: ; preds = %cond_next - br i1 false, label %cond_next188.us503.us, label %bb.us481 - -bb275.us493.us: ; preds = %cond_next188.us503.us, %cond_next188.us503.us - ret i32 0 - -cond_next188.us503.us: ; preds = %bb.outer5.split.split.split.us - switch i32 0, label %bb1401 [ - i32 0, label %cond_next202.bb215_crit_edge.split - i32 16, label %bb215 - i32 32, label %bb275.us493.us - i32 48, label %bb275.us493.us - i32 64, label %cond_next202.bb417_crit_edge.split - i32 80, label %bb417 - i32 96, label %cond_next202.bb615_crit_edge.split - i32 112, label %bb615 - i32 128, label %cond_next202.bb716_crit_edge.split - i32 144, label %bb716 - i32 160, label %cond_next202.bb882_crit_edge.split - i32 176, label %bb882 - i32 192, label %cond_next202.bb1062_crit_edge.split - i32 208, label %bb1062 - i32 224, label %bb1326.us.outer.outer - ] - -bb.us481: ; preds = %bb.outer5.split.split.split.us - ret i32 0 - -cond_true194.split: ; preds = %cond_next - ret i32 %buf_size - -cond_next202.bb1062_crit_edge.split: ; preds = %cond_next188.us503.us - ret i32 0 - -cond_next202.bb882_crit_edge.split: ; preds = %cond_next188.us503.us - ret i32 0 - -cond_next202.bb716_crit_edge.split: ; preds = %cond_next188.us503.us - ret i32 0 - -cond_next202.bb615_crit_edge.split: ; preds = %cond_next188.us503.us - ret i32 0 - -cond_next202.bb417_crit_edge.split: ; preds = %cond_next188.us503.us - ret i32 0 - -cond_next202.bb215_crit_edge.split: ; preds = %cond_next188.us503.us - ret i32 0 - -bb215: ; preds = %cond_next188.us503.us - ret i32 0 - -bb417: ; preds = %cond_next188.us503.us - ret i32 0 - -bb615: ; preds = %cond_next188.us503.us - ret i32 0 - -bb716: ; preds = %cond_next188.us503.us - ret i32 0 - -bb882: ; preds = %cond_next188.us503.us - ret i32 0 - -bb1062: ; preds = %cond_next188.us503.us - ret i32 0 - -bb1326.us: ; preds = %bb1326.us.outer.outer, %bb1347.loopexit.us, %bb1326.us - %pixel_y.162036.us.ph = phi i32 [ %tmp1352.us, %bb1347.loopexit.us ], [ 0, %bb1326.us.outer.outer ], [ %pixel_y.162036.us.ph, %bb1326.us ] ; <i32> [#uses=2] - %stream_ptr.142038.us.ph = phi i32 [ %tmp1339.us, %bb1347.loopexit.us ], [ %stream_ptr.142038.us.ph.ph, %bb1326.us.outer.outer ], [ %stream_ptr.142038.us.ph, %bb1326.us ] ; <i32> [#uses=2] - %pixel_x.232031.us = phi i32 [ %tmp1341.us, %bb1326.us ], [ 0, %bb1326.us.outer.outer ], [ 0, %bb1347.loopexit.us ] ; <i32> [#uses=3] - %block_ptr.222030.us = add i32 0, %pixel_x.232031.us ; <i32> [#uses=1] - %stream_ptr.132032.us = add i32 %pixel_x.232031.us, %stream_ptr.142038.us.ph ; <i32> [#uses=1] - %tmp1341.us = add i32 %pixel_x.232031.us, 1 ; <i32> [#uses=2] - %tmp1344.us = icmp slt i32 %tmp1341.us, 4 ; <i1> [#uses=1] - br i1 %tmp1344.us, label %bb1326.us, label %bb1347.loopexit.us - -bb1347.loopexit.us: ; preds = %bb1326.us - %tmp1339.us = add i32 %stream_ptr.132032.us, 1 ; <i32> [#uses=2] - %tmp1337.us = add i32 %block_ptr.222030.us, 1 ; <i32> [#uses=0] - %tmp1352.us = add i32 %pixel_y.162036.us.ph, 1 ; <i32> [#uses=2] - %tmp1355.us = icmp slt i32 %tmp1352.us, 4 ; <i1> [#uses=1] - br i1 %tmp1355.us, label %bb1326.us, label %bb1358 - -bb1358: ; preds = %bb1347.loopexit.us - br label %bb1326.us.outer.outer - -bb1326.us.outer.outer: ; preds = %bb1358, %cond_next188.us503.us - %stream_ptr.142038.us.ph.ph = phi i32 [ %tmp1339.us, %bb1358 ], [ 0, %cond_next188.us503.us ] ; <i32> [#uses=1] - br label %bb1326.us - -bb1401: ; preds = %cond_next188.us503.us - ret i32 0 -} diff --git a/llvm/test/Transforms/IndVarSimplify/2007-11-23-BitcastCrash.ll b/llvm/test/Transforms/IndVarSimplify/2007-11-23-BitcastCrash.ll deleted file mode 100644 index cad4eb155ce..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2007-11-23-BitcastCrash.ll +++ /dev/null @@ -1,20 +0,0 @@ -; RUN: opt < %s -indvars -disable-output -; PR1814 -target datalayout = "e-p:32:32-f64:32:64-i64:32:64-f80:32:32" - -define void @FuncAt1938470480(i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i64, i64, i64, i1, i1, i1, i1, i1, i1) { -EntryBlock: - br label %asmBlockAt738ab7f3 - -asmBlockAt738ab9b0: ; preds = %asmBlockAt738ab7f3 - %.lcssa6 = phi i64 [ %23, %asmBlockAt738ab7f3 ] ; <i64> [#uses=0] - ret void - -asmBlockAt738ab7f3: ; preds = %asmBlockAt738ab7f3, %EntryBlock - %ebp95 = phi i32 [ 128, %EntryBlock ], [ %24, %asmBlockAt738ab7f3 ] ; <i32> [#uses=2] - sub <4 x i16> zeroinitializer, zeroinitializer ; <<4 x i16>>:22 [#uses=1] - bitcast <4 x i16> %22 to i64 ; <i64>:23 [#uses=1] - add i32 %ebp95, -64 ; <i32>:24 [#uses=1] - icmp ult i32 %ebp95, 64 ; <i1>:25 [#uses=1] - br i1 %25, label %asmBlockAt738ab9b0, label %asmBlockAt738ab7f3 -} diff --git a/llvm/test/Transforms/IndVarSimplify/2008-06-15-SCEVExpanderBug.ll b/llvm/test/Transforms/IndVarSimplify/2008-06-15-SCEVExpanderBug.ll deleted file mode 100644 index 77235d2888e..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2008-06-15-SCEVExpanderBug.ll +++ /dev/null @@ -1,17 +0,0 @@ -; RUN: opt < %s -indvars -disable-output -; PR2434 - -define fastcc void @regcppop() nounwind { -entry: - %tmp61 = add i32 0, -5 ; <i32> [#uses=1] - br label %bb - -bb: ; preds = %bb, %entry - %PL_savestack_ix.tmp.0 = phi i32 [ %tmp61, %entry ], [ %tmp127, %bb ] ; <i32> [#uses=2] - %indvar10 = phi i32 [ 0, %entry ], [ %indvar.next11, %bb ] ; <i32> [#uses=2] - %tmp13 = mul i32 %indvar10, -4 ; <i32> [#uses=0] - %tmp111 = add i32 %PL_savestack_ix.tmp.0, -3 ; <i32> [#uses=0] - %tmp127 = add i32 %PL_savestack_ix.tmp.0, -4 ; <i32> [#uses=1] - %indvar.next11 = add i32 %indvar10, 1 ; <i32> [#uses=1] - br label %bb -} diff --git a/llvm/test/Transforms/IndVarSimplify/2008-09-02-IVType.ll b/llvm/test/Transforms/IndVarSimplify/2008-09-02-IVType.ll deleted file mode 100644 index a5669c530b0..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2008-09-02-IVType.ll +++ /dev/null @@ -1,65 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -; ModuleID = '<stdin>' - -; Provide legal integer types. -target datalayout = "n8:16:32:64" - - - %struct.App1Marker = type <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }> - %struct.ComponentInstanceRecord = type <{ [1 x i32] }> - %struct.DCPredictors = type { [5 x i16] } - %struct.DecodeTable = type { i16, i16, i16, i16, i8**, i8** } - %struct.ICMDataProcRecord = type <{ i16 (i8**, i32, i32)*, i32 }> - %struct.JPEGBitStream = type { i8*, i32, i32, i32, i32, i32, %struct.App1Marker*, i8*, i32, i16, i16, i32 } - %struct.JPEGGlobals = type { [2048 x i8], %struct.JPEGBitStream, i8*, i32, i32, %struct.ComponentInstanceRecord*, %struct.ComponentInstanceRecord*, i32, %struct.OpaqueQTMLMutex*, %struct.Rect, i32, i32, %struct.SharedGlobals, %struct.DCPredictors, i8, i8, void (i8*, i16**, i32, %struct.YUVGeneralParams*)*, %struct.YUVGeneralParams, i16, i16, i32, [5 x i16*], [5 x %struct.DecodeTable*], [5 x %struct.DecodeTable*], [5 x i8], [5 x i8], [4 x [65 x i16]], [4 x %struct.DecodeTable], [4 x %struct.DecodeTable], [4 x i8*], [4 x i8*], i16, i16, i32, i8**, i8**, i8**, i8**, i8**, i8**, i8**, i8**, i8**, i8**, [18 x i8], [18 x i8], [18 x i8], [18 x i8], i32, i32, i8**, i8**, i8, i8, i8, i8, i16, i16, %struct.App1Marker*, i8, i8, i8, i8, i32**, i8*, i16*, i8*, i16*, i8, [3 x i8], i32, [3 x i32], [3 x i32], [3 x i32], [3 x i32], [3 x i32], [3 x i16*], [3 x i16*], [3 x i8**], [3 x %struct.DecodeTable*], [3 x %struct.DecodeTable*], [3 x i32], i32, [3 x i16*], i32, i32, i32, [3 x i32], i8, i8, i8, i8, %struct.ICMDataProcRecord*, i32, i32, i8**, i8**, i8**, i8**, i32, i32, i8*, i32, i32, i16*, i16*, i8*, i32, i32, i32, i32, i32, i32, i32, [16 x <2 x i64>], [1280 x i8], i8 } - %struct.OpaqueQTMLMutex = type opaque - %struct.Rect = type { i16, i16, i16, i16 } - %struct.SharedDGlobals = type { %struct.DecodeTable, %struct.DecodeTable, %struct.DecodeTable, %struct.DecodeTable } - %struct.SharedEGlobals = type { i8**, i8**, i8**, i8** } - %struct.SharedGlobals = type { %struct.SharedEGlobals*, %struct.SharedDGlobals* } - %struct.YUVGeneralParams = type { i16*, i8*, i8*, i8*, i8*, i8*, void (i8*, i16**, i32, %struct.YUVGeneralParams*)*, i16, i16, i16, [6 x i8], void (i8*, i16**, i32, %struct.YUVGeneralParams*)*, i16, i16 } -@llvm.used = appending global [1 x i8*] [ i8* bitcast (i16 (%struct.JPEGGlobals*)* @ExtractBufferedBlocksIgnored to i8*) ], section "llvm.metadata" ; <[1 x i8*]*> [#uses=0] - -define signext i16 @ExtractBufferedBlocksIgnored(%struct.JPEGGlobals* %globp) nounwind { -; CHECK-LABEL: @ExtractBufferedBlocksIgnored( -; CHECK: sext -; CHECK-NOT: sext -entry: - %tmp4311 = getelementptr %struct.JPEGGlobals, %struct.JPEGGlobals* %globp, i32 0, i32 70 ; <i32*> [#uses=1] - %tmp4412 = load i32, i32* %tmp4311, align 16 ; <i32> [#uses=2] - %tmp4613 = icmp sgt i32 %tmp4412, 0 ; <i1> [#uses=1] - br i1 %tmp4613, label %bb, label %bb49 - -bb: ; preds = %bb28, %entry - %component.09 = phi i16 [ 0, %entry ], [ %tmp37, %bb28 ] ; <i16> [#uses=2] - %tmp12 = sext i16 %component.09 to i32 ; <i32> [#uses=2] - %tmp6 = getelementptr %struct.JPEGGlobals, %struct.JPEGGlobals* %globp, i32 0, i32 77, i32 %tmp12 ; <i16**> [#uses=2] - %tmp7 = load i16*, i16** %tmp6, align 4 ; <i16*> [#uses=2] - %tmp235 = getelementptr %struct.JPEGGlobals, %struct.JPEGGlobals* %globp, i32 0, i32 71, i32 %tmp12 ; <i32*> [#uses=1] - %tmp246 = load i32, i32* %tmp235, align 4 ; <i32> [#uses=2] - %tmp267 = icmp sgt i32 %tmp246, 0 ; <i1> [#uses=1] - br i1 %tmp267, label %bb8, label %bb28 - -bb8: ; preds = %bb8, %bb - %indvar = phi i32 [ 0, %bb ], [ %indvar.next2, %bb8 ] ; <i32> [#uses=3] - %theDCTBufferIter.01.rec = shl i32 %indvar, 6 ; <i32> [#uses=1] - %tmp10.rec = add i32 %theDCTBufferIter.01.rec, 64 ; <i32> [#uses=1] - %tmp10 = getelementptr i16, i16* %tmp7, i32 %tmp10.rec ; <i16*> [#uses=1] - %i.02 = trunc i32 %indvar to i16 ; <i16> [#uses=1] - %tmp13 = add i16 %i.02, 1 ; <i16> [#uses=1] - %phitmp = sext i16 %tmp13 to i32 ; <i32> [#uses=1] - %tmp26 = icmp slt i32 %phitmp, %tmp246 ; <i1> [#uses=1] - %indvar.next2 = add i32 %indvar, 1 ; <i32> [#uses=1] - br i1 %tmp26, label %bb8, label %bb28 - -bb28: ; preds = %bb8, %bb - %theDCTBufferIter.0.lcssa = phi i16* [ %tmp7, %bb ], [ %tmp10, %bb8 ] ; <i16*> [#uses=1] - store i16* %theDCTBufferIter.0.lcssa, i16** %tmp6, align 4 - %tmp37 = add i16 %component.09, 1 ; <i16> [#uses=2] - %phitmp15 = sext i16 %tmp37 to i32 ; <i32> [#uses=1] - %tmp46 = icmp slt i32 %phitmp15, 42 ; <i1> [#uses=1] - br i1 %tmp46, label %bb, label %bb49 - -bb49: ; preds = %bb28, %entry - ret i16 0 -} diff --git a/llvm/test/Transforms/IndVarSimplify/2008-10-03-CouldNotCompute.ll b/llvm/test/Transforms/IndVarSimplify/2008-10-03-CouldNotCompute.ll deleted file mode 100644 index 1248154c155..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2008-10-03-CouldNotCompute.ll +++ /dev/null @@ -1,32 +0,0 @@ -; RUN: opt < %s -indvars -; PR2857 - -@foo = external global i32 ; <i32*> [#uses=1] - -define void @test(i32 %n, i32 %arg) { -entry: - br i1 false, label %bb.nph, label %return - -bb.nph: ; preds = %entry - %0 = load i32, i32* @foo, align 4 ; <i32> [#uses=1] - %1 = sext i32 %0 to i64 ; <i64> [#uses=1] - br label %bb - -bb: ; preds = %bb, %bb.nph - %.in = phi i32 [ %2, %bb ], [ %n, %bb.nph ] ; <i32> [#uses=1] - %val.02 = phi i64 [ %5, %bb ], [ 0, %bb.nph ] ; <i64> [#uses=2] - %result.01 = phi i64 [ %4, %bb ], [ 0, %bb.nph ] ; <i64> [#uses=1] - %2 = add i32 %.in, -1 ; <i32> [#uses=2] - %3 = mul i64 %1, %val.02 ; <i64> [#uses=1] - %4 = add i64 %3, %result.01 ; <i64> [#uses=2] - %5 = add i64 %val.02, 1 ; <i64> [#uses=1] - %6 = icmp sgt i32 %2, 0 ; <i1> [#uses=1] - br i1 %6, label %bb, label %bb3.bb4_crit_edge - -bb3.bb4_crit_edge: ; preds = %bb - %.lcssa = phi i64 [ %4, %bb ] ; <i64> [#uses=0] - ret void - -return: ; preds = %entry - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/2008-11-25-APFloatAssert.ll b/llvm/test/Transforms/IndVarSimplify/2008-11-25-APFloatAssert.ll deleted file mode 100644 index 39b97af86fa..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2008-11-25-APFloatAssert.ll +++ /dev/null @@ -1,11 +0,0 @@ -; RUN: opt < %s -indvars - -define void @t() nounwind { -entry: - br label %bb23.i91 - -bb23.i91: ; preds = %bb23.i91, %entry - %result.0.i89 = phi ppc_fp128 [ 0xM00000000000000000000000000000000, %entry ], [ %0, %bb23.i91 ] ; <ppc_fp128> [#uses=2] - %0 = fmul ppc_fp128 %result.0.i89, %result.0.i89 ; <ppc_fp128> [#uses=1] - br label %bb23.i91 -} diff --git a/llvm/test/Transforms/IndVarSimplify/2009-04-14-shorten_iv_vars.ll b/llvm/test/Transforms/IndVarSimplify/2009-04-14-shorten_iv_vars.ll deleted file mode 100644 index 92260882144..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2009-04-14-shorten_iv_vars.ll +++ /dev/null @@ -1,116 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -; ModuleID = '<stdin>' -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-n32:64" -target triple = "x86_64-apple-darwin9.6" -@a = external global i32* ; <i32**> [#uses=3] -@b = external global i32* ; <i32**> [#uses=3] -@c = external global i32* ; <i32**> [#uses=3] -@d = external global i32* ; <i32**> [#uses=3] -@e = external global i32* ; <i32**> [#uses=3] -@f = external global i32* ; <i32**> [#uses=3] - -define void @foo() nounwind { -; CHECK-LABEL: @foo( -; CHECK-NOT: sext -bb1.thread: - br label %bb1 - -bb1: ; preds = %bb1, %bb1.thread - %i.0.reg2mem.0 = phi i32 [ 0, %bb1.thread ], [ %84, %bb1 ] ; <i32> [#uses=19] - %0 = load i32*, i32** @a, align 8 ; <i32*> [#uses=1] - %1 = load i32*, i32** @b, align 8 ; <i32*> [#uses=1] - %2 = sext i32 %i.0.reg2mem.0 to i64 ; <i64> [#uses=1] - %3 = getelementptr i32, i32* %1, i64 %2 ; <i32*> [#uses=1] - %4 = load i32, i32* %3, align 1 ; <i32> [#uses=1] - %5 = load i32*, i32** @c, align 8 ; <i32*> [#uses=1] - %6 = sext i32 %i.0.reg2mem.0 to i64 ; <i64> [#uses=1] - %7 = getelementptr i32, i32* %5, i64 %6 ; <i32*> [#uses=1] - %8 = load i32, i32* %7, align 1 ; <i32> [#uses=1] - %9 = add i32 %8, %4 ; <i32> [#uses=1] - %10 = sext i32 %i.0.reg2mem.0 to i64 ; <i64> [#uses=1] - %11 = getelementptr i32, i32* %0, i64 %10 ; <i32*> [#uses=1] - store i32 %9, i32* %11, align 1 - %12 = load i32*, i32** @a, align 8 ; <i32*> [#uses=1] - %13 = add i32 %i.0.reg2mem.0, 1 ; <i32> [#uses=1] - %14 = load i32*, i32** @b, align 8 ; <i32*> [#uses=1] - %15 = add i32 %i.0.reg2mem.0, 1 ; <i32> [#uses=1] - %16 = sext i32 %15 to i64 ; <i64> [#uses=1] - %17 = getelementptr i32, i32* %14, i64 %16 ; <i32*> [#uses=1] - %18 = load i32, i32* %17, align 1 ; <i32> [#uses=1] - %19 = load i32*, i32** @c, align 8 ; <i32*> [#uses=1] - %20 = add i32 %i.0.reg2mem.0, 1 ; <i32> [#uses=1] - %21 = sext i32 %20 to i64 ; <i64> [#uses=1] - %22 = getelementptr i32, i32* %19, i64 %21 ; <i32*> [#uses=1] - %23 = load i32, i32* %22, align 1 ; <i32> [#uses=1] - %24 = add i32 %23, %18 ; <i32> [#uses=1] - %25 = sext i32 %13 to i64 ; <i64> [#uses=1] - %26 = getelementptr i32, i32* %12, i64 %25 ; <i32*> [#uses=1] - store i32 %24, i32* %26, align 1 - %27 = load i32*, i32** @a, align 8 ; <i32*> [#uses=1] - %28 = add i32 %i.0.reg2mem.0, 2 ; <i32> [#uses=1] - %29 = load i32*, i32** @b, align 8 ; <i32*> [#uses=1] - %30 = add i32 %i.0.reg2mem.0, 2 ; <i32> [#uses=1] - %31 = sext i32 %30 to i64 ; <i64> [#uses=1] - %32 = getelementptr i32, i32* %29, i64 %31 ; <i32*> [#uses=1] - %33 = load i32, i32* %32, align 1 ; <i32> [#uses=1] - %34 = load i32*, i32** @c, align 8 ; <i32*> [#uses=1] - %35 = add i32 %i.0.reg2mem.0, 2 ; <i32> [#uses=1] - %36 = sext i32 %35 to i64 ; <i64> [#uses=1] - %37 = getelementptr i32, i32* %34, i64 %36 ; <i32*> [#uses=1] - %38 = load i32, i32* %37, align 1 ; <i32> [#uses=1] - %39 = add i32 %38, %33 ; <i32> [#uses=1] - %40 = sext i32 %28 to i64 ; <i64> [#uses=1] - %41 = getelementptr i32, i32* %27, i64 %40 ; <i32*> [#uses=1] - store i32 %39, i32* %41, align 1 - %42 = load i32*, i32** @d, align 8 ; <i32*> [#uses=1] - %43 = load i32*, i32** @e, align 8 ; <i32*> [#uses=1] - %44 = sext i32 %i.0.reg2mem.0 to i64 ; <i64> [#uses=1] - %45 = getelementptr i32, i32* %43, i64 %44 ; <i32*> [#uses=1] - %46 = load i32, i32* %45, align 1 ; <i32> [#uses=1] - %47 = load i32*, i32** @f, align 8 ; <i32*> [#uses=1] - %48 = sext i32 %i.0.reg2mem.0 to i64 ; <i64> [#uses=1] - %49 = getelementptr i32, i32* %47, i64 %48 ; <i32*> [#uses=1] - %50 = load i32, i32* %49, align 1 ; <i32> [#uses=1] - %51 = add i32 %50, %46 ; <i32> [#uses=1] - %52 = sext i32 %i.0.reg2mem.0 to i64 ; <i64> [#uses=1] - %53 = getelementptr i32, i32* %42, i64 %52 ; <i32*> [#uses=1] - store i32 %51, i32* %53, align 1 - %54 = load i32*, i32** @d, align 8 ; <i32*> [#uses=1] - %55 = add i32 %i.0.reg2mem.0, 1 ; <i32> [#uses=1] - %56 = load i32*, i32** @e, align 8 ; <i32*> [#uses=1] - %57 = add i32 %i.0.reg2mem.0, 1 ; <i32> [#uses=1] - %58 = sext i32 %57 to i64 ; <i64> [#uses=1] - %59 = getelementptr i32, i32* %56, i64 %58 ; <i32*> [#uses=1] - %60 = load i32, i32* %59, align 1 ; <i32> [#uses=1] - %61 = load i32*, i32** @f, align 8 ; <i32*> [#uses=1] - %62 = add i32 %i.0.reg2mem.0, 1 ; <i32> [#uses=1] - %63 = sext i32 %62 to i64 ; <i64> [#uses=1] - %64 = getelementptr i32, i32* %61, i64 %63 ; <i32*> [#uses=1] - %65 = load i32, i32* %64, align 1 ; <i32> [#uses=1] - %66 = add i32 %65, %60 ; <i32> [#uses=1] - %67 = sext i32 %55 to i64 ; <i64> [#uses=1] - %68 = getelementptr i32, i32* %54, i64 %67 ; <i32*> [#uses=1] - store i32 %66, i32* %68, align 1 - %69 = load i32*, i32** @d, align 8 ; <i32*> [#uses=1] - %70 = add i32 %i.0.reg2mem.0, 2 ; <i32> [#uses=1] - %71 = load i32*, i32** @e, align 8 ; <i32*> [#uses=1] - %72 = add i32 %i.0.reg2mem.0, 2 ; <i32> [#uses=1] - %73 = sext i32 %72 to i64 ; <i64> [#uses=1] - %74 = getelementptr i32, i32* %71, i64 %73 ; <i32*> [#uses=1] - %75 = load i32, i32* %74, align 1 ; <i32> [#uses=1] - %76 = load i32*, i32** @f, align 8 ; <i32*> [#uses=1] - %77 = add i32 %i.0.reg2mem.0, 2 ; <i32> [#uses=1] - %78 = sext i32 %77 to i64 ; <i64> [#uses=1] - %79 = getelementptr i32, i32* %76, i64 %78 ; <i32*> [#uses=1] - %80 = load i32, i32* %79, align 1 ; <i32> [#uses=1] - %81 = add i32 %80, %75 ; <i32> [#uses=1] - %82 = sext i32 %70 to i64 ; <i64> [#uses=1] - %83 = getelementptr i32, i32* %69, i64 %82 ; <i32*> [#uses=1] - store i32 %81, i32* %83, align 1 - %84 = add i32 %i.0.reg2mem.0, 1 ; <i32> [#uses=2] - %85 = icmp sgt i32 %84, 23646 ; <i1> [#uses=1] - br i1 %85, label %return, label %bb1 - -return: ; preds = %bb1 - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/2009-04-15-shorten-iv-vars-2.ll b/llvm/test/Transforms/IndVarSimplify/2009-04-15-shorten-iv-vars-2.ll deleted file mode 100644 index 67a971ac3d7..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2009-04-15-shorten-iv-vars-2.ll +++ /dev/null @@ -1,163 +0,0 @@ -; RUN: opt < %s -indvars -instcombine -S | FileCheck %s -; ModuleID = '<stdin>' -;extern int *a, *b, *c, *d, *e, *f; /* 64 bit */ -;extern int K[256]; -;void foo () { -; int i; -; for (i=0; i<23647; i++) { -; a[(i&15)] = b[i&15]+c[i&15]; -; a[(i+1)&15] = b[(i+1)&15]+c[(i+1)&15]; -; a[(i+2)&15] = b[(i+2)&15]+c[(i+2)&15]; -; d[i&15] = e[i&15]+f[i&15] +K[i]; -; d[(i+1)&15] = e[(i+1)&15]+f[(i+1)&15]+K[i+1]; -; d[(i+2)&15] = e[(i+2)&15]+f[(i+2)&15]+K[i+2]; -; } -;} -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-n32:64" -target triple = "x86_64-apple-darwin9.6" -@a = external global i32* ; <i32**> [#uses=3] -@b = external global i32* ; <i32**> [#uses=3] -@c = external global i32* ; <i32**> [#uses=3] -@d = external global i32* ; <i32**> [#uses=3] -@e = external global i32* ; <i32**> [#uses=3] -@f = external global i32* ; <i32**> [#uses=3] -@K = external global [256 x i32] ; <[256 x i32]*> [#uses=3] - -define void @foo() nounwind { -; CHECK-LABEL: @foo( -; CHECK-NOT: sext -; CHECK-NOT: zext -bb1.thread: - br label %bb1 - -bb1: ; preds = %bb1, %bb1.thread - %i.0.reg2mem.0 = phi i32 [ 0, %bb1.thread ], [ %116, %bb1 ] ; <i32> [#uses=22] - %0 = load i32*, i32** @a, align 8 ; <i32*> [#uses=1] - %1 = and i32 %i.0.reg2mem.0, 15 ; <i32> [#uses=1] - %2 = load i32*, i32** @b, align 8 ; <i32*> [#uses=1] - %3 = and i32 %i.0.reg2mem.0, 15 ; <i32> [#uses=1] - %4 = zext i32 %3 to i64 ; <i64> [#uses=1] - %5 = getelementptr i32, i32* %2, i64 %4 ; <i32*> [#uses=1] - %6 = load i32, i32* %5, align 1 ; <i32> [#uses=1] - %7 = load i32*, i32** @c, align 8 ; <i32*> [#uses=1] - %8 = and i32 %i.0.reg2mem.0, 15 ; <i32> [#uses=1] - %9 = zext i32 %8 to i64 ; <i64> [#uses=1] - %10 = getelementptr i32, i32* %7, i64 %9 ; <i32*> [#uses=1] - %11 = load i32, i32* %10, align 1 ; <i32> [#uses=1] - %12 = add i32 %11, %6 ; <i32> [#uses=1] - %13 = zext i32 %1 to i64 ; <i64> [#uses=1] - %14 = getelementptr i32, i32* %0, i64 %13 ; <i32*> [#uses=1] - store i32 %12, i32* %14, align 1 - %15 = load i32*, i32** @a, align 8 ; <i32*> [#uses=1] - %16 = add i32 %i.0.reg2mem.0, 1 ; <i32> [#uses=1] - %17 = and i32 %16, 15 ; <i32> [#uses=1] - %18 = load i32*, i32** @b, align 8 ; <i32*> [#uses=1] - %19 = add i32 %i.0.reg2mem.0, 1 ; <i32> [#uses=1] - %20 = and i32 %19, 15 ; <i32> [#uses=1] - %21 = zext i32 %20 to i64 ; <i64> [#uses=1] - %22 = getelementptr i32, i32* %18, i64 %21 ; <i32*> [#uses=1] - %23 = load i32, i32* %22, align 1 ; <i32> [#uses=1] - %24 = load i32*, i32** @c, align 8 ; <i32*> [#uses=1] - %25 = add i32 %i.0.reg2mem.0, 1 ; <i32> [#uses=1] - %26 = and i32 %25, 15 ; <i32> [#uses=1] - %27 = zext i32 %26 to i64 ; <i64> [#uses=1] - %28 = getelementptr i32, i32* %24, i64 %27 ; <i32*> [#uses=1] - %29 = load i32, i32* %28, align 1 ; <i32> [#uses=1] - %30 = add i32 %29, %23 ; <i32> [#uses=1] - %31 = zext i32 %17 to i64 ; <i64> [#uses=1] - %32 = getelementptr i32, i32* %15, i64 %31 ; <i32*> [#uses=1] - store i32 %30, i32* %32, align 1 - %33 = load i32*, i32** @a, align 8 ; <i32*> [#uses=1] - %34 = add i32 %i.0.reg2mem.0, 2 ; <i32> [#uses=1] - %35 = and i32 %34, 15 ; <i32> [#uses=1] - %36 = load i32*, i32** @b, align 8 ; <i32*> [#uses=1] - %37 = add i32 %i.0.reg2mem.0, 2 ; <i32> [#uses=1] - %38 = and i32 %37, 15 ; <i32> [#uses=1] - %39 = zext i32 %38 to i64 ; <i64> [#uses=1] - %40 = getelementptr i32, i32* %36, i64 %39 ; <i32*> [#uses=1] - %41 = load i32, i32* %40, align 1 ; <i32> [#uses=1] - %42 = load i32*, i32** @c, align 8 ; <i32*> [#uses=1] - %43 = add i32 %i.0.reg2mem.0, 2 ; <i32> [#uses=1] - %44 = and i32 %43, 15 ; <i32> [#uses=1] - %45 = zext i32 %44 to i64 ; <i64> [#uses=1] - %46 = getelementptr i32, i32* %42, i64 %45 ; <i32*> [#uses=1] - %47 = load i32, i32* %46, align 1 ; <i32> [#uses=1] - %48 = add i32 %47, %41 ; <i32> [#uses=1] - %49 = zext i32 %35 to i64 ; <i64> [#uses=1] - %50 = getelementptr i32, i32* %33, i64 %49 ; <i32*> [#uses=1] - store i32 %48, i32* %50, align 1 - %51 = load i32*, i32** @d, align 8 ; <i32*> [#uses=1] - %52 = and i32 %i.0.reg2mem.0, 15 ; <i32> [#uses=1] - %53 = load i32*, i32** @e, align 8 ; <i32*> [#uses=1] - %54 = and i32 %i.0.reg2mem.0, 15 ; <i32> [#uses=1] - %55 = zext i32 %54 to i64 ; <i64> [#uses=1] - %56 = getelementptr i32, i32* %53, i64 %55 ; <i32*> [#uses=1] - %57 = load i32, i32* %56, align 1 ; <i32> [#uses=1] - %58 = load i32*, i32** @f, align 8 ; <i32*> [#uses=1] - %59 = and i32 %i.0.reg2mem.0, 15 ; <i32> [#uses=1] - %60 = zext i32 %59 to i64 ; <i64> [#uses=1] - %61 = getelementptr i32, i32* %58, i64 %60 ; <i32*> [#uses=1] - %62 = load i32, i32* %61, align 1 ; <i32> [#uses=1] - %63 = sext i32 %i.0.reg2mem.0 to i64 ; <i64> [#uses=1] - %64 = getelementptr [256 x i32], [256 x i32]* @K, i64 0, i64 %63 ; <i32*> [#uses=1] - %65 = load i32, i32* %64, align 4 ; <i32> [#uses=1] - %66 = add i32 %62, %57 ; <i32> [#uses=1] - %67 = add i32 %66, %65 ; <i32> [#uses=1] - %68 = zext i32 %52 to i64 ; <i64> [#uses=1] - %69 = getelementptr i32, i32* %51, i64 %68 ; <i32*> [#uses=1] - store i32 %67, i32* %69, align 1 - %70 = load i32*, i32** @d, align 8 ; <i32*> [#uses=1] - %71 = add i32 %i.0.reg2mem.0, 1 ; <i32> [#uses=1] - %72 = and i32 %71, 15 ; <i32> [#uses=1] - %73 = load i32*, i32** @e, align 8 ; <i32*> [#uses=1] - %74 = add i32 %i.0.reg2mem.0, 1 ; <i32> [#uses=1] - %75 = and i32 %74, 15 ; <i32> [#uses=1] - %76 = zext i32 %75 to i64 ; <i64> [#uses=1] - %77 = getelementptr i32, i32* %73, i64 %76 ; <i32*> [#uses=1] - %78 = load i32, i32* %77, align 1 ; <i32> [#uses=1] - %79 = load i32*, i32** @f, align 8 ; <i32*> [#uses=1] - %80 = add i32 %i.0.reg2mem.0, 1 ; <i32> [#uses=1] - %81 = and i32 %80, 15 ; <i32> [#uses=1] - %82 = zext i32 %81 to i64 ; <i64> [#uses=1] - %83 = getelementptr i32, i32* %79, i64 %82 ; <i32*> [#uses=1] - %84 = load i32, i32* %83, align 1 ; <i32> [#uses=1] - %85 = add i32 %i.0.reg2mem.0, 1 ; <i32> [#uses=1] - %86 = sext i32 %85 to i64 ; <i64> [#uses=1] - %87 = getelementptr [256 x i32], [256 x i32]* @K, i64 0, i64 %86 ; <i32*> [#uses=1] - %88 = load i32, i32* %87, align 4 ; <i32> [#uses=1] - %89 = add i32 %84, %78 ; <i32> [#uses=1] - %90 = add i32 %89, %88 ; <i32> [#uses=1] - %91 = zext i32 %72 to i64 ; <i64> [#uses=1] - %92 = getelementptr i32, i32* %70, i64 %91 ; <i32*> [#uses=1] - store i32 %90, i32* %92, align 1 - %93 = load i32*, i32** @d, align 8 ; <i32*> [#uses=1] - %94 = add i32 %i.0.reg2mem.0, 2 ; <i32> [#uses=1] - %95 = and i32 %94, 15 ; <i32> [#uses=1] - %96 = load i32*, i32** @e, align 8 ; <i32*> [#uses=1] - %97 = add i32 %i.0.reg2mem.0, 2 ; <i32> [#uses=1] - %98 = and i32 %97, 15 ; <i32> [#uses=1] - %99 = zext i32 %98 to i64 ; <i64> [#uses=1] - %100 = getelementptr i32, i32* %96, i64 %99 ; <i32*> [#uses=1] - %101 = load i32, i32* %100, align 1 ; <i32> [#uses=1] - %102 = load i32*, i32** @f, align 8 ; <i32*> [#uses=1] - %103 = add i32 %i.0.reg2mem.0, 2 ; <i32> [#uses=1] - %104 = and i32 %103, 15 ; <i32> [#uses=1] - %105 = zext i32 %104 to i64 ; <i64> [#uses=1] - %106 = getelementptr i32, i32* %102, i64 %105 ; <i32*> [#uses=1] - %107 = load i32, i32* %106, align 1 ; <i32> [#uses=1] - %108 = add i32 %i.0.reg2mem.0, 2 ; <i32> [#uses=1] - %109 = sext i32 %108 to i64 ; <i64> [#uses=1] - %110 = getelementptr [256 x i32], [256 x i32]* @K, i64 0, i64 %109 ; <i32*> [#uses=1] - %111 = load i32, i32* %110, align 4 ; <i32> [#uses=1] - %112 = add i32 %107, %101 ; <i32> [#uses=1] - %113 = add i32 %112, %111 ; <i32> [#uses=1] - %114 = zext i32 %95 to i64 ; <i64> [#uses=1] - %115 = getelementptr i32, i32* %93, i64 %114 ; <i32*> [#uses=1] - store i32 %113, i32* %115, align 1 - %116 = add i32 %i.0.reg2mem.0, 1 ; <i32> [#uses=2] - %117 = icmp sgt i32 %116, 23646 ; <i1> [#uses=1] - br i1 %117, label %return, label %bb1 - -return: ; preds = %bb1 - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/2009-04-22-IndvarCrash.ll b/llvm/test/Transforms/IndVarSimplify/2009-04-22-IndvarCrash.ll deleted file mode 100644 index 24074bf7271..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2009-04-22-IndvarCrash.ll +++ /dev/null @@ -1,35 +0,0 @@ -; RUN: opt < %s -indvars -; rdar://6817574 - -define i32 @t1() nounwind ssp { -entry: - br label %bb32 - -bb32: ; preds = %bb32, %entry - %mbPartIdx.0.reg2mem.0 = phi i8 [ %2, %bb32 ], [ 0, %entry ] ; <i8> [#uses=3] - %0 = and i8 %mbPartIdx.0.reg2mem.0, 1 ; <i8> [#uses=0] - %1 = zext i8 %mbPartIdx.0.reg2mem.0 to i64 ; <i64> [#uses=0] - %2 = add i8 %mbPartIdx.0.reg2mem.0, 1 ; <i8> [#uses=2] - %3 = icmp ugt i8 %2, 3 ; <i1> [#uses=1] - br i1 %3, label %bb41, label %bb32 - -bb41: ; preds = %bb32 - ret i32 0 -} - -define i32 @t2() nounwind ssp { -entry: - br label %bb116 - -bb116: ; preds = %bb116, %entry - %mbPartIdx.1.reg2mem.0 = phi i8 [ %3, %bb116 ], [ 0, %entry ] ; <i8> [#uses=3] - %0 = and i8 %mbPartIdx.1.reg2mem.0, 1 ; <i8> [#uses=1] - %1 = zext i8 %mbPartIdx.1.reg2mem.0 to i64 ; <i64> [#uses=0] - %2 = zext i8 %0 to i32 ; <i32> [#uses=0] - %3 = add i8 %mbPartIdx.1.reg2mem.0, 1 ; <i8> [#uses=2] - %4 = icmp ugt i8 %3, 3 ; <i1> [#uses=1] - br i1 %4, label %bb131, label %bb116 - -bb131: ; preds = %bb116 - unreachable -} diff --git a/llvm/test/Transforms/IndVarSimplify/2009-04-27-Floating.ll b/llvm/test/Transforms/IndVarSimplify/2009-04-27-Floating.ll deleted file mode 100644 index 44c43a3a043..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2009-04-27-Floating.ll +++ /dev/null @@ -1,23 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -; PR4086 - -; Provide legal integer types. -target datalayout = "n8:16:32:64" - -declare void @foo() - -define void @test() { -entry: - br label %loop_body - -loop_body: - %i = phi float [ %nexti, %loop_body ], [ 0.0, %entry ] - tail call void @foo() - %nexti = fadd float %i, 1.0 - ; CHECK: icmp ne i32 %{{[a-zA-Z$._0-9]+}}, 2 - %less = fcmp olt float %nexti, 2.0 - br i1 %less, label %loop_body, label %done - -done: - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/2009-05-24-useafterfree.ll b/llvm/test/Transforms/IndVarSimplify/2009-05-24-useafterfree.ll deleted file mode 100644 index d211e3b824b..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2009-05-24-useafterfree.ll +++ /dev/null @@ -1,41 +0,0 @@ -; RUN: opt < %s -indvars -; PR4258 -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 = "i386-pc-linux-gnu" - -define void @0(i32*, i32*, i32, i32) nounwind { - br i1 false, label %bb.nph1.preheader, label %.outer._crit_edge - -bb.nph1.preheader: ; preds = %4 - %smax = select i1 false, i32 -1, i32 0 ; <i32> [#uses=1] - %tmp12 = sub i32 0, %smax ; <i32> [#uses=1] - br label %bb.nph1 - -bb.nph1: ; preds = %.outer, %bb.nph1.preheader - br i1 undef, label %bb.nph3.preheader, label %.outer - -bb.nph3.preheader: ; preds = %bb.nph1 - br label %bb.nph3 - -bb.nph3: ; preds = %bb.nph3, %bb.nph3.preheader - %indvar7 = phi i32 [ %indvar.next8, %bb.nph3 ], [ 0, %bb.nph3.preheader ] ; <i32> [#uses=3] - %tmp9 = mul i32 %indvar7, -1 ; <i32> [#uses=1] - %tmp13 = add i32 %tmp9, %tmp12 ; <i32> [#uses=1] - %tmp14 = add i32 %tmp13, -2 ; <i32> [#uses=1] - %5 = icmp sgt i32 %tmp14, 0 ; <i1> [#uses=1] - %indvar.next8 = add i32 %indvar7, 1 ; <i32> [#uses=1] - br i1 %5, label %bb.nph3, label %.outer.loopexit - -.outer.loopexit: ; preds = %bb.nph3 - %indvar7.lcssa = phi i32 [ %indvar7, %bb.nph3 ] ; <i32> [#uses=0] - br label %.outer - -.outer: ; preds = %.outer.loopexit, %bb.nph1 - br i1 undef, label %bb.nph1, label %.outer._crit_edge.loopexit - -.outer._crit_edge.loopexit: ; preds = %.outer - br label %.outer._crit_edge - -.outer._crit_edge: ; preds = %.outer._crit_edge.loopexit, %4 - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/2011-09-10-widen-nsw.ll b/llvm/test/Transforms/IndVarSimplify/2011-09-10-widen-nsw.ll deleted file mode 100644 index fb465a56def..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2011-09-10-widen-nsw.ll +++ /dev/null @@ -1,49 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -; Test WidenIV::GetExtendedOperandRecurrence. -; %add, %sub and %mul should be extended to i64 because it is nsw, even though its -; sext cannot be hoisted outside the loop. - -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-n8:16:32:64" - -declare void @use(i64 %x) - -define void @test() nounwind { -entry: - br i1 undef, label %for.body11, label %for.end285 - -for.body11: ; preds = %entry - %shl = shl i32 1, 1 - %shl132 = shl i32 %shl, 1 - br label %for.body153 - -for.body153: ; preds = %for.body153, %for.body11 - br i1 undef, label %for.body170, label %for.body153 - -; CHECK: add nuw nsw i64 %indvars.iv, 1 -; CHECK: sub nsw i64 %indvars.iv, 2 -; CHECK: sub nsw i64 4, %indvars.iv -; CHECK: mul nsw i64 %indvars.iv, 8 -for.body170: ; preds = %for.body170, %for.body153 - %i2.19 = phi i32 [ %add249, %for.body170 ], [ 0, %for.body153 ] - - %add = add nsw i32 %i2.19, 1 - %add.idxprom = sext i32 %add to i64 - call void @use(i64 %add.idxprom) - - %sub = sub nsw i32 %i2.19, 2 - %sub.idxprom = sext i32 %sub to i64 - call void @use(i64 %sub.idxprom) - - %sub.neg = sub nsw i32 4, %i2.19 - %sub.neg.idxprom = sext i32 %sub.neg to i64 - call void @use(i64 %sub.neg.idxprom) - - %mul = mul nsw i32 %i2.19, 8 - %mul.idxprom = sext i32 %mul to i64 - call void @use(i64 %mul.idxprom) - - %add249 = add nsw i32 %i2.19, %shl132 - br label %for.body170 -for.end285: ; preds = %entry - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/2011-09-19-vectoriv.ll b/llvm/test/Transforms/IndVarSimplify/2011-09-19-vectoriv.ll deleted file mode 100644 index 6a01012fe22..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2011-09-19-vectoriv.ll +++ /dev/null @@ -1,16 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -; PR10946: Vector IVs are not SCEVable. -; CHECK-NOT: phi -define void @test() nounwind { -allocas: - br i1 undef, label %cif_done, label %for_loop398 - -cif_done: ; preds = %allocas - ret void - -for_loop398: ; preds = %for_loop398, %allocas - %storemerge35 = phi <4 x i32> [ %storemerge, %for_loop398 ], [ undef, %allocas ] - %bincmp431 = icmp sge <4 x i32> %storemerge35, <i32 5, i32 5, i32 5, i32 5> - %storemerge = bitcast <4 x float> undef to <4 x i32> - br label %for_loop398 -} diff --git a/llvm/test/Transforms/IndVarSimplify/2011-09-27-hoistsext.ll b/llvm/test/Transforms/IndVarSimplify/2011-09-27-hoistsext.ll deleted file mode 100644 index f0765e7d4c6..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2011-09-27-hoistsext.ll +++ /dev/null @@ -1,28 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -; Test indvars' ability to hoist new sext created by WidenIV. -; From ffbench. - -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-n8:16:32:64" -define internal double @fourn(double* %data, i32 %x, i32 %y, i32 %n) nounwind { -; CHECK: entry: -; CHECK: sext -; CHECK: sext -entry: - br label %for.body - -; CHECK: for.body: -; CHECK-NOT: sext -; CHECK: br -for.body: - %i2.115 = phi i32 [ 0, %entry ], [ %add249, %for.body ] - %add174 = add nsw i32 %i2.115, %x - %idxprom177 = sext i32 %add174 to i64 - %arrayidx179 = getelementptr inbounds double, double* %data, i64 %idxprom177 - %tmp180 = load double, double* %arrayidx179, align 8 - %add249 = add nsw i32 %i2.115, %y - %cmp168 = icmp sgt i32 %add249, %n - br i1 %cmp168, label %exit, label %for.body - -exit: - ret double %tmp180 -} diff --git a/llvm/test/Transforms/IndVarSimplify/2011-10-27-lftrnull.ll b/llvm/test/Transforms/IndVarSimplify/2011-10-27-lftrnull.ll deleted file mode 100644 index 49e5d24296c..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2011-10-27-lftrnull.ll +++ /dev/null @@ -1,59 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -; rdar://10359193: assert "IndVar type must match IVInit type" - -target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32" -target triple = "thumbv7-apple-darwin" - -; CHECK-LABEL: @test( -; CHECK: if.end.i126: -; CHECK: %exitcond = icmp ne i8* %incdec.ptr.i, null -define void @test() nounwind { -entry: - br label %while.cond - -while.cond: - br i1 undef, label %while.end, label %while.body - -while.body: ; preds = %while.cond - br i1 undef, label %if.then165, label %while.cond - -if.then165: ; preds = %while.body - br i1 undef, label %while.cond, label %for.body.lr.ph.i81 - -for.body.lr.ph.i81: ; preds = %if.then165 - br label %for.body.i86 - -for.body.i86: ; preds = %for.end.i129, %for.body.lr.ph.i81 - %cmp196.i = icmp ult i32 0, undef - br i1 %cmp196.i, label %for.body21.lr.ph.i, label %for.end.i129 - -for.body21.lr.ph.i: ; preds = %for.body.i86 - br label %for.body21.i - -for.body21.i: - %destYPixelPtr.010.i = phi i8* [ null, %for.body21.lr.ph.i ], [ %incdec.ptr.i, %if.end.i126 ] - %x.09.i = phi i32 [ 0, %for.body21.lr.ph.i ], [ %inc.i125, %if.end.i126 ] - br i1 undef, label %if.end.i126, label %if.else.i124 - -if.else.i124: ; preds = %for.body21.i - store i8 undef, i8* %destYPixelPtr.010.i, align 1 - br label %if.end.i126 - -if.end.i126: ; preds = %if.else.i124, %for.body21.i - %incdec.ptr.i = getelementptr inbounds i8, i8* %destYPixelPtr.010.i, i32 1 - %inc.i125 = add i32 %x.09.i, 1 - %cmp19.i = icmp ult i32 %inc.i125, undef - br i1 %cmp19.i, label %for.body21.i, label %for.end.i129 - -for.end.i129: ; preds = %if.end.i126, %for.body.i86 - br i1 undef, label %for.body.i86, label %while.cond - -while.end: ; preds = %while.cond - br label %bail - -bail: ; preds = %while.end, %lor.lhs.false44, %lor.lhs.false41, %if.end29, %if.end - unreachable - -return: ; preds = %lor.lhs.false20, %lor.lhs.false12, %lor.lhs.false, %entry - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/2011-11-01-lftrptr.ll b/llvm/test/Transforms/IndVarSimplify/2011-11-01-lftrptr.ll deleted file mode 100644 index b9d571d9b64..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2011-11-01-lftrptr.ll +++ /dev/null @@ -1,144 +0,0 @@ -; RUN: opt < %s -indvars -S "-data-layout=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-n8:16:32:64" | FileCheck %s -; RUN: opt < %s -indvars -S "-data-layout=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-n8:16:32" | FileCheck %s -; -; PR11279: Assertion !IVLimit->getType()->isPointerTy() -; -; Test LinearFunctionTestReplace of a pointer-type loop counter. Note -; that BECount may or may not be a pointer type. A pointer type -; BECount doesn't really make sense, but that's what falls out of -; SCEV. Since it's an i8*, it has unit stride so we never adjust the -; SCEV expression in a way that would convert it to an integer type. - -; CHECK-LABEL: @testnullptrptr( -; CHECK: loop: -; CHECK: icmp ne -define i8 @testnullptrptr(i8* %buf, i8* %end) nounwind { - br label %loopguard - -loopguard: - %guard = icmp ult i8* null, %end - br i1 %guard, label %preheader, label %exit - -preheader: - br label %loop - -loop: - %p.01.us.us = phi i8* [ null, %preheader ], [ %gep, %loop ] - %s = phi i8 [0, %preheader], [%snext, %loop] - %gep = getelementptr inbounds i8, i8* %p.01.us.us, i64 1 - %snext = load i8, i8* %gep - %cmp = icmp ult i8* %gep, %end - br i1 %cmp, label %loop, label %exit - -exit: - %ret = phi i8 [0, %loopguard], [%snext, %loop] - ret i8 %ret -} - -; CHECK-LABEL: @testptrptr( -; CHECK: loop: -; CHECK: icmp ne -define i8 @testptrptr(i8* %buf, i8* %end) nounwind { - br label %loopguard - -loopguard: - %guard = icmp ult i8* %buf, %end - br i1 %guard, label %preheader, label %exit - -preheader: - br label %loop - -loop: - %p.01.us.us = phi i8* [ %buf, %preheader ], [ %gep, %loop ] - %s = phi i8 [0, %preheader], [%snext, %loop] - %gep = getelementptr inbounds i8, i8* %p.01.us.us, i64 1 - %snext = load i8, i8* %gep - %cmp = icmp ult i8* %gep, %end - br i1 %cmp, label %loop, label %exit - -exit: - %ret = phi i8 [0, %loopguard], [%snext, %loop] - ret i8 %ret -} - -; CHECK-LABEL: @testnullptrint( -; CHECK: loop: -; CHECK: icmp ne -define i8 @testnullptrint(i8* %buf, i8* %end) nounwind { - br label %loopguard - -loopguard: - %bi = ptrtoint i8* %buf to i32 - %ei = ptrtoint i8* %end to i32 - %cnt = sub i32 %ei, %bi - %guard = icmp ult i32 0, %cnt - br i1 %guard, label %preheader, label %exit - -preheader: - br label %loop - -loop: - %p.01.us.us = phi i8* [ null, %preheader ], [ %gep, %loop ] - %iv = phi i32 [ 0, %preheader ], [ %ivnext, %loop ] - %s = phi i8 [0, %preheader], [%snext, %loop] - %gep = getelementptr inbounds i8, i8* %p.01.us.us, i64 1 - %snext = load i8, i8* %gep - %ivnext = add i32 %iv, 1 - %cmp = icmp ult i32 %ivnext, %cnt - br i1 %cmp, label %loop, label %exit - -exit: - %ret = phi i8 [0, %loopguard], [%snext, %loop] - ret i8 %ret -} - -; CHECK-LABEL: @testptrint( -; CHECK: loop: -; CHECK: icmp ne -define i8 @testptrint(i8* %buf, i8* %end) nounwind { - br label %loopguard - -loopguard: - %bi = ptrtoint i8* %buf to i32 - %ei = ptrtoint i8* %end to i32 - %cnt = sub i32 %ei, %bi - %guard = icmp ult i32 %bi, %cnt - br i1 %guard, label %preheader, label %exit - -preheader: - br label %loop - -loop: - %p.01.us.us = phi i8* [ %buf, %preheader ], [ %gep, %loop ] - %iv = phi i32 [ %bi, %preheader ], [ %ivnext, %loop ] - %s = phi i8 [0, %preheader], [%snext, %loop] - %gep = getelementptr inbounds i8, i8* %p.01.us.us, i64 1 - %snext = load i8, i8* %gep - %ivnext = add i32 %iv, 1 - %cmp = icmp ult i32 %ivnext, %cnt - br i1 %cmp, label %loop, label %exit - -exit: - %ret = phi i8 [0, %loopguard], [%snext, %loop] - ret i8 %ret -} - -; IV and BECount have two different pointer types here. -define void @testnullptr([512 x i8]* %base) nounwind { -entry: - %add.ptr1603 = getelementptr [512 x i8], [512 x i8]* %base, i64 0, i64 512 - br label %preheader - -preheader: - %cmp1604192 = icmp ult i8* undef, %add.ptr1603 - br i1 %cmp1604192, label %for.body, label %for.end1609 - -for.body: - %r.17193 = phi i8* [ %incdec.ptr1608, %for.body ], [ null, %preheader ] - %incdec.ptr1608 = getelementptr i8, i8* %r.17193, i64 1 - %cmp1604 = icmp ult i8* %incdec.ptr1608, %add.ptr1603 - br i1 %cmp1604, label %for.body, label %for.end1609 - -for.end1609: - unreachable -} diff --git a/llvm/test/Transforms/IndVarSimplify/2011-11-15-multiexit.ll b/llvm/test/Transforms/IndVarSimplify/2011-11-15-multiexit.ll deleted file mode 100644 index 65b2cf68458..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2011-11-15-multiexit.ll +++ /dev/null @@ -1,40 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -; -; Prior to the fix for PR11375, indvars would replace %firstIV with a -; loop-invariant gep computed in the preheader. This was incorrect -; because it was based on the minimum "ExitNotTaken" count. If the -; final loop test is skipped (odd number of elements) then the early -; exit would be taken and the loop invariant value would be incorrect. - -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-n8:16:32:64-S128" -target triple = "x86_64-apple-darwin" - -; CHECK: if.end: -; CHECK: phi i32* [ %first.lcssa, %early.exit ] -define i32 @test(i32* %first, i32* %last) uwtable ssp { -entry: - br i1 undef, label %if.end, label %if.then - -if.then: ; preds = %entry - br i1 undef, label %if.end, label %do.body - -do.body: ; preds = %if.else, %if.then - %firstIV = phi i32* [ %incdec.ptr2, %if.else ], [ %first, %if.then ] - %incdec.ptr1 = getelementptr inbounds i32, i32* %firstIV, i64 1 - %cmp1 = icmp eq i32* %incdec.ptr1, %last - br i1 %cmp1, label %early.exit, label %if.else - -if.else: ; preds = %do.body - %incdec.ptr2 = getelementptr inbounds i32, i32* %firstIV, i64 2 - %cmp2 = icmp eq i32* %incdec.ptr2, %last - br i1 %cmp2, label %if.end, label %do.body - -early.exit: - %first.lcssa = phi i32* [ %firstIV, %do.body ] - br label %if.end - -if.end: - %tmp = phi i32* [ %first.lcssa, %early.exit ], [ %first, %if.then ], [ %first, %entry ], [ undef, %if.else ] - %val = load i32, i32* %tmp - ret i32 %val -} diff --git a/llvm/test/Transforms/IndVarSimplify/2011-11-17-selfphi.ll b/llvm/test/Transforms/IndVarSimplify/2011-11-17-selfphi.ll deleted file mode 100644 index 8f0cb80a107..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2011-11-17-selfphi.ll +++ /dev/null @@ -1,29 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -; PR11350: Check that SimplifyIndvar handles a cycle of useless self-phis. - -; CHECK-LABEL: @test( -; CHECK-NOT: lcssa = phi -define void @test() nounwind { -entry: - br label %for.cond.preheader - -for.cond.preheader: ; preds = %entry - br label %for.cond.outer - -for.cond.outer: ; preds = %for.cond.preheader, %for.end - %p_41.addr.0.ph = phi i32 [ %p_41.addr.1.lcssa, %for.end ], [ 1, %for.cond.preheader ] - br label %for.cond - -for.cond: - br i1 true, label %for.end, label %for.ph - -for.ph: ; preds = %for.cond4.preheader - br label %for.end - -for.end: - %p_41.addr.1.lcssa = phi i32 [ undef, %for.ph ], [ %p_41.addr.0.ph, %for.cond ] - %p_68.lobit.i = lshr i32 %p_41.addr.1.lcssa, 31 - %cmp7 = icmp eq i32 %p_41.addr.1.lcssa, 0 - %conv8 = zext i1 %cmp7 to i32 - br label %for.cond.outer -} diff --git a/llvm/test/Transforms/IndVarSimplify/2012-07-17-lftr-undef.ll b/llvm/test/Transforms/IndVarSimplify/2012-07-17-lftr-undef.ll deleted file mode 100644 index faecbfbe07a..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2012-07-17-lftr-undef.ll +++ /dev/null @@ -1,22 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -; PR13371: indvars pass incorrectly substitutes 'undef' values -; -; LFTR should not user %undef as the loop counter. -; CHECK-LABEL: @test( -; CHECK-NOT: icmp{{.*}}undef -@.str3 = private constant [6 x i8] c"%lld\0A\00", align 1 -declare i32 @printf(i8* noalias nocapture, ...) nounwind -define i64 @test() nounwind { -func_start: - br label %block9 -block9: ; preds = %block9,%func_start - %undef = phi i64 [ %next_undef, %block9 ], [ undef, %func_start ] - %iter = phi i64 [ %next_iter, %block9 ], [ 1, %func_start ] - %next_iter = add nsw i64 %iter, 1 - %0 = tail call i32 (i8*, ...) @printf(i8* noalias nocapture getelementptr inbounds ([6 x i8], [6 x i8]* @.str3, i64 0, i64 0), i64 %next_iter, i64 %undef) - %next_undef = add nsw i64 %undef, 1 - %_tmp_3 = icmp slt i64 %next_iter, 100 - br i1 %_tmp_3, label %block9, label %exit -exit: ; preds = %block9 - ret i64 0 -} diff --git a/llvm/test/Transforms/IndVarSimplify/2012-10-19-congruent-constant.ll b/llvm/test/Transforms/IndVarSimplify/2012-10-19-congruent-constant.ll deleted file mode 100644 index 5f6ff36cf57..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2012-10-19-congruent-constant.ll +++ /dev/null @@ -1,27 +0,0 @@ -; RUN: opt -S -indvars < %s | FileCheck %s - -; PR12627 -define void @test1(i32 %x) nounwind uwtable ssp { -entry: - br label %for.body - -for.body: ; preds = %for.body, %entry - %phi1 = phi i1 [ false, %entry ], [ %cmpa, %for.body ] - %phi2 = phi i1 [ false, %entry ], [ %cmpb, %for.body ] - %i.07 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - tail call void @aux(i1 %phi1, i1 %phi2) nounwind - %cmpa = icmp sgt i32 %i.07, 200 - %cmpb = icmp sgt i32 %i.07, 100 - %inc = add nsw i32 %i.07, 1 - %exitcond = icmp eq i32 %inc, 100 - br i1 %exitcond, label %for.end, label %for.body - -for.end: ; preds = %for.body - ret void - -; CHECK-LABEL: @test1( -; CHECK-NOT: phi i1 -; CHECK: call void @aux(i1 false, i1 false) -} - -declare void @aux(i1, i1) diff --git a/llvm/test/Transforms/IndVarSimplify/2014-06-21-congruent-constant.ll b/llvm/test/Transforms/IndVarSimplify/2014-06-21-congruent-constant.ll deleted file mode 100644 index 1d80e751dca..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/2014-06-21-congruent-constant.ll +++ /dev/null @@ -1,57 +0,0 @@ -; RUN: opt -S -loop-unswitch -instcombine -indvars < %s | FileCheck %s - -; This used to crash in SCEVExpander when there were congruent phis with and -; undef incoming value from the loop header. The -loop-unswitch -instcombine is -; necessary to create just this pattern, which is essentially a nop and gets -; folded away aggressively if spelled out in IR directly. -; PR 20093 - -@c = external global i32**, align 8 - -define void @test1() { -entry: - br i1 undef, label %for.end12, label %for.cond.preheader - -for.cond.preheader: ; preds = %entry - %0 = load i32**, i32*** @c, align 8 - %1 = load i32*, i32** %0, align 8 - %2 = load i32, i32* %1, align 4 - br label %for.body - -for.body: ; preds = %for.cond.backedge, %for.body9.us, %for.cond.preheader - %3 = phi i32* [ %1, %for.cond.preheader ], [ %3, %for.cond.backedge ], [ %6, %for.body9.us ] - %4 = phi i32 [ %2, %for.cond.preheader ], [ undef, %for.cond.backedge ], [ %7, %for.body9.us ] - %i.024 = phi i32 [ 0, %for.cond.preheader ], [ %inc, %for.cond.backedge ], [ 0, %for.body9.us ] - %tobool1 = icmp eq i32 %4, 0 - br i1 %tobool1, label %if.end, label %for.cond.backedge - -if.end: ; preds = %for.body - %5 = load i32, i32* %3, align 4 - %tobool4 = icmp eq i32 %5, 0 - br i1 %tobool4, label %for.cond3, label %for.body9.preheader - -for.body9.preheader: ; preds = %if.end - %tobool8 = icmp eq i32 %i.024, 1 - br i1 %tobool8, label %for.body9.us, label %for.body9 - -for.body9.us: ; preds = %for.body9.preheader - %6 = load i32*, i32** undef, align 8 - %7 = load i32, i32* %6, align 4 - br label %for.body - -for.cond3: ; preds = %for.cond3, %if.end - br label %for.cond3 - -for.body9: ; preds = %for.body9, %for.body9.preheader - br label %for.body9 - -for.cond.backedge: ; preds = %for.body - %inc = add nsw i32 %i.024, 1 - br i1 false, label %for.body, label %for.end12 - -for.end12: ; preds = %for.cond.backedge, %entry - ret void - -; CHECK-LABEL: @test1 -; CHECK-NOT: phi -} diff --git a/llvm/test/Transforms/IndVarSimplify/AMDGPU/lit.local.cfg b/llvm/test/Transforms/IndVarSimplify/AMDGPU/lit.local.cfg deleted file mode 100644 index 2a665f06be7..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/AMDGPU/lit.local.cfg +++ /dev/null @@ -1,2 +0,0 @@ -if not 'AMDGPU' in config.root.targets: - config.unsupported = True diff --git a/llvm/test/Transforms/IndVarSimplify/AMDGPU/no-widen-to-i64.ll b/llvm/test/Transforms/IndVarSimplify/AMDGPU/no-widen-to-i64.ll deleted file mode 100644 index 1e76cc1fbb0..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/AMDGPU/no-widen-to-i64.ll +++ /dev/null @@ -1,98 +0,0 @@ -; RUN: opt -S -mtriple=amdgcn-unknown-amdhsa -indvars %s | FileCheck %s - -; Bug 21148 - -; Induction variables should not be widened for 64-bit integers, -; despite being a legal type. -; -; The cost of basic arithmetic instructions on a 64-bit integer are -; twice as expensive as that on a 32-bit integer, or split into 2 -; 32-bit components. - -target datalayout = "e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32-p6:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-S32-A5" - -; CHECK-LABEL: @indvar_32_bit( -; CHECK-NOT: sext i32 -; CHECK: phi i32 -define amdgpu_kernel void @indvar_32_bit(i32 %n, i32* nocapture %output) { -entry: - %cmp5 = icmp sgt i32 %n, 0 - br i1 %cmp5, label %for.body.preheader, label %for.end - -for.body.preheader: ; preds = %entry - br label %for.body - -for.body: ; preds = %for.body.preheader, %for.body - %i.06 = phi i32 [ 0, %for.body.preheader ], [ %add, %for.body ] - %mul = mul nsw i32 %i.06, %i.06 - %tmp0 = sext i32 %i.06 to i64 - %arrayidx = getelementptr inbounds i32, i32* %output, i64 %tmp0 - store i32 %mul, i32* %arrayidx, align 4 - %add = add nsw i32 %i.06, 3 - %cmp = icmp slt i32 %add, %n - br i1 %cmp, label %for.body, label %for.end.loopexit - -for.end.loopexit: ; preds = %for.body - br label %for.end - -for.end: ; preds = %for.end.loopexit, %entry - ret void -} - -; CHECK-LABEL: @no_promote_i32( -; CHECK-NOT: sext i32 -; CHECK: br -; CHECK-NOT: shl i64 -; CHECK-NOT: ashr i64 -; CHECK-NOT: mul nsw i64 -; CHECK-NOT: add nsw i64 -define amdgpu_kernel void @no_promote_i32(i32 addrspace(1)* %out, i32 %a, i32 %b) { -entry: - br label %for.body - -for.body: - %inc = phi i32 [ 0, %entry ], [ %inc.i, %for.body ] - %tmp0 = add i32 %a, %inc - %shl = shl i32 %inc, 8 - %shr = ashr exact i32 %shl, 8 - %mul = mul nsw i32 %shr, %a - %add = add nsw i32 %mul, %b - %tmp1 = sext i32 %add to i64 - %arrayidx1 = getelementptr inbounds i32, i32 addrspace(1)* %out, i64 %tmp1 - store i32 %tmp0, i32 addrspace(1)* %arrayidx1, align 4 - %inc.i = add nsw i32 %inc, 1 - %cmp = icmp slt i32 %inc.i, 16 - br i1 %cmp, label %for.body, label %for.end - -for.end: - ret void -} - -; FIXME: This should really be promoted to i64, since it will need to -; be legalized anyway. - -; CHECK-LABEL: @indvar_48_bit( -define amdgpu_kernel void @indvar_48_bit(i48 %n, i48* nocapture %output) { -entry: - %cmp5 = icmp sgt i48 %n, 0 - br i1 %cmp5, label %for.body.preheader, label %for.end - -for.body.preheader: ; preds = %entry - br label %for.body - -for.body: ; preds = %for.body.preheader, %for.body - %i.06 = phi i48 [ 0, %for.body.preheader ], [ %add, %for.body ] - %mul = mul nsw i48 %i.06, %i.06 - %tmp0 = sext i48 %i.06 to i64 - %arrayidx = getelementptr inbounds i48, i48* %output, i64 %tmp0 - store i48 %mul, i48* %arrayidx, align 4 - %add = add nsw i48 %i.06, 3 - %cmp = icmp slt i48 %add, %n - br i1 %cmp, label %for.body, label %for.end.loopexit - -for.end.loopexit: ; preds = %for.body - br label %for.end - -for.end: ; preds = %for.end.loopexit, %entry - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/NVPTX/lit.local.cfg b/llvm/test/Transforms/IndVarSimplify/NVPTX/lit.local.cfg deleted file mode 100644 index 2cb98eb371b..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/NVPTX/lit.local.cfg +++ /dev/null @@ -1,2 +0,0 @@ -if not 'NVPTX' in config.root.targets: - config.unsupported = True diff --git a/llvm/test/Transforms/IndVarSimplify/NVPTX/no-widen-expensive.ll b/llvm/test/Transforms/IndVarSimplify/NVPTX/no-widen-expensive.ll deleted file mode 100644 index ae2cb7ffee8..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/NVPTX/no-widen-expensive.ll +++ /dev/null @@ -1,37 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -target triple = "nvptx64-unknown-unknown" - -; For the nvptx64 architecture, the cost of an arithmetic instruction on a -; 64-bit integer is twice as expensive as that on a 32-bit integer, because the -; hardware needs to simulate a 64-bit integer using two 32-bit integers. -; Therefore, in this particular architecture, we should not widen induction -; variables to 64-bit integers even though i64 is a legal type in the 64-bit -; PTX ISA. - -define void @indvar_32_bit(i32 %n, i32* nocapture %output) { -; CHECK-LABEL: @indvar_32_bit -entry: - %cmp5 = icmp sgt i32 %n, 0 - br i1 %cmp5, label %for.body.preheader, label %for.end - -for.body.preheader: ; preds = %entry - br label %for.body - -for.body: ; preds = %for.body.preheader, %for.body - %i.06 = phi i32 [ 0, %for.body.preheader ], [ %add, %for.body ] -; CHECK: phi i32 - %mul = mul nsw i32 %i.06, %i.06 - %0 = sext i32 %i.06 to i64 - %arrayidx = getelementptr inbounds i32, i32* %output, i64 %0 - store i32 %mul, i32* %arrayidx, align 4 - %add = add nsw i32 %i.06, 3 - %cmp = icmp slt i32 %add, %n - br i1 %cmp, label %for.body, label %for.end.loopexit - -for.end.loopexit: ; preds = %for.body - br label %for.end - -for.end: ; preds = %for.end.loopexit, %entry - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/ada-loops.ll b/llvm/test/Transforms/IndVarSimplify/ada-loops.ll deleted file mode 100644 index 4cc7cb65813..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/ada-loops.ll +++ /dev/null @@ -1,99 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -; -; PR1301 - -; Do a bunch of analysis and prove that the loops can use an i32 trip -; count without casting. -; -; Note that all four functions should actually be converted to -; memset. However, this test case validates indvars behavior. We -; don't check that phis are "folded together" because that is a job -; for loop strength reduction. But indvars must remove sext, zext, and add i8. -; - -; ModuleID = 'ada.bc' -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-n8:16:32" -target triple = "i686-pc-linux-gnu" - -; CHECK-LABEL: @kinds__sbytezero -; CHECK: bb.thread: -; CHECK: sext -; CHECK: bb: -; CHECK-NOT: {{sext i8|zext i8|add i8|trunc}} - -define void @kinds__sbytezero([256 x i32]* nocapture %a) nounwind { -bb.thread: - %tmp46 = getelementptr [256 x i32], [256 x i32]* %a, i32 0, i32 0 ; <i32*> [#uses=1] - store i32 0, i32* %tmp46 - br label %bb - -bb: ; preds = %bb, %bb.thread - %i.0.reg2mem.0 = phi i8 [ -128, %bb.thread ], [ %tmp8, %bb ] ; <i8> [#uses=1] - %tmp8 = add i8 %i.0.reg2mem.0, 1 ; <i8> [#uses=3] - %tmp1 = sext i8 %tmp8 to i32 ; <i32> [#uses=1] - %tmp3 = add i32 %tmp1, 128 ; <i32> [#uses=1] - %tmp4 = getelementptr [256 x i32], [256 x i32]* %a, i32 0, i32 %tmp3 ; <i32*> [#uses=1] - store i32 0, i32* %tmp4 - %0 = icmp eq i8 %tmp8, 127 ; <i1> [#uses=1] - br i1 %0, label %return, label %bb - -return: ; preds = %bb - ret void -} - -; CHECK-LABEL: @kinds__ubytezero - -define void @kinds__ubytezero([256 x i32]* nocapture %a) nounwind { -bb.thread: - %tmp35 = getelementptr [256 x i32], [256 x i32]* %a, i32 0, i32 0 ; <i32*> [#uses=1] - store i32 0, i32* %tmp35 - br label %bb - -bb: ; preds = %bb, %bb.thread - %i.0.reg2mem.0 = phi i8 [ 0, %bb.thread ], [ %tmp7, %bb ] ; <i8> [#uses=1] - %tmp7 = add i8 %i.0.reg2mem.0, 1 ; <i8> [#uses=3] - %tmp1 = zext i8 %tmp7 to i32 ; <i32> [#uses=1] - %tmp3 = getelementptr [256 x i32], [256 x i32]* %a, i32 0, i32 %tmp1 ; <i32*> [#uses=1] - store i32 0, i32* %tmp3 - %0 = icmp eq i8 %tmp7, -1 ; <i1> [#uses=1] - br i1 %0, label %return, label %bb - -return: ; preds = %bb - ret void -} - -define void @kinds__srangezero([21 x i32]* nocapture %a) nounwind { -bb.thread: - br label %bb - -bb: ; preds = %bb, %bb.thread - %i.0.reg2mem.0 = phi i8 [ -10, %bb.thread ], [ %tmp7, %bb ] ; <i8> [#uses=2] - %tmp12 = sext i8 %i.0.reg2mem.0 to i32 ; <i32> [#uses=1] - %tmp4 = add i32 %tmp12, 10 ; <i32> [#uses=1] - %tmp5 = getelementptr [21 x i32], [21 x i32]* %a, i32 0, i32 %tmp4 ; <i32*> [#uses=1] - store i32 0, i32* %tmp5 - %tmp7 = add i8 %i.0.reg2mem.0, 1 ; <i8> [#uses=2] - %0 = icmp sgt i8 %tmp7, 10 ; <i1> [#uses=1] - br i1 %0, label %return, label %bb - -return: ; preds = %bb - ret void -} - -define void @kinds__urangezero([21 x i32]* nocapture %a) nounwind { -bb.thread: - br label %bb - -bb: ; preds = %bb, %bb.thread - %i.0.reg2mem.0 = phi i8 [ 10, %bb.thread ], [ %tmp7, %bb ] ; <i8> [#uses=2] - %tmp12 = sext i8 %i.0.reg2mem.0 to i32 ; <i32> [#uses=1] - %tmp4 = add i32 %tmp12, -10 ; <i32> [#uses=1] - %tmp5 = getelementptr [21 x i32], [21 x i32]* %a, i32 0, i32 %tmp4 ; <i32*> [#uses=1] - store i32 0, i32* %tmp5 - %tmp7 = add i8 %i.0.reg2mem.0, 1 ; <i8> [#uses=2] - %0 = icmp sgt i8 %tmp7, 30 ; <i1> [#uses=1] - br i1 %0, label %return, label %bb - -return: ; preds = %bb - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/ashr-tripcount.ll b/llvm/test/Transforms/IndVarSimplify/ashr-tripcount.ll deleted file mode 100644 index 19065dba1bf..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/ashr-tripcount.ll +++ /dev/null @@ -1,109 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -; Indvars should be able to eliminate all of the sign extensions -; inside the loop. - -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-n32:64" -@pow_2_tab = external constant [0 x float] ; <[0 x float]*> [#uses=1] -@pow_2_025_tab = external constant [0 x float] ; <[0 x float]*> [#uses=1] -@i_pow_2_tab = external constant [0 x float] ; <[0 x float]*> [#uses=1] -@i_pow_2_025_tab = external constant [0 x float] ; <[0 x float]*> [#uses=1] - -define void @foo(i32 %gain, i32 %noOfLines, i32* %quaSpectrum, float* %iquaSpectrum, float* %pow4_3_tab_ptr) nounwind { -; CHECK-LABEL: @foo( -; CHECK: sext -; CHECK-NOT: sext -entry: - %t0 = icmp slt i32 %gain, 0 ; <i1> [#uses=1] - br i1 %t0, label %bb1, label %bb2 - -bb1: ; preds = %entry - %t1 = sub i32 0, %gain ; <i32> [#uses=1] - %t2 = sub i32 0, %gain ; <i32> [#uses=1] - br label %bb2 - -bb2: ; preds = %bb1, %entry - %pow_2_tab.pn = phi [0 x float]* [ @i_pow_2_tab, %bb1 ], [ @pow_2_tab, %entry ] ; <[0 x float]*> [#uses=1] - %.pn3.in.in = phi i32 [ %t1, %bb1 ], [ %gain, %entry ] ; <i32> [#uses=1] - %pow_2_025_tab.pn = phi [0 x float]* [ @i_pow_2_025_tab, %bb1 ], [ @pow_2_025_tab, %entry ] ; <[0 x float]*> [#uses=1] - %.pn2.in.in = phi i32 [ %t2, %bb1 ], [ %gain, %entry ] ; <i32> [#uses=1] - %.pn3.in = ashr i32 %.pn3.in.in, 2 ; <i32> [#uses=1] - %.pn2.in = and i32 %.pn2.in.in, 3 ; <i32> [#uses=1] - %.pn3 = sext i32 %.pn3.in to i64 ; <i64> [#uses=1] - %.pn2 = zext i32 %.pn2.in to i64 ; <i64> [#uses=1] - %.pn.in = getelementptr [0 x float], [0 x float]* %pow_2_tab.pn, i64 0, i64 %.pn3 ; <float*> [#uses=1] - %.pn1.in = getelementptr [0 x float], [0 x float]* %pow_2_025_tab.pn, i64 0, i64 %.pn2 ; <float*> [#uses=1] - %.pn = load float, float* %.pn.in ; <float> [#uses=1] - %.pn1 = load float, float* %.pn1.in ; <float> [#uses=1] - %invQuantizer.0 = fmul float %.pn, %.pn1 ; <float> [#uses=4] - %t3 = ashr i32 %noOfLines, 2 ; <i32> [#uses=1] - %t4 = icmp sgt i32 %t3, 0 ; <i1> [#uses=1] - br i1 %t4, label %bb.nph, label %return - -bb.nph: ; preds = %bb2 - %t5 = ashr i32 %noOfLines, 2 ; <i32> [#uses=1] - br label %bb3 - -bb3: ; preds = %bb4, %bb.nph - %i.05 = phi i32 [ %t49, %bb4 ], [ 0, %bb.nph ] ; <i32> [#uses=9] - %k.04 = phi i32 [ %t48, %bb4 ], [ 0, %bb.nph ] ; <i32> [#uses=1] - %t6 = sext i32 %i.05 to i64 ; <i64> [#uses=1] - %t7 = getelementptr i32, i32* %quaSpectrum, i64 %t6 ; <i32*> [#uses=1] - %t8 = load i32, i32* %t7, align 4 ; <i32> [#uses=1] - %t9 = zext i32 %t8 to i64 ; <i64> [#uses=1] - %t10 = getelementptr float, float* %pow4_3_tab_ptr, i64 %t9 ; <float*> [#uses=1] - %t11 = load float, float* %t10, align 4 ; <float> [#uses=1] - %t12 = or i32 %i.05, 1 ; <i32> [#uses=1] - %t13 = sext i32 %t12 to i64 ; <i64> [#uses=1] - %t14 = getelementptr i32, i32* %quaSpectrum, i64 %t13 ; <i32*> [#uses=1] - %t15 = load i32, i32* %t14, align 4 ; <i32> [#uses=1] - %t16 = zext i32 %t15 to i64 ; <i64> [#uses=1] - %t17 = getelementptr float, float* %pow4_3_tab_ptr, i64 %t16 ; <float*> [#uses=1] - %t18 = load float, float* %t17, align 4 ; <float> [#uses=1] - %t19 = or i32 %i.05, 2 ; <i32> [#uses=1] - %t20 = sext i32 %t19 to i64 ; <i64> [#uses=1] - %t21 = getelementptr i32, i32* %quaSpectrum, i64 %t20 ; <i32*> [#uses=1] - %t22 = load i32, i32* %t21, align 4 ; <i32> [#uses=1] - %t23 = zext i32 %t22 to i64 ; <i64> [#uses=1] - %t24 = getelementptr float, float* %pow4_3_tab_ptr, i64 %t23 ; <float*> [#uses=1] - %t25 = load float, float* %t24, align 4 ; <float> [#uses=1] - %t26 = or i32 %i.05, 3 ; <i32> [#uses=1] - %t27 = sext i32 %t26 to i64 ; <i64> [#uses=1] - %t28 = getelementptr i32, i32* %quaSpectrum, i64 %t27 ; <i32*> [#uses=1] - %t29 = load i32, i32* %t28, align 4 ; <i32> [#uses=1] - %t30 = zext i32 %t29 to i64 ; <i64> [#uses=1] - %t31 = getelementptr float, float* %pow4_3_tab_ptr, i64 %t30 ; <float*> [#uses=1] - %t32 = load float, float* %t31, align 4 ; <float> [#uses=1] - %t33 = fmul float %t11, %invQuantizer.0 ; <float> [#uses=1] - %t34 = sext i32 %i.05 to i64 ; <i64> [#uses=1] - %t35 = getelementptr float, float* %iquaSpectrum, i64 %t34 ; <float*> [#uses=1] - store float %t33, float* %t35, align 4 - %t36 = or i32 %i.05, 1 ; <i32> [#uses=1] - %t37 = fmul float %t18, %invQuantizer.0 ; <float> [#uses=1] - %t38 = sext i32 %t36 to i64 ; <i64> [#uses=1] - %t39 = getelementptr float, float* %iquaSpectrum, i64 %t38 ; <float*> [#uses=1] - store float %t37, float* %t39, align 4 - %t40 = or i32 %i.05, 2 ; <i32> [#uses=1] - %t41 = fmul float %t25, %invQuantizer.0 ; <float> [#uses=1] - %t42 = sext i32 %t40 to i64 ; <i64> [#uses=1] - %t43 = getelementptr float, float* %iquaSpectrum, i64 %t42 ; <float*> [#uses=1] - store float %t41, float* %t43, align 4 - %t44 = or i32 %i.05, 3 ; <i32> [#uses=1] - %t45 = fmul float %t32, %invQuantizer.0 ; <float> [#uses=1] - %t46 = sext i32 %t44 to i64 ; <i64> [#uses=1] - %t47 = getelementptr float, float* %iquaSpectrum, i64 %t46 ; <float*> [#uses=1] - store float %t45, float* %t47, align 4 - %t48 = add i32 %k.04, 1 ; <i32> [#uses=2] - %t49 = add i32 %i.05, 4 ; <i32> [#uses=1] - br label %bb4 - -bb4: ; preds = %bb3 - %t50 = icmp sgt i32 %t5, %t48 ; <i1> [#uses=1] - br i1 %t50, label %bb3, label %bb4.return_crit_edge - -bb4.return_crit_edge: ; preds = %bb4 - br label %return - -return: ; preds = %bb4.return_crit_edge, %bb2 - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/avoid-i0.ll b/llvm/test/Transforms/IndVarSimplify/avoid-i0.ll deleted file mode 100644 index cc38590c099..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/avoid-i0.ll +++ /dev/null @@ -1,126 +0,0 @@ -; RUN: opt < %s -indvars -; PR4052 -; PR4054 - -; Don't treat an and with 0 as a mask (trunc+zext). - -define i32 @int80(i8 signext %p_71) nounwind { -entry: - br label %bb - -bb: ; preds = %bb6, %entry - %p_71_addr.0 = phi i8 [ %p_71, %entry ], [ %0, %bb6 ] ; <i8> [#uses=0] - br i1 undef, label %bb4, label %bb1 - -bb1: ; preds = %bb - ret i32 0 - -bb4: ; preds = %bb4, %bb - br i1 undef, label %bb6, label %bb4 - -bb6: ; preds = %bb4 - %0 = and i8 0, 0 ; <i8> [#uses=1] - br label %bb -} - -@x = common global i32 0 ; <i32*> [#uses=1] - -define signext i8 @safe_sub_func_int32_t_s_s(i32 %_si1, i8 signext %_si2) nounwind { -entry: - %_si1_addr = alloca i32 ; <i32*> [#uses=3] - %_si2_addr = alloca i8 ; <i8*> [#uses=3] - %retval = alloca i32 ; <i32*> [#uses=2] - %0 = alloca i32 ; <i32*> [#uses=2] - %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] - store i32 %_si1, i32* %_si1_addr - store i8 %_si2, i8* %_si2_addr - %1 = load i8, i8* %_si2_addr, align 1 ; <i8> [#uses=1] - %2 = sext i8 %1 to i32 ; <i32> [#uses=1] - %3 = load i32, i32* %_si1_addr, align 4 ; <i32> [#uses=1] - %4 = xor i32 %2, %3 ; <i32> [#uses=1] - %5 = load i8, i8* %_si2_addr, align 1 ; <i8> [#uses=1] - %6 = sext i8 %5 to i32 ; <i32> [#uses=1] - %7 = sub i32 7, %6 ; <i32> [#uses=1] - %8 = load i32, i32* %_si1_addr, align 4 ; <i32> [#uses=1] - %9 = shl i32 %8, %7 ; <i32> [#uses=1] - %10 = and i32 %4, %9 ; <i32> [#uses=1] - %11 = icmp slt i32 %10, 0 ; <i1> [#uses=1] - %12 = zext i1 %11 to i32 ; <i32> [#uses=1] - store i32 %12, i32* %0, align 4 - %13 = load i32, i32* %0, align 4 ; <i32> [#uses=1] - store i32 %13, i32* %retval, align 4 - br label %return - -return: ; preds = %entry - %retval1 = load i32, i32* %retval ; <i32> [#uses=1] - %retval12 = trunc i32 %retval1 to i8 ; <i8> [#uses=1] - ret i8 %retval12 -} - -define i32 @safe_sub_func_uint64_t_u_u(i32 %_ui1, i32 %_ui2) nounwind { -entry: - %_ui1_addr = alloca i32 ; <i32*> [#uses=2] - %_ui2_addr = alloca i32 ; <i32*> [#uses=1] - %retval = alloca i32 ; <i32*> [#uses=2] - %0 = alloca i32 ; <i32*> [#uses=2] - %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] - store i32 %_ui1, i32* %_ui1_addr - store i32 %_ui2, i32* %_ui2_addr - %1 = load i32, i32* %_ui1_addr, align 4 ; <i32> [#uses=1] - %2 = sub i32 %1, 1 ; <i32> [#uses=1] - store i32 %2, i32* %0, align 4 - %3 = load i32, i32* %0, align 4 ; <i32> [#uses=1] - store i32 %3, i32* %retval, align 4 - br label %return - -return: ; preds = %entry - %retval1 = load i32, i32* %retval ; <i32> [#uses=1] - ret i32 %retval1 -} - -define void @int87(i8 signext %p_48, i8 signext %p_49) nounwind { -entry: - %p_48_addr = alloca i8 ; <i8*> [#uses=1] - %p_49_addr = alloca i8 ; <i8*> [#uses=1] - %l_52 = alloca i32 ; <i32*> [#uses=7] - %vol.0 = alloca i32 ; <i32*> [#uses=1] - %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] - store i8 %p_48, i8* %p_48_addr - store i8 %p_49, i8* %p_49_addr - br label %bb4 - -bb: ; preds = %bb4 - %0 = load volatile i32, i32* @x, align 4 ; <i32> [#uses=1] - store i32 %0, i32* %vol.0, align 4 - store i32 0, i32* %l_52, align 4 - br label %bb2 - -bb1: ; preds = %bb2 - %1 = load i32, i32* %l_52, align 4 ; <i32> [#uses=1] - %2 = call i32 @safe_sub_func_uint64_t_u_u(i32 %1, i32 1) nounwind ; <i32> [#uses=1] - store i32 %2, i32* %l_52, align 4 - br label %bb2 - -bb2: ; preds = %bb1, %bb - %3 = load i32, i32* %l_52, align 4 ; <i32> [#uses=1] - %4 = icmp eq i32 %3, 0 ; <i1> [#uses=1] - br i1 %4, label %bb1, label %bb3 - -bb3: ; preds = %bb2 - %5 = load i32, i32* %l_52, align 4 ; <i32> [#uses=1] - %6 = call signext i8 @safe_sub_func_int32_t_s_s(i32 %5, i8 signext 1) nounwind ; <i8> [#uses=1] - %7 = sext i8 %6 to i32 ; <i32> [#uses=1] - store i32 %7, i32* %l_52, align 4 - br label %bb4 - -bb4: ; preds = %bb3, %entry - %8 = load i32, i32* %l_52, align 4 ; <i32> [#uses=1] - %9 = icmp ne i32 %8, 0 ; <i1> [#uses=1] - br i1 %9, label %bb, label %bb5 - -bb5: ; preds = %bb4 - br label %return - -return: ; preds = %bb5 - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/backedge-on-min-max.ll b/llvm/test/Transforms/IndVarSimplify/backedge-on-min-max.ll deleted file mode 100644 index bc846c49a8a..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/backedge-on-min-max.ll +++ /dev/null @@ -1,454 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -; RUN: opt -lcssa -loop-simplify -S < %s | opt -S -passes='require<targetir>,require<scalar-evolution>,require<domtree>,loop(indvars)' - -;; --- signed --- - -define void @min.signed.1(i32* %a, i32 %a_len, i32 %n) { -; CHECK-LABEL: @min.signed.1 - entry: - %smin.cmp = icmp slt i32 %a_len, %n - %smin = select i1 %smin.cmp, i32 %a_len, i32 %n - %entry.cond = icmp slt i32 0, %smin - br i1 %entry.cond, label %loop, label %exit - - loop: - %idx = phi i32 [ 0, %entry ], [ %idx.inc, %latch ] - %idx.inc = add i32 %idx, 1 - %in.bounds = icmp slt i32 %idx, %a_len - br i1 %in.bounds, label %ok, label %latch -; CHECK: br i1 true, label %ok, label %latch - - ok: - %addr = getelementptr i32, i32* %a, i32 %idx - store i32 %idx, i32* %addr - br label %latch - - latch: - %be.cond = icmp slt i32 %idx.inc, %smin - br i1 %be.cond, label %loop, label %exit - - exit: - ret void -} - -define void @min.signed.2(i32* %a, i32 %a_len, i32 %n) { -; CHECK-LABEL: @min.signed.2 - entry: - %smin.cmp = icmp slt i32 %a_len, %n - %smin = select i1 %smin.cmp, i32 %a_len, i32 %n - %entry.cond = icmp slt i32 0, %smin - br i1 %entry.cond, label %loop, label %exit - - loop: - %idx = phi i32 [ 0, %entry ], [ %idx.inc, %latch ] - %idx.inc = add i32 %idx, 1 - %in.bounds = icmp sgt i32 %a_len, %idx - br i1 %in.bounds, label %ok, label %latch -; CHECK: br i1 true, label %ok, label %latch - - ok: - %addr = getelementptr i32, i32* %a, i32 %idx - store i32 %idx, i32* %addr - br label %latch - - latch: - %be.cond = icmp slt i32 %idx.inc, %smin - br i1 %be.cond, label %loop, label %exit - - exit: - ret void -} - -define void @min.signed.3(i32* %a, i32 %n) { -; CHECK-LABEL: @min.signed.3 - entry: - %smin.cmp = icmp slt i32 42, %n - %smin = select i1 %smin.cmp, i32 42, i32 %n - %entry.cond = icmp slt i32 0, %smin - br i1 %entry.cond, label %loop, label %exit - - loop: - %idx = phi i32 [ 0, %entry ], [ %idx.inc, %latch ] - %idx.inc = add i32 %idx, 1 - %in.bounds = icmp slt i32 %idx, 42 - br i1 %in.bounds, label %ok, label %latch -; CHECK: br i1 true, label %ok, label %latch - - ok: - %addr = getelementptr i32, i32* %a, i32 %idx - store i32 %idx, i32* %addr - br label %latch - - latch: - %be.cond = icmp slt i32 %idx.inc, %smin - br i1 %be.cond, label %loop, label %exit - - exit: - ret void -} - -define void @min.signed.4(i32* %a, i32 %n) { -; CHECK-LABEL: @min.signed.4 - entry: - %smin.cmp = icmp slt i32 42, %n - %smin = select i1 %smin.cmp, i32 42, i32 %n - %entry.cond = icmp slt i32 0, %smin - br i1 %entry.cond, label %loop, label %exit - - loop: - %idx = phi i32 [ 0, %entry ], [ %idx.inc, %latch ] - %idx.inc = add i32 %idx, 1 - %in.bounds = icmp sgt i32 42, %idx - br i1 %in.bounds, label %ok, label %latch -; CHECK: br i1 true, label %ok, label %latch - - ok: - %addr = getelementptr i32, i32* %a, i32 %idx - store i32 %idx, i32* %addr - br label %latch - - latch: - %be.cond = icmp slt i32 %idx.inc, %smin - br i1 %be.cond, label %loop, label %exit - - exit: - ret void -} - -define void @max.signed.1(i32* %a, i32 %a_len, i32 %n) { -; CHECK-LABEL: @max.signed.1 - entry: - %smax.cmp = icmp sgt i32 %a_len, %n - %smax = select i1 %smax.cmp, i32 %a_len, i32 %n - %entry.cond = icmp sgt i32 0, %smax - br i1 %entry.cond, label %loop, label %exit - - loop: - %idx = phi i32 [ 0, %entry ], [ %idx.inc, %latch ] - %idx.inc = add i32 %idx, 1 - %in.bounds = icmp sgt i32 %idx, %a_len - br i1 %in.bounds, label %ok, label %latch -; CHECK: br i1 true, label %ok, label %latch - - ok: - %addr = getelementptr i32, i32* %a, i32 %idx - store i32 %idx, i32* %addr - br label %latch - - latch: - %be.cond = icmp sgt i32 %idx.inc, %smax - br i1 %be.cond, label %loop, label %exit - - exit: - ret void -} - -define void @max.signed.2(i32* %a, i32 %a_len, i32 %n) { -; CHECK-LABEL: @max.signed.2 - entry: - %smax.cmp = icmp sgt i32 %a_len, %n - %smax = select i1 %smax.cmp, i32 %a_len, i32 %n - %entry.cond = icmp sgt i32 0, %smax - br i1 %entry.cond, label %loop, label %exit - - loop: - %idx = phi i32 [ 0, %entry ], [ %idx.inc, %latch ] - %idx.inc = add i32 %idx, 1 - %in.bounds = icmp slt i32 %a_len, %idx - br i1 %in.bounds, label %ok, label %latch -; CHECK: br i1 true, label %ok, label %latch - - ok: - %addr = getelementptr i32, i32* %a, i32 %idx - store i32 %idx, i32* %addr - br label %latch - - latch: - %be.cond = icmp sgt i32 %idx.inc, %smax - br i1 %be.cond, label %loop, label %exit - - exit: - ret void -} - -define void @max.signed.3(i32* %a, i32 %n, i32 %init) { -; CHECK-LABEL: @max.signed.3 - entry: - %smax.cmp = icmp sgt i32 42, %n - %smax = select i1 %smax.cmp, i32 42, i32 %n - %entry.cond = icmp sgt i32 %init, %smax - br i1 %entry.cond, label %loop, label %exit - - loop: - %idx = phi i32 [ %init, %entry ], [ %idx.inc, %latch ] - %idx.inc = add i32 %idx, 1 - %in.bounds = icmp sgt i32 %idx, 42 - br i1 %in.bounds, label %ok, label %latch -; CHECK: br i1 true, label %ok, label %latch - - ok: - %addr = getelementptr i32, i32* %a, i32 %idx - store i32 %idx, i32* %addr - br label %latch - - latch: - %be.cond = icmp sgt i32 %idx.inc, %smax - br i1 %be.cond, label %loop, label %exit - - exit: - ret void -} - -define void @max.signed.4(i32* %a, i32 %n, i32 %init) { -; CHECK-LABEL: @max.signed.4 - entry: - %smax.cmp = icmp sgt i32 42, %n - %smax = select i1 %smax.cmp, i32 42, i32 %n - %entry.cond = icmp sgt i32 %init, %smax - br i1 %entry.cond, label %loop, label %exit - - loop: - %idx = phi i32 [ %init, %entry ], [ %idx.inc, %latch ] - %idx.inc = add i32 %idx, 1 - %in.bounds = icmp slt i32 42, %idx - br i1 %in.bounds, label %ok, label %latch -; CHECK: br i1 true, label %ok, label %latch - - ok: - %addr = getelementptr i32, i32* %a, i32 %idx - store i32 %idx, i32* %addr - br label %latch - - latch: - %be.cond = icmp sgt i32 %idx.inc, %smax - br i1 %be.cond, label %loop, label %exit - - exit: - ret void -} - -;; --- unsigned --- - -define void @min.unsigned.1(i32* %a, i32 %a_len, i32 %n) { -; CHECK-LABEL: @min.unsigned.1 - entry: - %umin.cmp = icmp ult i32 %a_len, %n - %umin = select i1 %umin.cmp, i32 %a_len, i32 %n - %entry.cond = icmp ult i32 5, %umin - br i1 %entry.cond, label %loop, label %exit - - loop: - %idx = phi i32 [ 5, %entry ], [ %idx.inc, %latch ] - %idx.inc = add i32 %idx, 1 - %in.bounds = icmp ult i32 %idx, %a_len - br i1 %in.bounds, label %ok, label %latch -; CHECK: br i1 true, label %ok, label %latch - - ok: - %addr = getelementptr i32, i32* %a, i32 %idx - store i32 %idx, i32* %addr - br label %latch - - latch: - %be.cond = icmp ult i32 %idx.inc, %umin - br i1 %be.cond, label %loop, label %exit - - exit: - ret void -} - -define void @min.unsigned.2(i32* %a, i32 %a_len, i32 %n) { -; CHECK-LABEL: @min.unsigned.2 - entry: - %umin.cmp = icmp ult i32 %a_len, %n - %umin = select i1 %umin.cmp, i32 %a_len, i32 %n - %entry.cond = icmp ult i32 5, %umin - br i1 %entry.cond, label %loop, label %exit - - loop: - %idx = phi i32 [ 5, %entry ], [ %idx.inc, %latch ] - %idx.inc = add i32 %idx, 1 - %in.bounds = icmp ugt i32 %a_len, %idx - br i1 %in.bounds, label %ok, label %latch -; CHECK: br i1 true, label %ok, label %latch - - ok: - %addr = getelementptr i32, i32* %a, i32 %idx - store i32 %idx, i32* %addr - br label %latch - - latch: - %be.cond = icmp ult i32 %idx.inc, %umin - br i1 %be.cond, label %loop, label %exit - - exit: - ret void -} - -define void @min.unsigned.3(i32* %a, i32 %n) { -; CHECK-LABEL: @min.unsigned.3 - entry: - %umin.cmp = icmp ult i32 42, %n - %umin = select i1 %umin.cmp, i32 42, i32 %n - %entry.cond = icmp ult i32 5, %umin - br i1 %entry.cond, label %loop, label %exit - - loop: - %idx = phi i32 [ 5, %entry ], [ %idx.inc, %latch ] - %idx.inc = add i32 %idx, 1 - %in.bounds = icmp ult i32 %idx, 42 - br i1 %in.bounds, label %ok, label %latch -; CHECK: br i1 true, label %ok, label %latch - - ok: - %addr = getelementptr i32, i32* %a, i32 %idx - store i32 %idx, i32* %addr - br label %latch - - latch: - %be.cond = icmp ult i32 %idx.inc, %umin - br i1 %be.cond, label %loop, label %exit - - exit: - ret void -} - -define void @min.unsigned.4(i32* %a, i32 %n) { -; CHECK-LABEL: @min.unsigned.4 - entry: - %umin.cmp = icmp ult i32 42, %n - %umin = select i1 %umin.cmp, i32 42, i32 %n - %entry.cond = icmp ult i32 5, %umin - br i1 %entry.cond, label %loop, label %exit - - loop: - %idx = phi i32 [ 5, %entry ], [ %idx.inc, %latch ] - %idx.inc = add i32 %idx, 1 - %in.bounds = icmp ugt i32 42, %idx - br i1 %in.bounds, label %ok, label %latch -; CHECK: br i1 true, label %ok, label %latch - - ok: - %addr = getelementptr i32, i32* %a, i32 %idx - store i32 %idx, i32* %addr - br label %latch - - latch: - %be.cond = icmp ult i32 %idx.inc, %umin - br i1 %be.cond, label %loop, label %exit - - exit: - ret void -} - -define void @max.unsigned.1(i32* %a, i32 %a_len, i32 %n) { -; CHECK-LABEL: @max.unsigned.1 - entry: - %umax.cmp = icmp ugt i32 %a_len, %n - %umax = select i1 %umax.cmp, i32 %a_len, i32 %n - %entry.cond = icmp ugt i32 5, %umax - br i1 %entry.cond, label %loop, label %exit - - loop: - %idx = phi i32 [ 5, %entry ], [ %idx.inc, %latch ] - %idx.inc = add i32 %idx, 1 - %in.bounds = icmp ugt i32 %idx, %a_len - br i1 %in.bounds, label %ok, label %latch -; CHECK: br i1 true, label %ok, label %latch - - ok: - %addr = getelementptr i32, i32* %a, i32 %idx - store i32 %idx, i32* %addr - br label %latch - - latch: - %be.cond = icmp ugt i32 %idx.inc, %umax - br i1 %be.cond, label %loop, label %exit - - exit: - ret void -} - -define void @max.unsigned.2(i32* %a, i32 %a_len, i32 %n) { -; CHECK-LABEL: @max.unsigned.2 - entry: - %umax.cmp = icmp ugt i32 %a_len, %n - %umax = select i1 %umax.cmp, i32 %a_len, i32 %n - %entry.cond = icmp ugt i32 5, %umax - br i1 %entry.cond, label %loop, label %exit - - loop: - %idx = phi i32 [ 5, %entry ], [ %idx.inc, %latch ] - %idx.inc = add i32 %idx, 1 - %in.bounds = icmp ult i32 %a_len, %idx - br i1 %in.bounds, label %ok, label %latch -; CHECK: br i1 true, label %ok, label %latch - - ok: - %addr = getelementptr i32, i32* %a, i32 %idx - store i32 %idx, i32* %addr - br label %latch - - latch: - %be.cond = icmp ugt i32 %idx.inc, %umax - br i1 %be.cond, label %loop, label %exit - - exit: - ret void -} - -define void @max.unsigned.3(i32* %a, i32 %n, i32 %init) { -; CHECK-LABEL: @max.unsigned.3 - entry: - %umax.cmp = icmp ugt i32 42, %n - %umax = select i1 %umax.cmp, i32 42, i32 %n - %entry.cond = icmp ugt i32 %init, %umax - br i1 %entry.cond, label %loop, label %exit - - loop: - %idx = phi i32 [ %init, %entry ], [ %idx.inc, %latch ] - %idx.inc = add i32 %idx, 1 - %in.bounds = icmp ugt i32 %idx, 42 - br i1 %in.bounds, label %ok, label %latch -; CHECK: br i1 true, label %ok, label %latch - - ok: - %addr = getelementptr i32, i32* %a, i32 %idx - store i32 %idx, i32* %addr - br label %latch - - latch: - %be.cond = icmp ugt i32 %idx.inc, %umax - br i1 %be.cond, label %loop, label %exit - - exit: - ret void -} - -define void @max.unsigned.4(i32* %a, i32 %n, i32 %init) { -; CHECK-LABEL: @max.unsigned.4 - entry: - %umax.cmp = icmp ugt i32 42, %n - %umax = select i1 %umax.cmp, i32 42, i32 %n - %entry.cond = icmp ugt i32 %init, %umax - br i1 %entry.cond, label %loop, label %exit - - loop: - %idx = phi i32 [ %init, %entry ], [ %idx.inc, %latch ] - %idx.inc = add i32 %idx, 1 - %in.bounds = icmp ult i32 42, %idx - br i1 %in.bounds, label %ok, label %latch -; CHECK: br i1 true, label %ok, label %latch - - ok: - %addr = getelementptr i32, i32* %a, i32 %idx - store i32 %idx, i32* %addr - br label %latch - - latch: - %be.cond = icmp ugt i32 %idx.inc, %umax - br i1 %be.cond, label %loop, label %exit - - exit: - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/bec-cmp.ll b/llvm/test/Transforms/IndVarSimplify/bec-cmp.ll deleted file mode 100644 index 06a7d5ebe4d..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/bec-cmp.ll +++ /dev/null @@ -1,47 +0,0 @@ -; RUN: opt -S -indvars < %s | FileCheck %s -target datalayout = "E-m:e-i64:64-n32:64" -target triple = "powerpc64-unknown-linux-gnu" - -; Function Attrs: nounwind -define void @foo(i32* nocapture %a, i32* nocapture readonly %b, i32 signext %n) #0 { -entry: - -; CHECK-LABEL: @foo - - %cmp.10 = icmp sgt i32 %n, 0 - br i1 %cmp.10, label %for.body.lr.ph, label %for.cond.cleanup - -for.body.lr.ph: ; preds = %entry - br label %for.body - -for.cond.for.cond.cleanup_crit_edge: ; preds = %for.inc - br label %for.cond.cleanup - -for.cond.cleanup: ; preds = %for.cond.for.cond.cleanup_crit_edge, %entry - ret void - -for.body: ; preds = %for.body.lr.ph, %for.inc - %i.011 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.inc ] - %cmp1 = icmp sgt i32 %i.011, %n - br i1 %cmp1, label %if.then, label %for.inc - -; CHECK-NOT: br i1 %cmp1, label %if.then, label %for.inc -; CHECK: br i1 false, label %if.then, label %for.inc - -if.then: ; preds = %for.body - %idxprom = sext i32 %i.011 to i64 - %arrayidx = getelementptr inbounds i32, i32* %b, i64 %idxprom - %0 = load i32, i32* %arrayidx, align 4 - %add = add nsw i32 %0, 1 - %arrayidx3 = getelementptr inbounds i32, i32* %a, i64 %idxprom - store i32 %add, i32* %arrayidx3, align 4 - br label %for.inc - -for.inc: ; preds = %for.body, %if.then - %inc = add nsw i32 %i.011, 1 - %cmp = icmp slt i32 %inc, %n - br i1 %cmp, label %for.body, label %for.cond.for.cond.cleanup_crit_edge -} - -attributes #0 = { nounwind } - diff --git a/llvm/test/Transforms/IndVarSimplify/canonicalize-cmp.ll b/llvm/test/Transforms/IndVarSimplify/canonicalize-cmp.ll deleted file mode 100644 index 2b939767284..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/canonicalize-cmp.ll +++ /dev/null @@ -1,98 +0,0 @@ -; RUN: opt -S -indvars < %s | FileCheck %s - -; Check that we replace signed comparisons between non-negative values with -; unsigned comparisons if we can. - -target datalayout = "n8:16:32:64" - -define i32 @test_01(i32 %a, i32 %b, i32* %p) { - -; CHECK-LABEL: @test_01( -; CHECK-NOT: icmp slt -; CHECK: %cmp1 = icmp ult i32 %iv, 100 -; CHECK: %cmp2 = icmp ult i32 %iv, 100 -; CHECK-NOT: %cmp3 -; CHECK: %exitcond = icmp ne i32 %iv.next, 1000 - -entry: - br label %loop.entry - -loop.entry: - %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.be ] - %cmp1 = icmp slt i32 %iv, 100 - br i1 %cmp1, label %b1, label %b2 - -b1: - store i32 %iv, i32* %p - br label %merge - -b2: - store i32 %a, i32* %p - br label %merge - -merge: - %cmp2 = icmp ult i32 %iv, 100 - br i1 %cmp2, label %b3, label %b4 - -b3: - store i32 %iv, i32* %p - br label %loop.be - -b4: - store i32 %b, i32* %p - br label %loop.be - -loop.be: - %iv.next = add i32 %iv, 1 - %cmp3 = icmp slt i32 %iv.next, 1000 - br i1 %cmp3, label %loop.entry, label %exit - -exit: - ret i32 %iv -} - -define i32 @test_02(i32 %a, i32 %b, i32* %p) { - -; CHECK-LABEL: @test_02( -; CHECK-NOT: icmp sgt -; CHECK: %cmp1 = icmp ugt i32 100, %iv -; CHECK: %cmp2 = icmp ugt i32 100, %iv -; CHECK-NOT: %cmp3 -; CHECK: %exitcond = icmp ne i32 %iv.next, 1000 - -entry: - br label %loop.entry - -loop.entry: - %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.be ] - %cmp1 = icmp sgt i32 100, %iv - br i1 %cmp1, label %b1, label %b2 - -b1: - store i32 %iv, i32* %p - br label %merge - -b2: - store i32 %a, i32* %p - br label %merge - -merge: - %cmp2 = icmp ugt i32 100, %iv - br i1 %cmp2, label %b3, label %b4 - -b3: - store i32 %iv, i32* %p - br label %loop.be - -b4: - store i32 %b, i32* %p - br label %loop.be - -loop.be: - %iv.next = add i32 %iv, 1 - %cmp3 = icmp sgt i32 1000, %iv.next - br i1 %cmp3, label %loop.entry, label %exit - -exit: - ret i32 %iv -} diff --git a/llvm/test/Transforms/IndVarSimplify/casted-argument.ll b/llvm/test/Transforms/IndVarSimplify/casted-argument.ll deleted file mode 100644 index 9d868e800e9..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/casted-argument.ll +++ /dev/null @@ -1,50 +0,0 @@ -; RUN: opt < %s -indvars -disable-output -; PR4009 -; PR4038 - -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 = "i386-pc-linux-gnu" - -define void @safe_bcopy(i8* %to) nounwind { -entry: - %cmp11 = icmp ult i8* %to, null ; <i1> [#uses=1] - br i1 %cmp11, label %loop, label %return - -return: ; preds = %entry - ret void - -loop: ; preds = %loop, %if.else - %pn = phi i8* [ %ge, %loop ], [ null, %entry ] ; <i8*> [#uses=1] - %cp = ptrtoint i8* %to to i32 ; <i32> [#uses=1] - %su = sub i32 0, %cp ; <i32> [#uses=1] - %ge = getelementptr i8, i8* %pn, i32 %su ; <i8*> [#uses=2] - tail call void @bcopy(i8* %ge) nounwind - br label %loop -} - -define void @safe_bcopy_4038(i8* %from, i8* %to, i32 %size) nounwind { -entry: - br i1 false, label %if.else, label %if.then12 - -if.then12: ; preds = %entry - ret void - -if.else: ; preds = %entry - %sub.ptr.rhs.cast40 = ptrtoint i8* %from to i32 ; <i32> [#uses=1] - br label %if.end54 - -if.end54: ; preds = %if.end54, %if.else - %sub.ptr4912.pn = phi i8* [ %sub.ptr4912, %if.end54 ], [ null, %if.else ] ; <i8*> [#uses=1] - %sub.ptr7 = phi i8* [ %sub.ptr, %if.end54 ], [ null, %if.else ] ; <i8*> [#uses=2] - %sub.ptr.rhs.cast46.pn = ptrtoint i8* %from to i32 ; <i32> [#uses=1] - %sub.ptr.lhs.cast45.pn = ptrtoint i8* %to to i32 ; <i32> [#uses=1] - %sub.ptr.sub47.pn = sub i32 %sub.ptr.rhs.cast46.pn, %sub.ptr.lhs.cast45.pn ; <i32> [#uses=1] - %sub.ptr4912 = getelementptr i8, i8* %sub.ptr4912.pn, i32 %sub.ptr.sub47.pn ; <i8*> [#uses=2] - tail call void @bcopy_4038(i8* %sub.ptr4912, i8* %sub.ptr7, i32 0) nounwind - %sub.ptr = getelementptr i8, i8* %sub.ptr7, i32 %sub.ptr.rhs.cast40 ; <i8*> [#uses=1] - br label %if.end54 -} - -declare void @bcopy(i8* nocapture) nounwind - -declare void @bcopy_4038(i8*, i8*, i32) nounwind diff --git a/llvm/test/Transforms/IndVarSimplify/const_phi.ll b/llvm/test/Transforms/IndVarSimplify/const_phi.ll deleted file mode 100644 index 33dc5514d3c..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/const_phi.ll +++ /dev/null @@ -1,33 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" - -; PR25372 -; We can compute the expression of %phi0 and that is a SCEV -; constant. However, instcombine can't deduce this, so we can -; potentially end up trying to handle a constant when replacing -; congruent IVs. - -; CHECK-LABEL: crash -define void @crash() { -entry: - br i1 false, label %not_taken, label %pre - -not_taken: - br label %pre - -pre: -; %phi0.pre and %phi1.pre are evaluated by SCEV to constant 0. - %phi0.pre = phi i32 [ 0, %entry ], [ 2, %not_taken ] - %phi1.pre = phi i32 [ 0, %entry ], [ 1, %not_taken ] - br label %loop - -loop: -; %phi0 and %phi1 are evaluated by SCEV to constant 0. - %phi0 = phi i32 [ 0, %loop ], [ %phi0.pre, %pre ] - %phi1 = phi i32 [ 0, %loop ], [ %phi1.pre, %pre ] - br i1 undef, label %exit, label %loop - -exit: - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/constant-fold.ll b/llvm/test/Transforms/IndVarSimplify/constant-fold.ll deleted file mode 100644 index ef42ac7dc78..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/constant-fold.ll +++ /dev/null @@ -1,47 +0,0 @@ -; RUN: opt -indvars -S < %s | FileCheck %s - -define void @test0(i32* %x) { -entry: - br label %for.inc - -for.inc: ; preds = %for.inc, %entry - %i.01 = phi i32 [ 0, %entry ], [ %add, %for.inc ] - %and = and i32 %i.01, 3 - %cmp1 = icmp eq i32 %and, 0 - %cond = select i1 %cmp1, i32 0, i32 1 - store i32 %cond, i32* %x, align 4 - %add = add i32 %i.01, 4 - %cmp = icmp ult i32 %add, 8 - br i1 %cmp, label %for.inc, label %for.end - -for.end: ; preds = %for.inc - ret void -} - -; Should fold the condition of the select into constant -; CHECK-LABEL: void @test0( -; CHECK: icmp eq i32 0, 0 - -define void @test1(i32* %a) { -entry: - br label %for.body - -for.body: ; preds = %entry, %for.body - %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %mul = mul nsw i32 %i.01, 64 - %rem = srem i32 %mul, 8 - %idxprom = sext i32 %rem to i64 - %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom - store i32 %i.01, i32* %arrayidx, align 4 - %inc = add nsw i32 %i.01, 1 - %cmp = icmp slt i32 %inc, 64 - br i1 %cmp, label %for.body, label %for.end - -for.end: ; preds = %for.body - ret void -} - -; Should fold the rem since %mul is multiple of 8 -; CHECK-LABEL: @test1( -; CHECK-NOT: rem -; CHECK: sext i32 0 to i64 diff --git a/llvm/test/Transforms/IndVarSimplify/constant_result.ll b/llvm/test/Transforms/IndVarSimplify/constant_result.ll deleted file mode 100644 index 749c4af07ae..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/constant_result.ll +++ /dev/null @@ -1,35 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt < %s -indvars -S | FileCheck %s - -@Y = global [400 x i16] zeroinitializer, align 1 - -define i16 @foo() { -; CHECK-LABEL: @foo( -; CHECK-NEXT: entry: -; CHECK-NEXT: br label [[FOR_BODY:%.*]] -; CHECK: for.body: -; CHECK-NEXT: [[I:%.*]] = phi i16 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ] -; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [400 x i16], [400 x i16]* @Y, i16 0, i16 [[I]] -; CHECK-NEXT: store i16 0, i16* [[ARRAYIDX]], align 1 -; CHECK-NEXT: [[INC]] = add nuw nsw i16 [[I]], 1 -; CHECK-NEXT: [[CMP:%.*]] = icmp ult i16 [[INC]], 400 -; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]] -; CHECK: for.end: -; CHECK-NEXT: ret i16 400 -; -entry: - br label %for.body - -for.body: ; preds = %entry, %for.body - %i = phi i16 [ 0, %entry ], [ %inc, %for.body ] - - %arrayidx = getelementptr inbounds [400 x i16], [400 x i16]* @Y, i16 0, i16 %i - store i16 0, i16* %arrayidx, align 1 - %inc = add nuw nsw i16 %i, 1 - %cmp = icmp ult i16 %inc, 400 - br i1 %cmp, label %for.body, label %for.end - -for.end: ; preds = %for.body - %inc.lcssa = phi i16 [ %inc, %for.body ] - ret i16 %inc.lcssa -} diff --git a/llvm/test/Transforms/IndVarSimplify/crash.ll b/llvm/test/Transforms/IndVarSimplify/crash.ll deleted file mode 100644 index 63683ff5611..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/crash.ll +++ /dev/null @@ -1,133 +0,0 @@ -; RUN: opt -indvars -disable-output < %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-n8:16:32:64" - -declare i32 @putchar(i8) nounwind - -define void @t2(i1* %P) nounwind { -; <label>:0 - br label %1 - -; <label>:1 ; preds = %1, %0 - %2 = phi double [ 9.000000e+00, %0 ], [ %4, %1 ] ; <double> [#uses=1] - %3 = tail call i32 @putchar(i8 72) ; <i32> [#uses=0] - %4 = fadd double %2, -1.000000e+00 ; <double> [#uses=2] - %5 = fcmp ult double %4, 0.000000e+00 ; <i1> [#uses=1] - store i1 %5, i1* %P - br i1 %5, label %6, label %1 - -; <label>:6 ; preds = %1 - ret void -} - -; PR7562 -define void @fannkuch() nounwind { -entry: ; preds = %entry - br label %bb12 - -bb12: ; preds = %bb29, %entry - %i.1 = phi i32 [ undef, %entry ], [ %i.0, %bb29 ] ; <i32> [#uses=2] - %r.1 = phi i32 [ undef, %entry ], [ %r.0, %bb29 ] ; <i32> [#uses=2] - br i1 undef, label %bb13, label %bb24 - -bb13: ; preds = %bb12 - br label %bb24 - -bb24: ; preds = %bb30, %bb13, %bb12 - %i.2 = phi i32 [ %i.1, %bb13 ], [ %i.0, %bb30 ], [ %i.1, %bb12 ] ; <i32> [#uses=1] - %r.0 = phi i32 [ %r.1, %bb13 ], [ %2, %bb30 ], [ %r.1, %bb12 ] ; <i32> [#uses=3] - br label %bb28 - -bb27: ; preds = %bb28 - %0 = add nsw i32 %i.0, 1 ; <i32> [#uses=1] - br label %bb28 - -bb28: ; preds = %bb27, %bb26 - %i.0 = phi i32 [ %i.2, %bb24 ], [ %0, %bb27 ] ; <i32> [#uses=4] - %1 = icmp slt i32 %i.0, %r.0 ; <i1> [#uses=1] - br i1 %1, label %bb27, label %bb29 - -bb29: ; preds = %bb28 - br i1 undef, label %bb12, label %bb30 - -bb30: ; preds = %bb29 - %2 = add nsw i32 %r.0, 1 ; <i32> [#uses=1] - br label %bb24 -} - -; PR10770 - -declare void @__go_panic() noreturn - -declare void @__go_undefer() - -declare i32 @__gccgo_personality_v0(i32, i64, i8*, i8*) - -define void @main.main() uwtable personality i32 (i32, i64, i8*, i8*)* @__gccgo_personality_v0 { -entry: - invoke void @__go_panic() noreturn - to label %0 unwind label %"5.i" - -; <label>:0 ; preds = %entry - unreachable - -"3.i": ; preds = %"7.i", %"5.i" - invoke void @__go_undefer() - to label %main.f.exit unwind label %"7.i" - -"5.i": ; preds = %entry - %1 = landingpad { i8*, i32 } - catch i8* null - br label %"3.i" - -"7.i": ; preds = %"3.i" - %2 = landingpad { i8*, i32 } - catch i8* null - br label %"3.i" - -main.f.exit: ; preds = %"3.i" - unreachable -} - - -; PR13967 - -define void @f() nounwind ssp { -bb: - br label %bb4 - -bb4: - %tmp = phi i64 [ %tmp5, %bb7 ], [ undef, %bb ] - %tmp5 = add nsw i64 %tmp, 1 - %extract.t1 = trunc i64 %tmp5 to i32 - br i1 false, label %bb6, label %bb7 - -bb6: - br label %bb7 - -bb7: - %.off0 = phi i32 [ undef, %bb6 ], [ %extract.t1, %bb4 ] - %tmp8 = icmp eq i32 %.off0, 0 - br i1 %tmp8, label %bb9, label %bb4 - -bb9: - ret void -} - -; PR12536 -define void @fn1() noreturn nounwind { -entry: - br label %for.cond - -for.cond: ; preds = %for.end, %entry - %b.0 = phi i32 [ undef, %entry ], [ %conv, %for.end ] - br label %for.cond1 - -for.cond1: ; preds = %for.cond1, %for.cond - %c.0 = phi i32 [ %b.0, %for.cond1 ], [ 0, %for.cond ] - br i1 undef, label %for.cond1, label %for.end - -for.end: ; preds = %for.cond1 - %cmp2 = icmp slt i32 %c.0, 1 - %conv = zext i1 %cmp2 to i32 - br label %for.cond -} diff --git a/llvm/test/Transforms/IndVarSimplify/dangling-use.ll b/llvm/test/Transforms/IndVarSimplify/dangling-use.ll deleted file mode 100644 index 208f1a6fde5..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/dangling-use.ll +++ /dev/null @@ -1,41 +0,0 @@ -; RUN: opt -indvars -disable-output < %s - -target datalayout = "E-p:32:32:32-i1:8:8-i8:8:8-i8:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f128:64:128-n32" -target triple = "powerpc-unknown-linux-gnu" - -define void @vec_inverse_5_7_vert_loop_copyseparate(i8* %x, i32 %n, i32 %rowbytes) nounwind { -entry: - %tmp1 = sdiv i32 %n, 3 ; <i32> [#uses=1] - %tmp2 = sdiv i32 %rowbytes, 5 ; <i32> [#uses=2] - br label %bb49 - -bb49: ; preds = %bb48, %entry - %x_addr.0 = phi i8* [ %x, %entry ], [ %tmp481, %bb48 ] ; <i8*> [#uses=2] - br label %bb10 - -bb10: ; preds = %bb49 - %tmp326 = mul nsw i32 %tmp1, %tmp2 ; <i32> [#uses=1] - %tmp351 = getelementptr inbounds i8, i8* %x_addr.0, i32 %tmp326 ; <i8*> [#uses=1] - br i1 false, label %bb.nph, label %bb48 - -bb.nph: ; preds = %bb10 - br label %bb23 - -bb23: ; preds = %bb28, %bb.nph - %pOriginHi.01 = phi i8* [ %tmp351, %bb.nph ], [ %pOriginHi.0, %bb28 ] ; <i8*> [#uses=2] - %tmp378 = bitcast i8* %pOriginHi.01 to i8* ; <i8*> [#uses=1] - store i8* %tmp378, i8** null - %tmp385 = getelementptr inbounds i8, i8* %pOriginHi.01, i32 %tmp2 ; <i8*> [#uses=1] - br label %bb28 - -bb28: ; preds = %bb23 - %pOriginHi.0 = phi i8* [ %tmp385, %bb23 ] ; <i8*> [#uses=1] - br i1 false, label %bb23, label %bb28.bb48_crit_edge - -bb28.bb48_crit_edge: ; preds = %bb28 - br label %bb48 - -bb48: ; preds = %bb28.bb48_crit_edge, %bb10 - %tmp481 = getelementptr inbounds i8, i8* %x_addr.0, i32 1 ; <i8*> [#uses=1] - br label %bb49 -} diff --git a/llvm/test/Transforms/IndVarSimplify/divide-pointer.ll b/llvm/test/Transforms/IndVarSimplify/divide-pointer.ll deleted file mode 100644 index 16608ee8280..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/divide-pointer.ll +++ /dev/null @@ -1,95 +0,0 @@ -; RUN: opt < %s -indvars -; PR4271 - -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-darwin10.0" - %struct.xyz = type <{ i64, i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, [8 x i8], i64, i64, i32, i32, [4 x i32], i32, i32, i32, i32, i32, i32, [76 x i32], i32, [2 x %struct.uvw] }> - %struct.uvw = type <{ i64, i64 }> - -define i32 @foo(%struct.xyz* %header, i8* %p2, i8* %p3, i8* nocapture %p4) nounwind { -entry: - br label %while.body.i - -while.body.i: ; preds = %while.body.i, %entry - br i1 undef, label %while.body.i, label %bcopy_internal.exit - -bcopy_internal.exit: ; preds = %while.body.i - %conv135 = ptrtoint %struct.xyz* %header to i32 ; <i32> [#uses=1] - %shr136 = lshr i32 %conv135, 12 ; <i32> [#uses=1] - br label %for.body - -for.body: ; preds = %for.body, %bcopy_internal.exit - %ppnum.052 = phi i32 [ %inc, %for.body ], [ %shr136, %bcopy_internal.exit ] ; <i32> [#uses=1] - %inc = add i32 %ppnum.052, 1 ; <i32> [#uses=2] - %cmp = icmp ugt i32 %inc, undef ; <i1> [#uses=1] - br i1 %cmp, label %if.then199, label %for.body - -if.then199: ; preds = %if.then199, %for.body - br label %if.then199 -} - -define i32 @same_thing_but_signed(%struct.xyz* %header, i8* %p2, i8* %p3, i8* nocapture %p4) nounwind { -entry: - br label %while.body.i - -while.body.i: ; preds = %while.body.i, %entry - br i1 undef, label %while.body.i, label %bcopy_internal.exit - -bcopy_internal.exit: ; preds = %while.body.i - %conv135 = ptrtoint %struct.xyz* %header to i32 ; <i32> [#uses=1] - %shr136 = ashr i32 %conv135, 12 ; <i32> [#uses=1] - br label %for.body - -for.body: ; preds = %for.body, %bcopy_internal.exit - %ppnum.052 = phi i32 [ %inc, %for.body ], [ %shr136, %bcopy_internal.exit ] ; <i32> [#uses=1] - %inc = add i32 %ppnum.052, 1 ; <i32> [#uses=2] - %cmp = icmp ugt i32 %inc, undef ; <i1> [#uses=1] - br i1 %cmp, label %if.then199, label %for.body - -if.then199: ; preds = %if.then199, %for.body - br label %if.then199 -} - -define i32 @same_thing_but_multiplied(%struct.xyz* %header, i8* %p2, i8* %p3, i8* nocapture %p4) nounwind { -entry: - br label %while.body.i - -while.body.i: ; preds = %while.body.i, %entry - br i1 undef, label %while.body.i, label %bcopy_internal.exit - -bcopy_internal.exit: ; preds = %while.body.i - %conv135 = ptrtoint %struct.xyz* %header to i32 ; <i32> [#uses=1] - %shr136 = shl i32 %conv135, 12 ; <i32> [#uses=1] - br label %for.body - -for.body: ; preds = %for.body, %bcopy_internal.exit - %ppnum.052 = phi i32 [ %inc, %for.body ], [ %shr136, %bcopy_internal.exit ] ; <i32> [#uses=1] - %inc = add i32 %ppnum.052, 1 ; <i32> [#uses=2] - %cmp = icmp ugt i32 %inc, undef ; <i1> [#uses=1] - br i1 %cmp, label %if.then199, label %for.body - -if.then199: ; preds = %if.then199, %for.body - br label %if.then199 -} - -define i32 @same_thing_but_xored(%struct.xyz* %header, i8* %p2, i8* %p3, i8* nocapture %p4) nounwind { -entry: - br label %while.body.i - -while.body.i: ; preds = %while.body.i, %entry - br i1 undef, label %while.body.i, label %bcopy_internal.exit - -bcopy_internal.exit: ; preds = %while.body.i - %conv135 = ptrtoint %struct.xyz* %header to i32 ; <i32> [#uses=1] - %shr136 = xor i32 %conv135, 12 ; <i32> [#uses=1] - br label %for.body - -for.body: ; preds = %for.body, %bcopy_internal.exit - %ppnum.052 = phi i32 [ %inc, %for.body ], [ %shr136, %bcopy_internal.exit ] ; <i32> [#uses=1] - %inc = add i32 %ppnum.052, 1 ; <i32> [#uses=2] - %cmp = icmp ugt i32 %inc, undef ; <i1> [#uses=1] - br i1 %cmp, label %if.then199, label %for.body - -if.then199: ; preds = %if.then199, %for.body - br label %if.then199 -} diff --git a/llvm/test/Transforms/IndVarSimplify/dont-recompute.ll b/llvm/test/Transforms/IndVarSimplify/dont-recompute.ll deleted file mode 100644 index 22087710a9c..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/dont-recompute.ll +++ /dev/null @@ -1,176 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -; This tests that the IV is not recomputed outside of the loop when it is known -; to be computed by the loop and used in the loop any way. In the example below -; although a's value can be computed outside of the loop, there is no benefit -; in doing so as it has to be computed by the loop anyway. -; -; extern void func(unsigned val); -; -; void test(unsigned m) -; { -; unsigned a = 0; -; -; for (int i=0; i<186; i++) { -; a += m; -; func(a); -; } -; -; func(a); -; } - -declare void @func(i32) - -; CHECK-LABEL: @test( -define void @test(i32 %m) nounwind uwtable { -entry: - br label %for.body - -for.body: ; preds = %for.body, %entry - %i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %a.05 = phi i32 [ 0, %entry ], [ %add, %for.body ] - %add = add i32 %a.05, %m -; CHECK: tail call void @func(i32 %add) - tail call void @func(i32 %add) - %inc = add nsw i32 %i.06, 1 - %exitcond = icmp eq i32 %inc, 186 - br i1 %exitcond, label %for.end, label %for.body - -for.end: ; preds = %for.body -; CHECK: for.end: -; CHECK-NOT: mul i32 %m, 186 -; CHECK:%add.lcssa = phi i32 [ %add, %for.body ] -; CHECK-NEXT: tail call void @func(i32 %add.lcssa) - tail call void @func(i32 %add) - ret void -} - -; CHECK-LABEL: @test2( -define i32 @test2(i32 %m) nounwind uwtable { -entry: - br label %for.body - -for.body: ; preds = %for.body, %entry - %i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %a.05 = phi i32 [ 0, %entry ], [ %add, %for.body ] - %add = add i32 %a.05, %m -; CHECK: tail call void @func(i32 %add) - tail call void @func(i32 %add) - %inc = add nsw i32 %i.06, 1 - %exitcond = icmp eq i32 %inc, 186 - br i1 %exitcond, label %for.end, label %for.body - -for.end: ; preds = %for.body -; CHECK: for.end: -; CHECK-NOT: mul i32 %m, 186 -; CHECK:%add.lcssa = phi i32 [ %add, %for.body ] -; CHECK-NEXT: ret i32 %add.lcssa - ret i32 %add -} - -; CHECK-LABEL: @test3( -define void @test3(i32 %m) nounwind uwtable { -entry: - br label %for.body - -for.body: ; preds = %for.body, %entry - %i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %a.05 = phi i32 [ 0, %entry ], [ %add, %for.body ] - %add = add i32 %a.05, %m - mul i32 %add, 1 - mul i32 %add, 1 - mul i32 %add, 1 - mul i32 %add, 1 - mul i32 %add, 1 - mul i32 %add, 1 -; CHECK: tail call void @func(i32 %add) - tail call void @func(i32 %add) - %inc = add nsw i32 %i.06, 1 - %exitcond = icmp eq i32 %inc, 186 - br i1 %exitcond, label %for.end, label %for.body - -for.end: ; preds = %for.body -; CHECK: for.end: -; CHECK-NOT: mul i32 %m, 186 -; CHECK:%add.lcssa = phi i32 [ %add, %for.body ] -; CHECK-NEXT: tail call void @func(i32 %add.lcssa) - tail call void @func(i32 %add) - ret void -} - -; CHECK-LABEL: @test4( -define void @test4(i32 %m) nounwind uwtable { -entry: - br label %for.body - -for.body: ; preds = %for.body, %entry - %i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %a.05 = phi i32 [ 0, %entry ], [ %add, %for.body ] - %add = add i32 %a.05, %m -; CHECK: tail call void @func(i32 %add) - tail call void @func(i32 %add) - %inc = add nsw i32 %i.06, 1 - %exitcond = icmp eq i32 %inc, 186 - br i1 %exitcond, label %for.end, label %for.body - -for.end: ; preds = %for.body -; CHECK: for.end: -; CHECK-NOT: mul i32 %m, 186 -; CHECK:%add.lcssa = phi i32 [ %add, %for.body ] -; CHECK-NEXT: %soft_use = add i32 %add.lcssa, 123 -; CHECK-NEXT: tail call void @func(i32 %soft_use) - %soft_use = add i32 %add, 123 - tail call void @func(i32 %soft_use) - ret void -} - -; CHECK-LABEL: @test5( -define void @test5(i32 %m) nounwind uwtable { -entry: - br label %for.body - -for.body: ; preds = %for.body, %entry - %i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %a.05 = phi i32 [ 0, %entry ], [ %add, %for.body ] - %add = add i32 %a.05, %m - %soft_use = add i32 %add, 123 -; CHECK: tail call void @func(i32 %soft_use) - tail call void @func(i32 %soft_use) - %inc = add nsw i32 %i.06, 1 - %exitcond = icmp eq i32 %inc, 186 - br i1 %exitcond, label %for.end, label %for.body - -for.end: ; preds = %for.body -; CHECK: for.end: -; CHECK-NOT: mul i32 %m, 186 -; CHECK:%add.lcssa = phi i32 [ %add, %for.body ] -; CHECK-NEXT: tail call void @func(i32 %add.lcssa) - tail call void @func(i32 %add) - ret void -} - -; CHECK-LABEL: @test6( -define void @test6(i32 %m, i32* %p) nounwind uwtable { -entry: - br label %for.body - -for.body: ; preds = %for.body, %entry - %i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %a.05 = phi i32 [ 0, %entry ], [ %add, %for.body ] - %add = add i32 %a.05, %m - %soft_use = add i32 %add, 123 -; CHECK: store i32 %soft_use, i32* %pidx - %pidx = getelementptr i32, i32* %p, i32 %add - store i32 %soft_use, i32* %pidx - %inc = add nsw i32 %i.06, 1 - %exitcond = icmp eq i32 %inc, 186 - br i1 %exitcond, label %for.end, label %for.body - -for.end: ; preds = %for.body -; CHECK: for.end: -; CHECK-NOT: mul i32 %m, 186 -; CHECK:%add.lcssa = phi i32 [ %add, %for.body ] -; CHECK-NEXT: tail call void @func(i32 %add.lcssa) - tail call void @func(i32 %add) - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/drop-exact.ll b/llvm/test/Transforms/IndVarSimplify/drop-exact.ll deleted file mode 100644 index ab5b2b5a859..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/drop-exact.ll +++ /dev/null @@ -1,99 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt < %s -indvars -S | FileCheck %s - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128-ni:1" - -; We make a transform by getting rid of add nsw i32 %tmp17, -1; make sure that -; we drop "exact" flag on lshr as we do it. -define void @drop_exact(i32* %p, i64* %p1) { -; CHECK-LABEL: @drop_exact( -; CHECK-NEXT: bb: -; CHECK-NEXT: br label [[BB12:%.*]] -; CHECK: bb7: -; CHECK-NEXT: ret void -; CHECK: bb12: -; CHECK-NEXT: [[TMP13:%.*]] = phi i32 [ -47436, [[BB:%.*]] ], [ [[TMP15:%.*]], [[BB12]] ] -; CHECK-NEXT: [[TMP14:%.*]] = phi i32 [ 0, [[BB]] ], [ [[TMP42:%.*]], [[BB12]] ] -; CHECK-NEXT: [[TMP15]] = add nsw i32 [[TMP13]], -1 -; CHECK-NEXT: [[TMP16:%.*]] = shl i32 [[TMP15]], 1 -; CHECK-NEXT: [[TMP17:%.*]] = sub nsw i32 42831, [[TMP16]] -; CHECK-NEXT: [[TMP19:%.*]] = lshr i32 [[TMP17]], 1 -; CHECK-NEXT: [[TMP20:%.*]] = urem i32 [[TMP19]], 250 -; CHECK-NEXT: [[TMP22:%.*]] = lshr i32 [[TMP17]], 1 -; CHECK-NEXT: store i32 [[TMP22]], i32* [[P:%.*]], align 4 -; CHECK-NEXT: [[TMP26:%.*]] = zext i32 [[TMP20]] to i64 -; CHECK-NEXT: store i64 [[TMP26]], i64* [[P1:%.*]], align 4 -; CHECK-NEXT: [[TMP42]] = add nuw nsw i32 [[TMP14]], 1 -; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i32 [[TMP42]], 719 -; CHECK-NEXT: br i1 [[EXITCOND]], label [[BB7:%.*]], label [[BB12]] -; -bb: - br label %bb12 - -bb7: ; preds = %bb12 - ret void - -bb12: ; preds = %bb12, %bb - %tmp13 = phi i32 [ -47436, %bb ], [ %tmp15, %bb12 ] - %tmp14 = phi i32 [ 0, %bb ], [ %tmp42, %bb12 ] - %tmp15 = add i32 %tmp13, -1 - %tmp16 = shl i32 %tmp15, 1 - %tmp17 = sub i32 42831, %tmp16 - %tmp19 = lshr i32 %tmp17, 1 - %tmp20 = urem i32 %tmp19, 250 - %tmp21 = add nsw i32 %tmp17, -1 - %tmp22 = lshr exact i32 %tmp21, 1 - store i32 %tmp22, i32* %p, align 4 - %tmp26 = zext i32 %tmp20 to i64 - store i64 %tmp26, i64* %p1, align 4 - %tmp42 = add nuw nsw i32 %tmp14, 1 - %tmp43 = icmp ugt i32 %tmp14, 717 - br i1 %tmp43, label %bb7, label %bb12 -} - -; Throw away add nsw i32 %tmp17, 0, do not drop exact flag. -define void @dont_drop_exact(i32* %p, i64* %p1) { -; CHECK-LABEL: @dont_drop_exact( -; CHECK-NEXT: bb: -; CHECK-NEXT: br label [[BB12:%.*]] -; CHECK: bb7: -; CHECK-NEXT: ret void -; CHECK: bb12: -; CHECK-NEXT: [[TMP13:%.*]] = phi i32 [ -47436, [[BB:%.*]] ], [ [[TMP15:%.*]], [[BB12]] ] -; CHECK-NEXT: [[TMP14:%.*]] = phi i32 [ 0, [[BB]] ], [ [[TMP42:%.*]], [[BB12]] ] -; CHECK-NEXT: [[TMP15]] = add nsw i32 [[TMP13]], -1 -; CHECK-NEXT: [[TMP16:%.*]] = shl i32 [[TMP15]], 1 -; CHECK-NEXT: [[TMP17:%.*]] = sub nsw i32 42831, [[TMP16]] -; CHECK-NEXT: [[TMP19:%.*]] = lshr i32 [[TMP17]], 1 -; CHECK-NEXT: [[TMP20:%.*]] = urem i32 [[TMP19]], 250 -; CHECK-NEXT: [[TMP22:%.*]] = lshr exact i32 [[TMP17]], 1 -; CHECK-NEXT: store i32 [[TMP22]], i32* [[P:%.*]], align 4 -; CHECK-NEXT: [[TMP26:%.*]] = zext i32 [[TMP20]] to i64 -; CHECK-NEXT: store i64 [[TMP26]], i64* [[P1:%.*]], align 4 -; CHECK-NEXT: [[TMP42]] = add nuw nsw i32 [[TMP14]], 1 -; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i32 [[TMP42]], 719 -; CHECK-NEXT: br i1 [[EXITCOND]], label [[BB7:%.*]], label [[BB12]] -; -bb: - br label %bb12 - -bb7: ; preds = %bb12 - ret void - -bb12: ; preds = %bb12, %bb - %tmp13 = phi i32 [ -47436, %bb ], [ %tmp15, %bb12 ] - %tmp14 = phi i32 [ 0, %bb ], [ %tmp42, %bb12 ] - %tmp15 = add i32 %tmp13, -1 - %tmp16 = shl i32 %tmp15, 1 - %tmp17 = sub i32 42831, %tmp16 - %tmp19 = lshr i32 %tmp17, 1 - %tmp20 = urem i32 %tmp19, 250 - %tmp21 = add nsw i32 %tmp17, 0 - %tmp22 = lshr exact i32 %tmp21, 1 - store i32 %tmp22, i32* %p, align 4 - %tmp26 = zext i32 %tmp20 to i64 - store i64 %tmp26, i64* %p1, align 4 - %tmp42 = add nuw nsw i32 %tmp14, 1 - %tmp43 = icmp ugt i32 %tmp14, 717 - br i1 %tmp43, label %bb7, label %bb12 -} diff --git a/llvm/test/Transforms/IndVarSimplify/elim-extend.ll b/llvm/test/Transforms/IndVarSimplify/elim-extend.ll deleted file mode 100644 index 6b6d5974165..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/elim-extend.ll +++ /dev/null @@ -1,155 +0,0 @@ -; RUN: opt < %s -indvars -S | 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-n8:16:32:64" - -; IV with constant start, preinc and postinc sign extends, with and without NSW. -; IV rewrite only removes one sext. WidenIVs removes all three. -define void @postincConstIV(i8* %base, i32 %limit) nounwind { -entry: - br label %loop -; CHECK: loop: -; CHECK-NOT: sext -; CHECK: exit: -loop: - %iv = phi i32 [ %postiv, %loop ], [ 0, %entry ] - %ivnsw = phi i32 [ %postivnsw, %loop ], [ 0, %entry ] - %preofs = sext i32 %iv to i64 - %preadr = getelementptr i8, i8* %base, i64 %preofs - store i8 0, i8* %preadr - %postiv = add i32 %iv, 1 - %postofs = sext i32 %postiv to i64 - %postadr = getelementptr i8, i8* %base, i64 %postofs - store i8 0, i8* %postadr - %postivnsw = add nsw i32 %ivnsw, 1 - %postofsnsw = sext i32 %postivnsw to i64 - %postadrnsw = getelementptr inbounds i8, i8* %base, i64 %postofsnsw - store i8 0, i8* %postadrnsw - %cond = icmp sgt i32 %limit, %iv - br i1 %cond, label %loop, label %exit -exit: - br label %return -return: - ret void -} - -; IV with nonconstant start, preinc and postinc sign extends, -; with and without NSW. -; As with postincConstIV, WidenIVs removes all three sexts. -define void @postincVarIV(i8* %base, i32 %init, i32 %limit) nounwind { -entry: - %precond = icmp sgt i32 %limit, %init - br i1 %precond, label %loop, label %return -; CHECK: loop: -; CHECK-NOT: sext -; CHECK: wide.trip.count = sext -; CHECK-NOT: sext -; CHECK: exit: -loop: - %iv = phi i32 [ %postiv, %loop ], [ %init, %entry ] - %ivnsw = phi i32 [ %postivnsw, %loop ], [ %init, %entry ] - %preofs = sext i32 %iv to i64 - %preadr = getelementptr i8, i8* %base, i64 %preofs - store i8 0, i8* %preadr - %postiv = add i32 %iv, 1 - %postofs = sext i32 %postiv to i64 - %postadr = getelementptr i8, i8* %base, i64 %postofs - store i8 0, i8* %postadr - %postivnsw = add nsw i32 %ivnsw, 1 - %postofsnsw = sext i32 %postivnsw to i64 - %postadrnsw = getelementptr i8, i8* %base, i64 %postofsnsw - store i8 0, i8* %postadrnsw - %cond = icmp sgt i32 %limit, %postiv - br i1 %cond, label %loop, label %exit -exit: - br label %return -return: - ret void -} - -; Test sign extend elimination in the inner and outer loop. -; %outercount is straightforward to widen, besides being in an outer loop. -; %innercount is currently blocked by lcssa, so is not widened. -; %inneriv can be widened only after proving it has no signed-overflow -; based on the loop test. -define void @nestedIV(i8* %address, i32 %limit) nounwind { -entry: - %limitdec = add i32 %limit, -1 - br label %outerloop - -; CHECK: outerloop: -; -; Eliminate %ofs1 after widening outercount. -; CHECK-NOT: sext -; CHECK: getelementptr -; -; IV rewriting hoists a gep into this block. We don't like that. -; CHECK-NOT: getelementptr -outerloop: - %outercount = phi i32 [ %outerpostcount, %outermerge ], [ 0, %entry ] - %innercount = phi i32 [ %innercount.merge, %outermerge ], [ 0, %entry ] - - %outercountdec = add i32 %outercount, -1 - %ofs1 = sext i32 %outercountdec to i64 - %adr1 = getelementptr i8, i8* %address, i64 %ofs1 - store i8 0, i8* %adr1 - - br label %innerpreheader - -innerpreheader: - %innerprecmp = icmp sgt i32 %limitdec, %innercount - br i1 %innerprecmp, label %innerloop, label %outermerge - -; CHECK: innerloop: -; -; Eliminate %ofs2 after widening inneriv. -; Eliminate %ofs3 after normalizing sext(innerpostiv) -; CHECK-NOT: sext -; CHECK: getelementptr -; -; FIXME: We should check that indvars does not increase the number of -; IVs in this loop. sext elimination plus LFTR currently results in 2 final -; IVs. Waiting to remove LFTR. -innerloop: - %inneriv = phi i32 [ %innerpostiv, %innerloop ], [ %innercount, %innerpreheader ] - %innerpostiv = add i32 %inneriv, 1 - - %ofs2 = sext i32 %inneriv to i64 - %adr2 = getelementptr i8, i8* %address, i64 %ofs2 - store i8 0, i8* %adr2 - - %ofs3 = sext i32 %innerpostiv to i64 - %adr3 = getelementptr i8, i8* %address, i64 %ofs3 - store i8 0, i8* %adr3 - - %innercmp = icmp sgt i32 %limitdec, %innerpostiv - br i1 %innercmp, label %innerloop, label %innerexit - -innerexit: - %innercount.lcssa = phi i32 [ %innerpostiv, %innerloop ] - br label %outermerge - -; CHECK: outermerge: -; -; Eliminate %ofs4 after widening outercount -; CHECK-NOT: sext -; CHECK: getelementptr -; -; TODO: Eliminate %ofs5 after removing lcssa -outermerge: - %innercount.merge = phi i32 [ %innercount.lcssa, %innerexit ], [ %innercount, %innerpreheader ] - - %ofs4 = sext i32 %outercount to i64 - %adr4 = getelementptr i8, i8* %address, i64 %ofs4 - store i8 0, i8* %adr4 - - %ofs5 = sext i32 %innercount.merge to i64 - %adr5 = getelementptr i8, i8* %address, i64 %ofs5 - store i8 0, i8* %adr5 - - %outerpostcount = add i32 %outercount, 1 - %tmp47 = icmp slt i32 %outerpostcount, %limit - br i1 %tmp47, label %outerloop, label %return - -return: - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/eliminate-comparison.ll b/llvm/test/Transforms/IndVarSimplify/eliminate-comparison.ll deleted file mode 100644 index a63617e62c0..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/eliminate-comparison.ll +++ /dev/null @@ -1,559 +0,0 @@ -; RUN: opt -indvars -S < %s | 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-n8:16:32:64" - -@X = external global [0 x double] - -; Indvars should be able to simplify simple comparisons involving -; induction variables. - -; CHECK-LABEL: @foo( -; CHECK: %cond = and i1 %tobool.not, true - -define void @foo(i64 %n, i32* nocapture %p) nounwind { -entry: - %cmp9 = icmp sgt i64 %n, 0 - br i1 %cmp9, label %pre, label %return - -pre: - %t3 = load i32, i32* %p - %tobool.not = icmp ne i32 %t3, 0 - br label %loop - -loop: - %i = phi i64 [ 0, %pre ], [ %inc, %for.inc ] - %cmp6 = icmp slt i64 %i, %n - %cond = and i1 %tobool.not, %cmp6 - br i1 %cond, label %if.then, label %for.inc - -if.then: - %arrayidx = getelementptr [0 x double], [0 x double]* @X, i64 0, i64 %i - store double 3.200000e+00, double* %arrayidx - br label %for.inc - -for.inc: - %inc = add nsw i64 %i, 1 - %exitcond = icmp sge i64 %inc, %n - br i1 %exitcond, label %return, label %loop - -return: - ret void -} - -; Don't eliminate an icmp that's contributing to the loop exit test though. - -; CHECK-LABEL: @_ZNK4llvm5APInt3ultERKS0_( -; CHECK: %tmp99 = icmp sgt i32 %i, -1 - -define i32 @_ZNK4llvm5APInt3ultERKS0_(i32 %tmp2.i1, i64** %tmp65, i64** %tmp73, i64** %tmp82, i64** %tmp90) { -entry: - br label %bb18 - -bb13: - %tmp66 = load i64*, i64** %tmp65, align 4 - %tmp68 = getelementptr inbounds i64, i64* %tmp66, i32 %i - %tmp69 = load i64, i64* %tmp68, align 4 - %tmp74 = load i64*, i64** %tmp73, align 4 - %tmp76 = getelementptr inbounds i64, i64* %tmp74, i32 %i - %tmp77 = load i64, i64* %tmp76, align 4 - %tmp78 = icmp ugt i64 %tmp69, %tmp77 - br i1 %tmp78, label %bb20.loopexit, label %bb15 - -bb15: - %tmp83 = load i64*, i64** %tmp82, align 4 - %tmp85 = getelementptr inbounds i64, i64* %tmp83, i32 %i - %tmp86 = load i64, i64* %tmp85, align 4 - %tmp91 = load i64*, i64** %tmp90, align 4 - %tmp93 = getelementptr inbounds i64, i64* %tmp91, i32 %i - %tmp94 = load i64, i64* %tmp93, align 4 - %tmp95 = icmp ult i64 %tmp86, %tmp94 - br i1 %tmp95, label %bb20.loopexit, label %bb17 - -bb17: - %tmp97 = add nsw i32 %i, -1 - br label %bb18 - -bb18: - %i = phi i32 [ %tmp2.i1, %entry ], [ %tmp97, %bb17 ] - %tmp99 = icmp sgt i32 %i, -1 - br i1 %tmp99, label %bb13, label %bb20.loopexit - -bb20.loopexit: - %tmp.0.ph = phi i32 [ 0, %bb18 ], [ 1, %bb15 ], [ 0, %bb13 ] - ret i32 %tmp.0.ph -} - -; Indvars should eliminate the icmp here. - -; CHECK-LABEL: @func_10( -; CHECK-NOT: icmp -; CHECK: ret void - -define void @func_10() nounwind { -entry: - br label %loop - -loop: - %i = phi i32 [ %i.next, %loop ], [ 0, %entry ] - %t0 = icmp slt i32 %i, 0 - %t1 = zext i1 %t0 to i32 - %t2 = add i32 %t1, %i - %u3 = zext i32 %t2 to i64 - store i64 %u3, i64* null - %i.next = add i32 %i, 1 - br i1 undef, label %loop, label %return - -return: - ret void -} - -; PR14432 -; Indvars should not turn the second loop into an infinite one. - -; CHECK-LABEL: @func_11( -; CHECK: %tmp5 = icmp ult i32 %__key6.0, 10 -; CHECK-NOT: br i1 true, label %noassert68, label %unrolledend - -define i32 @func_11() nounwind uwtable { -entry: - br label %forcond - -forcond: ; preds = %noassert, %entry - %__key6.0 = phi i32 [ 2, %entry ], [ %tmp37, %noassert ] - %tmp5 = icmp slt i32 %__key6.0, 10 - br i1 %tmp5, label %noassert, label %forcond38.preheader - -forcond38.preheader: ; preds = %forcond - br label %forcond38 - -noassert: ; preds = %forbody - %tmp13 = sdiv i32 -32768, %__key6.0 - %tmp2936 = shl i32 %tmp13, 24 - %sext23 = shl i32 %tmp13, 24 - %tmp32 = icmp eq i32 %tmp2936, %sext23 - %tmp37 = add i32 %__key6.0, 1 - br i1 %tmp32, label %forcond, label %assert33 - -assert33: ; preds = %noassert - tail call void @llvm.trap() - unreachable - -forcond38: ; preds = %noassert68, %forcond38.preheader - %__key8.0 = phi i32 [ %tmp81, %noassert68 ], [ 2, %forcond38.preheader ] - %tmp46 = icmp slt i32 %__key8.0, 10 - br i1 %tmp46, label %noassert68, label %unrolledend - -noassert68: ; preds = %forbody39 - %tmp57 = sdiv i32 -32768, %__key8.0 - %sext34 = shl i32 %tmp57, 16 - %sext21 = shl i32 %tmp57, 16 - %tmp76 = icmp eq i32 %sext34, %sext21 - %tmp81 = add i32 %__key8.0, 1 - br i1 %tmp76, label %forcond38, label %assert77 - -assert77: ; preds = %noassert68 - tail call void @llvm.trap() - unreachable - -unrolledend: ; preds = %forcond38 - ret i32 0 -} - -declare void @llvm.trap() noreturn nounwind - -; In this case the second loop only has a single iteration, fold the header away -; CHECK-LABEL: @func_12( -; CHECK: %tmp5 = icmp ult i32 %__key6.0, 10 -; CHECK: br i1 true, label %noassert68, label %unrolledend -define i32 @func_12() nounwind uwtable { -entry: - br label %forcond - -forcond: ; preds = %noassert, %entry - %__key6.0 = phi i32 [ 2, %entry ], [ %tmp37, %noassert ] - %tmp5 = icmp slt i32 %__key6.0, 10 - br i1 %tmp5, label %noassert, label %forcond38.preheader - -forcond38.preheader: ; preds = %forcond - br label %forcond38 - -noassert: ; preds = %forbody - %tmp13 = sdiv i32 -32768, %__key6.0 - %tmp2936 = shl i32 %tmp13, 24 - %sext23 = shl i32 %tmp13, 24 - %tmp32 = icmp eq i32 %tmp2936, %sext23 - %tmp37 = add i32 %__key6.0, 1 - br i1 %tmp32, label %forcond, label %assert33 - -assert33: ; preds = %noassert - tail call void @llvm.trap() - unreachable - -forcond38: ; preds = %noassert68, %forcond38.preheader - %__key8.0 = phi i32 [ %tmp81, %noassert68 ], [ 2, %forcond38.preheader ] - %tmp46 = icmp slt i32 %__key8.0, 10 - br i1 %tmp46, label %noassert68, label %unrolledend - -noassert68: ; preds = %forbody39 - %tmp57 = sdiv i32 -32768, %__key8.0 - %sext34 = shl i32 %tmp57, 16 - %sext21 = shl i32 %tmp57, 16 - %tmp76 = icmp ne i32 %sext34, %sext21 - %tmp81 = add i32 %__key8.0, 1 - br i1 %tmp76, label %forcond38, label %assert77 - -assert77: ; preds = %noassert68 - tail call void @llvm.trap() - unreachable - -unrolledend: ; preds = %forcond38 - ret i32 0 -} - -declare void @side_effect() - -define void @func_13(i32* %len.ptr) { -; CHECK-LABEL: @func_13( - entry: - %len = load i32, i32* %len.ptr, !range !0 - %len.sub.1 = add i32 %len, -1 - %len.is.zero = icmp eq i32 %len, 0 - br i1 %len.is.zero, label %leave, label %loop - - loop: -; CHECK: loop: - %iv = phi i32 [ 0, %entry ], [ %iv.inc, %be ] - call void @side_effect() - %iv.inc = add i32 %iv, 1 - %iv.cmp = icmp ult i32 %iv, %len - br i1 %iv.cmp, label %be, label %leave -; CHECK: br i1 true, label %be, label %leave - - be: - call void @side_effect() - %be.cond = icmp ult i32 %iv, %len.sub.1 - br i1 %be.cond, label %loop, label %leave - - leave: - ret void -} - -define void @func_14(i32* %len.ptr) { -; CHECK-LABEL: @func_14( - entry: - %len = load i32, i32* %len.ptr, !range !0 - %len.sub.1 = add i32 %len, -1 - %len.is.zero = icmp eq i32 %len, 0 - %len.is.int_min = icmp eq i32 %len, 2147483648 - %no.entry = or i1 %len.is.zero, %len.is.int_min - br i1 %no.entry, label %leave, label %loop - - loop: -; CHECK: loop: - %iv = phi i32 [ 0, %entry ], [ %iv.inc, %be ] - call void @side_effect() - %iv.inc = add i32 %iv, 1 - %iv.cmp = icmp slt i32 %iv, %len - br i1 %iv.cmp, label %be, label %leave -; CHECK: br i1 true, label %be, label %leave - - be: - call void @side_effect() - %be.cond = icmp slt i32 %iv, %len.sub.1 - br i1 %be.cond, label %loop, label %leave - - leave: - ret void -} - -define void @func_15(i32* %len.ptr) { -; CHECK-LABEL: @func_15( - entry: - %len = load i32, i32* %len.ptr, !range !0 - %len.add.1 = add i32 %len, 1 - %len.add.1.is.zero = icmp eq i32 %len.add.1, 0 - br i1 %len.add.1.is.zero, label %leave, label %loop - - loop: -; CHECK: loop: - %iv = phi i32 [ 0, %entry ], [ %iv.inc, %be ] - call void @side_effect() - %iv.inc = add i32 %iv, 1 - %iv.cmp = icmp ult i32 %iv, %len.add.1 - br i1 %iv.cmp, label %be, label %leave -; CHECK: br i1 true, label %be, label %leave - - be: - call void @side_effect() - %be.cond = icmp ult i32 %iv, %len - br i1 %be.cond, label %loop, label %leave - - leave: - ret void -} - -define void @func_16(i32* %len.ptr) { -; CHECK-LABEL: @func_16( - entry: - %len = load i32, i32* %len.ptr, !range !0 - %len.add.5 = add i32 %len, 5 - %entry.cond.0 = icmp slt i32 %len, 2147483643 - %entry.cond.1 = icmp slt i32 4, %len.add.5 - %entry.cond = and i1 %entry.cond.0, %entry.cond.1 - br i1 %entry.cond, label %loop, label %leave - - loop: -; CHECK: loop: - %iv = phi i32 [ 0, %entry ], [ %iv.inc, %be ] - call void @side_effect() - %iv.inc = add i32 %iv, 1 - %iv.add.4 = add i32 %iv, 4 - %iv.cmp = icmp slt i32 %iv.add.4, %len.add.5 - br i1 %iv.cmp, label %be, label %leave -; CHECK: br i1 true, label %be, label %leave - - be: - call void @side_effect() - %be.cond = icmp slt i32 %iv, %len - br i1 %be.cond, label %loop, label %leave - - leave: - ret void -} - -define void @func_17(i32* %len.ptr) { -; CHECK-LABEL: @func_17( - entry: - %len = load i32, i32* %len.ptr - %len.add.5 = add i32 %len, -5 - %entry.cond.0 = icmp slt i32 %len, 2147483653 ;; 2147483653 == INT_MIN - (-5) - %entry.cond.1 = icmp slt i32 -6, %len.add.5 - %entry.cond = and i1 %entry.cond.0, %entry.cond.1 - br i1 %entry.cond, label %loop, label %leave - - loop: -; CHECK: loop: - %iv.2 = phi i32 [ 0, %entry ], [ %iv.2.inc, %be ] - %iv = phi i32 [ -6, %entry ], [ %iv.inc, %be ] - call void @side_effect() - %iv.inc = add i32 %iv, 1 - %iv.2.inc = add i32 %iv.2, 1 - %iv.cmp = icmp slt i32 %iv, %len.add.5 - -; Deduces {-5,+,1} s< (-5 + %len) from {0,+,1} < %len -; since %len s< INT_MIN - (-5) from the entry condition - -; CHECK: br i1 true, label %be, label %leave - br i1 %iv.cmp, label %be, label %leave - - be: -; CHECK: be: - call void @side_effect() - %be.cond = icmp slt i32 %iv.2, %len - br i1 %be.cond, label %loop, label %leave - - leave: - ret void -} - -define i1 @func_18(i16* %tmp20, i32* %len.addr) { -; CHECK-LABEL: @func_18( -entry: - %len = load i32, i32* %len.addr, !range !0 - %tmp18 = icmp eq i32 %len, 0 - br i1 %tmp18, label %bb2, label %bb0.preheader - -bb0.preheader: - br label %bb0 - -bb0: -; CHECK: bb0: - %var_0.in = phi i32 [ %var_0, %bb1 ], [ %len, %bb0.preheader ] - %var_1 = phi i32 [ %tmp30, %bb1 ], [ 0, %bb0.preheader ] - %var_0 = add nsw i32 %var_0.in, -1 - %tmp23 = icmp ult i32 %var_1, %len -; CHECK: br i1 true, label %stay, label %bb2.loopexit - br i1 %tmp23, label %stay, label %bb2 - -stay: -; CHECK: stay: - %tmp25 = getelementptr inbounds i16, i16* %tmp20, i32 %var_1 - %tmp26 = load i16, i16* %tmp25 - %tmp29 = icmp eq i16 %tmp26, 0 - br i1 %tmp29, label %bb1, label %bb2 - -bb1: - %tmp30 = add i32 %var_1, 1 - %tmp31 = icmp eq i32 %var_0, 0 - br i1 %tmp31, label %bb3, label %bb0 - -bb2: - ret i1 false - -bb3: - ret i1 true -} - -define void @func_19(i32* %length.ptr) { -; CHECK-LABEL: @func_19( - entry: - %length = load i32, i32* %length.ptr, !range !0 - %length.is.nonzero = icmp ne i32 %length, 0 - br i1 %length.is.nonzero, label %loop, label %leave - - loop: -; CHECK: loop: - %iv = phi i32 [ 0, %entry ], [ %iv.inc, %be ] - %iv.inc = add i32 %iv, 1 - %range.check = icmp ult i32 %iv, %length - br i1 %range.check, label %be, label %leave -; CHECK: br i1 true, label %be, label %leave.loopexit -; CHECK: be: - - be: - call void @side_effect() - %be.cond = icmp slt i32 %iv.inc, %length - br i1 %be.cond, label %loop, label %leave - - leave: - ret void -} - -define void @func_20(i32* %length.ptr) { -; Like @func_19, but %length is no longer provably positive, so -; %range.check cannot be proved to be always true. - -; CHECK-LABEL: @func_20( - entry: - %length = load i32, i32* %length.ptr - %length.is.nonzero = icmp ne i32 %length, 0 - br i1 %length.is.nonzero, label %loop, label %leave - - loop: -; CHECK: loop: - %iv = phi i32 [ 0, %entry ], [ %iv.inc, %be ] - %iv.inc = add i32 %iv, 1 - %range.check = icmp ult i32 %iv, %length - br i1 %range.check, label %be, label %leave -; CHECK: br i1 %range.check, label %be, label %leave.loopexit -; CHECK: be: - - be: - call void @side_effect() - %be.cond = icmp slt i32 %iv.inc, %length - br i1 %be.cond, label %loop, label %leave - - leave: - ret void -} - -define void @func_21(i32* %length.ptr) { -; CHECK-LABEL: @func_21( - -; This checks that the backedge condition, (I + 1) < Length - 1 implies -; (I + 1) < Length - entry: - %length = load i32, i32* %length.ptr, !range !0 - %lim = sub i32 %length, 1 - %entry.cond = icmp sgt i32 %length, 1 - br i1 %entry.cond, label %loop, label %leave - - loop: -; CHECK: loop: - %iv = phi i32 [ 0, %entry ], [ %iv.inc, %be ] - %iv.inc = add i32 %iv, 1 - %range.check = icmp slt i32 %iv, %length - br i1 %range.check, label %be, label %leave -; CHECK: br i1 true, label %be, label %leave.loopexit -; CHECK: be: - - be: - call void @side_effect() - %be.cond = icmp slt i32 %iv.inc, %lim - br i1 %be.cond, label %loop, label %leave - - leave: - ret void -} - -define void @func_22(i32* %length.ptr) { -; CHECK-LABEL: @func_22( - -; This checks that the backedge condition, (I + 1) < Length - 1 implies -; (I + 1) < Length - entry: - %length = load i32, i32* %length.ptr, !range !0 - %lim = sub i32 %length, 1 - %entry.cond = icmp sgt i32 %length, 1 - br i1 %entry.cond, label %loop, label %leave - - loop: -; CHECK: loop: - %iv = phi i32 [ 0, %entry ], [ %iv.inc, %be ] - %iv.inc = add i32 %iv, 1 - %range.check = icmp sle i32 %iv, %length - br i1 %range.check, label %be, label %leave -; CHECK: br i1 true, label %be, label %leave.loopexit -; CHECK: be: - - be: - call void @side_effect() - %be.cond = icmp sle i32 %iv.inc, %lim - br i1 %be.cond, label %loop, label %leave - - leave: - ret void -} - -define void @func_23(i32* %length.ptr) { -; CHECK-LABEL: @func_23( - entry: - %length = load i32, i32* %length.ptr, !range !0 - %entry.cond = icmp ult i32 4, %length - br i1 %entry.cond, label %loop, label %leave - - loop: -; CHECK: loop: - %iv = phi i32 [ 4, %entry ], [ %iv.inc, %be ] - %iv.inc = add i32 %iv, 1 - %range.check = icmp slt i32 %iv, %length - br i1 %range.check, label %be, label %leave -; CHECK: br i1 true, label %be, label %leave.loopexit -; CHECK: be: - - be: - call void @side_effect() - %be.cond = icmp slt i32 %iv.inc, %length - br i1 %be.cond, label %loop, label %leave - - leave: - ret void -} - -define void @func_24(i32* %init.ptr) { -; CHECK-LABEL: @func_24( - entry: - %init = load i32, i32* %init.ptr, !range !0 - %entry.cond = icmp ugt i32 %init, 4 - br i1 %entry.cond, label %loop, label %leave - - loop: -; CHECK: loop: - %iv = phi i32 [ %init, %entry ], [ %iv.dec, %be ] - %iv.dec = add i32 %iv, -1 - %range.check = icmp sgt i32 %iv, 4 - br i1 %range.check, label %be, label %leave -; CHECK: br i1 true, label %be, label %leave.loopexit -; CHECK: be: - - be: - call void @side_effect() - %be.cond = icmp sgt i32 %iv.dec, 4 - br i1 %be.cond, label %loop, label %leave - - leave: - ret void -} - - -!0 = !{i32 0, i32 2147483647} diff --git a/llvm/test/Transforms/IndVarSimplify/eliminate-max.ll b/llvm/test/Transforms/IndVarSimplify/eliminate-max.ll deleted file mode 100644 index 6d07c2cdcce..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/eliminate-max.ll +++ /dev/null @@ -1,57 +0,0 @@ -; RUN: opt < %s -S -indvars | FileCheck %s -; PR4914.ll - -; Indvars should be able to do range analysis and eliminate icmps. -; There are two here which cannot be eliminated. -; There's one that icmp which can be eliminated and which indvars currently -; cannot eliminate, because it requires analyzing more than just the -; range of the induction variable. - -@0 = private constant [4 x i8] c"%d\0A\00", align 1 ; <[4 x i8]*> [#uses=1] - -define i32 @main() nounwind { -; CHECK-LABEL: @main( -; CHECK: = icmp -; CHECK: = icmp -; CHECK: = icmp -; CHECK-NOT: = icmp -bb: - br label %bb1 - -bb1: ; preds = %bb14, %bb - %t = phi i32 [ 0, %bb ], [ %t19, %bb14 ] ; <i32> [#uses=5] - %t2 = phi i32 [ 0, %bb ], [ %t18, %bb14 ] ; <i32> [#uses=1] - %t3 = icmp slt i32 %t, 0 ; <i1> [#uses=1] - br i1 %t3, label %bb7, label %bb4 - -bb4: ; preds = %bb1 - %t5 = icmp sgt i32 %t, 255 ; <i1> [#uses=1] - %t6 = select i1 %t5, i32 255, i32 %t ; <i32> [#uses=1] - br label %bb7 - -bb7: ; preds = %bb4, %bb1 - %t8 = phi i32 [ %t6, %bb4 ], [ 0, %bb1 ] ; <i32> [#uses=1] - %t9 = sub i32 0, %t ; <i32> [#uses=3] - %t10 = icmp slt i32 %t9, 0 ; <i1> [#uses=1] - br i1 %t10, label %bb14, label %bb11 - -bb11: ; preds = %bb7 - %t12 = icmp sgt i32 %t9, 255 ; <i1> [#uses=1] - %t13 = select i1 %t12, i32 255, i32 %t9 ; <i32> [#uses=1] - br label %bb14 - -bb14: ; preds = %bb11, %bb7 - %t15 = phi i32 [ %t13, %bb11 ], [ 0, %bb7 ] ; <i32> [#uses=1] - %t16 = add nsw i32 %t2, 255 ; <i32> [#uses=1] - %t17 = add nsw i32 %t16, %t8 ; <i32> [#uses=1] - %t18 = add nsw i32 %t17, %t15 ; <i32> [#uses=2] - %t19 = add nsw i32 %t, 1 ; <i32> [#uses=2] - %t20 = icmp slt i32 %t19, 1000000000 ; <i1> [#uses=1] - br i1 %t20, label %bb1, label %bb21 - -bb21: ; preds = %bb14 - %t22 = call i32 (i8*, ...) @printf(i8* noalias getelementptr inbounds ([4 x i8], [4 x i8]* @0, i32 0, i32 0), i32 %t18) nounwind - ret i32 0 -} - -declare i32 @printf(i8* noalias nocapture, ...) nounwind diff --git a/llvm/test/Transforms/IndVarSimplify/eliminate-rem.ll b/llvm/test/Transforms/IndVarSimplify/eliminate-rem.ll deleted file mode 100644 index 8c1ea81263f..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/eliminate-rem.ll +++ /dev/null @@ -1,121 +0,0 @@ -; RUN: opt -indvars -S < %s | 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-n8:16:32:64" - -; Indvars should be able to eliminate this srem. -; CHECK-LABEL: @simple( -; CHECK-NOT: rem -; CHECK: ret - -define void @simple(i64 %arg, double* %arg3) nounwind { -bb: - %t = icmp slt i64 0, %arg ; <i1> [#uses=1] - br i1 %t, label %bb4, label %bb12 - -bb4: ; preds = %bb - br label %bb5 - -bb5: ; preds = %bb4, %bb5 - %t6 = phi i64 [ %t9, %bb5 ], [ 0, %bb4 ] ; <i64> [#uses=2] - %t7 = srem i64 %t6, %arg ; <i64> [#uses=1] - %t8 = getelementptr inbounds double, double* %arg3, i64 %t7 ; <double*> [#uses=1] - store double 0.000000e+00, double* %t8 - %t9 = add nsw i64 %t6, 1 ; <i64> [#uses=2] - %t10 = icmp slt i64 %t9, %arg ; <i1> [#uses=1] - br i1 %t10, label %bb5, label %bb11 - -bb11: ; preds = %bb5 - br label %bb12 - -bb12: ; preds = %bb11, %bb - ret void -} - -; Indvars should be able to eliminate the (i+1)%n. -; CHECK-LABEL: @f( -; CHECK-NOT: {{[us]}}rem -; CHECK: {{[us]}}rem -; CHECK-NOT: {{[us]}}rem -; CHECK: ret - -define i32 @f(i64* %arg, i64 %arg1, i64 %arg2, i64 %arg3) nounwind { -bb: - %t = icmp sgt i64 %arg1, 0 ; <i1> [#uses=1] - br i1 %t, label %bb4, label %bb54 - -bb4: ; preds = %bb - br label %bb5 - -bb5: ; preds = %bb49, %bb4 - %t6 = phi i64 [ %t51, %bb49 ], [ 0, %bb4 ] ; <i64> [#uses=4] - %t7 = phi i32 [ %t50, %bb49 ], [ 0, %bb4 ] ; <i32> [#uses=2] - %t8 = add nsw i64 %t6, %arg1 ; <i64> [#uses=1] - %t9 = add nsw i64 %t8, -2 ; <i64> [#uses=1] - %t10 = srem i64 %t9, %arg1 ; <i64> [#uses=1] - %t11 = add nsw i64 %t10, 1 ; <i64> [#uses=1] - %t12 = add nsw i64 %t6, 1 ; <i64> [#uses=1] - %t13 = srem i64 %t12, %arg1 ; <i64> [#uses=1] - %t14 = icmp sgt i64 %arg1, 0 ; <i1> [#uses=1] - br i1 %t14, label %bb15, label %bb49 - -bb15: ; preds = %bb5 - br label %bb16 - -bb16: ; preds = %bb44, %bb15 - %t17 = phi i64 [ %t46, %bb44 ], [ 0, %bb15 ] ; <i64> [#uses=1] - %t18 = phi i32 [ %t45, %bb44 ], [ %t7, %bb15 ] ; <i32> [#uses=2] - %t19 = icmp sgt i64 %arg1, 0 ; <i1> [#uses=1] - br i1 %t19, label %bb20, label %bb44 - -bb20: ; preds = %bb16 - br label %bb21 - -bb21: ; preds = %bb21, %bb20 - %t22 = phi i64 [ %t41, %bb21 ], [ 0, %bb20 ] ; <i64> [#uses=4] - %t23 = phi i32 [ %t40, %bb21 ], [ %t18, %bb20 ] ; <i32> [#uses=1] - %t24 = mul i64 %t6, %arg1 ; <i64> [#uses=1] - %t25 = mul i64 %t13, %arg1 ; <i64> [#uses=1] - %t26 = add nsw i64 %t24, %t22 ; <i64> [#uses=1] - %t27 = mul i64 %t11, %arg1 ; <i64> [#uses=1] - %t28 = add nsw i64 %t25, %t22 ; <i64> [#uses=1] - %t29 = getelementptr inbounds i64, i64* %arg, i64 %t26 ; <i64*> [#uses=1] - %t30 = add nsw i64 %t27, %t22 ; <i64> [#uses=1] - %t31 = getelementptr inbounds i64, i64* %arg, i64 %t28 ; <i64*> [#uses=1] - %t32 = zext i32 %t23 to i64 ; <i64> [#uses=1] - %t33 = load i64, i64* %t29 ; <i64> [#uses=1] - %t34 = getelementptr inbounds i64, i64* %arg, i64 %t30 ; <i64*> [#uses=1] - %t35 = load i64, i64* %t31 ; <i64> [#uses=1] - %t36 = add nsw i64 %t32, %t33 ; <i64> [#uses=1] - %t37 = add nsw i64 %t36, %t35 ; <i64> [#uses=1] - %t38 = load i64, i64* %t34 ; <i64> [#uses=1] - %t39 = add nsw i64 %t37, %t38 ; <i64> [#uses=1] - %t40 = trunc i64 %t39 to i32 ; <i32> [#uses=2] - %t41 = add nsw i64 %t22, 1 ; <i64> [#uses=2] - %t42 = icmp slt i64 %t41, %arg1 ; <i1> [#uses=1] - br i1 %t42, label %bb21, label %bb43 - -bb43: ; preds = %bb21 - br label %bb44 - -bb44: ; preds = %bb43, %bb16 - %t45 = phi i32 [ %t18, %bb16 ], [ %t40, %bb43 ] ; <i32> [#uses=2] - %t46 = add nsw i64 %t17, 1 ; <i64> [#uses=2] - %t47 = icmp slt i64 %t46, %arg1 ; <i1> [#uses=1] - br i1 %t47, label %bb16, label %bb48 - -bb48: ; preds = %bb44 - br label %bb49 - -bb49: ; preds = %bb48, %bb5 - %t50 = phi i32 [ %t7, %bb5 ], [ %t45, %bb48 ] ; <i32> [#uses=2] - %t51 = add nsw i64 %t6, 1 ; <i64> [#uses=2] - %t52 = icmp slt i64 %t51, %arg1 ; <i1> [#uses=1] - br i1 %t52, label %bb5, label %bb53 - -bb53: ; preds = %bb49 - br label %bb54 - -bb54: ; preds = %bb53, %bb - %t55 = phi i32 [ 0, %bb ], [ %t50, %bb53 ] ; <i32> [#uses=1] - ret i32 %t55 -} diff --git a/llvm/test/Transforms/IndVarSimplify/eliminate-trunc.ll b/llvm/test/Transforms/IndVarSimplify/eliminate-trunc.ll deleted file mode 100644 index 7e0971f9f31..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/eliminate-trunc.ll +++ /dev/null @@ -1,564 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -indvars -S < %s | FileCheck %s - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -; General case: without extra knowledge, trunc cannot be eliminated. -define void @test_00(i64 %start, i32 %n) { -; -; CHECK-LABEL: @test_00( -; CHECK-NEXT: entry: -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[START:%.*]], [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1 -; CHECK-NEXT: [[NARROW_IV:%.*]] = trunc i64 [[IV]] to i32 -; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[NARROW_IV]], [[N:%.*]] -; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: ret void -; -entry: - br label %loop -loop: - %iv = phi i64 [ %start, %entry ], [ %iv.next, %loop ] - %iv.next = add i64 %iv, 1 - %narrow.iv = trunc i64 %iv to i32 - %cmp = icmp slt i32 %narrow.iv, %n - br i1 %cmp, label %loop, label %exit -exit: - ret void -} - - -define void @test_01(i32 %n) { -; -; CHECK-LABEL: @test_01( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[SEXT:%.*]] = sext i32 [[N:%.*]] to i64 -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1 -; CHECK-NEXT: [[TMP0:%.*]] = icmp slt i64 [[IV]], [[SEXT]] -; CHECK-NEXT: br i1 [[TMP0]], label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: ret void -; -entry: - br label %loop -loop: - %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ] - %iv.next = add i64 %iv, 1 - %narrow.iv = trunc i64 %iv to i32 - %cmp = icmp slt i32 %narrow.iv, %n - br i1 %cmp, label %loop, label %exit -exit: - ret void -} - -; Max value at which we can eliminate trunc: SINT_MAX - 1. -define void @test_02(i32 %n) { -; -; CHECK-LABEL: @test_02( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[SEXT:%.*]] = sext i32 [[N:%.*]] to i64 -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 2147483646, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1 -; CHECK-NEXT: [[TMP0:%.*]] = icmp slt i64 [[IV]], [[SEXT]] -; CHECK-NEXT: br i1 [[TMP0]], label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: ret void -; -entry: - br label %loop -loop: - %iv = phi i64 [ 2147483646, %entry ], [ %iv.next, %loop ] - %iv.next = add i64 %iv, 1 - %narrow.iv = trunc i64 %iv to i32 - %cmp = icmp slt i32 %narrow.iv, %n - br i1 %cmp, label %loop, label %exit -exit: - ret void -} - -; If we start from SINT_MAX then the predicate is always false. -define void @test_03(i32 %n) { -; -; CHECK-LABEL: @test_03( -; CHECK-NEXT: entry: -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: br i1 false, label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: ret void -; -entry: - br label %loop -loop: - %iv = phi i64 [2147483647, %entry], [%iv.next, %loop] - %iv.next = add i64 %iv, 1 - %narrow.iv = trunc i64 %iv to i32 - %cmp = icmp slt i32 %narrow.iv, %n - br i1 %cmp, label %loop, label %exit -exit: - ret void -} - -; Minimum value at which we can apply the transform: SINT_MIN + 1. -define void @test_04(i32 %n) { -; -; CHECK-LABEL: @test_04( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[SEXT:%.*]] = sext i32 [[N:%.*]] to i64 -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: [[IV:%.*]] = phi i64 [ -2147483647, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[IV_NEXT]] = add nsw i64 [[IV]], 1 -; CHECK-NEXT: [[TMP0:%.*]] = icmp slt i64 [[IV]], [[SEXT]] -; CHECK-NEXT: br i1 [[TMP0]], label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: ret void -; -entry: - br label %loop -loop: - %iv = phi i64 [ -2147483647, %entry ], [ %iv.next, %loop ] - %iv.next = add i64 %iv, 1 - %narrow.iv = trunc i64 %iv to i32 - %cmp = icmp slt i32 %narrow.iv, %n - br i1 %cmp, label %loop, label %exit -exit: - ret void -} - -; FIXME: Harmful LFTR should be thrown away. -define void @test_05(i32 %n) { -; -; CHECK-LABEL: @test_05( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N:%.*]], 1 -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: [[IV:%.*]] = phi i64 [ -2147483648, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[IV_NEXT]] = add nsw i64 [[IV]], 1 -; CHECK-NEXT: [[LFTR_WIDEIV:%.*]] = trunc i64 [[IV_NEXT]] to i32 -; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i32 [[LFTR_WIDEIV]], [[TMP0]] -; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: ret void -; -entry: - br label %loop -loop: - %iv = phi i64 [ -2147483648, %entry ], [ %iv.next, %loop ] - %iv.next = add i64 %iv, 1 - %narrow.iv = trunc i64 %iv to i32 - %cmp = icmp slt i32 %narrow.iv, %n - br i1 %cmp, label %loop, label %exit -exit: - ret void -} - -; Trunc changes the actual value of the IV, so it is invalid to remove it: SINT_MIN - 1. -define void @test_06(i32 %n) { -; -; CHECK-LABEL: @test_06( -; CHECK-NEXT: entry: -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: [[IV:%.*]] = phi i64 [ -2147483649, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1 -; CHECK-NEXT: [[NARROW_IV:%.*]] = trunc i64 [[IV]] to i32 -; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[NARROW_IV]], [[N:%.*]] -; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: ret void -; -entry: - br label %loop -loop: - %iv = phi i64 [ -2147483649, %entry ], [ %iv.next, %loop ] - %iv.next = add i64 %iv, 1 - %narrow.iv = trunc i64 %iv to i32 - %cmp = icmp slt i32 %narrow.iv, %n - br i1 %cmp, label %loop, label %exit -exit: - ret void -} - -; General case: without extra knowledge, trunc cannot be eliminated. -define void @test_00_unsigned(i64 %start, i32 %n) { -; CHECK-LABEL: @test_00_unsigned( -; CHECK-NEXT: entry: -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[START:%.*]], [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1 -; CHECK-NEXT: [[NARROW_IV:%.*]] = trunc i64 [[IV]] to i32 -; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[NARROW_IV]], [[N:%.*]] -; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: ret void -; -entry: - br label %loop -loop: - %iv = phi i64 [ %start, %entry ], [ %iv.next, %loop ] - %iv.next = add i64 %iv, 1 - %narrow.iv = trunc i64 %iv to i32 - %cmp = icmp ult i32 %narrow.iv, %n - br i1 %cmp, label %loop, label %exit -exit: - ret void -} - -; FIXME: Harmful LFTR should be thrown away. -define void @test_01_unsigned(i32 %n) { -; CHECK-LABEL: @test_01_unsigned( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N:%.*]], 1 -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1 -; CHECK-NEXT: [[LFTR_WIDEIV:%.*]] = trunc i64 [[IV_NEXT]] to i32 -; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i32 [[LFTR_WIDEIV]], [[TMP0]] -; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: ret void -; -entry: - br label %loop -loop: - %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ] - %iv.next = add i64 %iv, 1 - %narrow.iv = trunc i64 %iv to i32 - %cmp = icmp ult i32 %narrow.iv, %n - br i1 %cmp, label %loop, label %exit -exit: - ret void -} - -; Max value at which we can eliminate trunc: UINT_MAX - 1. -define void @test_02_unsigned(i32 %n) { -; CHECK-LABEL: @test_02_unsigned( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[ZEXT:%.*]] = zext i32 [[N:%.*]] to i64 -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 4294967294, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1 -; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i64 [[IV]], [[ZEXT]] -; CHECK-NEXT: br i1 [[TMP0]], label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: ret void -; -entry: - br label %loop -loop: - %iv = phi i64 [ 4294967294, %entry ], [ %iv.next, %loop ] - %iv.next = add i64 %iv, 1 - %narrow.iv = trunc i64 %iv to i32 - %cmp = icmp ult i32 %narrow.iv, %n - br i1 %cmp, label %loop, label %exit -exit: - ret void -} - -; If we start from UINT_MAX then the predicate is always false. -define void @test_03_unsigned(i32 %n) { -; CHECK-LABEL: @test_03_unsigned( -; CHECK-NEXT: entry: -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: br i1 false, label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: ret void -; -entry: - br label %loop -loop: - %iv = phi i64 [ 4294967295, %entry ], [ %iv.next, %loop ] - %iv.next = add i64 %iv, 1 - %narrow.iv = trunc i64 %iv to i32 - %cmp = icmp ult i32 %narrow.iv, %n - br i1 %cmp, label %loop, label %exit -exit: - ret void -} - -; Minimum value at which we can apply the transform: UINT_MIN. -define void @test_04_unsigned(i32 %n) { -; CHECK-LABEL: @test_04_unsigned( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N:%.*]], 1 -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1 -; CHECK-NEXT: [[LFTR_WIDEIV:%.*]] = trunc i64 [[IV_NEXT]] to i32 -; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i32 [[LFTR_WIDEIV]], [[TMP0]] -; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: ret void -; -entry: - br label %loop -loop: - %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ] - %iv.next = add i64 %iv, 1 - %narrow.iv = trunc i64 %iv to i32 - %cmp = icmp ult i32 %narrow.iv, %n - br i1 %cmp, label %loop, label %exit -exit: - ret void -} - -; Start from 1. -define void @test_05_unsigned(i32 %n) { -; CHECK-LABEL: @test_05_unsigned( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[ZEXT:%.*]] = zext i32 [[N:%.*]] to i64 -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 1, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1 -; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i64 [[IV]], [[ZEXT]] -; CHECK-NEXT: br i1 [[TMP0]], label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: ret void -; -entry: - br label %loop -loop: - %iv = phi i64 [ 1, %entry ], [ %iv.next, %loop ] - %iv.next = add i64 %iv, 1 - %narrow.iv = trunc i64 %iv to i32 - %cmp = icmp ult i32 %narrow.iv, %n - br i1 %cmp, label %loop, label %exit -exit: - ret void -} - -; Trunc changes the actual value of the IV, so it is invalid to remove it: UINT_MIN - 1. -define void @test_06_unsigned(i32 %n) { -; CHECK-LABEL: @test_06_unsigned( -; CHECK-NEXT: entry: -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: [[IV:%.*]] = phi i64 [ -1, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[IV_NEXT]] = add nsw i64 [[IV]], 1 -; CHECK-NEXT: [[NARROW_IV:%.*]] = trunc i64 [[IV]] to i32 -; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[NARROW_IV]], [[N:%.*]] -; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: ret void -; -entry: - br label %loop -loop: - %iv = phi i64 [ -1, %entry ], [ %iv.next, %loop ] - %iv.next = add i64 %iv, 1 - %narrow.iv = trunc i64 %iv to i32 - %cmp = icmp ult i32 %narrow.iv, %n - br i1 %cmp, label %loop, label %exit -exit: - ret void -} - -; Do not eliminate trunc if it is used by something different from icmp. -define void @test_07(i32* %p, i32 %n) { -; CHECK-LABEL: @test_07( -; CHECK-NEXT: entry: -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1 -; CHECK-NEXT: [[NARROW_IV:%.*]] = trunc i64 [[IV]] to i32 -; CHECK-NEXT: store i32 [[NARROW_IV]], i32* [[P:%.*]] -; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[NARROW_IV]], [[N:%.*]] -; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: ret void -; -entry: - br label %loop -loop: - %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ] - %iv.next = add i64 %iv, 1 - %narrow.iv = trunc i64 %iv to i32 - store i32 %narrow.iv, i32* %p - %cmp = icmp slt i32 %narrow.iv, %n - br i1 %cmp, label %loop, label %exit -exit: - ret void -} - -; Check that we can eliminate both signed and unsigned compare. -define void @test_08(i32 %n) { -; CHECK-LABEL: @test_08( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[ZEXT:%.*]] = zext i32 [[N:%.*]] to i64 -; CHECK-NEXT: [[SEXT:%.*]] = sext i32 [[N]] to i64 -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 1, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1 -; CHECK-NEXT: [[TMP0:%.*]] = icmp slt i64 [[IV]], [[SEXT]] -; CHECK-NEXT: [[TMP1:%.*]] = icmp ult i64 [[IV]], [[ZEXT]] -; CHECK-NEXT: [[CMP:%.*]] = and i1 [[TMP0]], [[TMP1]] -; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: ret void -; -entry: - br label %loop -loop: - %iv = phi i64 [ 1, %entry ], [ %iv.next, %loop ] - %iv.next = add i64 %iv, 1 - %narrow.iv = trunc i64 %iv to i32 - %cmp1 = icmp slt i32 %narrow.iv, %n - %cmp2 = icmp ult i32 %narrow.iv, %n - %cmp = and i1 %cmp1, %cmp2 - br i1 %cmp, label %loop, label %exit -exit: - ret void -} - -; Widen NE as unsigned. -define void @test_09(i32 %n) { -; CHECK-LABEL: @test_09( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[ZEXT:%.*]] = zext i32 [[N:%.*]] to i64 -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1 -; CHECK-NEXT: [[TMP0:%.*]] = icmp ne i64 [[IV]], [[ZEXT]] -; CHECK-NEXT: br i1 [[TMP0]], label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: ret void -; -entry: - br label %loop -loop: - %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ] - %iv.next = add i64 %iv, 1 - %narrow.iv = trunc i64 %iv to i32 - %cmp = icmp ne i32 %narrow.iv, %n - br i1 %cmp, label %loop, label %exit -exit: - ret void -} - -; Widen NE as signed. -define void @test_10(i32 %n) { -; CHECK-LABEL: @test_10( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[SEXT:%.*]] = sext i32 [[N:%.*]] to i64 -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: [[IV:%.*]] = phi i64 [ -100, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1 -; CHECK-NEXT: [[TMP0:%.*]] = icmp ne i64 [[IV]], [[SEXT]] -; CHECK-NEXT: [[NEGCMP:%.*]] = icmp slt i64 [[IV]], -10 -; CHECK-NEXT: [[CMP:%.*]] = and i1 [[TMP0]], [[NEGCMP]] -; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: ret void -; -entry: - br label %loop -loop: - %iv = phi i64 [ -100, %entry ], [ %iv.next, %loop ] - %iv.next = add i64 %iv, 1 - %narrow.iv = trunc i64 %iv to i32 - %trunccmp = icmp ne i32 %narrow.iv, %n - %negcmp = icmp slt i64 %iv, -10 - %cmp = and i1 %trunccmp, %negcmp - br i1 %cmp, label %loop, label %exit -exit: - ret void -} - -define void @test_11() { -; CHECK-LABEL: @test_11( -; CHECK-NEXT: br label [[BB1:%.*]] -; CHECK: bb1: -; CHECK-NEXT: br i1 undef, label [[BB2:%.*]], label [[BB6:%.*]] -; CHECK: bb2: -; CHECK-NEXT: br i1 undef, label [[BB3:%.*]], label [[BB4:%.*]] -; CHECK: bb3: -; CHECK-NEXT: br label [[BB4]] -; CHECK: bb4: -; CHECK-NEXT: br label [[BB6]] -; CHECK: bb5: -; CHECK-NEXT: [[_TMP24:%.*]] = icmp slt i16 undef, 0 -; CHECK-NEXT: br i1 [[_TMP24]], label [[BB5:%.*]], label [[BB5]] -; CHECK: bb6: -; CHECK-NEXT: br i1 false, label [[BB1]], label [[BB7:%.*]] -; CHECK: bb7: -; CHECK-NEXT: ret void -; - br label %bb1 - -bb1: ; preds = %bb6, %0 - %e.5.0 = phi i32 [ 0, %0 ], [ %_tmp32, %bb6 ] - br i1 undef, label %bb2, label %bb6 - -bb2: ; preds = %bb1 - %_tmp15 = trunc i32 %e.5.0 to i16 - br i1 undef, label %bb3, label %bb4 - -bb3: ; preds = %bb2 - br label %bb4 - -bb4: ; preds = %bb3, %bb2 - br label %bb6 - -bb5: ; preds = %bb5, %bb5 - %_tmp24 = icmp slt i16 %_tmp15, 0 - br i1 %_tmp24, label %bb5, label %bb5 - -bb6: ; preds = %bb4, %bb1 - %_tmp32 = add nuw nsw i32 %e.5.0, 1 - br i1 false, label %bb1, label %bb7 - -bb7: ; preds = %bb6 - ret void -} - -; Show that we can turn signed comparison to unsigned and use zext while -; comparing non-negative values. -define void @test_12(i32* %p) { -; CHECK-LABEL: @test_12( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[N:%.*]] = load i32, i32* [[P:%.*]], !range !0 -; CHECK-NEXT: [[ZEXT:%.*]] = zext i32 [[N]] to i64 -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1 -; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i64 [[IV_NEXT]], [[ZEXT]] -; CHECK-NEXT: br i1 [[TMP0]], label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: ret void -; -entry: - %n = load i32, i32* %p, !range !0 - br label %loop -loop: - %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ] - %iv.next = add i64 %iv, 1 - %narrow.iv = trunc i64 %iv.next to i32 - %cmp = icmp slt i32 %narrow.iv, %n - br i1 %cmp, label %loop, label %exit -exit: - ret void -} - -!0 = !{i32 0, i32 1000} diff --git a/llvm/test/Transforms/IndVarSimplify/exit_value_test2.ll b/llvm/test/Transforms/IndVarSimplify/exit_value_test2.ll deleted file mode 100644 index 7b6e91a742b..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/exit_value_test2.ll +++ /dev/null @@ -1,74 +0,0 @@ -; PR23538 -; RUN: opt < %s -indvars -loop-deletion -S | FileCheck %s - -; Check IndVarSimplify should not replace exit value because or else -; udiv will be introduced by expand and the cost will be high. - -declare void @_Z3mixRjj(i32* dereferenceable(4), i32) -declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) -declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) - -define i32 @_Z3fooPKcjj(i8* nocapture readonly %s, i32 %len, i32 %c) { -; CHECK-LABEL: @_Z3fooPKcjj( -; CHECK-NOT: udiv -entry: - %a = alloca i32, align 4 - %tmp = bitcast i32* %a to i8* - call void @llvm.lifetime.start.p0i8(i64 4, i8* %tmp) - store i32 -1640531527, i32* %a, align 4 - %cmp8 = icmp ugt i32 %len, 11 - br i1 %cmp8, label %while.body.lr.ph, label %while.end - -while.body.lr.ph: ; preds = %entry - br label %while.body - -while.body: ; preds = %while.body, %while.body.lr.ph - %keylen.010 = phi i32 [ %len, %while.body.lr.ph ], [ %sub, %while.body ] - %s.addr.09 = phi i8* [ %s, %while.body.lr.ph ], [ %add.ptr, %while.body ] - %tmp1 = bitcast i8* %s.addr.09 to i32* - %tmp2 = load i32, i32* %tmp1, align 4 - %shl.i = shl i32 %tmp2, 1 - %and.i = and i32 %shl.i, 16843008 - %tmp3 = load i32, i32* %a, align 4 - %sub.i = add i32 %tmp3, %tmp2 - %add = sub i32 %sub.i, %and.i - store i32 %add, i32* %a, align 4 - %add.ptr = getelementptr inbounds i8, i8* %s.addr.09, i64 12 - %sub = add i32 %keylen.010, -12 - %cmp = icmp ugt i32 %sub, 11 - br i1 %cmp, label %while.body, label %while.cond.while.end_crit_edge - -while.cond.while.end_crit_edge: ; preds = %while.body - %sub.lcssa = phi i32 [ %sub, %while.body ] - br label %while.end - -while.end: ; preds = %while.cond.while.end_crit_edge, %entry - %keylen.0.lcssa = phi i32 [ %sub.lcssa, %while.cond.while.end_crit_edge ], [ %len, %entry ] - call void @_Z3mixRjj(i32* dereferenceable(4) %a, i32 %keylen.0.lcssa) - %tmp4 = load i32, i32* %a, align 4 - call void @llvm.lifetime.end.p0i8(i64 4, i8* %tmp) - ret i32 %tmp4 -} - -define i32 @zero_backedge_count_test(i32 %unknown_init, i32* %unknown_mem) { -; CHECK-LABEL: @zero_backedge_count_test( -entry: - br label %loop - -loop: - %iv = phi i32 [ 0, %entry], [ %iv.inc, %loop ] - %unknown_phi = phi i32 [ %unknown_init, %entry ], [ %unknown_next, %loop ] - %iv.inc = add i32 %iv, 1 - %be_taken = icmp ne i32 %iv.inc, 1 - %unknown_next = load volatile i32, i32* %unknown_mem - br i1 %be_taken, label %loop, label %leave - -leave: -; We can fold %unknown_phi even though the backedge value for it is completely -; unknown, since we can prove that the loop's backedge taken count is 0. - -; CHECK: leave: -; CHECK: ret i32 %unknown_init - %exit_val = phi i32 [ %unknown_phi, %loop ] - ret i32 %exit_val -} diff --git a/llvm/test/Transforms/IndVarSimplify/exit_value_test3.ll b/llvm/test/Transforms/IndVarSimplify/exit_value_test3.ll deleted file mode 100644 index 2051d2a46b2..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/exit_value_test3.ll +++ /dev/null @@ -1,24 +0,0 @@ -; RUN: opt < %s -indvars -loop-deletion -S |FileCheck %s - -; Check IndVarSimplify should replace exit value even if the expansion cost -; is high because the loop can be deleted after the exit value rewrite. -; -; CHECK-LABEL: @_Z3fooPKcjj( -; CHECK: udiv -; CHECK: [[LABEL:^[a-zA-Z0-9_.]+]]: -; CHECK-NOT: br {{.*}} [[LABEL]] - -define i32 @_Z3fooPKcjj(i8* nocapture readnone %s, i32 %len, i32 %c) #0 { -entry: - br label %while.cond - -while.cond: ; preds = %while.cond, %entry - %klen.0 = phi i32 [ %len, %entry ], [ %sub, %while.cond ] - %cmp = icmp ugt i32 %klen.0, 11 - %sub = add i32 %klen.0, -12 - br i1 %cmp, label %while.cond, label %while.end - -while.end: ; preds = %while.cond - %klen.0.lcssa = phi i32 [ %klen.0, %while.cond ] - ret i32 %klen.0.lcssa -} diff --git a/llvm/test/Transforms/IndVarSimplify/exit_value_tests.ll b/llvm/test/Transforms/IndVarSimplify/exit_value_tests.ll deleted file mode 100644 index e491524fd62..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/exit_value_tests.ll +++ /dev/null @@ -1,115 +0,0 @@ -; Test that we can evaluate the exit values of various expression types. Since -; these loops all have predictable exit values we can replace the use outside -; of the loop with a closed-form computation, making the loop dead. -; -; RUN: opt < %s -indvars -loop-deletion -simplifycfg -S | FileCheck %s - -; CHECK-NOT: br - -define i32 @polynomial_constant() { -; <label>:0 - br label %Loop - -Loop: ; preds = %Loop, %0 - %A1 = phi i32 [ 0, %0 ], [ %A2, %Loop ] ; <i32> [#uses=3] - %B1 = phi i32 [ 0, %0 ], [ %B2, %Loop ] ; <i32> [#uses=1] - %A2 = add i32 %A1, 1 ; <i32> [#uses=1] - %B2 = add i32 %B1, %A1 ; <i32> [#uses=2] - %C = icmp eq i32 %A1, 1000 ; <i1> [#uses=1] - br i1 %C, label %Out, label %Loop - -Out: ; preds = %Loop - ret i32 %B2 -} - -define i32 @NSquare(i32 %N) { -; <label>:0 - br label %Loop - -Loop: ; preds = %Loop, %0 - %X = phi i32 [ 0, %0 ], [ %X2, %Loop ] ; <i32> [#uses=4] - %X2 = add i32 %X, 1 ; <i32> [#uses=1] - %c = icmp eq i32 %X, %N ; <i1> [#uses=1] - br i1 %c, label %Out, label %Loop - -Out: ; preds = %Loop - %Y = mul i32 %X, %X ; <i32> [#uses=1] - ret i32 %Y -} - -define i32 @NSquareOver2(i32 %N) { -; <label>:0 - br label %Loop - -Loop: ; preds = %Loop, %0 - %X = phi i32 [ 0, %0 ], [ %X2, %Loop ] ; <i32> [#uses=3] - %Y = phi i32 [ 15, %0 ], [ %Y2, %Loop ] ; <i32> [#uses=1] - %Y2 = add i32 %Y, %X ; <i32> [#uses=2] - %X2 = add i32 %X, 1 ; <i32> [#uses=1] - %c = icmp eq i32 %X, %N ; <i1> [#uses=1] - br i1 %c, label %Out, label %Loop - -Out: ; preds = %Loop - ret i32 %Y2 -} - -define i32 @strength_reduced() { -; <label>:0 - br label %Loop - -Loop: ; preds = %Loop, %0 - %A1 = phi i32 [ 0, %0 ], [ %A2, %Loop ] ; <i32> [#uses=3] - %B1 = phi i32 [ 0, %0 ], [ %B2, %Loop ] ; <i32> [#uses=1] - %A2 = add i32 %A1, 1 ; <i32> [#uses=1] - %B2 = add i32 %B1, %A1 ; <i32> [#uses=2] - %C = icmp eq i32 %A1, 1000 ; <i1> [#uses=1] - br i1 %C, label %Out, label %Loop - -Out: ; preds = %Loop - ret i32 %B2 -} - -define i32 @chrec_equals() { -entry: - br label %no_exit - -no_exit: ; preds = %no_exit, %entry - %i0 = phi i32 [ 0, %entry ], [ %i1, %no_exit ] ; <i32> [#uses=3] - %ISq = mul i32 %i0, %i0 ; <i32> [#uses=1] - %i1 = add i32 %i0, 1 ; <i32> [#uses=2] - %tmp.1 = icmp ne i32 %ISq, 10000 ; <i1> [#uses=1] - br i1 %tmp.1, label %no_exit, label %loopexit - -loopexit: ; preds = %no_exit - ret i32 %i1 -} - -define i16 @cast_chrec_test() { -; <label>:0 - br label %Loop - -Loop: ; preds = %Loop, %0 - %A1 = phi i32 [ 0, %0 ], [ %A2, %Loop ] ; <i32> [#uses=2] - %B1 = trunc i32 %A1 to i16 ; <i16> [#uses=2] - %A2 = add i32 %A1, 1 ; <i32> [#uses=1] - %C = icmp eq i16 %B1, 1000 ; <i1> [#uses=1] - br i1 %C, label %Out, label %Loop - -Out: ; preds = %Loop - ret i16 %B1 -} - -define i32 @linear_div_fold() { -entry: - br label %loop - -loop: ; preds = %loop, %entry - %i = phi i32 [ 4, %entry ], [ %i.next, %loop ] ; <i32> [#uses=3] - %i.next = add i32 %i, 8 ; <i32> [#uses=1] - %RV = udiv i32 %i, 2 ; <i32> [#uses=1] - %c = icmp ne i32 %i, 68 ; <i1> [#uses=1] - br i1 %c, label %loop, label %loopexit - -loopexit: ; preds = %loop - ret i32 %RV -} diff --git a/llvm/test/Transforms/IndVarSimplify/floating-point-iv.ll b/llvm/test/Transforms/IndVarSimplify/floating-point-iv.ll deleted file mode 100644 index c5bf3860ab5..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/floating-point-iv.ll +++ /dev/null @@ -1,92 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -define void @test1() nounwind { -entry: - br label %bb - -bb: ; preds = %bb, %entry - %x.0.reg2mem.0 = phi double [ 0.000000e+00, %entry ], [ %1, %bb ] ; <double> [#uses=2] - %0 = tail call i32 @foo(double %x.0.reg2mem.0) nounwind ; <i32> [#uses=0] - %1 = fadd double %x.0.reg2mem.0, 1.000000e+00 ; <double> [#uses=2] - %2 = fcmp olt double %1, 1.000000e+04 ; <i1> [#uses=1] - br i1 %2, label %bb, label %return - -return: ; preds = %bb - ret void -; CHECK-LABEL: @test1( -; CHECK: icmp -} - -declare i32 @foo(double) - -define void @test2() nounwind { -entry: - br label %bb - -bb: ; preds = %bb, %entry - %x.0.reg2mem.0 = phi double [ -10.000000e+00, %entry ], [ %1, %bb ] ; <double> [#uses=2] - %0 = tail call i32 @foo(double %x.0.reg2mem.0) nounwind ; <i32> [#uses=0] - %1 = fadd double %x.0.reg2mem.0, 2.000000e+00 ; <double> [#uses=2] - %2 = fcmp olt double %1, -1.000000e+00 ; <i1> [#uses=1] - br i1 %2, label %bb, label %return - -return: ; preds = %bb - ret void -; CHECK-LABEL: @test2( -; CHECK: icmp -} - - -define void @test3() nounwind { -entry: - br label %bb - -bb: ; preds = %bb, %entry - %x.0.reg2mem.0 = phi double [ 0.000000e+00, %entry ], [ %1, %bb ] - %0 = tail call i32 @foo(double %x.0.reg2mem.0) nounwind - %1 = fadd double %x.0.reg2mem.0, 1.000000e+00 - %2 = fcmp olt double %1, -1.000000e+00 - br i1 %2, label %bb, label %return - -return: - ret void -; CHECK-LABEL: @test3( -; CHECK: fcmp -} - -define void @test4() nounwind { -entry: - br label %bb - -bb: ; preds = %bb, %entry - %x.0.reg2mem.0 = phi double [ 40.000000e+00, %entry ], [ %1, %bb ] ; <double> [#uses=2] - %0 = tail call i32 @foo(double %x.0.reg2mem.0) nounwind ; <i32> [#uses=0] - %1 = fadd double %x.0.reg2mem.0, -1.000000e+00 ; <double> [#uses=2] - %2 = fcmp olt double %1, 1.000000e+00 ; <i1> [#uses=1] - br i1 %2, label %bb, label %return - -return: - ret void -; CHECK-LABEL: @test4( -; CHECK-NOT: cmp -; CHECK: br i1 false -} - -; PR6761 -define void @test5() nounwind { -; <label>:0 - br label %1 - -; <label>:1 ; preds = %1, %0 - %2 = phi double [ 9.000000e+00, %0 ], [ %4, %1 ] ; <double> [#uses=1] - %3 = tail call i32 @foo(double 0.0) ; <i32> [#uses=0] - %4 = fadd double %2, -1.000000e+00 ; <double> [#uses=2] - %5 = fcmp ult double %4, 0.000000e+00 ; <i1> [#uses=1] - br i1 %5, label %exit, label %1 - -exit: - ret void - -; CHECK-LABEL: @test5( -; CHECK: icmp slt i32 {{.*}}, 0 -; CHECK-NEXT: br i1 -} diff --git a/llvm/test/Transforms/IndVarSimplify/full_widening.ll b/llvm/test/Transforms/IndVarSimplify/full_widening.ll deleted file mode 100644 index bdcde6a296f..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/full_widening.ll +++ /dev/null @@ -1,44 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt < %s -indvars -S | 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-n8:16:32:64" - -; Make sure that we do not insert trunc in the loop. -define i32 @test_01(double* %p, double %x, i32* %np, i32* %mp, i32 %k) { -; CHECK-LABEL: @test_01( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[TMP0:%.*]] = sext i32 [[K:%.*]] to i64 -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: [[IV_WIDE:%.*]] = phi i64 [ [[CANONICAL_IV_NEXT_I:%.*]], [[LOOP]] ], [ 0, [[ENTRY:%.*]] ] -; CHECK-NEXT: [[CANONICAL_IV_NEXT_I]] = add nuw nsw i64 [[IV_WIDE]], 1 -; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds double, double* [[P:%.*]], i64 [[IV_WIDE]] -; CHECK-NEXT: [[LOAD:%.*]] = load atomic double, double* [[GEP]] unordered, align 8 -; CHECK-NEXT: [[MUL:%.*]] = fmul double [[X:%.*]], [[LOAD]] -; CHECK-NEXT: [[GEP2:%.*]] = getelementptr inbounds double, double* [[P]], i64 [[IV_WIDE]] -; CHECK-NEXT: store atomic double [[MUL]], double* [[GEP2]] unordered, align 8 -; CHECK-NEXT: [[LOOP_COND:%.*]] = icmp slt i64 [[CANONICAL_IV_NEXT_I]], [[TMP0]] -; CHECK-NEXT: br i1 [[LOOP_COND]], label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: ret i32 0 -; -entry: - br label %loop - -loop: - %iv.wide = phi i64 [ %canonical.iv.next.i, %loop ], [ 0, %entry ] - %iv.narrow = phi i32 [ %iv.narrow.next, %loop ], [ 0, %entry ] - %canonical.iv.next.i = add nuw nsw i64 %iv.wide, 1 - %zext = zext i32 %iv.narrow to i64 - %gep = getelementptr inbounds double, double* %p, i64 %zext - %load = load atomic double, double* %gep unordered, align 8 - %mul = fmul double %x, %load - %gep2 = getelementptr inbounds double, double* %p, i64 %zext - store atomic double %mul, double* %gep2 unordered, align 8 - %iv.narrow.next = add nuw nsw i32 %iv.narrow, 1 - %loop.cond = icmp slt i32 %iv.narrow.next, %k - br i1 %loop.cond, label %loop, label %exit - -exit: - ret i32 0 -} diff --git a/llvm/test/Transforms/IndVarSimplify/huge_muls.ll b/llvm/test/Transforms/IndVarSimplify/huge_muls.ll deleted file mode 100644 index 92722ca3ce0..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/huge_muls.ll +++ /dev/null @@ -1,87 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -; This test takes excessively long time if SCEV tries to construct huge -; SCEVMulExpr's (with ~1000 ops) due to non-linear analysis cost. -define i32 @test() { -; CHECK-LABEL: @test( -bci_0: - br label %bci_12 - -bci_133: ; preds = %bci_127.unr-lcssa - ret i32 %tmp17 - -bci_12: ; preds = %bci_127.unr-lcssa, %bci_0 - %indvars.iv184 = phi i64 [ %indvars.iv.next185, %bci_127.unr-lcssa ], [ 3, %bci_0 ] - %tmp1 = trunc i64 %indvars.iv184 to i32 - br label %bci_55.postloop - -bci_127.unr-lcssa: ; preds = %bci_90.postloop - %indvars.iv.next185 = add nuw nsw i64 %indvars.iv184, 1 - %tmp4 = icmp sgt i64 %indvars.iv184, 91 - br i1 %tmp4, label %bci_133, label %bci_12 - -bci_55.postloop: ; preds = %bci_90.postloop, %bci_12 - %indvars.iv180.postloop = phi i64 [ %indvars.iv.next181.postloop, %bci_90.postloop ], [ 15, %bci_12 ] - %local_2_16.postloop = phi i32 [ %tmp17, %bci_90.postloop ], [ 4, %bci_12 ] - %indvars.iv.next181.postloop = add nuw nsw i64 %indvars.iv180.postloop, 1 - %tmp6 = load i32, i32 addrspace(1)* undef, align 4 - %tmp7 = mul i32 %tmp6, %tmp1 - br label %not_zero65.us.postloop - -not_zero65.us.postloop: ; preds = %not_zero65.us.postloop.1, %bci_55.postloop - %local_2_24.us.postloop = phi i32 [ %local_2_16.postloop, %bci_55.postloop ], [ %tmp49, %not_zero65.us.postloop.1 ] - %local_6_.us.postloop = phi i32 [ 3, %bci_55.postloop ], [ %tmp50, %not_zero65.us.postloop.1 ] - %tmp8 = mul i32 %tmp7, %local_2_24.us.postloop - %tmp9 = mul i32 %tmp8, %local_2_24.us.postloop - %tmp10 = mul i32 %tmp7, %tmp9 - %tmp11 = mul i32 %tmp10, %tmp9 - %tmp12 = mul i32 %tmp7, %tmp11 - %tmp13 = mul i32 %tmp12, %tmp11 - %tmp14 = mul i32 %tmp7, %tmp13 - %tmp15 = mul i32 %tmp14, %tmp13 - %tmp16 = mul i32 %tmp7, %tmp15 - %tmp17 = mul i32 %tmp16, %tmp15 - %tmp18 = icmp sgt i32 %local_6_.us.postloop, 82 - br i1 %tmp18, label %bci_90.postloop, label %not_zero65.us.postloop.1 - -bci_90.postloop: ; preds = %not_zero65.us.postloop - %tmp19 = icmp sgt i64 %indvars.iv180.postloop, 68 - br i1 %tmp19, label %bci_127.unr-lcssa, label %bci_55.postloop - -not_zero65.us.postloop.1: ; preds = %not_zero65.us.postloop - %tmp20 = mul i32 %tmp7, %tmp17 - %tmp21 = mul i32 %tmp20, %tmp17 - %tmp22 = mul i32 %tmp7, %tmp21 - %tmp23 = mul i32 %tmp22, %tmp21 - %tmp24 = mul i32 %tmp7, %tmp23 - %tmp25 = mul i32 %tmp24, %tmp23 - %tmp26 = mul i32 %tmp7, %tmp25 - %tmp27 = mul i32 %tmp26, %tmp25 - %tmp28 = mul i32 %tmp7, %tmp27 - %tmp29 = mul i32 %tmp28, %tmp27 - %tmp30 = mul i32 %tmp7, %tmp29 - %tmp31 = mul i32 %tmp30, %tmp29 - %tmp32 = mul i32 %tmp7, %tmp31 - %tmp33 = mul i32 %tmp32, %tmp31 - %tmp34 = mul i32 %tmp7, %tmp33 - %tmp35 = mul i32 %tmp34, %tmp33 - %tmp36 = mul i32 %tmp7, %tmp35 - %tmp37 = mul i32 %tmp36, %tmp35 - %tmp38 = mul i32 %tmp7, %tmp37 - %tmp39 = mul i32 %tmp38, %tmp37 - %tmp40 = mul i32 %tmp7, %tmp39 - %tmp41 = mul i32 %tmp40, %tmp39 - %tmp42 = mul i32 %tmp7, %tmp41 - %tmp43 = mul i32 %tmp42, %tmp41 - %tmp44 = mul i32 %tmp7, %tmp43 - %tmp45 = mul i32 %tmp44, %tmp43 - %tmp46 = mul i32 %tmp7, %tmp45 - %tmp47 = mul i32 %tmp46, %tmp45 - %tmp48 = mul i32 %tmp7, %tmp47 - %tmp49 = mul i32 %tmp48, %tmp47 - %tmp50 = add nsw i32 %local_6_.us.postloop, 20 - br label %not_zero65.us.postloop -} diff --git a/llvm/test/Transforms/IndVarSimplify/indirectbr.ll b/llvm/test/Transforms/IndVarSimplify/indirectbr.ll deleted file mode 100644 index d5801690d5e..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/indirectbr.ll +++ /dev/null @@ -1,39 +0,0 @@ -; RUN: opt < %s -indvars -S -disable-output - -; PR5758 -define zeroext i1 @foo() nounwind { -entry: - indirectbr i8* undef, [label %"202", label %"133"] - -"132": ; preds = %"133" - %0 = add i32 %1, 1 ; <i32> [#uses=1] - br label %"133" - -"133": ; preds = %"132", %entry - %1 = phi i32 [ %0, %"132" ], [ 0, %entry ] ; <i32> [#uses=2] - %2 = icmp eq i32 %1, 4 ; <i1> [#uses=1] - br i1 %2, label %"134", label %"132" - -"134": ; preds = %"133" - ret i1 true - -"202": ; preds = %entry - ret i1 false -} - -; PR7333 -define void @__atomvec_module__put_vrml_bonds() nounwind { -bb7.preheader: ; preds = %entry - indirectbr i8* undef, [label %bb14, label %bb16] - -bb14: ; preds = %bb14, %bb7.preheader - br label %bb16 - -bb16: ; preds = %bb16, %bb14, %bb7.preheader - %S.31.0 = phi i64 [ %3, %bb16 ], [ 1, %bb7.preheader ], [ 1, %bb14 ] ; <i64> [#uses=2] - %0 = add nsw i64 %S.31.0, -1 ; <i64> [#uses=1] - %1 = getelementptr inbounds [3 x double], [3 x double]* undef, i64 0, i64 %0 ; <double*> [#uses=1] - %2 = load double, double* %1, align 8 ; <double> [#uses=0] - %3 = add nsw i64 %S.31.0, 1 ; <i64> [#uses=1] - br label %bb16 -} diff --git a/llvm/test/Transforms/IndVarSimplify/inner-loop-by-latch-cond.ll b/llvm/test/Transforms/IndVarSimplify/inner-loop-by-latch-cond.ll deleted file mode 100644 index 1e0c0ddef85..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/inner-loop-by-latch-cond.ll +++ /dev/null @@ -1,35 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128-ni:1" -target triple = "x86_64-unknown-linux-gnu" - -declare void @foo(i64) - -; CHECK-LABEL: @test -define void @test(i64 %a) { -entry: - br label %outer_header - -outer_header: - %i = phi i64 [20, %entry], [%i.next, %outer_latch] - %i.next = add nuw nsw i64 %i, 1 - br label %inner_header - -inner_header: - %j = phi i64 [1, %outer_header], [%j.next, %inner_header] - %cmp = icmp ult i64 %j, %i.next -; CHECK-NOT: select - %s = select i1 %cmp, i64 %j, i64 %i -; CHECK: call void @foo(i64 %j) - call void @foo(i64 %s) - %j.next = add nuw nsw i64 %j, 1 - %cond = icmp ult i64 %j, %i - br i1 %cond, label %inner_header, label %outer_latch - -outer_latch: - %cond2 = icmp ne i64 %i.next, 40 - br i1 %cond2, label %outer_header, label %return - -return: - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/inner-loop.ll b/llvm/test/Transforms/IndVarSimplify/inner-loop.ll deleted file mode 100644 index b849c4e3423..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/inner-loop.ll +++ /dev/null @@ -1,54 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -; This is regression test for the bug in ScalarEvolution::isKnownPredicate. -; It does not check whether SCEV is available at loop entry before invoking -; and utility function isLoopEntryGuardedByCond and that leads to miscompile. - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128-ni:1" -target triple = "x86_64-unknown-linux-gnu" - -declare void @foo(i64) -declare void @bar(i32) - -define void @test(i8* %arr) { -entry: - br label %outer_header - -outer_header: - %i = phi i32 [40, %entry], [%i.next, %outer_latch] - %i.64 = sext i32 %i to i64 - br label %inner_header - -inner_header: - %j = phi i32 [27, %outer_header], [%j.next, %inner_backedge] - %j1 = zext i32 %j to i64 -; The next 4 lines are required for avoid widening of %j and -; SCEV at %cmp would not be AddRec. - %gep = getelementptr inbounds i8, i8* %arr, i64 %j1 - %ld = load i8, i8* %gep - %ec = icmp eq i8 %ld, 0 - br i1 %ec, label %return, label %inner_backedge - -inner_backedge: - %cmp = icmp ult i32 %j, %i - %s = select i1 %cmp, i32 %i, i32 %j -; Select should not be simplified because if -; %i == 26 and %j == 27, %s should be equal to %j. -; In case of a bug the instruction is simplified to -; %s = select i1 true, i32 %0, i32 %j -; CHECK-NOT: %s = select i1 true - call void @bar(i32 %s) - %j.next = add nsw i32 %j, -2 - %cond = icmp ult i32 %j, 3 - br i1 %cond, label %outer_latch, label %inner_header - -outer_latch: - %i.next = add i32 %i, -1 - %cond2 = icmp sgt i32 %i.next, 13 -; This line is just for forcing widening of %i - call void @foo(i64 %i.64) - br i1 %cond2, label %outer_header, label %return - -return: - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/interesting-invoke-use.ll b/llvm/test/Transforms/IndVarSimplify/interesting-invoke-use.ll deleted file mode 100644 index 131b02c3aae..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/interesting-invoke-use.ll +++ /dev/null @@ -1,61 +0,0 @@ -; RUN: opt < %s -indvars - -; An invoke has a result value which is used in an "Interesting" -; expression inside the loop. IndVars should be able to rewrite -; the expression in the correct place. - -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 = "i386-pc-linux-gnu" - %struct.string___XUB = type { i32, i32 } - %struct.string___XUP = type { [0 x i8]*, %struct.string___XUB* } -@.str7 = external constant [24 x i8] ; <[24 x i8]*> [#uses=1] -@C.17.316 = external constant %struct.string___XUB ; <%struct.string___XUB*> [#uses=1] - -define void @_ada_c35503g() personality i32 (...)* @__gxx_personality_v0 { -entry: - br label %bb - -bb: ; preds = %bb, %entry - br i1 false, label %bb65.loopexit, label %bb - -bb65.loopexit: ; preds = %bb - br label %bb123 - -bb123: ; preds = %bb178, %bb65.loopexit - %i.0 = phi i32 [ %3, %bb178 ], [ 0, %bb65.loopexit ] ; <i32> [#uses=3] - %0 = invoke i32 @report__ident_int(i32 1) - to label %invcont127 unwind label %lpad266 ; <i32> [#uses=1] - -invcont127: ; preds = %bb123 - %1 = sub i32 %i.0, %0 ; <i32> [#uses=1] - %2 = icmp eq i32 0, %1 ; <i1> [#uses=1] - br i1 %2, label %bb178, label %bb128 - -bb128: ; preds = %invcont127 - invoke void @system__img_int__image_integer(%struct.string___XUP* noalias sret null, i32 %i.0) - to label %invcont129 unwind label %lpad266 - -invcont129: ; preds = %bb128 - invoke void @system__string_ops__str_concat(%struct.string___XUP* noalias sret null, [0 x i8]* bitcast ([24 x i8]* @.str7 to [0 x i8]*), %struct.string___XUB* @C.17.316, [0 x i8]* null, %struct.string___XUB* null) - to label %invcont138 unwind label %lpad266 - -invcont138: ; preds = %invcont129 - unreachable - -bb178: ; preds = %invcont127 - %3 = add i32 %i.0, 1 ; <i32> [#uses=1] - br label %bb123 - -lpad266: ; preds = %invcont129, %bb128, %bb123 - %exn = landingpad {i8*, i32} - cleanup - unreachable -} - -declare i32 @__gxx_personality_v0(...) - -declare void @system__img_int__image_integer(%struct.string___XUP* noalias sret, i32) - -declare void @system__string_ops__str_concat(%struct.string___XUP* noalias sret, [0 x i8]*, %struct.string___XUB*, [0 x i8]*, %struct.string___XUB*) - -declare i32 @report__ident_int(i32) diff --git a/llvm/test/Transforms/IndVarSimplify/iterationCount_zext_or_trunc.ll b/llvm/test/Transforms/IndVarSimplify/iterationCount_zext_or_trunc.ll deleted file mode 100644 index 02145d1c5e7..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/iterationCount_zext_or_trunc.ll +++ /dev/null @@ -1,25 +0,0 @@ -; RUN: opt < %s -indvars -disable-output - -; ModuleID = 'testcase.bc' -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" -target triple = "i686-pc-linux-gnu" - -define i32 @testcase(i5 zeroext %k) { -entry: - br label %bb2 - -bb: ; preds = %bb2 - %tmp1 = add i32 %tmp2, %result ; <i32> [#uses=1] - %indvar_next1 = add i5 %k_0, 1 ; <i5> [#uses=1] - br label %bb2 - -bb2: ; preds = %bb, %entry - %k_0 = phi i5 [ 0, %entry ], [ %indvar_next1, %bb ] ; <i5> [#uses=2] - %result = phi i32 [ 0, %entry ], [ %tmp1, %bb ] ; <i32> [#uses=2] - %tmp2 = zext i5 %k_0 to i32 ; <i32> [#uses=1] - %exitcond = icmp eq i32 %tmp2, 16 ; <i1> [#uses=1] - br i1 %exitcond, label %bb3, label %bb - -bb3: ; preds = %bb2 - ret i32 %result -} diff --git a/llvm/test/Transforms/IndVarSimplify/iv-fold.ll b/llvm/test/Transforms/IndVarSimplify/iv-fold.ll deleted file mode 100644 index af8a33b30ea..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/iv-fold.ll +++ /dev/null @@ -1,56 +0,0 @@ -; RUN: opt < %s -indvars -S | 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-n32:64" - -; Indvars should be able to fold IV increments into shr when low bits are zero. -; -; CHECK-LABEL: @foldIncShr( -; CHECK: shr.1 = lshr i32 %0, 5 -define i32 @foldIncShr(i32* %bitmap, i32 %bit_addr, i32 %nbits) nounwind { -entry: - br label %while.body - -while.body: - %0 = phi i32 [ 0, %entry ], [ %inc.2, %while.body ] - %shr = lshr i32 %0, 5 - %arrayidx = getelementptr inbounds i32, i32* %bitmap, i32 %shr - %tmp6 = load i32, i32* %arrayidx, align 4 - %inc.1 = add i32 %0, 1 - %shr.1 = lshr i32 %inc.1, 5 - %arrayidx.1 = getelementptr inbounds i32, i32* %bitmap, i32 %shr.1 - %tmp6.1 = load i32, i32* %arrayidx.1, align 4 - %inc.2 = add i32 %inc.1, 1 - %exitcond.3 = icmp eq i32 %inc.2, 128 - br i1 %exitcond.3, label %while.end, label %while.body - -while.end: - %r = add i32 %tmp6, %tmp6.1 - ret i32 %r -} - -; Invdars should not fold an increment into shr unless 2^shiftBits is -; a multiple of the recurrence step. -; -; CHECK-LABEL: @noFoldIncShr( -; CHECK: shr.1 = lshr i32 %inc.1, 5 -define i32 @noFoldIncShr(i32* %bitmap, i32 %bit_addr, i32 %nbits) nounwind { -entry: - br label %while.body - -while.body: - %0 = phi i32 [ 0, %entry ], [ %inc.3, %while.body ] - %shr = lshr i32 %0, 5 - %arrayidx = getelementptr inbounds i32, i32* %bitmap, i32 %shr - %tmp6 = load i32, i32* %arrayidx, align 4 - %inc.1 = add i32 %0, 1 - %shr.1 = lshr i32 %inc.1, 5 - %arrayidx.1 = getelementptr inbounds i32, i32* %bitmap, i32 %shr.1 - %tmp6.1 = load i32, i32* %arrayidx.1, align 4 - %inc.3 = add i32 %inc.1, 2 - %exitcond.3 = icmp eq i32 %inc.3, 96 - br i1 %exitcond.3, label %while.end, label %while.body - -while.end: - %r = add i32 %tmp6, %tmp6.1 - ret i32 %r -} diff --git a/llvm/test/Transforms/IndVarSimplify/iv-sext.ll b/llvm/test/Transforms/IndVarSimplify/iv-sext.ll deleted file mode 100644 index 89e21e1b269..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/iv-sext.ll +++ /dev/null @@ -1,149 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -; Indvars should be able to promote the hiPart induction variable in the -; inner loop to i64. -; TODO: it should promote hiPart to i64 in the outer loop too. - -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-n32:64" - -define void @t(float* %pTmp1, float* %peakWeight, float* %nrgReducePeakrate, i32 %bandEdgeIndex, float %tmp1) nounwind { -entry: - %tmp = load float, float* %peakWeight, align 4 ; <float> [#uses=1] - %tmp2 = icmp sgt i32 %bandEdgeIndex, 0 ; <i1> [#uses=1] - br i1 %tmp2, label %bb.nph22, label %return - -bb.nph22: ; preds = %entry - %tmp3 = add i32 %bandEdgeIndex, -1 ; <i32> [#uses=2] - br label %bb - -; CHECK: bb: -; CHECK: phi i64 -; CHECK-NOT: phi i64 -bb: ; preds = %bb8, %bb.nph22 - %distERBhi.121 = phi float [ %distERBhi.2.lcssa, %bb8 ], [ 0.000000e+00, %bb.nph22 ] ; <float> [#uses=2] - %distERBlo.120 = phi float [ %distERBlo.0.lcssa, %bb8 ], [ 0.000000e+00, %bb.nph22 ] ; <float> [#uses=2] - %hiPart.119 = phi i32 [ %hiPart.0.lcssa, %bb8 ], [ 0, %bb.nph22 ] ; <i32> [#uses=3] - %loPart.118 = phi i32 [ %loPart.0.lcssa, %bb8 ], [ 0, %bb.nph22 ] ; <i32> [#uses=2] - %peakCount.117 = phi float [ %peakCount.2.lcssa, %bb8 ], [ %tmp, %bb.nph22 ] ; <float> [#uses=2] - %part.016 = phi i32 [ %tmp46, %bb8 ], [ 0, %bb.nph22 ] ; <i32> [#uses=5] - %tmp4 = icmp sgt i32 %part.016, 0 ; <i1> [#uses=1] - br i1 %tmp4, label %bb1, label %bb3.preheader - -; CHECK: bb1: -bb1: ; preds = %bb - %tmp5 = add i32 %part.016, -1 ; <i32> [#uses=1] - %tmp6 = sext i32 %tmp5 to i64 ; <i64> [#uses=1] - %tmp7 = getelementptr float, float* %pTmp1, i64 %tmp6 ; <float*> [#uses=1] - %tmp8 = load float, float* %tmp7, align 4 ; <float> [#uses=1] - %tmp9 = fadd float %tmp8, %distERBlo.120 ; <float> [#uses=1] - %tmp10 = add i32 %part.016, -1 ; <i32> [#uses=1] - %tmp11 = sext i32 %tmp10 to i64 ; <i64> [#uses=1] - %tmp12 = getelementptr float, float* %pTmp1, i64 %tmp11 ; <float*> [#uses=1] - %tmp13 = load float, float* %tmp12, align 4 ; <float> [#uses=1] - %tmp14 = fsub float %distERBhi.121, %tmp13 ; <float> [#uses=1] - br label %bb3.preheader - -bb3.preheader: ; preds = %bb1, %bb - %distERBlo.0.ph = phi float [ %distERBlo.120, %bb ], [ %tmp9, %bb1 ] ; <float> [#uses=3] - %distERBhi.0.ph = phi float [ %distERBhi.121, %bb ], [ %tmp14, %bb1 ] ; <float> [#uses=3] - %tmp15 = fcmp ogt float %distERBlo.0.ph, 2.500000e+00 ; <i1> [#uses=1] - br i1 %tmp15, label %bb.nph, label %bb5.preheader - -bb.nph: ; preds = %bb3.preheader - br label %bb2 - -bb2: ; preds = %bb3, %bb.nph - %distERBlo.03 = phi float [ %tmp19, %bb3 ], [ %distERBlo.0.ph, %bb.nph ] ; <float> [#uses=1] - %loPart.02 = phi i32 [ %tmp24, %bb3 ], [ %loPart.118, %bb.nph ] ; <i32> [#uses=3] - %peakCount.01 = phi float [ %tmp23, %bb3 ], [ %peakCount.117, %bb.nph ] ; <float> [#uses=1] - %tmp16 = sext i32 %loPart.02 to i64 ; <i64> [#uses=1] - %tmp17 = getelementptr float, float* %pTmp1, i64 %tmp16 ; <float*> [#uses=1] - %tmp18 = load float, float* %tmp17, align 4 ; <float> [#uses=1] - %tmp19 = fsub float %distERBlo.03, %tmp18 ; <float> [#uses=3] - %tmp20 = sext i32 %loPart.02 to i64 ; <i64> [#uses=1] - %tmp21 = getelementptr float, float* %peakWeight, i64 %tmp20 ; <float*> [#uses=1] - %tmp22 = load float, float* %tmp21, align 4 ; <float> [#uses=1] - %tmp23 = fsub float %peakCount.01, %tmp22 ; <float> [#uses=2] - %tmp24 = add i32 %loPart.02, 1 ; <i32> [#uses=2] - br label %bb3 - -bb3: ; preds = %bb2 - %tmp25 = fcmp ogt float %tmp19, 2.500000e+00 ; <i1> [#uses=1] - br i1 %tmp25, label %bb2, label %bb3.bb5.preheader_crit_edge - -bb3.bb5.preheader_crit_edge: ; preds = %bb3 - %tmp24.lcssa = phi i32 [ %tmp24, %bb3 ] ; <i32> [#uses=1] - %tmp23.lcssa = phi float [ %tmp23, %bb3 ] ; <float> [#uses=1] - %tmp19.lcssa = phi float [ %tmp19, %bb3 ] ; <float> [#uses=1] - br label %bb5.preheader - -bb5.preheader: ; preds = %bb3.bb5.preheader_crit_edge, %bb3.preheader - %distERBlo.0.lcssa = phi float [ %tmp19.lcssa, %bb3.bb5.preheader_crit_edge ], [ %distERBlo.0.ph, %bb3.preheader ] ; <float> [#uses=2] - %loPart.0.lcssa = phi i32 [ %tmp24.lcssa, %bb3.bb5.preheader_crit_edge ], [ %loPart.118, %bb3.preheader ] ; <i32> [#uses=1] - %peakCount.0.lcssa = phi float [ %tmp23.lcssa, %bb3.bb5.preheader_crit_edge ], [ %peakCount.117, %bb3.preheader ] ; <float> [#uses=2] - %.not10 = fcmp olt float %distERBhi.0.ph, 2.500000e+00 ; <i1> [#uses=1] - %tmp26 = icmp sgt i32 %tmp3, %hiPart.119 ; <i1> [#uses=1] - %or.cond11 = and i1 %tmp26, %.not10 ; <i1> [#uses=1] - br i1 %or.cond11, label %bb.nph12, label %bb7 - -bb.nph12: ; preds = %bb5.preheader - br label %bb4 -; CHECK: bb4: -; CHECK: phi i64 -; CHECK-NOT: phi i64 -; CHECK-NOT: sext -bb4: ; preds = %bb5, %bb.nph12 - %distERBhi.29 = phi float [ %tmp30, %bb5 ], [ %distERBhi.0.ph, %bb.nph12 ] ; <float> [#uses=1] - %hiPart.08 = phi i32 [ %tmp31, %bb5 ], [ %hiPart.119, %bb.nph12 ] ; <i32> [#uses=2] - %peakCount.27 = phi float [ %tmp35, %bb5 ], [ %peakCount.0.lcssa, %bb.nph12 ] ; <float> [#uses=1] - %tmp27 = sext i32 %hiPart.08 to i64 ; <i64> [#uses=1] - %tmp28 = getelementptr float, float* %pTmp1, i64 %tmp27 ; <float*> [#uses=1] - %tmp29 = load float, float* %tmp28, align 4 ; <float> [#uses=1] - %tmp30 = fadd float %tmp29, %distERBhi.29 ; <float> [#uses=3] - %tmp31 = add i32 %hiPart.08, 1 ; <i32> [#uses=4] - %tmp32 = sext i32 %tmp31 to i64 ; <i64> [#uses=1] - %tmp33 = getelementptr float, float* %peakWeight, i64 %tmp32 ; <float*> [#uses=1] - %tmp34 = load float, float* %tmp33, align 4 ; <float> [#uses=1] - %tmp35 = fadd float %tmp34, %peakCount.27 ; <float> [#uses=2] - br label %bb5 - -; CHECK: bb5: -bb5: ; preds = %bb4 - %.not = fcmp olt float %tmp30, 2.500000e+00 ; <i1> [#uses=1] - %tmp36 = icmp sgt i32 %tmp3, %tmp31 ; <i1> [#uses=1] - %or.cond = and i1 %tmp36, %.not ; <i1> [#uses=1] - br i1 %or.cond, label %bb4, label %bb5.bb7_crit_edge - -bb5.bb7_crit_edge: ; preds = %bb5 - %tmp35.lcssa = phi float [ %tmp35, %bb5 ] ; <float> [#uses=1] - %tmp31.lcssa = phi i32 [ %tmp31, %bb5 ] ; <i32> [#uses=1] - %tmp30.lcssa = phi float [ %tmp30, %bb5 ] ; <float> [#uses=1] - br label %bb7 - -bb7: ; preds = %bb5.bb7_crit_edge, %bb5.preheader - %distERBhi.2.lcssa = phi float [ %tmp30.lcssa, %bb5.bb7_crit_edge ], [ %distERBhi.0.ph, %bb5.preheader ] ; <float> [#uses=2] - %hiPart.0.lcssa = phi i32 [ %tmp31.lcssa, %bb5.bb7_crit_edge ], [ %hiPart.119, %bb5.preheader ] ; <i32> [#uses=1] - %peakCount.2.lcssa = phi float [ %tmp35.lcssa, %bb5.bb7_crit_edge ], [ %peakCount.0.lcssa, %bb5.preheader ] ; <float> [#uses=2] - %tmp37 = fadd float %distERBlo.0.lcssa, %distERBhi.2.lcssa ; <float> [#uses=1] - %tmp38 = fdiv float %peakCount.2.lcssa, %tmp37 ; <float> [#uses=1] - %tmp39 = fmul float %tmp38, %tmp1 ; <float> [#uses=2] - %tmp40 = fmul float %tmp39, %tmp39 ; <float> [#uses=2] - %tmp41 = fmul float %tmp40, %tmp40 ; <float> [#uses=1] - %tmp42 = fadd float %tmp41, 1.000000e+00 ; <float> [#uses=1] - %tmp43 = fdiv float 1.000000e+00, %tmp42 ; <float> [#uses=1] - %tmp44 = sext i32 %part.016 to i64 ; <i64> [#uses=1] - %tmp45 = getelementptr float, float* %nrgReducePeakrate, i64 %tmp44 ; <float*> [#uses=1] - store float %tmp43, float* %tmp45, align 4 - %tmp46 = add i32 %part.016, 1 ; <i32> [#uses=2] - br label %bb8 - -bb8: ; preds = %bb7 - %tmp47 = icmp slt i32 %tmp46, %bandEdgeIndex ; <i1> [#uses=1] - br i1 %tmp47, label %bb, label %bb8.return_crit_edge - -bb8.return_crit_edge: ; preds = %bb8 - br label %return - -return: ; preds = %bb8.return_crit_edge, %entry - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/iv-widen-elim-ext.ll b/llvm/test/Transforms/IndVarSimplify/iv-widen-elim-ext.ll deleted file mode 100644 index 08804ad4be1..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/iv-widen-elim-ext.ll +++ /dev/null @@ -1,359 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt < %s -indvars -S | FileCheck %s - -target datalayout = "e-m:e-i64:64-p:64:64:64-n8:16:32:64-S128" - -; When widening IV and its users, trunc and zext/sext are not needed -; if the original 32-bit user is known to be non-negative, whether -; the IV is considered signed or unsigned. -define void @foo(i32* %A, i32* %B, i32* %C, i32 %N) { -; CHECK-LABEL: @foo( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 0, %N -; CHECK-NEXT: br i1 [[CMP1]], label %for.body.lr.ph, label %for.end -; CHECK: for.body.lr.ph: -; CHECK-NEXT: br label %for.body -; CHECK: for.body: -; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV:%.*]].next, %for.inc ], [ 0, %for.body.lr.ph ] -; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* %B, i64 [[INDVARS_IV]] -; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[ARRAYIDX]], align 4 -; CHECK-NEXT: [[TMP1:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 2 -; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds i32, i32* %C, i64 [[TMP1]] -; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ARRAYIDX2]], align 4 -; CHECK-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP0]], [[TMP2]] -; CHECK-NEXT: [[TRUNC0:%.*]] = trunc i64 [[TMP1]] to i32 -; CHECK-NEXT: [[DIV0:%.*]] = udiv i32 5, [[TRUNC0]] -; CHECK-NEXT: [[ADD4:%.*]] = add nsw i32 [[ADD3]], [[DIV0]] -; CHECK-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds i32, i32* %A, i64 [[INDVARS_IV]] -; CHECK-NEXT: store i32 [[ADD4]], i32* [[ARRAYIDX5]], align 4 -; CHECK-NEXT: br label %for.inc -; CHECK: for.inc: -; CHECK-NEXT: [[INDVARS_IV_NEXT:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 1 -; CHECK-NEXT: [[WIDE_TRIP_COUNT:%.*]] = zext i32 %N to i64 -; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDVARS_IV_NEXT]], [[WIDE_TRIP_COUNT]] -; CHECK-NEXT: br i1 [[EXITCOND]], label %for.body, label %for.cond.for.end_crit_edge -; CHECK: for.cond.for.end_crit_edge: -; CHECK-NEXT: br label %for.end -; CHECK: for.end: -; CHECK-NEXT: ret void -; -entry: - %cmp1 = icmp slt i32 0, %N - br i1 %cmp1, label %for.body.lr.ph, label %for.end - -for.body.lr.ph: ; preds = %entry - br label %for.body - -for.body: ; preds = %for.body.lr.ph, %for.inc - %i.02 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.inc ] - %idxprom = sext i32 %i.02 to i64 - %arrayidx = getelementptr inbounds i32, i32* %B, i64 %idxprom - %0 = load i32, i32* %arrayidx, align 4 - %add = add nsw i32 %i.02, 2 - %idxprom1 = zext i32 %add to i64 - %arrayidx2 = getelementptr inbounds i32, i32* %C, i64 %idxprom1 - %1 = load i32, i32* %arrayidx2, align 4 - %add3 = add nsw i32 %0, %1 - %div0 = udiv i32 5, %add - %add4 = add nsw i32 %add3, %div0 - %idxprom4 = zext i32 %i.02 to i64 - %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %idxprom4 - store i32 %add4, i32* %arrayidx5, align 4 - br label %for.inc - -for.inc: ; preds = %for.body - %inc = add nsw i32 %i.02, 1 - %cmp = icmp slt i32 %inc, %N - br i1 %cmp, label %for.body, label %for.cond.for.end_crit_edge - -for.cond.for.end_crit_edge: ; preds = %for.inc - br label %for.end - -for.end: ; preds = %for.cond.for.end_crit_edge, %entry - ret void -} - -define void @foo1(i32* %A, i32* %B, i32* %C, i32 %N) { -; CHECK-LABEL: @foo1( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 0, %N -; CHECK-NEXT: br i1 [[CMP1]], label %for.body.lr.ph, label %for.end -; CHECK: for.body.lr.ph: -; CHECK-NEXT: br label %for.body -; CHECK: for.body: -; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV:%.*]].next, %for.inc ], [ 0, %for.body.lr.ph ] -; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* %B, i64 [[INDVARS_IV]] -; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[ARRAYIDX]], align 4 -; CHECK-NEXT: [[TMP1:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 2 -; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds i32, i32* %C, i64 [[TMP1]] -; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ARRAYIDX2]], align 4 -; CHECK-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP0]], [[TMP2]] -; CHECK-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds i32, i32* %A, i64 [[INDVARS_IV]] -; CHECK-NEXT: store i32 [[ADD3]], i32* [[ARRAYIDX5]], align 4 -; CHECK-NEXT: br label %for.inc -; CHECK: for.inc: -; CHECK-NEXT: [[INDVARS_IV_NEXT:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 1 -; CHECK-NEXT: [[WIDE_TRIP_COUNT:%.*]] = zext i32 %N to i64 -; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDVARS_IV_NEXT]], [[WIDE_TRIP_COUNT]] -; CHECK-NEXT: br i1 [[EXITCOND]], label %for.body, label %for.cond.for.end_crit_edge -; CHECK: for.cond.for.end_crit_edge: -; CHECK-NEXT: br label %for.end -; CHECK: for.end: -; CHECK-NEXT: ret void -; -entry: - %cmp1 = icmp slt i32 0, %N - br i1 %cmp1, label %for.body.lr.ph, label %for.end - -for.body.lr.ph: ; preds = %entry - br label %for.body - -for.body: ; preds = %for.body.lr.ph, %for.inc - %i.02 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.inc ] - %idxprom = zext i32 %i.02 to i64 - %arrayidx = getelementptr inbounds i32, i32* %B, i64 %idxprom - %0 = load i32, i32* %arrayidx, align 4 - %add = add nsw i32 %i.02, 2 - %idxprom1 = sext i32 %add to i64 - %arrayidx2 = getelementptr inbounds i32, i32* %C, i64 %idxprom1 - %1 = load i32, i32* %arrayidx2, align 4 - %add3 = add nsw i32 %0, %1 - %idxprom4 = sext i32 %i.02 to i64 - %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %idxprom4 - store i32 %add3, i32* %arrayidx5, align 4 - br label %for.inc - -for.inc: ; preds = %for.body - %inc = add nsw i32 %i.02, 1 - %cmp = icmp slt i32 %inc, %N - br i1 %cmp, label %for.body, label %for.cond.for.end_crit_edge - -for.cond.for.end_crit_edge: ; preds = %for.inc - br label %for.end - -for.end: ; preds = %for.cond.for.end_crit_edge, %entry - ret void -} - - -@a = common global [100 x i32] zeroinitializer, align 16 -@b = common global [100 x i32] zeroinitializer, align 16 - -define i32 @foo2(i32 %M) { -; CHECK-LABEL: @foo2( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 0, %M -; CHECK-NEXT: br i1 [[CMP1]], label %for.body.lr.ph, label %for.end -; CHECK: for.body.lr.ph: -; CHECK-NEXT: [[TMP0:%.*]] = sext i32 %M to i64 -; CHECK-NEXT: br label %for.body -; CHECK: for.body: -; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV:%.*]].next, %for.inc ], [ 0, %for.body.lr.ph ] -; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [100 x i32], [100 x i32]* @a, i64 0, i64 [[INDVARS_IV]] -; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[ARRAYIDX]], align 4 -; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds [100 x i32], [100 x i32]* @b, i64 0, i64 [[INDVARS_IV]] -; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ARRAYIDX2]], align 4 -; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP1]], [[TMP2]] -; CHECK-NEXT: [[TMP3:%.*]] = add nsw i64 [[INDVARS_IV]], [[TMP0]] -; CHECK-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds [100 x i32], [100 x i32]* @a, i64 0, i64 [[TMP3]] -; CHECK-NEXT: store i32 [[ADD]], i32* [[ARRAYIDX5]], align 4 -; CHECK-NEXT: br label %for.inc -; CHECK: for.inc: -; CHECK-NEXT: [[INDVARS_IV_NEXT:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 1 -; CHECK-NEXT: [[WIDE_TRIP_COUNT:%.*]] = zext i32 %M to i64 -; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDVARS_IV_NEXT]], [[WIDE_TRIP_COUNT]] -; CHECK-NEXT: br i1 [[EXITCOND]], label %for.body, label %for.cond.for.end_crit_edge -; CHECK: for.cond.for.end_crit_edge: -; CHECK-NEXT: br label %for.end -; CHECK: for.end: -; CHECK-NEXT: [[CALL:%.*]] = call i32 @dummy(i32* getelementptr inbounds ([100 x i32], [100 x i32]* @a, i32 0, i32 0), i32* getelementptr inbounds ([100 x i32], [100 x i32]* @b, i32 0, i32 0)) -; CHECK-NEXT: ret i32 0 -; -entry: - %cmp1 = icmp slt i32 0, %M - br i1 %cmp1, label %for.body.lr.ph, label %for.end - -for.body.lr.ph: ; preds = %entry - br label %for.body - -for.body: ; preds = %for.body.lr.ph, %for.inc - %i.02 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.inc ] - %idxprom = zext i32 %i.02 to i64 - %arrayidx = getelementptr inbounds [100 x i32], [100 x i32]* @a, i64 0, i64 %idxprom - %0 = load i32, i32* %arrayidx, align 4 - %idxprom1 = sext i32 %i.02 to i64 - %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* @b, i64 0, i64 %idxprom1 - %1 = load i32, i32* %arrayidx2, align 4 - %add = add nsw i32 %0, %1 - %add3 = add nsw i32 %i.02, %M - %idxprom4 = sext i32 %add3 to i64 - %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* @a, i64 0, i64 %idxprom4 - store i32 %add, i32* %arrayidx5, align 4 - br label %for.inc - -for.inc: ; preds = %for.body - %inc = add nsw i32 %i.02, 1 - %cmp = icmp slt i32 %inc, %M - br i1 %cmp, label %for.body, label %for.cond.for.end_crit_edge - -for.cond.for.end_crit_edge: ; preds = %for.inc - br label %for.end - -for.end: ; preds = %for.cond.for.end_crit_edge, %entry - %call = call i32 @dummy(i32* getelementptr inbounds ([100 x i32], [100 x i32]* @a, i32 0, i32 0), i32* getelementptr inbounds ([100 x i32], [100 x i32]* @b, i32 0, i32 0)) - ret i32 0 -} - -declare i32 @dummy(i32*, i32*) - -; A case where zext should not be eliminated when its operands could only be extended by sext. -define i32 @foo3(i32 %M) { -; CHECK-LABEL: @foo3( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 0, %M -; CHECK-NEXT: br i1 [[CMP1]], label %for.body.lr.ph, label %for.end -; CHECK: for.body.lr.ph: -; CHECK-NEXT: [[TMP0:%.*]] = sext i32 %M to i64 -; CHECK-NEXT: br label %for.body -; CHECK: for.body: -; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV:%.*]].next, %for.inc ], [ 0, %for.body.lr.ph ] -; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [100 x i32], [100 x i32]* @a, i64 0, i64 [[INDVARS_IV]] -; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[ARRAYIDX]], align 4 -; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds [100 x i32], [100 x i32]* @b, i64 0, i64 [[INDVARS_IV]] -; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ARRAYIDX2]], align 4 -; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP1]], [[TMP2]] -; CHECK-NEXT: [[TMP3:%.*]] = add nsw i64 [[INDVARS_IV]], [[TMP0]] -; CHECK-NEXT: [[TMP4:%.*]] = trunc i64 [[TMP3]] to i32 -; CHECK-NEXT: [[IDXPROM4:%.*]] = zext i32 [[TMP4]] to i64 -; CHECK-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds [100 x i32], [100 x i32]* @a, i64 0, i64 [[IDXPROM4]] -; CHECK-NEXT: store i32 [[ADD]], i32* [[ARRAYIDX5]], align 4 -; CHECK-NEXT: br label %for.inc -; CHECK: for.inc: -; CHECK-NEXT: [[INDVARS_IV_NEXT:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 1 -; CHECK-NEXT: [[WIDE_TRIP_COUNT:%.*]] = zext i32 %M to i64 -; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDVARS_IV_NEXT]], [[WIDE_TRIP_COUNT]] -; CHECK-NEXT: br i1 [[EXITCOND]], label %for.body, label %for.cond.for.end_crit_edge -; CHECK: for.cond.for.end_crit_edge: -; CHECK-NEXT: br label %for.end -; CHECK: for.end: -; CHECK-NEXT: [[CALL:%.*]] = call i32 @dummy(i32* getelementptr inbounds ([100 x i32], [100 x i32]* @a, i32 0, i32 0), i32* getelementptr inbounds ([100 x i32], [100 x i32]* @b, i32 0, i32 0)) -; CHECK-NEXT: ret i32 0 -; -entry: - %cmp1 = icmp slt i32 0, %M - br i1 %cmp1, label %for.body.lr.ph, label %for.end - -for.body.lr.ph: ; preds = %entry - br label %for.body - -for.body: ; preds = %for.body.lr.ph, %for.inc - %i.02 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.inc ] - %idxprom = sext i32 %i.02 to i64 - %arrayidx = getelementptr inbounds [100 x i32], [100 x i32]* @a, i64 0, i64 %idxprom - %0 = load i32, i32* %arrayidx, align 4 - %idxprom1 = sext i32 %i.02 to i64 - %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* @b, i64 0, i64 %idxprom1 - %1 = load i32, i32* %arrayidx2, align 4 - %add = add nsw i32 %0, %1 - %add3 = add nsw i32 %i.02, %M - %idxprom4 = zext i32 %add3 to i64 - %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* @a, i64 0, i64 %idxprom4 - store i32 %add, i32* %arrayidx5, align 4 - br label %for.inc - -for.inc: ; preds = %for.body - %inc = add nsw i32 %i.02, 1 - %cmp = icmp slt i32 %inc, %M - br i1 %cmp, label %for.body, label %for.cond.for.end_crit_edge - -for.cond.for.end_crit_edge: ; preds = %for.inc - br label %for.end - -for.end: ; preds = %for.cond.for.end_crit_edge, %entry - %call = call i32 @dummy(i32* getelementptr inbounds ([100 x i32], [100 x i32]* @a, i32 0, i32 0), i32* getelementptr inbounds ([100 x i32], [100 x i32]* @b, i32 0, i32 0)) - ret i32 0 -} - -%struct.image = type {i32, i32} -define i32 @foo4(%struct.image* %input, i32 %length, i32* %in) { -entry: - %stride = getelementptr inbounds %struct.image, %struct.image* %input, i64 0, i32 1 - %0 = load i32, i32* %stride, align 4 - %cmp17 = icmp sgt i32 %length, 1 - br i1 %cmp17, label %for.body.lr.ph, label %for.cond.cleanup - -for.body.lr.ph: ; preds = %entry - %channel = getelementptr inbounds %struct.image, %struct.image* %input, i64 0, i32 0 - br label %for.body - -for.cond.cleanup.loopexit: ; preds = %for.body - %1 = phi i32 [ %6, %for.body ] - br label %for.cond.cleanup - -for.cond.cleanup: ; preds = %for.cond.cleanup.loopexit, %entry - %2 = phi i32 [ 0, %entry ], [ %1, %for.cond.cleanup.loopexit ] - ret i32 %2 - -; mul instruction below is widened instead of generating a truncate instruction for it -; regardless if Load operand of mul is inside or outside the loop (we have both cases). -; CHECK: for.body: -; CHECK-NOT: trunc -for.body: ; preds = %for.body.lr.ph, %for.body - %x.018 = phi i32 [ 1, %for.body.lr.ph ], [ %add, %for.body ] - %add = add nuw nsw i32 %x.018, 1 - %3 = load i32, i32* %channel, align 8 - %mul = mul nsw i32 %3, %add - %idx.ext = sext i32 %mul to i64 - %add.ptr = getelementptr inbounds i32, i32* %in, i64 %idx.ext - %4 = load i32, i32* %add.ptr, align 4 - %mul1 = mul nsw i32 %0, %add - %idx.ext1 = sext i32 %mul1 to i64 - %add.ptr1 = getelementptr inbounds i32, i32* %in, i64 %idx.ext1 - %5 = load i32, i32* %add.ptr1, align 4 - %6 = add i32 %4, %5 - %cmp = icmp slt i32 %add, %length - br i1 %cmp, label %for.body, label %for.cond.cleanup.loopexit -} - - -define i32 @foo5(%struct.image* %input, i32 %length, i32* %in) { -entry: - %stride = getelementptr inbounds %struct.image, %struct.image* %input, i64 0, i32 1 - %0 = load i32, i32* %stride, align 4 - %cmp17 = icmp sgt i32 %length, 1 - br i1 %cmp17, label %for.body.lr.ph, label %for.cond.cleanup - -for.body.lr.ph: ; preds = %entry - %channel = getelementptr inbounds %struct.image, %struct.image* %input, i64 0, i32 0 - br label %for.body - -for.cond.cleanup.loopexit: ; preds = %for.body - %1 = phi i32 [ %7, %for.body ] - br label %for.cond.cleanup - -for.cond.cleanup: ; preds = %for.cond.cleanup.loopexit, %entry - %2 = phi i32 [ 0, %entry ], [ %1, %for.cond.cleanup.loopexit ] - ret i32 %2 - -; This example is the same as above except that the first mul is used in two places -; and this may result in having two versions of the multiply: an i32 and i64 version. -; In this case, keep the trucate instructions to avoid this redundancy. -; CHECK: for.body: -; CHECK: trunc -for.body: ; preds = %for.body.lr.ph, %for.body - %x.018 = phi i32 [ 1, %for.body.lr.ph ], [ %add, %for.body ] - %add = add nuw nsw i32 %x.018, 1 - %3 = load i32, i32* %channel, align 8 - %mul = mul nsw i32 %3, %add - %idx.ext = sext i32 %mul to i64 - %add.ptr = getelementptr inbounds i32, i32* %in, i64 %idx.ext - %4 = load i32, i32* %add.ptr, align 4 - %mul1 = mul nsw i32 %0, %add - %idx.ext1 = sext i32 %mul1 to i64 - %add.ptr1 = getelementptr inbounds i32, i32* %in, i64 %idx.ext1 - %5 = load i32, i32* %add.ptr1, align 4 - %6 = add i32 %4, %5 - %7 = add i32 %6, %mul - %cmp = icmp slt i32 %add, %length - br i1 %cmp, label %for.body, label %for.cond.cleanup.loopexit -} diff --git a/llvm/test/Transforms/IndVarSimplify/iv-widen.ll b/llvm/test/Transforms/IndVarSimplify/iv-widen.ll deleted file mode 100644 index 558869aac92..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/iv-widen.ll +++ /dev/null @@ -1,160 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -; RUN: opt -lcssa -loop-simplify -S < %s | opt -S -passes='require<targetir>,require<scalar-evolution>,require<domtree>,loop(indvars)' - -; Provide legal integer types. -target datalayout = "n8:16:32:64" - - -target triple = "x86_64-apple-darwin" - -declare void @use(i64 %x) - -; CHECK-LABEL: @loop_0 -; CHECK-LABEL: B18: -; Only one phi now. -; CHECK: phi i64 -; CHECK-NOT: phi -; One trunc for the gep. -; CHECK: trunc i64 %indvars.iv to i32 -; One trunc for the dummy() call. -; CHECK-LABEL: exit24: -; CHECK: trunc i64 {{.*}}lcssa.wide to i32 -define void @loop_0(i32* %a) { -Prologue: - br i1 undef, label %B18, label %B6 - -B18: ; preds = %B24, %Prologue - %.02 = phi i32 [ 0, %Prologue ], [ %tmp33, %B24 ] - %tmp23 = zext i32 %.02 to i64 - call void @use(i64 %tmp23) - %tmp33 = add i32 %.02, 1 - %o = getelementptr i32, i32* %a, i32 %.02 - %v = load i32, i32* %o - %t = icmp eq i32 %v, 0 - br i1 %t, label %exit24, label %B24 - -B24: ; preds = %B18 - %t2 = icmp eq i32 %tmp33, 20 - br i1 %t2, label %B6, label %B18 - -B6: ; preds = %Prologue - ret void - -exit24: ; preds = %B18 - call void @dummy(i32 %.02) - unreachable -} - -; Make sure that dead zext is removed and no widening happens. -; CHECK-LABEL: @loop_0.dead -; CHECK: phi i32 -; CHECK-NOT: zext -; CHECK-NOT: trunc -define void @loop_0.dead(i32* %a) { -Prologue: - br i1 undef, label %B18, label %B6 - -B18: ; preds = %B24, %Prologue - %.02 = phi i32 [ 0, %Prologue ], [ %tmp33, %B24 ] - %tmp23 = zext i32 %.02 to i64 - %tmp33 = add i32 %.02, 1 - %o = getelementptr i32, i32* %a, i32 %.02 - %v = load i32, i32* %o - %t = icmp eq i32 %v, 0 - br i1 %t, label %exit24, label %B24 - -B24: ; preds = %B18 - %t2 = icmp eq i32 %tmp33, 20 - br i1 %t2, label %B6, label %B18 - -B6: ; preds = %Prologue - ret void - -exit24: ; preds = %B18 - call void @dummy(i32 %.02) - unreachable -} - -define void @loop_1(i32 %lim) { -; CHECK-LABEL: @loop_1( - entry: - %entry.cond = icmp ne i32 %lim, 0 - br i1 %entry.cond, label %loop, label %leave - - loop: -; CHECK: loop: -; CHECK: %indvars.iv = phi i64 [ 1, %loop.preheader ], [ %indvars.iv.next, %loop ] -; CHECK: %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 -; CHECK: [[IV_INC:%[^ ]+]] = add nsw i64 %indvars.iv, -1 -; CHECK: call void @dummy.i64(i64 [[IV_INC]]) - - %iv = phi i32 [ 1, %entry ], [ %iv.inc, %loop ] - %iv.inc = add i32 %iv, 1 - %iv.inc.sub = add i32 %iv, -1 - %iv.inc.sub.zext = zext i32 %iv.inc.sub to i64 - call void @dummy.i64(i64 %iv.inc.sub.zext) - %be.cond = icmp ult i32 %iv.inc, %lim - br i1 %be.cond, label %loop, label %leave - - leave: - ret void -} - -declare void @dummy(i32) -declare void @dummy.i64(i64) - - -define void @loop_2(i32 %size, i32 %nsteps, i32 %hsize, i32* %lined, i8 %tmp1) { -; CHECK-LABEL: @loop_2( -entry: - %cmp215 = icmp sgt i32 %size, 1 - %tmp0 = bitcast i32* %lined to i8* - br label %for.body - -for.body: - %j = phi i32 [ 0, %entry ], [ %inc6, %for.inc ] - %mul = mul nsw i32 %j, %size - %add = add nsw i32 %mul, %hsize - br i1 %cmp215, label %for.body2, label %for.inc - -; check that the induction variable of the inner loop has been widened after indvars. -; CHECK: [[INNERLOOPINV:%[^ ]+]] = add nsw i64 -; CHECK: for.body2: -; CHECK-NEXT: %indvars.iv = phi i64 [ 1, %for.body2.preheader ], [ %indvars.iv.next, %for.body2 ] -; CHECK-NEXT: [[WIDENED:%[^ ]+]] = add nsw i64 [[INNERLOOPINV]], %indvars.iv -; CHECK-NEXT: %add.ptr = getelementptr inbounds i8, i8* %tmp0, i64 [[WIDENED]] -for.body2: - %k = phi i32 [ %inc, %for.body2 ], [ 1, %for.body ] - %add4 = add nsw i32 %add, %k - %idx.ext = sext i32 %add4 to i64 - %add.ptr = getelementptr inbounds i8, i8* %tmp0, i64 %idx.ext - store i8 %tmp1, i8* %add.ptr, align 1 - %inc = add nsw i32 %k, 1 - %cmp2 = icmp slt i32 %inc, %size - br i1 %cmp2, label %for.body2, label %for.body3 - -; check that the induction variable of the inner loop has been widened after indvars. -; CHECK: for.body3.preheader: -; CHECK: [[INNERLOOPINV:%[^ ]+]] = zext i32 -; CHECK: for.body3: -; CHECK-NEXT: %indvars.iv2 = phi i64 [ 1, %for.body3.preheader ], [ %indvars.iv.next3, %for.body3 ] -; CHECK-NEXT: [[WIDENED:%[^ ]+]] = add nuw nsw i64 [[INNERLOOPINV]], %indvars.iv2 -; CHECK-NEXT: %add.ptr2 = getelementptr inbounds i8, i8* %tmp0, i64 [[WIDENED]] -for.body3: - %l = phi i32 [ %inc2, %for.body3 ], [ 1, %for.body2 ] - %add5 = add nuw i32 %add, %l - %idx.ext2 = zext i32 %add5 to i64 - %add.ptr2 = getelementptr inbounds i8, i8* %tmp0, i64 %idx.ext2 - store i8 %tmp1, i8* %add.ptr2, align 1 - %inc2 = add nsw i32 %l, 1 - %cmp3 = icmp slt i32 %inc2, %size - br i1 %cmp3, label %for.body3, label %for.inc - -for.inc: - %inc6 = add nsw i32 %j, 1 - %cmp = icmp slt i32 %inc6, %nsteps - br i1 %cmp, label %for.body, label %for.end.loopexit - -for.end.loopexit: - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/iv-zext.ll b/llvm/test/Transforms/IndVarSimplify/iv-zext.ll deleted file mode 100644 index 629a85efe8e..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/iv-zext.ll +++ /dev/null @@ -1,33 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -; CHECK-NOT: and -; CHECK-NOT: zext - -target datalayout = "p:64:64:64-n32:64" - -define void @foo(double* %d, i64 %n) nounwind { -entry: - br label %loop - -loop: - %indvar = phi i64 [ 0, %entry ], [ %indvar.next, %loop ] - %indvar.i8 = and i64 %indvar, 255 - %t0 = getelementptr double, double* %d, i64 %indvar.i8 - %t1 = load double, double* %t0 - %t2 = fmul double %t1, 0.1 - store double %t2, double* %t0 - %indvar.i24 = and i64 %indvar, 16777215 - %t3 = getelementptr double, double* %d, i64 %indvar.i24 - %t4 = load double, double* %t3 - %t5 = fmul double %t4, 2.3 - store double %t5, double* %t3 - %t6 = getelementptr double, double* %d, i64 %indvar - %t7 = load double, double* %t6 - %t8 = fmul double %t7, 4.5 - store double %t8, double* %t6 - %indvar.next = add i64 %indvar, 1 - %exitcond = icmp eq i64 %indvar.next, 10 - br i1 %exitcond, label %return, label %loop - -return: - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/lcssa-preservation.ll b/llvm/test/Transforms/IndVarSimplify/lcssa-preservation.ll deleted file mode 100644 index 5d502f3b6ea..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/lcssa-preservation.ll +++ /dev/null @@ -1,50 +0,0 @@ -; RUN: opt < %s -indvars -replexitval=always -S | FileCheck %s -; Make sure IndVars preserves LCSSA form, especially across loop nests. - -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-n8:16:32:64" - -define void @PR18642(i32 %x) { -; CHECK-LABEL: @PR18642( -entry: - br label %outer.header -; CHECK: br label %outer.header - -outer.header: -; CHECK: outer.header: - %outer.iv = phi i32 [ 0, %entry ], [ %x, %outer.latch ] - br label %inner.header -; CHECK: %[[SCEV_EXPANDED:.*]] = add i32 -; CHECK: br label %inner.header - -inner.header: -; CHECK: inner.header: - %inner.iv = phi i32 [ undef, %outer.header ], [ %inc, %inner.latch ] - %cmp1 = icmp slt i32 %inner.iv, %outer.iv - br i1 %cmp1, label %inner.latch, label %outer.latch -; CHECK: br i1 {{.*}}, label %inner.latch, label %outer.latch - -inner.latch: -; CHECK: inner.latch: - %inc = add nsw i32 %inner.iv, 1 - %cmp2 = icmp slt i32 %inner.iv, %outer.iv - br i1 %cmp2, label %inner.header, label %exit -; CHECK: br i1 {{.*}}, label %inner.header, label %[[EXIT_FROM_INNER:.*]] - -outer.latch: -; CHECK: outer.latch: - br i1 undef, label %outer.header, label %exit -; CHECK: br i1 {{.*}}, label %outer.header, label %[[EXIT_FROM_OUTER:.*]] - -; CHECK: [[EXIT_FROM_INNER]]: -; CHECK-NEXT: %[[LCSSA:.*]] = phi i32 [ %[[SCEV_EXPANDED]], %inner.latch ] -; CHECK-NEXT: br label %exit - -; CHECK: [[EXIT_FROM_OUTER]]: -; CHECK-NEXT: br label %exit - -exit: -; CHECK: exit: - %exit.phi = phi i32 [ %inc, %inner.latch ], [ undef, %outer.latch ] -; CHECK-NEXT: phi i32 [ %[[LCSSA]], %[[EXIT_FROM_INNER]] ], [ undef, %[[EXIT_FROM_OUTER]] ] - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/lftr-address-space-pointers.ll b/llvm/test/Transforms/IndVarSimplify/lftr-address-space-pointers.ll deleted file mode 100644 index 52743073d55..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/lftr-address-space-pointers.ll +++ /dev/null @@ -1,69 +0,0 @@ -; RUN: opt -S -indvars -o - %s | FileCheck %s -target datalayout = "e-p:32:32:32-p1:64:64:64-p2:8:8:8-p3:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:32-n8:16:32:64" - -; Derived from ptriv in lftr-reuse.ll -define void @ptriv_as2(i8 addrspace(2)* %base, i32 %n) nounwind { -; CHECK-LABEL: @ptriv_as2( -entry: - %idx.trunc = trunc i32 %n to i8 - %add.ptr = getelementptr inbounds i8, i8 addrspace(2)* %base, i8 %idx.trunc - %cmp1 = icmp ult i8 addrspace(2)* %base, %add.ptr - br i1 %cmp1, label %for.body, label %for.end - -; Make sure the added GEP has the right index type -; CHECK: %lftr.limit = getelementptr i8, i8 addrspace(2)* %base, i8 %idx.trunc - -; CHECK: for.body: -; CHECK: phi i8 addrspace(2)* -; CHECK-NOT: phi -; CHECK-NOT: add{{^rspace}} -; CHECK: icmp ne i8 addrspace(2)* -; CHECK: br i1 -for.body: - %p.02 = phi i8 addrspace(2)* [ %base, %entry ], [ %incdec.ptr, %for.body ] - ; cruft to make the IV useful - %sub.ptr.lhs.cast = ptrtoint i8 addrspace(2)* %p.02 to i8 - %sub.ptr.rhs.cast = ptrtoint i8 addrspace(2)* %base to i8 - %sub.ptr.sub = sub i8 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast - store i8 %sub.ptr.sub, i8 addrspace(2)* %p.02 - %incdec.ptr = getelementptr inbounds i8, i8 addrspace(2)* %p.02, i32 1 - %cmp = icmp ult i8 addrspace(2)* %incdec.ptr, %add.ptr - br i1 %cmp, label %for.body, label %for.end - -for.end: - ret void -} - -define void @ptriv_as3(i8 addrspace(3)* %base, i32 %n) nounwind { -; CHECK-LABEL: @ptriv_as3( -entry: - %idx.trunc = trunc i32 %n to i16 - %add.ptr = getelementptr inbounds i8, i8 addrspace(3)* %base, i16 %idx.trunc - %cmp1 = icmp ult i8 addrspace(3)* %base, %add.ptr - br i1 %cmp1, label %for.body, label %for.end - -; Make sure the added GEP has the right index type -; CHECK: %lftr.limit = getelementptr i8, i8 addrspace(3)* %base, i16 %idx.trunc - -; CHECK: for.body: -; CHECK: phi i8 addrspace(3)* -; CHECK-NOT: phi -; CHECK-NOT: add{{^rspace}} -; CHECK: icmp ne i8 addrspace(3)* -; CHECK: br i1 -for.body: - %p.02 = phi i8 addrspace(3)* [ %base, %entry ], [ %incdec.ptr, %for.body ] - ; cruft to make the IV useful - %sub.ptr.lhs.cast = ptrtoint i8 addrspace(3)* %p.02 to i16 - %sub.ptr.rhs.cast = ptrtoint i8 addrspace(3)* %base to i16 - %sub.ptr.sub = sub i16 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast - %conv = trunc i16 %sub.ptr.sub to i8 - store i8 %conv, i8 addrspace(3)* %p.02 - %incdec.ptr = getelementptr inbounds i8, i8 addrspace(3)* %p.02, i32 1 - %cmp = icmp ult i8 addrspace(3)* %incdec.ptr, %add.ptr - br i1 %cmp, label %for.body, label %for.end - -for.end: - ret void -} - diff --git a/llvm/test/Transforms/IndVarSimplify/lftr-extend-const.ll b/llvm/test/Transforms/IndVarSimplify/lftr-extend-const.ll deleted file mode 100644 index fa3166d4a3e..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/lftr-extend-const.ll +++ /dev/null @@ -1,48 +0,0 @@ -;RUN: opt -S %s -indvars | FileCheck %s - -; Provide legal integer types. -target datalayout = "n8:16:32:64" - - -; CHECK-LABEL: @foo( -; CHECK-NOT: %lftr.wideiv = trunc i32 %indvars.iv.next to i16 -; CHECK: %exitcond = icmp ne i32 %indvars.iv.next, 512 -define void @foo() #0 { -entry: - br label %for.body - -for.body: ; preds = %entry, %for.body - %i.01 = phi i16 [ 0, %entry ], [ %inc, %for.body ] - %conv2 = sext i16 %i.01 to i32 - call void @bar(i32 %conv2) #1 - %inc = add i16 %i.01, 1 - %cmp = icmp slt i16 %inc, 512 - br i1 %cmp, label %for.body, label %for.end - -for.end: ; preds = %for.body - ret void -} - -; Check that post-incrementing the backedge taken count does not overflow. -; CHECK-LABEL: @postinc( -; CHECK: icmp eq i32 %indvars.iv, 255 -define i32 @postinc() #0 { -entry: - br label %do.body - -do.body: ; preds = %do.body, %entry - %first.0 = phi i8 [ 0, %entry ], [ %inc, %do.body ] - %conv = zext i8 %first.0 to i32 - call void @bar(i32 %conv) #1 - %inc = add i8 %first.0, 1 - %cmp = icmp eq i8 %first.0, -1 - br i1 %cmp, label %do.end, label %do.body - -do.end: ; preds = %do.body - ret i32 0 -} - -declare void @bar(i32) - -attributes #0 = { nounwind uwtable } -attributes #1 = { nounwind } diff --git a/llvm/test/Transforms/IndVarSimplify/lftr-other-uses.ll b/llvm/test/Transforms/IndVarSimplify/lftr-other-uses.ll deleted file mode 100644 index 09ec237cfc3..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/lftr-other-uses.ll +++ /dev/null @@ -1,36 +0,0 @@ -; RUN: opt < %s -indvars -disable-output - -; Don't RAUW the loop's original comparison instruction if it has -; other uses which aren't dominated by the new comparison instruction. - - %struct.DecRefPicMarking_s = type { i32, i32, i32, i32, i32, %struct.DecRefPicMarking_s* } - %struct.datapartition = type { %typedef.Bitstream*, %typedef.DecodingEnvironment, i32 (%struct.syntaxelement*, %struct.img_par*, %struct.inp_par*, %struct.datapartition*)* } - %struct.img_par = type { i32, i32, i32, i32, i32*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [16 x [16 x i16]], [6 x [32 x i32]], [16 x [16 x i32]], [4 x [12 x [4 x [4 x i32]]]], [16 x i32], i32**, i32*, i32***, i32**, i32, i32, i32, i32, %typedef.Slice*, %struct.macroblock*, i32, i32, i32, i32, i32, i32, i32**, %struct.DecRefPicMarking_s*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [3 x i32], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32***, i32***, i32****, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.timeb, %struct.timeb, i32, i32, i32, i32, i32, i32, i32, i32 } - %struct.inp_par = type { [100 x i8], [100 x i8], [100 x i8], i32, i32, i32, i32, i32, i32, i32 } - %struct.macroblock = type { i32, i32, i32, %struct.macroblock*, %struct.macroblock*, i32, [2 x [4 x [4 x [2 x i32]]]], i32, i64, i64, i32, i32, [4 x i32], [4 x i32], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } - %struct.syntaxelement = type { i32, i32, i32, i32, i32, i32, i32, i32, void (i32, i32, i32*, i32*)*, void (%struct.syntaxelement*, %struct.inp_par*, %struct.img_par*, %typedef.DecodingEnvironment*)* } - %struct.timeb = type { i32, i16, i16, i16 } - %typedef.BiContextType = type { i16, i8 } - %typedef.Bitstream = type { i32, i32, i32, i32, i8*, i32 } - %typedef.DecodingEnvironment = type { i32, i32, i32, i32, i32, i8*, i32* } - %typedef.MotionInfoContexts = type { [4 x [11 x %typedef.BiContextType]], [2 x [9 x %typedef.BiContextType]], [2 x [10 x %typedef.BiContextType]], [2 x [6 x %typedef.BiContextType]], [4 x %typedef.BiContextType], [4 x %typedef.BiContextType], [3 x %typedef.BiContextType] } - %typedef.Slice = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.datapartition*, %typedef.MotionInfoContexts*, %typedef.TextureInfoContexts*, i32, i32*, i32*, i32*, i32, i32*, i32*, i32*, i32 (%struct.img_par*, %struct.inp_par*)*, i32, i32, i32, i32 } - %typedef.TextureInfoContexts = type { [2 x %typedef.BiContextType], [4 x %typedef.BiContextType], [3 x [4 x %typedef.BiContextType]], [10 x [4 x %typedef.BiContextType]], [10 x [15 x %typedef.BiContextType]], [10 x [15 x %typedef.BiContextType]], [10 x [5 x %typedef.BiContextType]], [10 x [5 x %typedef.BiContextType]], [10 x [15 x %typedef.BiContextType]], [10 x [15 x %typedef.BiContextType]] } - -define void @readCBP_CABAC(%struct.syntaxelement* %se, %struct.inp_par* %inp, %struct.img_par* %img.1, %typedef.DecodingEnvironment* %dep_dp) { -entry: - br label %loopentry.0 - -loopentry.0: ; preds = %loopentry.1, %entry - %mb_y.0 = phi i32 [ 0, %entry ], [ %tmp.152, %loopentry.1 ] ; <i32> [#uses=2] - %tmp.14 = icmp sle i32 %mb_y.0, 3 ; <i1> [#uses=2] - %tmp.15 = zext i1 %tmp.14 to i32 ; <i32> [#uses=0] - br i1 %tmp.14, label %loopentry.1, label %loopexit.0 - -loopentry.1: ; preds = %loopentry.0 - %tmp.152 = add i32 %mb_y.0, 2 ; <i32> [#uses=1] - br label %loopentry.0 - -loopexit.0: ; preds = %loopentry.0 - unreachable -} diff --git a/llvm/test/Transforms/IndVarSimplify/lftr-promote.ll b/llvm/test/Transforms/IndVarSimplify/lftr-promote.ll deleted file mode 100644 index 52e1ea95af7..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/lftr-promote.ll +++ /dev/null @@ -1,42 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -; Indvars should be able to compute the exit value of this loop -; without any additional arithmetic. The only add needed should -; be the canonical IV increment. - -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" - -define void @foo(double* %p, i32 %n) nounwind { -; CHECK-LABEL: @foo( -; CHECK: add -; CHECK-NOT: add - -entry: - %0 = icmp sgt i32 %n, 0 ; <i1> [#uses=1] - br i1 %0, label %bb.nph, label %return - -bb.nph: ; preds = %entry - br label %bb2 - -bb2: ; preds = %bb3, %bb.nph - %i.01 = phi i32 [ %7, %bb3 ], [ 0, %bb.nph ] ; <i32> [#uses=3] - %1 = sext i32 %i.01 to i64 ; <i64> [#uses=1] - %2 = getelementptr double, double* %p, i64 %1 ; <double*> [#uses=1] - %3 = load double, double* %2, align 8 ; <double> [#uses=1] - %4 = fmul double %3, 1.100000e+00 ; <double> [#uses=1] - %5 = sext i32 %i.01 to i64 ; <i64> [#uses=1] - %6 = getelementptr double, double* %p, i64 %5 ; <double*> [#uses=1] - store double %4, double* %6, align 8 - %7 = add i32 %i.01, 1 ; <i32> [#uses=2] - br label %bb3 - -bb3: ; preds = %bb2 - %8 = icmp slt i32 %7, %n ; <i1> [#uses=1] - br i1 %8, label %bb2, label %bb3.return_crit_edge - -bb3.return_crit_edge: ; preds = %bb3 - br label %return - -return: ; preds = %bb3.return_crit_edge, %entry - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/lftr-reuse.ll b/llvm/test/Transforms/IndVarSimplify/lftr-reuse.ll deleted file mode 100644 index dd09f162d79..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/lftr-reuse.ll +++ /dev/null @@ -1,234 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -; -; Make sure that indvars can perform LFTR without a canonical IV. - -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-n8:16:32:64" - -; Perform LFTR using the original pointer-type IV. - -declare void @use(double %x) - -; for(char* p = base; p < base + n; ++p) { -; *p = p-base; -; } -define void @ptriv(i8* %base, i32 %n) nounwind { -entry: - %idx.ext = sext i32 %n to i64 - %add.ptr = getelementptr inbounds i8, i8* %base, i64 %idx.ext - %cmp1 = icmp ult i8* %base, %add.ptr - br i1 %cmp1, label %for.body, label %for.end - -; CHECK: for.body: -; CHECK: phi i8* -; CHECK-NOT: phi -; CHECK-NOT: add -; CHECK: icmp ne i8* -; CHECK: br i1 -for.body: - %p.02 = phi i8* [ %base, %entry ], [ %incdec.ptr, %for.body ] - ; cruft to make the IV useful - %sub.ptr.lhs.cast = ptrtoint i8* %p.02 to i64 - %sub.ptr.rhs.cast = ptrtoint i8* %base to i64 - %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast - %conv = trunc i64 %sub.ptr.sub to i8 - store i8 %conv, i8* %p.02 - %incdec.ptr = getelementptr inbounds i8, i8* %p.02, i32 1 - %cmp = icmp ult i8* %incdec.ptr, %add.ptr - br i1 %cmp, label %for.body, label %for.end - -for.end: - ret void -} - -; This test checks that SCEVExpander can handle an outer loop that has been -; simplified, and as a result the inner loop's exit test will be rewritten. -define void @expandOuterRecurrence(i32 %arg) nounwind { -entry: - %sub1 = sub nsw i32 %arg, 1 - %cmp1 = icmp slt i32 0, %sub1 - br i1 %cmp1, label %outer, label %exit - -; CHECK: outer: -; CHECK: icmp slt -outer: - %i = phi i32 [ 0, %entry ], [ %i.inc, %outer.inc ] - %sub2 = sub nsw i32 %arg, %i - %sub3 = sub nsw i32 %sub2, 1 - %cmp2 = icmp slt i32 0, %sub3 - br i1 %cmp2, label %inner.ph, label %outer.inc - -inner.ph: - br label %inner - -; CHECK: inner: -; CHECK: br i1 -inner: - %j = phi i32 [ 0, %inner.ph ], [ %j.inc, %inner ] - %j.inc = add nsw i32 %j, 1 - %cmp3 = icmp slt i32 %j.inc, %sub3 - br i1 %cmp3, label %inner, label %outer.inc - -; CHECK: outer.inc: -; CHECK: icmp ne -; CHECK: br i1 -outer.inc: - %i.inc = add nsw i32 %i, 1 - %cmp4 = icmp slt i32 %i.inc, %sub1 - br i1 %cmp4, label %outer, label %exit - -exit: - ret void -} - -; Force SCEVExpander to look for an existing well-formed phi. -; Perform LFTR without generating extra preheader code. -define void @guardedloop([0 x double]* %matrix, [0 x double]* %vector, - i32 %irow, i32 %ilead) nounwind { -; CHECK: entry: -; CHECK-NOT: zext -; CHECK-NOT: add -; CHECK: loop: -; CHECK: phi i64 -; CHECK: phi i64 -; CHECK-NOT: phi -; CHECK: icmp ne -; CHECK: br i1 -entry: - %cmp = icmp slt i32 1, %irow - br i1 %cmp, label %loop, label %return - -loop: - %rowidx = phi i32 [ 0, %entry ], [ %row.inc, %loop ] - %i = phi i32 [ 0, %entry ], [ %i.inc, %loop ] - %diagidx = add nsw i32 %rowidx, %i - %diagidxw = sext i32 %diagidx to i64 - %matrixp = getelementptr inbounds [0 x double], [0 x double]* %matrix, i32 0, i64 %diagidxw - %v1 = load double, double* %matrixp - call void @use(double %v1) - %iw = sext i32 %i to i64 - %vectorp = getelementptr inbounds [0 x double], [0 x double]* %vector, i32 0, i64 %iw - %v2 = load double, double* %vectorp - call void @use(double %v2) - %row.inc = add nsw i32 %rowidx, %ilead - %i.inc = add nsw i32 %i, 1 - %cmp196 = icmp slt i32 %i.inc, %irow - br i1 %cmp196, label %loop, label %return - -return: - ret void -} - -; Avoid generating extra code to materialize a trip count. Skip LFTR. -define void @unguardedloop([0 x double]* %matrix, [0 x double]* %vector, - i32 %irow, i32 %ilead) nounwind { -entry: - br label %loop - -; CHECK: entry: -; CHECK-NOT: zext -; CHECK-NOT: add -; CHECK: loop: -; CHECK: phi i64 -; CHECK-NOT: phi -; CHECK: icmp slt -; CHECK: br i1 -loop: - %rowidx = phi i32 [ 0, %entry ], [ %row.inc, %loop ] - %i = phi i32 [ 0, %entry ], [ %i.inc, %loop ] - %diagidx = add nsw i32 %rowidx, %i - %diagidxw = sext i32 %diagidx to i64 - %matrixp = getelementptr inbounds [0 x double], [0 x double]* %matrix, i32 0, i64 %diagidxw - %v1 = load double, double* %matrixp - %iw = sext i32 %i to i64 - %vectorp = getelementptr inbounds [0 x double], [0 x double]* %vector, i32 0, i64 %iw - %v2 = load double, double* %vectorp - %row.inc = add nsw i32 %rowidx, %ilead - %i.inc = add nsw i32 %i, 1 - %cmp196 = icmp slt i32 %i.inc, %irow - br i1 %cmp196, label %loop, label %return - -return: - ret void -} - -; Remove %i which is only used by the exit test. -; Verify that SCEV can still compute a backedge count from the sign -; extended %n, used for pointer comparison by LFTR. -; -; TODO: Fix for PR13371 currently makes this impossible. See -; IndVarSimplify.cpp hasConcreteDef(). We may want to change to undef rules. -define void @geplftr(i8* %base, i32 %x, i32 %y, i32 %n) nounwind { -entry: - %x.ext = sext i32 %x to i64 - %add.ptr = getelementptr inbounds i8, i8* %base, i64 %x.ext - %y.ext = sext i32 %y to i64 - %add.ptr10 = getelementptr inbounds i8, i8* %add.ptr, i64 %y.ext - %lim = add i32 %x, %n - %cmp.ph = icmp ult i32 %x, %lim - br i1 %cmp.ph, label %loop, label %exit -; CHECK-LABEL: @geplftr( -; CHECK: loop: -; CHECK: phi i8* -; DISABLE-NOT: phi // This check is currently disabled -; CHECK: getelementptr -; CHECK: store -; DISABLE: icmp ne i8* // This check is currently disabled -; CHECK: br i1 -loop: - %i = phi i32 [ %x, %entry ], [ %inc, %loop ] - %aptr = phi i8* [ %add.ptr10, %entry ], [ %incdec.ptr, %loop ] - %incdec.ptr = getelementptr inbounds i8, i8* %aptr, i32 1 - store i8 3, i8* %aptr - %inc = add i32 %i, 1 - %cmp = icmp ult i32 %inc, %lim - br i1 %cmp, label %loop, label %exit - -exit: - ret void -} - -; Exercise backedge taken count verification with a never-taken loop. -define void @nevertaken() nounwind uwtable ssp { -entry: - br label %loop -; CHECK-LABEL: @nevertaken( -; CHECK: loop: -; CHECK-NOT: phi -; CHECK-NOT: add -; CHECK-NOT: icmp -; CHECK: exit: -loop: - %i = phi i32 [ 0, %entry ], [ %inc, %loop ] - %inc = add nsw i32 %i, 1 - %cmp = icmp sle i32 %inc, 0 - br i1 %cmp, label %loop, label %exit - -exit: - ret void -} - -; Test LFTR on an IV whose recurrence start is a non-unit pointer type. -define void @aryptriv([256 x i8]* %base, i32 %n) nounwind { -entry: - %ivstart = getelementptr inbounds [256 x i8], [256 x i8]* %base, i32 0, i32 0 - %ivend = getelementptr inbounds [256 x i8], [256 x i8]* %base, i32 0, i32 %n - %cmp.ph = icmp ult i8* %ivstart, %ivend - br i1 %cmp.ph, label %loop, label %exit - -; CHECK: loop: -; CHECK: phi i8* -; CHECK-NOT: phi -; CHECK: getelementptr -; CHECK: store -; CHECK: icmp ne i8* -; CHECK: br i1 -loop: - %aptr = phi i8* [ %ivstart, %entry ], [ %incdec.ptr, %loop ] - %incdec.ptr = getelementptr inbounds i8, i8* %aptr, i32 1 - store i8 3, i8* %aptr - %cmp = icmp ult i8* %incdec.ptr, %ivend - br i1 %cmp, label %loop, label %exit - -exit: - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/lftr-udiv-tripcount.ll b/llvm/test/Transforms/IndVarSimplify/lftr-udiv-tripcount.ll deleted file mode 100644 index 8a1bb07bb0c..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/lftr-udiv-tripcount.ll +++ /dev/null @@ -1,29 +0,0 @@ -; RUN: opt < %s -indvars -S | 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-n8:16:32:64-S128" - -; It is okay to do LFTR on this loop even though the trip count is a -; division because in this case the division can be optimized to a -; shift. - -define void @foo(i8* %a, i8 %n) nounwind uwtable ssp { -; CHECK-LABEL: @foo( - entry: - %e = icmp sgt i8 %n, 3 - br i1 %e, label %loop, label %exit - - loop: -; CHECK-LABEL: loop: - %i = phi i8 [ 0, %entry ], [ %i.inc, %loop ] - %i1 = phi i8 [ 0, %entry ], [ %i1.inc, %loop ] - %i.inc = add nsw i8 %i, 4 - %i1.inc = add i8 %i1, 1 - store volatile i8 0, i8* %a - %c = icmp slt i8 %i, %n -; CHECK-LABEL: %exitcond = icmp ne i8 %i1.inc - br i1 %c, label %loop, label %exit - - exit: -; CHECK-LABEL: exit: - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/lftr-wide-trip-count.ll b/llvm/test/Transforms/IndVarSimplify/lftr-wide-trip-count.ll deleted file mode 100644 index 25c91ddef81..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/lftr-wide-trip-count.ll +++ /dev/null @@ -1,158 +0,0 @@ -; RUN: opt -S -indvars < %s | FileCheck %s - -; Provide legal integer types. -target datalayout = "n8:16:32:64" - - -define void @test1(float* %autoc, - float* %data, - float %d, i32 %data_len, i32 %sample) nounwind { -entry: - %sub = sub i32 %data_len, %sample - %cmp4 = icmp eq i32 %data_len, %sample - br i1 %cmp4, label %for.end, label %for.body - -for.body: ; preds = %entry, %for.body - %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 68719476736, %entry ] - %temp = trunc i64 %indvars.iv to i32 - %add = add i32 %temp, %sample - %idxprom = zext i32 %add to i64 - %arrayidx = getelementptr inbounds float, float* %data, i64 %idxprom - %temp1 = load float, float* %arrayidx, align 4 - %mul = fmul float %temp1, %d - %arrayidx2 = getelementptr inbounds float, float* %autoc, i64 %indvars.iv - %temp2 = load float, float* %arrayidx2, align 4 - %add3 = fadd float %temp2, %mul - store float %add3, float* %arrayidx2, align 4 - %indvars.iv.next = add i64 %indvars.iv, 1 - %temp3 = trunc i64 %indvars.iv.next to i32 - %cmp = icmp ult i32 %temp3, %sub - br i1 %cmp, label %for.body, label %for.end - -for.end: ; preds = %for.body, %entry - ret void - -; CHECK-LABEL: @test1( - -; With the given initial value for IV, it is not legal to widen -; trip count to IV size -; CHECK: %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 -; CHECK: %lftr.wideiv = trunc i64 %indvars.iv.next to i32 -; CHECK: %exitcond = icmp ne i32 %lftr.wideiv, %sub -; CHECK: br i1 %exitcond, label %for.body, label %for.end.loopexit -} - -define float @test2(float* %a, - float* %b, - i32 zeroext %m) local_unnamed_addr #0 { -entry: - %cmp5 = icmp ugt i32 %m, 500 - br i1 %cmp5, label %for.body.preheader, label %for.end - -for.body.preheader: ; preds = %entry - br label %for.body - -for.body: ; preds = %for.body.preheader, %for.body - %sum.07 = phi float [ %add, %for.body ], [ 0.000000e+00, %for.body.preheader ] - %i.06 = phi i32 [ %inc, %for.body ], [ 500, %for.body.preheader ] - %idxprom = zext i32 %i.06 to i64 - %arrayidx = getelementptr inbounds float, float* %b, i64 %idxprom - %temp = load float, float* %arrayidx, align 4 - %arrayidx2 = getelementptr inbounds float, float* %a, i64 %idxprom - %temp1 = load float, float* %arrayidx2, align 4 - %mul = fmul float %temp, %temp1 - %add = fadd float %sum.07, %mul - %inc = add i32 %i.06, 1 - %cmp = icmp ult i32 %inc, %m - br i1 %cmp, label %for.body, label %for.end.loopexit - -for.end.loopexit: ; preds = %for.body - br label %for.end - -for.end: ; preds = %for.end.loopexit, %entry - %sum.0.lcssa = phi float [ 0.000000e+00, %entry ], [ %add, %for.end.loopexit ] - ret float %sum.0.lcssa - -; CHECK-LABEL: @test2( -; Trip count should be widened and LFTR should canonicalize the condition -; CHECK: %wide.trip.count = zext -; CHECK: %exitcond = icmp ne i64 %indvars.iv.next, %wide.trip.count -; CHECK: br i1 %exitcond -} - -define float @test3(float* %b, - i32 signext %m) local_unnamed_addr #0 { -entry: - %cmp5 = icmp sgt i32 %m, -10 - br i1 %cmp5, label %for.body.preheader, label %for.end - -for.body.preheader: ; preds = %entry - br label %for.body - -for.body: ; preds = %for.body.preheader, %for.body - %sum.07 = phi float [ %add1, %for.body ], [ 0.000000e+00, %for.body.preheader ] - %i.06 = phi i32 [ %inc, %for.body ], [ -10, %for.body.preheader ] - %add = add nsw i32 %i.06, 20 - %idxprom = sext i32 %add to i64 - %arrayidx = getelementptr inbounds float, float* %b, i64 %idxprom - %temp = load float, float* %arrayidx, align 4 - %conv = sitofp i32 %i.06 to float - %mul = fmul float %conv, %temp - %add1 = fadd float %sum.07, %mul - %inc = add nsw i32 %i.06, 1 - %cmp = icmp slt i32 %inc, %m - br i1 %cmp, label %for.body, label %for.end.loopexit - -for.end.loopexit: ; preds = %for.body - br label %for.end - -for.end: ; preds = %for.end.loopexit, %entry - %sum.0.lcssa = phi float [ 0.000000e+00, %entry ], [ %add1, %for.end.loopexit ] - ret float %sum.0.lcssa - -; CHECK-LABEL: @test3( -; Trip count should be widened and LFTR should canonicalize the condition -; CHECK: %wide.trip.count = sext -; CHECK: %exitcond = icmp ne i64 %indvars.iv.next, %wide.trip.count -; CHECK: br i1 %exitcond -} - -define float @test4(float* %b, - i32 signext %m) local_unnamed_addr #0 { -entry: - %cmp5 = icmp sgt i32 %m, 10 - br i1 %cmp5, label %for.body.preheader, label %for.end - -for.body.preheader: ; preds = %entry - br label %for.body - -for.body: ; preds = %for.body.preheader, %for.body - %sum.07 = phi float [ %add1, %for.body ], [ 0.000000e+00, %for.body.preheader ] - %i.06 = phi i32 [ %inc, %for.body ], [ 10, %for.body.preheader ] - %add = add nsw i32 %i.06, 20 - %idxprom = sext i32 %add to i64 - %arrayidx = getelementptr inbounds float, float* %b, i64 %idxprom - %temp = load float, float* %arrayidx, align 4 - %conv = sitofp i32 %i.06 to float - %mul = fmul float %conv, %temp - %add1 = fadd float %sum.07, %mul - %inc = add nsw i32 %i.06, 1 - %cmp = icmp slt i32 %inc, %m - br i1 %cmp, label %for.body, label %for.end.loopexit - -for.end.loopexit: ; preds = %for.body - %add1.lcssa = phi float [ %add1, %for.body ] - br label %for.end - -for.end: ; preds = %for.end.loopexit, %entry - %sum.0.lcssa = phi float [ 0.000000e+00, %entry ], [ %add1.lcssa, %for.end.loopexit ] - ret float %sum.0.lcssa - -; CHECK-LABEL: @test4( -; Trip count should be widened and LFTR should canonicalize the condition -; CHECK: %wide.trip.count = zext -; CHECK: %exitcond = icmp ne i64 %indvars.iv.next, %wide.trip.count -; CHECK: br i1 %exitcond -} - - diff --git a/llvm/test/Transforms/IndVarSimplify/lftr-zext.ll b/llvm/test/Transforms/IndVarSimplify/lftr-zext.ll deleted file mode 100644 index e654e143cee..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/lftr-zext.ll +++ /dev/null @@ -1,26 +0,0 @@ -; RUN: opt < %s -indvars -S | 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-n8:16:32:64-S128" -target triple = "x86_64-apple-macosx10.9.0" - -@data = common global [240 x i8] zeroinitializer, align 16 - -define void @foo(i8* %a) nounwind uwtable ssp { -; CHECK: %exitcond -; CHECK-NOT: ([240 x i8]* @data, i64 0, i64 -16) - br label %1 - -; <label>:1 ; preds = %0, %1 - %i.0 = phi i8 [ 0, %0 ], [ %5, %1 ] - %p.0 = phi i8* [ getelementptr inbounds ([240 x i8], [240 x i8]* @data, i64 0, i64 0), %0 ], [ %4, %1 ] - %.0 = phi i8* [ %a, %0 ], [ %2, %1 ] - %2 = getelementptr inbounds i8, i8* %.0, i64 1 - %3 = load i8, i8* %.0, align 1 - %4 = getelementptr inbounds i8, i8* %p.0, i64 1 - store i8 %3, i8* %p.0, align 1 - %5 = add i8 %i.0, 1 - %6 = icmp ult i8 %5, -16 - br i1 %6, label %1, label %7 - -; <label>:7 ; preds = %1 - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/lftr_disabled.ll b/llvm/test/Transforms/IndVarSimplify/lftr_disabled.ll deleted file mode 100644 index c647d123dd7..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/lftr_disabled.ll +++ /dev/null @@ -1,28 +0,0 @@ -; LFTR should not eliminate the need for the computation of i*i completely -; due to LFTR is disabled. -; RUN: opt < %s -indvars -dce -disable-lftr -S | FileCheck %s - -; Provide legal integer types. -target datalayout = "n8:16:32:64" - - -@A = external global i32 ; <i32*> [#uses=1] - -define i32 @quadratic_setlt() { -; CHECK-LABEL: @quadratic_setlt( -; CHECK: mul -entry: - br label %loop - -loop: ; preds = %loop, %entry - %i = phi i32 [ 7, %entry ], [ %i.next, %loop ] ; <i32> [#uses=5] - %i.next = add i32 %i, 1 ; <i32> [#uses=1] - store i32 %i, i32* @A - %i2 = mul i32 %i, %i ; <i32> [#uses=1] - %c = icmp slt i32 %i2, 1000 ; <i1> [#uses=1] - br i1 %c, label %loop, label %loopexit - -loopexit: ; preds = %loop - ret i32 %i -} - diff --git a/llvm/test/Transforms/IndVarSimplify/lftr_simple.ll b/llvm/test/Transforms/IndVarSimplify/lftr_simple.ll deleted file mode 100644 index ee6470a7e00..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/lftr_simple.ll +++ /dev/null @@ -1,28 +0,0 @@ -; LFTR should eliminate the need for the computation of i*i completely. It -; is only used to compute the exit value. -; RUN: opt < %s -indvars -dce -S | FileCheck %s - -; Provide legal integer types. -target datalayout = "n8:16:32:64" - - -@A = external global i32 ; <i32*> [#uses=1] - -define i32 @quadratic_setlt() { -; CHECK-LABEL: @quadratic_setlt( -; CHECK-NOT: mul -entry: - br label %loop - -loop: ; preds = %loop, %entry - %i = phi i32 [ 7, %entry ], [ %i.next, %loop ] ; <i32> [#uses=5] - %i.next = add i32 %i, 1 ; <i32> [#uses=1] - store i32 %i, i32* @A - %i2 = mul i32 %i, %i ; <i32> [#uses=1] - %c = icmp slt i32 %i2, 1000 ; <i1> [#uses=1] - br i1 %c, label %loop, label %loopexit - -loopexit: ; preds = %loop - ret i32 %i -} - diff --git a/llvm/test/Transforms/IndVarSimplify/loop-invariant-conditions.ll b/llvm/test/Transforms/IndVarSimplify/loop-invariant-conditions.ll deleted file mode 100644 index 320f0b30cb9..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/loop-invariant-conditions.ll +++ /dev/null @@ -1,394 +0,0 @@ -; RUN: opt -S -indvars %s | FileCheck %s -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -define void @test1(i64 %start) { -; CHECK-LABEL: @test1 -entry: - br label %loop - -loop: - %indvars.iv = phi i64 [ %start, %entry ], [ %indvars.iv.next, %loop ] - %indvars.iv.next = add nsw i64 %indvars.iv, 1 -; CHECK: %cmp1 = icmp slt i64 %start, -1 - %cmp1 = icmp slt i64 %indvars.iv, -1 - br i1 %cmp1, label %for.end, label %loop - -for.end: ; preds = %if.end, %entry - ret void -} - -define void @test2(i64 %start) { -; CHECK-LABEL: @test2 -entry: - br label %loop - -loop: - %indvars.iv = phi i64 [ %start, %entry ], [ %indvars.iv.next, %loop ] - %indvars.iv.next = add nsw i64 %indvars.iv, 1 -; CHECK: %cmp1 = icmp sle i64 %start, -1 - %cmp1 = icmp sle i64 %indvars.iv, -1 - br i1 %cmp1, label %for.end, label %loop - -for.end: ; preds = %if.end, %entry - ret void -} - -; As long as the test dominates the backedge, we're good -define void @test3(i64 %start) { -; CHECK-LABEL: @test3 -entry: - br label %loop - -loop: - %indvars.iv = phi i64 [ %start, %entry ], [ %indvars.iv.next, %backedge ] - %indvars.iv.next = add nsw i64 %indvars.iv, 1 - %cmp = icmp eq i64 %indvars.iv.next, 25 - br i1 %cmp, label %backedge, label %for.end - -backedge: - ; prevent flattening, needed to make sure we're testing what we intend - call void @foo() -; CHECK: %cmp1 = icmp slt i64 %start, -1 - %cmp1 = icmp slt i64 %indvars.iv, -1 - br i1 %cmp1, label %for.end, label %loop - -for.end: ; preds = %if.end, %entry - ret void -} - -define void @test4(i64 %start) { -; CHECK-LABEL: @test4 -entry: - br label %loop - -loop: - %indvars.iv = phi i64 [ %start, %entry ], [ %indvars.iv.next, %backedge ] - %indvars.iv.next = add nsw i64 %indvars.iv, 1 - %cmp = icmp eq i64 %indvars.iv.next, 25 - br i1 %cmp, label %backedge, label %for.end - -backedge: - ; prevent flattening, needed to make sure we're testing what we intend - call void @foo() -; CHECK: %cmp1 = icmp sgt i64 %start, -1 - %cmp1 = icmp sgt i64 %indvars.iv, -1 - br i1 %cmp1, label %loop, label %for.end - -for.end: ; preds = %if.end, %entry - ret void -} - -define void @test5(i64 %start) { -; CHECK-LABEL: @test5 -entry: - br label %loop - -loop: - %indvars.iv = phi i64 [ %start, %entry ], [ %indvars.iv.next, %backedge ] - %indvars.iv.next = add nuw i64 %indvars.iv, 1 - %cmp = icmp eq i64 %indvars.iv.next, 25 - br i1 %cmp, label %backedge, label %for.end - -backedge: - ; prevent flattening, needed to make sure we're testing what we intend - call void @foo() -; CHECK: %cmp1 = icmp ugt i64 %start, 100 - %cmp1 = icmp ugt i64 %indvars.iv, 100 - br i1 %cmp1, label %loop, label %for.end - -for.end: ; preds = %if.end, %entry - ret void -} - -define void @test6(i64 %start) { -; CHECK-LABEL: @test6 -entry: - br label %loop - -loop: - %indvars.iv = phi i64 [ %start, %entry ], [ %indvars.iv.next, %backedge ] - %indvars.iv.next = add nuw i64 %indvars.iv, 1 - %cmp = icmp eq i64 %indvars.iv.next, 25 - br i1 %cmp, label %backedge, label %for.end - -backedge: - ; prevent flattening, needed to make sure we're testing what we intend - call void @foo() -; CHECK: %cmp1 = icmp ult i64 %start, 100 - %cmp1 = icmp ult i64 %indvars.iv, 100 - br i1 %cmp1, label %for.end, label %loop - -for.end: ; preds = %if.end, %entry - ret void -} - -define void @test7(i64 %start, i64* %inc_ptr) { -; CHECK-LABEL: @test7 -entry: - %inc = load i64, i64* %inc_ptr, !range !0 - %ok = icmp sge i64 %inc, 0 - br i1 %ok, label %loop, label %for.end - -loop: - %indvars.iv = phi i64 [ %start, %entry ], [ %indvars.iv.next, %loop ] - %indvars.iv.next = add nsw i64 %indvars.iv, %inc -; CHECK: %cmp1 = icmp slt i64 %start, -1 - %cmp1 = icmp slt i64 %indvars.iv, -1 - br i1 %cmp1, label %for.end, label %loop - -for.end: ; preds = %if.end, %entry - ret void -} - -; Negative test - we can't show that the internal branch executes, so we can't -; fold the test to a loop invariant one. -define void @test1_neg(i64 %start) { -; CHECK-LABEL: @test1_neg -entry: - br label %loop - -loop: - %indvars.iv = phi i64 [ %start, %entry ], [ %indvars.iv.next, %backedge ] - %indvars.iv.next = add nsw i64 %indvars.iv, 1 - %cmp = icmp eq i64 %indvars.iv.next, 25 - br i1 %cmp, label %backedge, label %skip -skip: - ; prevent flattening, needed to make sure we're testing what we intend - call void @foo() -; CHECK: %cmp1 = icmp slt i64 %indvars.iv, -1 - %cmp1 = icmp slt i64 %indvars.iv, -1 - br i1 %cmp1, label %for.end, label %backedge -backedge: - ; prevent flattening, needed to make sure we're testing what we intend - call void @foo() - br label %loop - -for.end: ; preds = %if.end, %entry - ret void -} - -; Slightly subtle version of @test4 where the icmp dominates the backedge, -; but the exit branch doesn't. -define void @test2_neg(i64 %start) { -; CHECK-LABEL: @test2_neg -entry: - br label %loop - -loop: - %indvars.iv = phi i64 [ %start, %entry ], [ %indvars.iv.next, %backedge ] - %indvars.iv.next = add nsw i64 %indvars.iv, 1 - %cmp = icmp eq i64 %indvars.iv.next, 25 -; CHECK: %cmp1 = icmp slt i64 %indvars.iv, -1 - %cmp1 = icmp slt i64 %indvars.iv, -1 - br i1 %cmp, label %backedge, label %skip -skip: - ; prevent flattening, needed to make sure we're testing what we intend - call void @foo() - br i1 %cmp1, label %for.end, label %backedge -backedge: - ; prevent flattening, needed to make sure we're testing what we intend - call void @foo() - br label %loop - -for.end: ; preds = %if.end, %entry - ret void -} - -; The branch has to exit the loop if the condition is true -define void @test3_neg(i64 %start) { -; CHECK-LABEL: @test3_neg -entry: - br label %loop - -loop: - %indvars.iv = phi i64 [ %start, %entry ], [ %indvars.iv.next, %loop ] - %indvars.iv.next = add nsw i64 %indvars.iv, 1 -; CHECK: %cmp1 = icmp slt i64 %indvars.iv, -1 - %cmp1 = icmp slt i64 %indvars.iv, -1 - br i1 %cmp1, label %loop, label %for.end - -for.end: ; preds = %if.end, %entry - ret void -} - -define void @test4_neg(i64 %start) { -; CHECK-LABEL: @test4_neg -entry: - br label %loop - -loop: - %indvars.iv = phi i64 [ %start, %entry ], [ %indvars.iv.next, %backedge ] - %indvars.iv.next = add nsw i64 %indvars.iv, 1 - %cmp = icmp eq i64 %indvars.iv.next, 25 - br i1 %cmp, label %backedge, label %for.end - -backedge: - ; prevent flattening, needed to make sure we're testing what we intend - call void @foo() -; CHECK: %cmp1 = icmp sgt i64 %indvars.iv, -1 - %cmp1 = icmp sgt i64 %indvars.iv, -1 - -; %cmp1 can be made loop invariant only if the branch below goes to -; %the header when %cmp1 is true. - br i1 %cmp1, label %for.end, label %loop - -for.end: ; preds = %if.end, %entry - ret void -} - -define void @test5_neg(i64 %start, i64 %inc) { -; CHECK-LABEL: @test5_neg -entry: - br label %loop - -loop: - %indvars.iv = phi i64 [ %start, %entry ], [ %indvars.iv.next, %loop ] - %indvars.iv.next = add nsw i64 %indvars.iv, %inc -; CHECK: %cmp1 = icmp slt i64 %indvars.iv, -1 - %cmp1 = icmp slt i64 %indvars.iv, -1 - br i1 %cmp1, label %for.end, label %loop - -for.end: ; preds = %if.end, %entry - ret void -} - -define void @test8(i64 %start, i64* %inc_ptr) { -; CHECK-LABEL: @test8 -entry: - %inc = load i64, i64* %inc_ptr, !range !1 - %ok = icmp sge i64 %inc, 0 - br i1 %ok, label %loop, label %for.end - -loop: - %indvars.iv = phi i64 [ %start, %entry ], [ %indvars.iv.next, %loop ] - %indvars.iv.next = add nsw i64 %indvars.iv, %inc -; CHECK: %cmp1 = icmp slt i64 %indvars.iv, -1 - %cmp1 = icmp slt i64 %indvars.iv, -1 - br i1 %cmp1, label %for.end, label %loop - -for.end: ; preds = %if.end, %entry - ret void -} - -; check to handle loops without preheaders, but invariant operands -; (we handle this today by inserting a preheader) -define void @test9(i1 %cnd, i64 %start) { -; CHECK-LABEL: @test9 -; CHECK-LABEL: loop.preheader: -entry: - br i1 %cnd, label %entry1, label %entry2 -entry1: - br label %loop -entry2: - br label %loop -loop: - %indvars.iv = phi i64 [ %start, %entry1 ],[ %start, %entry2 ], [ %indvars.iv.next, %loop ] - %indvars.iv.next = add nsw i64 %indvars.iv, 1 -; CHECK: %cmp1 = icmp slt i64 %start, -1 - %cmp1 = icmp slt i64 %indvars.iv, -1 - br i1 %cmp1, label %for.end, label %loop - -for.end: ; preds = %if.end, %entry - ret void -} - -declare void @use(i1 %x) - -; check that we handle conditions with loop invariant operands which -; *aren't* in the header - this is a very rare and fragile case where -; we have a "loop" which is known to run exactly one iteration but -; haven't yet simplified the uses of the IV -define void @test10() { -; CHECK-LABEL: @test10 -entry: - br label %loop - -loop: - %phi1 = phi i32 [ %phi2, %latch ], [ 0, %entry ] - %dec = add i32 %phi1, -1 - br i1 false, label %left, label %right - -left: - br label %latch - -right: - br label %latch - -latch: - %phi2 = phi i32 [ %phi1, %left ], [ %dec, %right ] - ; CHECK: %cmp = icmp slt i32 -1, undef - %cmp = icmp slt i32 %phi2, undef - br i1 true, label %exit, label %loop - -exit: - call void @use(i1 %cmp) - ret void -} - -; check that we can figure out that iv.next > 1 from the facts that iv >= 0 and -; iv.start != 0. -define void @test11(i64* %inc_ptr) { -; CHECK-LABEL: @test11 -entry: - %inc = load i64, i64* %inc_ptr, !range !0 - %ne.cond = icmp ne i64 %inc, 0 - br i1 %ne.cond, label %loop, label %exit - -loop: - %iv = phi i64 [ %inc, %entry ], [ %iv.next, %backedge ] - %iv.next = add i64 %iv, 1 - %brcond = icmp sgt i64 %iv.next, 1 - ; CHECK: br i1 true, label %if.true, label %if.false - br i1 %brcond, label %if.true, label %if.false - -if.true: - br label %backedge - -if.false: - br label %backedge - -backedge: - %loopcond = icmp slt i64 %iv, 200 - br i1 %loopcond, label %loop, label %exit - -exit: - ret void -} - -; check that we can prove that a recurrency is greater than another recurrency -; in the same loop, with the same step, and with smaller starting value. -define void @test12(i64* %inc_ptr) { -; CHECK-LABEL: @test12 -entry: - %inc = load i64, i64* %inc_ptr, !range !0 - %inc.minus.1 = sub i64 %inc, 1 - br label %loop - -loop: - %iv = phi i64 [ %inc, %entry ], [ %iv.next, %backedge ] - %iv.minus.1 = phi i64 [ %inc.minus.1, %entry ], [ %iv.minus.1.next, %backedge ] - %iv.next = add i64 %iv, 1 - %iv.minus.1.next = add i64 %iv.minus.1, 1 - %brcond = icmp sgt i64 %iv.next, %iv.minus.1.next - ; CHECK: br i1 true, label %if.true, label %if.false - br i1 %brcond, label %if.true, label %if.false - -if.true: - br label %backedge - -if.false: - br label %backedge - -backedge: - %loopcond = icmp slt i64 %iv, 200 - br i1 %loopcond, label %loop, label %exit - -exit: - ret void -} - -!0 = !{i64 0, i64 100} -!1 = !{i64 -1, i64 100} - -declare void @foo() diff --git a/llvm/test/Transforms/IndVarSimplify/loop_evaluate10.ll b/llvm/test/Transforms/IndVarSimplify/loop_evaluate10.ll deleted file mode 100644 index 3ac91060461..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/loop_evaluate10.ll +++ /dev/null @@ -1,47 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -; -; This loop has multiple exits, and the value of %b1 depends on which -; exit is taken. Indvars should correctly compute the exit values. -; - -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-pc-linux-gnu" - %struct..0anon = type <{ i8, [3 x i8] }> - -define i32 @main() nounwind { -; CHECK-LABEL: @main( -; CHECK: %b.1 = phi i32 [ 2, %bb ], [ 1, %bb2 ] -entry: - br label %bb2 - -bb2: ; preds = %bb, %entry - %sdata.0 = phi i32 [ 1, %entry ], [ %ins10, %bb ] ; <i32> [#uses=2] - %b.0 = phi i32 [ 0, %entry ], [ %t0, %bb ] ; <i32> [#uses=2] - %tmp6 = trunc i32 %sdata.0 to i8 ; <i8> [#uses=2] - %t2 = and i8 %tmp6, 1 ; <i8> [#uses=1] - %t3 = icmp eq i8 %t2, 0 ; <i1> [#uses=1] - %t4 = xor i8 %tmp6, 1 ; <i8> [#uses=1] - %tmp8 = zext i8 %t4 to i32 ; <i32> [#uses=1] - %mask9 = and i32 %sdata.0, -256 ; <i32> [#uses=1] - %ins10 = or i32 %tmp8, %mask9 ; <i32> [#uses=1] - br i1 %t3, label %bb3, label %bb - -bb: ; preds = %bb2 - %t0 = add i32 %b.0, 1 ; <i32> [#uses=3] - %t1 = icmp sgt i32 %t0, 100 ; <i1> [#uses=1] - br i1 %t1, label %bb3, label %bb2 - -bb3: ; preds = %bb, %bb2 - %b.1 = phi i32 [ %t0, %bb ], [ %b.0, %bb2 ] ; <i32> [#uses=1] - %t5 = icmp eq i32 %b.1, 1 ; <i1> [#uses=1] - br i1 %t5, label %bb5, label %bb4 - -bb4: ; preds = %bb3 - tail call void @abort() noreturn nounwind - unreachable - -bb5: ; preds = %bb3 - ret i32 0 -} - -declare void @abort() noreturn nounwind diff --git a/llvm/test/Transforms/IndVarSimplify/loop_evaluate11.ll b/llvm/test/Transforms/IndVarSimplify/loop_evaluate11.ll deleted file mode 100644 index 40b785ea4d6..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/loop_evaluate11.ll +++ /dev/null @@ -1,36 +0,0 @@ -; RUN: opt < %s -domfrontier -indvars -loop-deletion - -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" - -define void @slap_sl_mem_create() nounwind { -entry: - br label %bb15 - -bb15: ; preds = %bb15, %entry - %order_end.0 = phi i32 [ 0, %entry ], [ %tmp, %bb15 ] ; <i32> [#uses=1] - %tmp = add i32 %order_end.0, 1 ; <i32> [#uses=2] - br i1 undef, label %bb17, label %bb15 - -bb17: ; preds = %bb17, %bb15 - %order_start.0 = phi i32 [ %tmp1, %bb17 ], [ 0, %bb15 ] ; <i32> [#uses=2] - %tmp1 = add i32 %order_start.0, 1 ; <i32> [#uses=2] - %tmp2 = icmp eq i32 undef, 0 ; <i1> [#uses=1] - br i1 %tmp2, label %bb18, label %bb17 - -bb18: ; preds = %bb17 - %tmp3 = sub i32 %tmp, %tmp1 ; <i32> [#uses=0] - br label %bb59 - -bb51: ; preds = %bb59 - %tmp4 = add i32 %order_start.0, 2 ; <i32> [#uses=1] - %tmp5 = add i32 %tmp4, undef ; <i32> [#uses=1] - %tmp6 = lshr i32 undef, %tmp5 ; <i32> [#uses=1] - %tmp7 = icmp eq i32 %tmp6, 0 ; <i1> [#uses=1] - br i1 %tmp7, label %bb52, label %bb59 - -bb59: ; preds = %bb51, %bb18 - br label %bb51 - -bb52: ; preds = %bb51 - unreachable -} diff --git a/llvm/test/Transforms/IndVarSimplify/loop_evaluate7.ll b/llvm/test/Transforms/IndVarSimplify/loop_evaluate7.ll deleted file mode 100644 index 333ab7a4967..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/loop_evaluate7.ll +++ /dev/null @@ -1,61 +0,0 @@ -; RUN: opt < %s -indvars -; PR4436 - -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 = "i386-pc-linux-gnu" - -define i8* @string_expandtabs(i32 %n, i8* %m) nounwind { -entry: - br i1 undef, label %bb33, label %bb1 - -bb1: ; preds = %entry - br i1 undef, label %overflow1, label %bb15 - -bb15: ; preds = %bb1 - br i1 undef, label %bb33, label %bb17 - -bb17: ; preds = %bb15 - br label %bb30 - -bb19: ; preds = %bb30 - br i1 undef, label %bb20, label %bb29 - -bb20: ; preds = %bb19 - %0 = load i32, i32* undef, align 4 ; <i32> [#uses=1] - %1 = sub i32 %0, %n ; <i32> [#uses=1] - br label %bb23 - -bb21: ; preds = %bb23 - %2 = icmp ult i8* %q.0, %m ; <i1> [#uses=1] - br i1 %2, label %bb22, label %overflow2 - -bb22: ; preds = %bb21 - %3 = getelementptr i8, i8* %q.0, i32 1 ; <i8*> [#uses=1] - br label %bb23 - -bb23: ; preds = %bb22, %bb20 - %i.2 = phi i32 [ %1, %bb20 ], [ %4, %bb22 ] ; <i32> [#uses=1] - %q.0 = phi i8* [ undef, %bb20 ], [ %3, %bb22 ] ; <i8*> [#uses=3] - %4 = add i32 %i.2, -1 ; <i32> [#uses=2] - %5 = icmp eq i32 %4, -1 ; <i1> [#uses=1] - br i1 %5, label %bb29, label %bb21 - -bb29: ; preds = %bb23, %bb19 - %q.1 = phi i8* [ undef, %bb19 ], [ %q.0, %bb23 ] ; <i8*> [#uses=0] - br label %bb30 - -bb30: ; preds = %bb29, %bb17 - br i1 undef, label %bb19, label %bb33 - -overflow2: ; preds = %bb21 - br i1 undef, label %bb32, label %overflow1 - -bb32: ; preds = %overflow2 - br label %overflow1 - -overflow1: ; preds = %bb32, %overflow2, %bb1 - ret i8* null - -bb33: ; preds = %bb30, %bb15, %entry - ret i8* undef -} diff --git a/llvm/test/Transforms/IndVarSimplify/loop_evaluate8.ll b/llvm/test/Transforms/IndVarSimplify/loop_evaluate8.ll deleted file mode 100644 index fef1bd617ed..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/loop_evaluate8.ll +++ /dev/null @@ -1,65 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -; This loop has backedge-taken-count zero. Indvars shouldn't expand any -; instructions to compute a trip count. - -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 = "i386-pc-linux-gnu" - -define i8* @string_expandtabs() nounwind { -; CHECK-LABEL: @string_expandtabs( -; CHECK-NOT: select -entry: - br i1 undef, label %bb33, label %bb1 - -bb1: ; preds = %entry - br i1 undef, label %overflow1, label %bb15 - -bb15: ; preds = %bb1 - br i1 undef, label %bb33, label %bb17 - -bb17: ; preds = %bb15 - br label %bb30 - -bb19: ; preds = %bb30 - br i1 undef, label %bb20, label %bb29 - -bb20: ; preds = %bb19 - %0 = load i32, i32* undef, align 4 ; <i32> [#uses=1] - %1 = sub i32 %0, undef ; <i32> [#uses=1] - br label %bb23 - -bb21: ; preds = %bb23 - %2 = icmp ult i8* %q.0, undef ; <i1> [#uses=1] - br i1 %2, label %bb22, label %overflow2 - -bb22: ; preds = %bb21 - %3 = getelementptr i8, i8* %q.0, i32 1 ; <i8*> [#uses=1] - br label %bb23 - -bb23: ; preds = %bb22, %bb20 - %i.2 = phi i32 [ %1, %bb20 ], [ %4, %bb22 ] ; <i32> [#uses=1] - %q.0 = phi i8* [ undef, %bb20 ], [ %3, %bb22 ] ; <i8*> [#uses=3] - %4 = add i32 %i.2, -1 ; <i32> [#uses=2] - %5 = icmp eq i32 %4, -1 ; <i1> [#uses=1] - br i1 %5, label %bb29, label %bb21 - -bb29: ; preds = %bb23, %bb19 - %q.1 = phi i8* [ undef, %bb19 ], [ %q.0, %bb23 ] ; <i8*> [#uses=0] - br label %bb30 - -bb30: ; preds = %bb29, %bb17 - br i1 undef, label %bb19, label %bb33 - -overflow2: ; preds = %bb21 - br i1 undef, label %bb32, label %overflow1 - -bb32: ; preds = %overflow2 - br label %overflow1 - -overflow1: ; preds = %bb32, %overflow2, %bb1 - ret i8* null - -bb33: ; preds = %bb30, %bb15, %entry - ret i8* undef -} diff --git a/llvm/test/Transforms/IndVarSimplify/loop_evaluate9.ll b/llvm/test/Transforms/IndVarSimplify/loop_evaluate9.ll deleted file mode 100644 index 96f2f30bd3b..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/loop_evaluate9.ll +++ /dev/null @@ -1,85 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -; PR4477 -; Indvars should compute the exit values in loop. -; -; XFAIL: * -; Indvars does not currently replace loop invariant values unless all -; loop exits have the same exit value. We could handle some cases, -; such as this, by making getSCEVAtScope() sensitive to a particular -; loop exit. See PR11388. - -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 = "i386-pc-linux-gnu" - %struct.cc70a02__complex_integers__complex_type = type { i8, i8 } -@.str = internal constant [13 x i8] c"fc70a00.adb\00\00", align 1 ; <[13 x i8]*> [#uses=1] - -define void @_ada_cc70a02() { -; CHECK-LABEL: @_ada_cc70a02( -; CHECK: [%]tmp7 = icmp eq i8 -28, -28 -; CHECK: [%]tmp8 = icmp eq i8 63, 63 - -entry: - br label %bb1.i - -bb1.i: ; preds = %bb2.i, %entry - %indvar.i = phi i32 [ 0, %entry ], [ %indvar.next.i, %bb2.i ] ; <i32> [#uses=2] - %result.0.i = phi i16 [ 0, %entry ], [ %ins36.i, %bb2.i ] ; <i16> [#uses=2] - %tmp38.i = trunc i16 %result.0.i to i8 ; <i8> [#uses=2] - %tmp = add i8 %tmp38.i, 96 ; <i8> [#uses=1] - %tmp1 = icmp ugt i8 %tmp, -56 ; <i1> [#uses=1] - br i1 %tmp1, label %bb.i.i, label %bb1.i.i - -bb.i.i: ; preds = %bb1.i - tail call void @__gnat_rcheck_12(i8* getelementptr ([13 x i8], [13 x i8]* @.str, i32 0, i32 0), i32 24) noreturn - unreachable - -bb1.i.i: ; preds = %bb1.i - %tmp41.i = lshr i16 %result.0.i, 8 ; <i16> [#uses=1] - %tmp42.i = trunc i16 %tmp41.i to i8 ; <i8> [#uses=2] - %tmp2 = add i8 %tmp42.i, 109 ; <i8> [#uses=1] - %tmp3 = icmp ugt i8 %tmp2, -56 ; <i1> [#uses=1] - br i1 %tmp3, label %bb2.i.i, label %cc70a02__complex_integers__Oadd.153.exit.i - -bb2.i.i: ; preds = %bb1.i.i - tail call void @__gnat_rcheck_12(i8* getelementptr ([13 x i8], [13 x i8]* @.str, i32 0, i32 0), i32 24) noreturn - unreachable - -cc70a02__complex_integers__Oadd.153.exit.i: ; preds = %bb1.i.i - %tmp4 = add i8 %tmp38.i, -4 ; <i8> [#uses=2] - %tmp5 = add i8 %tmp42.i, 9 ; <i8> [#uses=2] - %tmp25.i = zext i8 %tmp4 to i16 ; <i16> [#uses=1] - %tmp33.i = zext i8 %tmp5 to i16 ; <i16> [#uses=1] - %tmp34.i = shl i16 %tmp33.i, 8 ; <i16> [#uses=1] - %ins36.i = or i16 %tmp34.i, %tmp25.i ; <i16> [#uses=1] - %tmp6 = icmp eq i32 %indvar.i, 6 ; <i1> [#uses=1] - br i1 %tmp6, label %cc70a02__complex_multiplication.170.exit, label %bb2.i - -bb2.i: ; preds = %cc70a02__complex_integers__Oadd.153.exit.i - %indvar.next.i = add i32 %indvar.i, 1 ; <i32> [#uses=1] - br label %bb1.i - -cc70a02__complex_multiplication.170.exit: ; preds = %cc70a02__complex_integers__Oadd.153.exit.i - %tmp7 = icmp eq i8 %tmp4, -28 ; <i1> [#uses=1] - %tmp8 = icmp eq i8 %tmp5, 63 ; <i1> [#uses=1] - %or.cond = and i1 %tmp8, %tmp7 ; <i1> [#uses=1] - br i1 %or.cond, label %return, label %bb1 - -bb1: ; preds = %cc70a02__complex_multiplication.170.exit - tail call void @exit(i32 1) - ret void - -return: ; preds = %cc70a02__complex_multiplication.170.exit - ret void -} - -declare fastcc void @cc70a02__complex_integers__complex.164(%struct.cc70a02__complex_integers__complex_type* noalias nocapture sret, i8 signext, i8 signext) nounwind - -declare fastcc void @cc70a02__complex_integers__Osubtract.149(%struct.cc70a02__complex_integers__complex_type* noalias sret, %struct.cc70a02__complex_integers__complex_type* byval align 4) - -declare fastcc void @cc70a02__complex_integers__Oadd.153(%struct.cc70a02__complex_integers__complex_type* noalias sret, %struct.cc70a02__complex_integers__complex_type* byval align 4, %struct.cc70a02__complex_integers__complex_type* byval align 4) - -declare fastcc void @cc70a02__complex_multiplication.170(%struct.cc70a02__complex_integers__complex_type* noalias sret, %struct.cc70a02__complex_integers__complex_type* byval align 4) - -declare void @__gnat_rcheck_12(i8*, i32) noreturn - -declare void @exit(i32) diff --git a/llvm/test/Transforms/IndVarSimplify/loop_evaluate_1.ll b/llvm/test/Transforms/IndVarSimplify/loop_evaluate_1.ll deleted file mode 100644 index 5d2c8c7209f..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/loop_evaluate_1.ll +++ /dev/null @@ -1,47 +0,0 @@ -; RUN: opt < %s -indvars -loop-deletion -simplifycfg -S | FileCheck %s - -; Testcase distilled from 256.bzip2 -; CHECK-LABEL: @test1 -; CHECK-NOT: br -define i32 @test1() { -entry: - br label %loopentry - -loopentry: ; preds = %loopentry, %entry - %indvar1 = phi i32 [ 0, %entry ], [ %indvar.next2, %loopentry ] ; <i32> [#uses=1] - %h.0 = phi i32 [ %tmp.2, %loopentry ], [ 4, %entry ] ; <i32> [#uses=1] - %tmp.1 = mul i32 %h.0, 3 ; <i32> [#uses=1] - %tmp.2 = add i32 %tmp.1, 1 ; <i32> [#uses=2] - %indvar.next2 = add i32 %indvar1, 1 ; <i32> [#uses=2] - %exitcond3 = icmp ne i32 %indvar.next2, 4 ; <i1> [#uses=1] - br i1 %exitcond3, label %loopentry, label %loopexit - -loopexit: ; preds = %loopentry - ret i32 %tmp.2 -} - - -; PR12377 -; CHECK-LABEL: @test2 -; CHECK: [[VAR1:%.+]] = add i32 %arg, -11 -; CHECK: [[VAR2:%.+]] = lshr i32 [[VAR1]], 1 -; CHECK: [[VAR3:%.+]] = add i32 [[VAR2]], 1 -; CHECK: [[VAR4:%.+]] = phi i32 [ 0, %bb ], [ [[VAR3]], %bb1.preheader ] -; CHECK: ret i32 [[VAR4]] -define i32 @test2(i32 %arg) { -bb: - %tmp = icmp ugt i32 %arg, 10 - br i1 %tmp, label %bb1, label %bb7 - -bb1: ; preds = %bb1, %bb - %tmp2 = phi i32 [ %tmp5, %bb1 ], [ 0, %bb ] - %tmp3 = phi i32 [ %tmp4, %bb1 ], [ %arg, %bb ] - %tmp4 = add i32 %tmp3, -2 - %tmp5 = add i32 %tmp2, 1 - %tmp6 = icmp ugt i32 %tmp4, 10 - br i1 %tmp6, label %bb1, label %bb7 - -bb7: ; preds = %bb1, %bb - %tmp8 = phi i32 [ 0, %bb ], [ %tmp5, %bb1 ] - ret i32 %tmp8 -} diff --git a/llvm/test/Transforms/IndVarSimplify/loop_evaluate_2.ll b/llvm/test/Transforms/IndVarSimplify/loop_evaluate_2.ll deleted file mode 100644 index 930819e77d3..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/loop_evaluate_2.ll +++ /dev/null @@ -1,29 +0,0 @@ -; RUN: opt < %s -indvars -loop-deletion -simplifycfg | opt -analyze -loops | FileCheck %s -; PR1179 - -; CHECK-NOT: Loop Containing - -define i32 @ltst(i32 %x) { -entry: - icmp sgt i32 %x, 0 ; <i1>:0 [#uses=1] - br i1 %0, label %bb.preheader, label %bb8 - -bb.preheader: ; preds = %entry - br label %bb - -bb: ; preds = %bb, %bb.preheader - %i.01.0 = phi i32 [ %tmp4, %bb ], [ 0, %bb.preheader ] ; <i32> [#uses=1] - %j.03.0 = phi i32 [ %tmp2, %bb ], [ 0, %bb.preheader ] ; <i32> [#uses=1] - %tmp4 = add i32 %i.01.0, 1 ; <i32> [#uses=2] - %tmp2 = add i32 %j.03.0, 1 ; <i32> [#uses=2] - icmp slt i32 %tmp4, %x ; <i1>:1 [#uses=1] - br i1 %1, label %bb, label %bb8.loopexit - -bb8.loopexit: ; preds = %bb - br label %bb8 - -bb8: ; preds = %bb8.loopexit, %entry - %j.03.1 = phi i32 [ 0, %entry ], [ %tmp2, %bb8.loopexit ] ; <i32> [#uses=1] - ret i32 %j.03.1 -} - diff --git a/llvm/test/Transforms/IndVarSimplify/loop_evaluate_3.ll b/llvm/test/Transforms/IndVarSimplify/loop_evaluate_3.ll deleted file mode 100644 index 1ce7b55e0f2..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/loop_evaluate_3.ll +++ /dev/null @@ -1,21 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -; PR1179 - -define i32 @foo() { -; CHECK-LABEL: @foo( -; CHECK: ret i32 600000 -entry: - br label %bb5 - -bb5: ; preds = %bb5, %entry - %i.01.0 = phi i32 [ 0, %entry ], [ %tmp2, %bb5 ] ; <i32> [#uses=1] - %x.03.0 = phi i32 [ 0, %entry ], [ %tmp4, %bb5 ] ; <i32> [#uses=1] - %tmp2 = add i32 %i.01.0, 3 ; <i32> [#uses=2] - %tmp4 = add i32 %x.03.0, 1 ; <i32> [#uses=2] - icmp slt i32 %tmp4, 200000 ; <i1>:0 [#uses=1] - br i1 %0, label %bb5, label %bb7 - -bb7: ; preds = %bb5 - ret i32 %tmp2 -} - diff --git a/llvm/test/Transforms/IndVarSimplify/loop_evaluate_4.ll b/llvm/test/Transforms/IndVarSimplify/loop_evaluate_4.ll deleted file mode 100644 index 0bdae114c9c..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/loop_evaluate_4.ll +++ /dev/null @@ -1,22 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -; PR1179 - -define i32 @test4() { -; CHECK-LABEL: @test4( -; CHECK: ret i32 9900 -entry: - br label %bb7 - -bb7: ; preds = %bb7, %entry - %v.01.0 = phi i32 [ 0, %entry ], [ %tmp4, %bb7 ] ; <i32> [#uses=1] - %i.03.0 = phi i32 [ 0, %entry ], [ %tmp6, %bb7 ] ; <i32> [#uses=2] - %tmp2 = shl i32 %i.03.0, 1 ; <i32> [#uses=1] - %tmp4 = add i32 %tmp2, %v.01.0 ; <i32> [#uses=2] - %tmp6 = add i32 %i.03.0, 1 ; <i32> [#uses=2] - icmp slt i32 %tmp6, 100 ; <i1>:0 [#uses=1] - br i1 %0, label %bb7, label %bb9 - -bb9: ; preds = %bb7 - ret i32 %tmp4 -} - diff --git a/llvm/test/Transforms/IndVarSimplify/loop_evaluate_5.ll b/llvm/test/Transforms/IndVarSimplify/loop_evaluate_5.ll deleted file mode 100644 index 0a601b436eb..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/loop_evaluate_5.ll +++ /dev/null @@ -1,34 +0,0 @@ -; RUN: opt < %s -indvars -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" -target triple = "i686-pc-linux-gnu" - -; Indvars should be able to compute an exit value for %tmp1. - -define i32 @testcase(i5 zeroext %k) nounwind readnone { -; CHECK-LABEL: @testcase -; CHECK: 120, %bb2.bb3_crit_edge -entry: - br i1 false, label %bb3, label %bb.nph - -bb.nph: ; preds = %entry - br label %bb - -bb: ; preds = %bb2, %bb.nph - %result2 = phi i32 [ %tmp1, %bb2 ], [ 0, %bb.nph ] ; <i32> [#uses=1] - %k_01 = phi i5 [ %indvar_next1, %bb2 ], [ 0, %bb.nph ] ; <i5> [#uses=2] - %tmp2 = zext i5 %k_01 to i32 ; <i32> [#uses=1] - %tmp1 = add i32 %tmp2, %result2 ; <i32> [#uses=2] - %indvar_next1 = add i5 %k_01, 1 ; <i5> [#uses=2] - br label %bb2 - -bb2: ; preds = %bb - %phitmp = icmp eq i5 %indvar_next1, -16 ; <i1> [#uses=1] - br i1 %phitmp, label %bb2.bb3_crit_edge, label %bb - -bb2.bb3_crit_edge: ; preds = %bb2 - br label %bb3 - -bb3: ; preds = %bb2.bb3_crit_edge, %entry - %result.lcssa = phi i32 [ %tmp1, %bb2.bb3_crit_edge ], [ 0, %entry ] ; <i32> [#uses=1] - ret i32 %result.lcssa -} diff --git a/llvm/test/Transforms/IndVarSimplify/loop_evaluate_6.ll b/llvm/test/Transforms/IndVarSimplify/loop_evaluate_6.ll deleted file mode 100644 index fd49674f80b..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/loop_evaluate_6.ll +++ /dev/null @@ -1,30 +0,0 @@ -; RUN: opt < %s -indvars -loop-deletion -S | FileCheck %s - -define i32 @test(i32 %x_offs) nounwind readnone { -; CHECK-LABEL: @test( -; CHECK: phi -; CHECK-NOT: phi - -entry: - %0 = icmp sgt i32 %x_offs, 4 ; <i1> [#uses=1] - br i1 %0, label %bb.nph, label %bb2 - -bb.nph: ; preds = %entry - br label %bb - -bb: ; preds = %bb1, %bb.nph - %x_offs_addr.01 = phi i32 [ %1, %bb1 ], [ %x_offs, %bb.nph ] ; <i32> [#uses=1] - %1 = add i32 %x_offs_addr.01, -4 ; <i32> [#uses=3] - br label %bb1 - -bb1: ; preds = %bb - %2 = icmp sgt i32 %1, 4 ; <i1> [#uses=1] - br i1 %2, label %bb, label %bb1.bb2_crit_edge - -bb1.bb2_crit_edge: ; preds = %bb1 - br label %bb2 - -bb2: ; preds = %bb1.bb2_crit_edge, %entry - %x_offs_addr.0.lcssa = phi i32 [ %1, %bb1.bb2_crit_edge ], [ %x_offs, %entry ] ; <i32> [#uses=1] - ret i32 %x_offs_addr.0.lcssa -} diff --git a/llvm/test/Transforms/IndVarSimplify/lrev-existing-umin.ll b/llvm/test/Transforms/IndVarSimplify/lrev-existing-umin.ll deleted file mode 100644 index fff76675f17..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/lrev-existing-umin.ll +++ /dev/null @@ -1,74 +0,0 @@ -; RUN: opt -S -indvars < %s | FileCheck %s - -; Do not rewrite the user outside the loop because we must keep the instruction -; inside the loop due to store. Rewrite doesn't give us any profit. -define void @f(i32 %length.i.88, i32 %length.i, i8* %tmp12, i32 %tmp10, i8* %tmp8) { -; CHECK-LABEL: @f( -not_zero11.preheader: - %tmp13 = icmp ugt i32 %length.i, %length.i.88 - %tmp14 = select i1 %tmp13, i32 %length.i.88, i32 %length.i - %tmp15 = icmp sgt i32 %tmp14, 0 - br i1 %tmp15, label %not_zero11, label %not_zero11.postloop - -not_zero11: - %v_1 = phi i32 [ %tmp22, %not_zero11 ], [ 0, %not_zero11.preheader ] - %tmp16 = zext i32 %v_1 to i64 - %tmp17 = getelementptr inbounds i8, i8* %tmp8, i64 %tmp16 - %tmp18 = load i8, i8* %tmp17, align 1 - %tmp19 = zext i8 %tmp18 to i32 - %tmp20 = or i32 %tmp19, %tmp10 - %tmp21 = trunc i32 %tmp20 to i8 - %addr22 = getelementptr inbounds i8, i8* %tmp12, i64 %tmp16 - store i8 %tmp21, i8* %addr22, align 1 - %tmp22 = add nuw nsw i32 %v_1, 1 - %tmp23 = icmp slt i32 %tmp22, %tmp14 - br i1 %tmp23, label %not_zero11, label %main.exit.selector - -main.exit.selector: -; CHECK-LABEL: main.exit.selector: -; CHECK: %tmp22.lcssa = phi i32 [ %tmp22, %not_zero11 ] -; CHECK: %tmp24 = icmp slt i32 %tmp22.lcssa, %length. - %tmp24 = icmp slt i32 %tmp22, %length.i - br i1 %tmp24, label %not_zero11.postloop, label %leave - -leave: - ret void - -not_zero11.postloop: - ret void -} - -; Rewrite the user outside the loop because there is no hard users inside the loop. -define void @f1(i32 %length.i.88, i32 %length.i, i8* %tmp12, i32 %tmp10, i8* %tmp8) { -; CHECK-LABEL: @f1( -not_zero11.preheader: - %tmp13 = icmp ugt i32 %length.i, %length.i.88 - %tmp14 = select i1 %tmp13, i32 %length.i.88, i32 %length.i - %tmp15 = icmp sgt i32 %tmp14, 0 - br i1 %tmp15, label %not_zero11, label %not_zero11.postloop - -not_zero11: - %v_1 = phi i32 [ %tmp22, %not_zero11 ], [ 0, %not_zero11.preheader ] - %tmp16 = zext i32 %v_1 to i64 - %tmp17 = getelementptr inbounds i8, i8* %tmp8, i64 %tmp16 - %tmp18 = load i8, i8* %tmp17, align 1 - %tmp19 = zext i8 %tmp18 to i32 - %tmp20 = or i32 %tmp19, %tmp10 - %tmp21 = trunc i32 %tmp20 to i8 - %addr22 = getelementptr inbounds i8, i8* %tmp12, i64 %tmp16 - %tmp22 = add nuw nsw i32 %v_1, 1 - %tmp23 = icmp slt i32 %tmp22, %tmp14 - br i1 %tmp23, label %not_zero11, label %main.exit.selector - -main.exit.selector: -; CHECK-LABEL: main.exit.selector: -; CHECK: %tmp24 = icmp slt i32 %tmp14, %length.i - %tmp24 = icmp slt i32 %tmp22, %length.i - br i1 %tmp24, label %not_zero11.postloop, label %leave - -leave: - ret void - -not_zero11.postloop: - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/masked-iv.ll b/llvm/test/Transforms/IndVarSimplify/masked-iv.ll deleted file mode 100644 index c045469e71b..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/masked-iv.ll +++ /dev/null @@ -1,28 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -; Indvars should do the IV arithmetic in the canonical IV type (i64), -; and only use one truncation. - -define void @foo(i64* %A, i64* %B, i64 %n, i64 %a, i64 %s) nounwind { -; CHECK-LABEL: @foo( -; CHECK-NOT: trunc -; CHECK: and -; CHECK-NOT: and -entry: - %t0 = icmp sgt i64 %n, 0 ; <i1> [#uses=1] - br i1 %t0, label %bb.preheader, label %return - -bb.preheader: ; preds = %entry - br label %bb - -bb: ; preds = %bb, %bb.preheader - %i.01 = phi i64 [ %t6, %bb ], [ %a, %bb.preheader ] ; <i64> [#uses=3] - %t1 = and i64 %i.01, 255 ; <i64> [#uses=1] - %t2 = getelementptr i64, i64* %A, i64 %t1 ; <i64*> [#uses=1] - store i64 %i.01, i64* %t2, align 8 - %t6 = add i64 %i.01, %s ; <i64> [#uses=1] - br label %bb - -return: ; preds = %entry - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/no-iv-rewrite.ll b/llvm/test/Transforms/IndVarSimplify/no-iv-rewrite.ll deleted file mode 100644 index 7411b16bb85..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/no-iv-rewrite.ll +++ /dev/null @@ -1,397 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -; -; Make sure that indvars isn't inserting canonical IVs. -; This is kinda hard to do until linear function test replacement is removed. - -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-n8:16:32:64" - -define i32 @sum(i32* %arr, i32 %n) nounwind { -entry: - %precond = icmp slt i32 0, %n - br i1 %precond, label %ph, label %return - -ph: - br label %loop - -; CHECK: loop: -; -; We should only have 2 IVs. -; CHECK: phi -; CHECK: phi -; CHECK-NOT: phi -; -; sext should be eliminated while preserving gep inboundsness. -; CHECK-NOT: sext -; CHECK: getelementptr inbounds -; CHECK: exit: -loop: - %i.02 = phi i32 [ 0, %ph ], [ %iinc, %loop ] - %s.01 = phi i32 [ 0, %ph ], [ %sinc, %loop ] - %ofs = sext i32 %i.02 to i64 - %adr = getelementptr inbounds i32, i32* %arr, i64 %ofs - %val = load i32, i32* %adr - %sinc = add nsw i32 %s.01, %val - %iinc = add nsw i32 %i.02, 1 - %cond = icmp slt i32 %iinc, %n - br i1 %cond, label %loop, label %exit - -exit: - %s.lcssa = phi i32 [ %sinc, %loop ] - br label %return - -return: - %s.0.lcssa = phi i32 [ %s.lcssa, %exit ], [ 0, %entry ] - ret i32 %s.0.lcssa -} - -define i64 @suml(i32* %arr, i32 %n) nounwind { -entry: - %precond = icmp slt i32 0, %n - br i1 %precond, label %ph, label %return - -ph: - br label %loop - -; CHECK: loop: -; -; We should only have 2 IVs. -; CHECK: phi -; CHECK: phi -; CHECK-NOT: phi -; -; %ofs sext should be eliminated while preserving gep inboundsness. -; CHECK-NOT: sext -; CHECK: getelementptr inbounds -; %vall sext should obviously not be eliminated -; CHECK: sext -; CHECK: exit: -loop: - %i.02 = phi i32 [ 0, %ph ], [ %iinc, %loop ] - %s.01 = phi i64 [ 0, %ph ], [ %sinc, %loop ] - %ofs = sext i32 %i.02 to i64 - %adr = getelementptr inbounds i32, i32* %arr, i64 %ofs - %val = load i32, i32* %adr - %vall = sext i32 %val to i64 - %sinc = add nsw i64 %s.01, %vall - %iinc = add nsw i32 %i.02, 1 - %cond = icmp slt i32 %iinc, %n - br i1 %cond, label %loop, label %exit - -exit: - %s.lcssa = phi i64 [ %sinc, %loop ] - br label %return - -return: - %s.0.lcssa = phi i64 [ %s.lcssa, %exit ], [ 0, %entry ] - ret i64 %s.0.lcssa -} - -define void @outofbounds(i32* %first, i32* %last, i32 %idx) nounwind { - %precond = icmp ne i32* %first, %last - br i1 %precond, label %ph, label %return - -; CHECK: ph: -; It's not indvars' job to perform LICM on %ofs -; CHECK-NOT: sext -ph: - br label %loop - -; CHECK: loop: -; -; Preserve exactly one pointer type IV. -; CHECK: phi i32* -; CHECK-NOT: phi -; -; Don't create any extra adds. -; CHECK-NOT: add -; -; Preserve gep inboundsness, and don't factor it. -; CHECK: getelementptr inbounds i32, i32* %ptriv, i32 1 -; CHECK-NOT: add -; CHECK: exit: -loop: - %ptriv = phi i32* [ %first, %ph ], [ %ptrpost, %loop ] - %ofs = sext i32 %idx to i64 - %adr = getelementptr inbounds i32, i32* %ptriv, i64 %ofs - store i32 3, i32* %adr - %ptrpost = getelementptr inbounds i32, i32* %ptriv, i32 1 - %cond = icmp ne i32* %ptrpost, %last - br i1 %cond, label %loop, label %exit - -exit: - br label %return - -return: - ret void -} - -%structI = type { i32 } - -define void @bitcastiv(i32 %start, i32 %limit, i32 %step, %structI* %base) -nounwind -{ -entry: - br label %loop - -; CHECK: loop: -; -; Preserve casts -; CHECK: phi i32 -; CHECK: bitcast -; CHECK: getelementptr -; CHECK: exit: -loop: - %iv = phi i32 [%start, %entry], [%next, %loop] - %p = phi %structI* [%base, %entry], [%pinc, %loop] - %adr = getelementptr %structI, %structI* %p, i32 0, i32 0 - store i32 3, i32* %adr - %pp = bitcast %structI* %p to i32* - store i32 4, i32* %pp - %pinc = getelementptr %structI, %structI* %p, i32 1 - %next = add i32 %iv, 1 - %cond = icmp ne i32 %next, %limit - br i1 %cond, label %loop, label %exit - -exit: - ret void -} - -define void @maxvisitor(i32 %limit, i32* %base) nounwind { -entry: - br label %loop - -; Test inserting a truncate at a phi use. -; -; CHECK: loop: -; CHECK: phi i64 -; CHECK: trunc -; CHECK: exit: -loop: - %idx = phi i32 [ 0, %entry ], [ %idx.next, %loop.inc ] - %max = phi i32 [ 0, %entry ], [ %max.next, %loop.inc ] - %idxprom = sext i32 %idx to i64 - %adr = getelementptr inbounds i32, i32* %base, i64 %idxprom - %val = load i32, i32* %adr - %cmp19 = icmp sgt i32 %val, %max - br i1 %cmp19, label %if.then, label %if.else - -if.then: - br label %loop.inc - -if.else: - br label %loop.inc - -loop.inc: - %max.next = phi i32 [ %idx, %if.then ], [ %max, %if.else ] - %idx.next = add nsw i32 %idx, 1 - %cmp = icmp slt i32 %idx.next, %limit - br i1 %cmp, label %loop, label %exit - -exit: - ret void -} - -define void @identityphi(i32 %limit) nounwind { -entry: - br label %loop - -; Test an edge case of removing an identity phi that directly feeds -; back to the loop iv. -; -; CHECK: loop: -; CHECK-NOT: phi -; CHECK: exit: -loop: - %iv = phi i32 [ 0, %entry], [ %iv.next, %control ] - br i1 undef, label %if.then, label %control - -if.then: - br label %control - -control: - %iv.next = phi i32 [ %iv, %loop ], [ undef, %if.then ] - %cmp = icmp slt i32 %iv.next, %limit - br i1 %cmp, label %loop, label %exit - -exit: - ret void -} - -define i64 @cloneOr(i32 %limit, i64* %base) nounwind { -entry: - ; ensure that the loop can't overflow - %halfLim = ashr i32 %limit, 2 - br label %loop - -; Test cloning an or, which is not an OverflowBinaryOperator. -; -; CHECK: sext -; CHECK: loop: -; CHECK: phi i64 -; CHECK-NOT: sext -; CHECK: or i64 -; CHECK: exit: -loop: - %iv = phi i32 [ 0, %entry], [ %iv.next, %loop ] - %t1 = sext i32 %iv to i64 - %adr = getelementptr i64, i64* %base, i64 %t1 - %val = load i64, i64* %adr - %t2 = or i32 %iv, 1 - %t3 = sext i32 %t2 to i64 - %iv.next = add i32 %iv, 2 - %cmp = icmp slt i32 %iv.next, %halfLim - br i1 %cmp, label %loop, label %exit - -exit: - %result = and i64 %val, %t3 - ret i64 %result -} - -; The i induction variable looks like a wrap-around, but it really is just -; a simple affine IV. Make sure that indvars simplifies through. -define i32 @indirectRecurrence() nounwind { -entry: - br label %loop - -; ReplaceLoopExitValue should fold the return value to constant 9. -; CHECK: loop: -; CHECK: phi i32 -; CHECK: ret i32 9 -loop: - %j.0 = phi i32 [ 1, %entry ], [ %j.next, %cond_true ] - %i.0 = phi i32 [ 0, %entry ], [ %j.0, %cond_true ] - %tmp = icmp ne i32 %j.0, 10 - br i1 %tmp, label %cond_true, label %return - -cond_true: - %j.next = add i32 %j.0, 1 - br label %loop - -return: - ret i32 %i.0 -} - -; Eliminate the congruent phis j, k, and l. -; Eliminate the redundant IV increments k.next and l.next. -; Two phis should remain, one starting at %init, and one at %init1. -; Two increments should remain, one by %step and one by %step1. -; CHECK: loop: -; CHECK: phi i32 -; CHECK: phi i32 -; CHECK-NOT: phi -; CHECK: add i32 -; CHECK: add i32 -; CHECK: add i32 -; CHECK-NOT: add -; CHECK: return: -; -; Five live-outs should remain. -; CHECK: lcssa = phi -; CHECK: lcssa = phi -; CHECK: lcssa = phi -; CHECK: lcssa = phi -; CHECK: lcssa = phi -; CHECK-NOT: phi -; CHECK: ret -define i32 @isomorphic(i32 %init, i32 %step, i32 %lim) nounwind { -entry: - %step1 = add i32 %step, 1 - %init1 = add i32 %init, %step1 - %l.0 = sub i32 %init1, %step1 - br label %loop - -loop: - %ii = phi i32 [ %init1, %entry ], [ %ii.next, %loop ] - %i = phi i32 [ %init, %entry ], [ %ii, %loop ] - %j = phi i32 [ %init, %entry ], [ %j.next, %loop ] - %k = phi i32 [ %init1, %entry ], [ %k.next, %loop ] - %l = phi i32 [ %l.0, %entry ], [ %l.next, %loop ] - %ii.next = add i32 %ii, %step1 - %j.next = add i32 %j, %step1 - %k.next = add i32 %k, %step1 - %l.step = add i32 %l, %step - %l.next = add i32 %l.step, 1 - %cmp = icmp ne i32 %ii.next, %lim - br i1 %cmp, label %loop, label %return - -return: - %sum1 = add i32 %i, %j.next - %sum2 = add i32 %sum1, %k.next - %sum3 = add i32 %sum1, %l.step - %sum4 = add i32 %sum1, %l.next - ret i32 %sum4 -} - -; Test a GEP IV that is derived from another GEP IV by a nop gep that -; lowers the type without changing the expression. -%structIF = type { i32, float } - -define void @congruentgepiv(%structIF* %base) nounwind uwtable ssp { -entry: - %first = getelementptr inbounds %structIF, %structIF* %base, i64 0, i32 0 - br label %loop - -; CHECK: loop: -; CHECK: phi %structIF* -; CHECK-NOT: phi -; CHECK: getelementptr inbounds -; CHECK-NOT: getelementptr -; CHECK: exit: -loop: - %ptr.iv = phi %structIF* [ %ptr.inc, %latch ], [ %base, %entry ] - %next = phi i32* [ %next.inc, %latch ], [ %first, %entry ] - store i32 4, i32* %next - br i1 undef, label %latch, label %exit - -latch: ; preds = %for.inc50.i - %ptr.inc = getelementptr inbounds %structIF, %structIF* %ptr.iv, i64 1 - %next.inc = getelementptr inbounds %structIF, %structIF* %ptr.inc, i64 0, i32 0 - br label %loop - -exit: - ret void -} - -declare void @use32(i32 %x) -declare void @use64(i64 %x) - -; Test a widened IV that is used by a phi on different paths within the loop. -; -; CHECK: for.body: -; CHECK: phi i64 -; CHECK: trunc i64 -; CHECK: if.then: -; CHECK: for.inc: -; CHECK: phi i32 -; CHECK: for.end: -define void @phiUsesTrunc() nounwind { -entry: - br i1 undef, label %for.body, label %for.end - -for.body: - %iv = phi i32 [ %inc, %for.inc ], [ 1, %entry ] - br i1 undef, label %if.then, label %if.else - -if.then: - br i1 undef, label %if.then33, label %for.inc - -if.then33: - br label %for.inc - -if.else: - br i1 undef, label %if.then97, label %for.inc - -if.then97: - %idxprom100 = sext i32 %iv to i64 - call void @use64(i64 %idxprom100) - br label %for.inc - -for.inc: - %kmin.1 = phi i32 [ %iv, %if.then33 ], [ 0, %if.then ], [ %iv, %if.then97 ], [ 0, %if.else ] - call void @use32(i32 %kmin.1) - %inc = add nsw i32 %iv, 1 - br i1 undef, label %for.body, label %for.end - -for.end: - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/overflow-intrinsics.ll b/llvm/test/Transforms/IndVarSimplify/overflow-intrinsics.ll deleted file mode 100644 index 7715abc8ada..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/overflow-intrinsics.ll +++ /dev/null @@ -1,137 +0,0 @@ -; RUN: opt -S -indvars < %s | FileCheck %s - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -define void @f_sadd(i8* %a) { -; CHECK-LABEL: @f_sadd( -entry: - br label %for.body - -for.cond.cleanup: ; preds = %cont - ret void - -for.body: ; preds = %entry, %cont - %i.04 = phi i32 [ 0, %entry ], [ %2, %cont ] - %idxprom = sext i32 %i.04 to i64 - %arrayidx = getelementptr inbounds i8, i8* %a, i64 %idxprom - store i8 0, i8* %arrayidx, align 1 - %0 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %i.04, i32 1) - %1 = extractvalue { i32, i1 } %0, 1 -; CHECK: for.body: -; CHECK-NOT: @llvm.sadd.with.overflow -; CHECK: br i1 false, label %trap, label %cont, !nosanitize !0 - br i1 %1, label %trap, label %cont, !nosanitize !{} - -trap: ; preds = %for.body - tail call void @llvm.trap() #2, !nosanitize !{} - unreachable, !nosanitize !{} - -cont: ; preds = %for.body - %2 = extractvalue { i32, i1 } %0, 0 - %cmp = icmp slt i32 %2, 16 - br i1 %cmp, label %for.body, label %for.cond.cleanup -} - -define void @f_uadd(i8* %a) { -; CHECK-LABEL: @f_uadd( -entry: - br label %for.body - -for.cond.cleanup: ; preds = %cont - ret void - -for.body: ; preds = %entry, %cont - %i.04 = phi i32 [ 0, %entry ], [ %2, %cont ] - %idxprom = sext i32 %i.04 to i64 - %arrayidx = getelementptr inbounds i8, i8* %a, i64 %idxprom - store i8 0, i8* %arrayidx, align 1 - %0 = tail call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %i.04, i32 1) - %1 = extractvalue { i32, i1 } %0, 1 -; CHECK: for.body: -; CHECK-NOT: @llvm.uadd.with.overflow -; CHECK: br i1 false, label %trap, label %cont, !nosanitize !0 - br i1 %1, label %trap, label %cont, !nosanitize !{} - -trap: ; preds = %for.body - tail call void @llvm.trap(), !nosanitize !{} - unreachable, !nosanitize !{} - -cont: ; preds = %for.body - %2 = extractvalue { i32, i1 } %0, 0 - %cmp = icmp slt i32 %2, 16 - br i1 %cmp, label %for.body, label %for.cond.cleanup -} - -define void @f_ssub(i8* nocapture %a) { -; CHECK-LABEL: @f_ssub( -entry: - br label %for.body - -for.cond.cleanup: ; preds = %cont - ret void - -for.body: ; preds = %entry, %cont - %i.04 = phi i32 [ 15, %entry ], [ %2, %cont ] - %idxprom = sext i32 %i.04 to i64 - %arrayidx = getelementptr inbounds i8, i8* %a, i64 %idxprom - store i8 0, i8* %arrayidx, align 1 - %0 = tail call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 %i.04, i32 1) - %1 = extractvalue { i32, i1 } %0, 1 -; CHECK: for.body: -; CHECK-NOT: @llvm.ssub.with.overflow.i32 -; CHECK: br i1 false, label %trap, label %cont, !nosanitize !0 - br i1 %1, label %trap, label %cont, !nosanitize !{} - -trap: ; preds = %for.body - tail call void @llvm.trap(), !nosanitize !{} - unreachable, !nosanitize !{} - -cont: ; preds = %for.body - %2 = extractvalue { i32, i1 } %0, 0 - %cmp = icmp sgt i32 %2, -1 - br i1 %cmp, label %for.body, label %for.cond.cleanup -} - -define void @f_usub(i8* nocapture %a) { -; CHECK-LABEL: @f_usub( -entry: - br label %for.body - -for.cond.cleanup: ; preds = %cont - ret void - -for.body: ; preds = %entry, %cont - %i.04 = phi i32 [ 15, %entry ], [ %2, %cont ] - %idxprom = sext i32 %i.04 to i64 - %arrayidx = getelementptr inbounds i8, i8* %a, i64 %idxprom - store i8 0, i8* %arrayidx, align 1 - %0 = tail call { i32, i1 } @llvm.usub.with.overflow.i32(i32 %i.04, i32 1) - %1 = extractvalue { i32, i1 } %0, 1 - -; It is theoretically possible to prove this, but SCEV cannot -; represent non-unsigned-wrapping subtraction operations. - -; CHECK: for.body: -; CHECK: [[COND:%[^ ]+]] = extractvalue { i32, i1 } %1, 1 -; CHECK-NEXT: br i1 [[COND]], label %trap, label %cont, !nosanitize !0 - br i1 %1, label %trap, label %cont, !nosanitize !{} - -trap: ; preds = %for.body - tail call void @llvm.trap(), !nosanitize !{} - unreachable, !nosanitize !{} - -cont: ; preds = %for.body - %2 = extractvalue { i32, i1 } %0, 0 - %cmp = icmp sgt i32 %2, -1 - br i1 %cmp, label %for.body, label %for.cond.cleanup -} - -declare { i32, i1 } @llvm.sadd.with.overflow.i32(i32, i32) nounwind readnone -declare { i32, i1 } @llvm.uadd.with.overflow.i32(i32, i32) nounwind readnone -declare { i32, i1 } @llvm.ssub.with.overflow.i32(i32, i32) nounwind readnone -declare { i32, i1 } @llvm.usub.with.overflow.i32(i32, i32) nounwind readnone -declare { i32, i1 } @llvm.smul.with.overflow.i32(i32, i32) nounwind readnone -declare { i32, i1 } @llvm.umul.with.overflow.i32(i32, i32) nounwind readnone - -declare void @llvm.trap() #2 diff --git a/llvm/test/Transforms/IndVarSimplify/phi-uses-value-multiple-times.ll b/llvm/test/Transforms/IndVarSimplify/phi-uses-value-multiple-times.ll deleted file mode 100644 index 519d34d76cb..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/phi-uses-value-multiple-times.ll +++ /dev/null @@ -1,38 +0,0 @@ -; REQUIRES: asserts -; RUN: opt < %s -indvars -disable-output -stats -info-output-file - | FileCheck %s -; Check that IndVarSimplify is not creating unnecessary canonical IVs -; that will never be used. -; CHECK-NOT: indvars - -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" - -@ue = external global i64 - -define i32 @foo() nounwind { -entry: - br label %bb38.i - -bb14.i27: - %t0 = load i64, i64* @ue, align 8 - %t1 = sub i64 %t0, %i.0.i35 - %t2 = add i64 %t1, 1 - br i1 undef, label %bb15.i28, label %bb19.i31 - -bb15.i28: - br label %bb19.i31 - -bb19.i31: - %y.0.i = phi i64 [ %t2, %bb15.i28 ], [ %t2, %bb14.i27 ] - br label %bb35.i - -bb35.i: - br i1 undef, label %bb37.i, label %bb14.i27 - -bb37.i: - %t3 = add i64 %i.0.i35, 1 - br label %bb38.i - -bb38.i: - %i.0.i35 = phi i64 [ 1, %entry ], [ %t3, %bb37.i ] - br label %bb35.i -} diff --git a/llvm/test/Transforms/IndVarSimplify/polynomial-expand.ll b/llvm/test/Transforms/IndVarSimplify/polynomial-expand.ll deleted file mode 100644 index 5708c64d6c8..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/polynomial-expand.ll +++ /dev/null @@ -1,38 +0,0 @@ -; RUN: opt < %s -indvars -disable-output -; PR5073 - -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" - -define void @ctpmv_(float* noalias nocapture %tmp4, i32 %tmp21) nounwind { -bb20: ; preds = %bb19 - br label %bb24 - -bb24: ; preds = %bb40, %bb23 - %tmp25 = phi i32 [ %tmp43, %bb40 ], [ %tmp21, %bb20 ] ; <i32> [#uses=4] - %tmp26 = phi i32 [ %tmp41, %bb40 ], [ undef, %bb20 ] ; <i32> [#uses=2] - %tmp27 = add nsw i32 %tmp26, -1 ; <i32> [#uses=1] - %tmp28 = add nsw i32 %tmp25, -1 ; <i32> [#uses=2] - %tmp29 = icmp sgt i32 %tmp28, 0 ; <i1> [#uses=1] - br i1 %tmp29, label %bb30, label %bb40 - -bb30: ; preds = %bb30, %bb24 - %tmp31 = phi i32 [ %tmp39, %bb30 ], [ %tmp28, %bb24 ] ; <i32> [#uses=2] - %tmp32 = phi i32 [ %tmp37, %bb30 ], [ %tmp27, %bb24 ] ; <i32> [#uses=2] - %tmp33 = sext i32 %tmp32 to i64 ; <i64> [#uses=1] - %tmp35 = getelementptr float, float* %tmp4, i64 %tmp33 ; <%0*> [#uses=1] - %tmp36 = load float, float* %tmp35, align 4 ; <%0> [#uses=0] - %tmp37 = add nsw i32 %tmp32, -1 ; <i32> [#uses=1] - %tmp39 = add nsw i32 %tmp31, -1 ; <i32> [#uses=1] - %tmp38 = icmp eq i32 %tmp31, 1 ; <i1> [#uses=1] - br i1 %tmp38, label %bb40, label %bb30 - -bb40: ; preds = %bb30, %bb24 - %tmp41 = sub i32 %tmp26, %tmp25 ; <i32> [#uses=1] - %tmp43 = add nsw i32 %tmp25, -1 ; <i32> [#uses=1] - %tmp42 = icmp eq i32 %tmp25, 1 ; <i1> [#uses=1] - br i1 %tmp42, label %bb46, label %bb24 - -bb46: ; preds = %bb40, %bb23, %bb19 - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/post-inc-range.ll b/llvm/test/Transforms/IndVarSimplify/post-inc-range.ll deleted file mode 100644 index d859eb28e78..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/post-inc-range.ll +++ /dev/null @@ -1,289 +0,0 @@ -; RUN: opt < %s -indvars -indvars-post-increment-ranges -S | FileCheck %s - -target datalayout = "p:64:64:64-n32:64" - -; When the IV in this loop is widened we want to widen this use as well: -; icmp slt i32 %i.inc, %limit -; In order to do this indvars need to prove that the narrow IV def (%i.inc) -; is not-negative from the range check inside of the loop. -define void @test(i32* %base, i32 %limit, i32 %start) { -; CHECK-LABEL: @test( -; CHECK-NOT: trunc - -for.body.lr.ph: - br label %for.body - -for.body: - %i = phi i32 [ %start, %for.body.lr.ph ], [ %i.inc, %for.inc ] - %within_limits = icmp ult i32 %i, 64 - br i1 %within_limits, label %continue, label %for.end - -continue: - %i.i64 = zext i32 %i to i64 - %arrayidx = getelementptr inbounds i32, i32* %base, i64 %i.i64 - %val = load i32, i32* %arrayidx, align 4 - br label %for.inc - -for.inc: - %i.inc = add nsw nuw i32 %i, 1 - %cmp = icmp slt i32 %i.inc, %limit - br i1 %cmp, label %for.body, label %for.end - -for.end: - br label %exit - -exit: - ret void -} - -define void @test_false_edge(i32* %base, i32 %limit, i32 %start) { -; CHECK-LABEL: @test_false_edge( -; CHECK-NOT: trunc - -for.body.lr.ph: - br label %for.body - -for.body: - %i = phi i32 [ %start, %for.body.lr.ph ], [ %i.inc, %for.inc ] - %out_of_bounds = icmp ugt i32 %i, 64 - br i1 %out_of_bounds, label %for.end, label %continue - -continue: - %i.i64 = zext i32 %i to i64 - %arrayidx = getelementptr inbounds i32, i32* %base, i64 %i.i64 - %val = load i32, i32* %arrayidx, align 4 - br label %for.inc - -for.inc: - %i.inc = add nsw nuw i32 %i, 1 - %cmp = icmp slt i32 %i.inc, %limit - br i1 %cmp, label %for.body, label %for.end - -for.end: - br label %exit - -exit: - ret void -} - -define void @test_range_metadata(i32* %array_length_ptr, i32* %base, - i32 %limit, i32 %start) { -; CHECK-LABEL: @test_range_metadata( -; CHECK-NOT: trunc - -for.body.lr.ph: - br label %for.body - -for.body: - %i = phi i32 [ %start, %for.body.lr.ph ], [ %i.inc, %for.inc ] - %array_length = load i32, i32* %array_length_ptr, !range !{i32 0, i32 64 } - %within_limits = icmp ult i32 %i, %array_length - br i1 %within_limits, label %continue, label %for.end - -continue: - %i.i64 = zext i32 %i to i64 - %arrayidx = getelementptr inbounds i32, i32* %base, i64 %i.i64 - %val = load i32, i32* %arrayidx, align 4 - br label %for.inc - -for.inc: - %i.inc = add nsw nuw i32 %i, 1 - %cmp = icmp slt i32 %i.inc, %limit - br i1 %cmp, label %for.body, label %for.end - -for.end: - br label %exit - -exit: - ret void -} - -; Negative version of the test above, we don't know anything about -; array_length_ptr range. -define void @test_neg(i32* %array_length_ptr, i32* %base, - i32 %limit, i32 %start) { -; CHECK-LABEL: @test_neg( -; CHECK: trunc i64 - -for.body.lr.ph: - br label %for.body - -for.body: - %i = phi i32 [ %start, %for.body.lr.ph ], [ %i.inc, %for.inc ] - %array_length = load i32, i32* %array_length_ptr - %within_limits = icmp ult i32 %i, %array_length - br i1 %within_limits, label %continue, label %for.end - -continue: - %i.i64 = zext i32 %i to i64 - %arrayidx = getelementptr inbounds i32, i32* %base, i64 %i.i64 - %val = load i32, i32* %arrayidx, align 4 - br label %for.inc - -for.inc: - %i.inc = add nsw nuw i32 %i, 1 - %cmp = icmp slt i32 %i.inc, %limit - br i1 %cmp, label %for.body, label %for.end - -for.end: - br label %exit - -exit: - ret void -} - -define void @test_transitive_use(i32* %base, i32 %limit, i32 %start) { -; CHECK-LABEL: @test_transitive_use( -; CHECK-NOT: trunc -; CHECK: %result = icmp slt i64 - -for.body.lr.ph: - br label %for.body - -for.body: - %i = phi i32 [ %start, %for.body.lr.ph ], [ %i.inc, %for.inc ] - %within_limits = icmp ult i32 %i, 64 - br i1 %within_limits, label %continue, label %for.end - -continue: - %i.mul.3 = mul nsw nuw i32 %i, 3 - %mul_within = icmp ult i32 %i.mul.3, 64 - br i1 %mul_within, label %guarded, label %continue.2 - -guarded: - %i.mul.3.inc = add nsw nuw i32 %i.mul.3, 1 - %result = icmp slt i32 %i.mul.3.inc, %limit - br i1 %result, label %continue.2, label %for.end - -continue.2: - %i.i64 = zext i32 %i to i64 - %arrayidx = getelementptr inbounds i32, i32* %base, i64 %i.i64 - %val = load i32, i32* %arrayidx, align 4 - br label %for.inc - -for.inc: - %i.inc = add nsw nuw i32 %i, 1 - %cmp = icmp slt i32 %i.inc, %limit - br i1 %cmp, label %for.body, label %for.end - - -for.end: - br label %exit - -exit: - ret void -} - -declare void @llvm.experimental.guard(i1, ...) - -define void @test_guard_one_bb(i32* %base, i32 %limit, i32 %start) { -; CHECK-LABEL: @test_guard_one_bb( -; CHECK-NOT: trunc -; CHECK-NOT: icmp slt i32 - -for.body.lr.ph: - br label %for.body - -for.body: - %i = phi i32 [ %start, %for.body.lr.ph ], [ %i.inc, %for.body ] - %within_limits = icmp ult i32 %i, 64 - %i.i64 = zext i32 %i to i64 - %arrayidx = getelementptr inbounds i32, i32* %base, i64 %i.i64 - %val = load i32, i32* %arrayidx, align 4 - call void(i1, ...) @llvm.experimental.guard(i1 %within_limits) [ "deopt"() ] - %i.inc = add nsw nuw i32 %i, 1 - %cmp = icmp slt i32 %i.inc, %limit - br i1 %cmp, label %for.body, label %for.end - -for.end: - br label %exit - -exit: - ret void -} - -define void @test_guard_in_the_same_bb(i32* %base, i32 %limit, i32 %start) { -; CHECK-LABEL: @test_guard_in_the_same_bb( -; CHECK-NOT: trunc -; CHECK-NOT: icmp slt i32 - -for.body.lr.ph: - br label %for.body - -for.body: - %i = phi i32 [ %start, %for.body.lr.ph ], [ %i.inc, %for.inc ] - %within_limits = icmp ult i32 %i, 64 - %i.i64 = zext i32 %i to i64 - %arrayidx = getelementptr inbounds i32, i32* %base, i64 %i.i64 - %val = load i32, i32* %arrayidx, align 4 - br label %for.inc - -for.inc: - call void(i1, ...) @llvm.experimental.guard(i1 %within_limits) [ "deopt"() ] - %i.inc = add nsw nuw i32 %i, 1 - %cmp = icmp slt i32 %i.inc, %limit - br i1 %cmp, label %for.body, label %for.end - -for.end: - br label %exit - -exit: - ret void -} - -define void @test_guard_in_idom(i32* %base, i32 %limit, i32 %start) { -; CHECK-LABEL: @test_guard_in_idom( -; CHECK-NOT: trunc -; CHECK-NOT: icmp slt i32 - -for.body.lr.ph: - br label %for.body - -for.body: - %i = phi i32 [ %start, %for.body.lr.ph ], [ %i.inc, %for.inc ] - %within_limits = icmp ult i32 %i, 64 - call void(i1, ...) @llvm.experimental.guard(i1 %within_limits) [ "deopt"() ] - %i.i64 = zext i32 %i to i64 - %arrayidx = getelementptr inbounds i32, i32* %base, i64 %i.i64 - %val = load i32, i32* %arrayidx, align 4 - br label %for.inc - -for.inc: - %i.inc = add nsw nuw i32 %i, 1 - %cmp = icmp slt i32 %i.inc, %limit - br i1 %cmp, label %for.body, label %for.end - -for.end: - br label %exit - -exit: - ret void -} - -define void @test_guard_merge_ranges(i32* %base, i32 %limit, i32 %start) { -; CHECK-LABEL: @test_guard_merge_ranges( -; CHECK-NOT: trunc -; CHECK-NOT: icmp slt i32 - -for.body.lr.ph: - br label %for.body - -for.body: - %i = phi i32 [ %start, %for.body.lr.ph ], [ %i.inc, %for.body ] - %within_limits.1 = icmp ult i32 %i, 64 - call void(i1, ...) @llvm.experimental.guard(i1 %within_limits.1) [ "deopt"() ] - %within_limits.2 = icmp ult i32 %i, 2147483647 - call void(i1, ...) @llvm.experimental.guard(i1 %within_limits.2) [ "deopt"() ] - %i.i64 = zext i32 %i to i64 - %arrayidx = getelementptr inbounds i32, i32* %base, i64 %i.i64 - %val = load i32, i32* %arrayidx, align 4 - %i.inc = add nsw nuw i32 %i, 1 - %cmp = icmp slt i32 %i.inc, %limit - br i1 %cmp, label %for.body, label %for.end - -for.end: - br label %exit - -exit: - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr18223.ll b/llvm/test/Transforms/IndVarSimplify/pr18223.ll deleted file mode 100644 index f922aa424a1..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr18223.ll +++ /dev/null @@ -1,30 +0,0 @@ -; RUN: opt -indvars -S < %s | FileCheck %s - -; indvars should transform the phi node pair from the for-loop -; CHECK-LABEL: @main( -; CHECK: ret = phi i32 [ 0, %entry ], [ 0, {{.*}} ] - -@c = common global i32 0, align 4 - -define i32 @main() #0 { -entry: - %0 = load i32, i32* @c, align 4 - %tobool = icmp eq i32 %0, 0 - br i1 %tobool, label %for.body, label %exit - -for.body: - %inc2 = phi i32 [ 0, %entry ], [ %inc, %for.inc ] - %sub = add i32 %inc2, -1 - %cmp1 = icmp uge i32 %sub, %inc2 - %conv = zext i1 %cmp1 to i32 - br label %for.inc - -for.inc: - %inc = add nsw i32 %inc2, 1 - %cmp = icmp slt i32 %inc, 5 - br i1 %cmp, label %for.body, label %exit - -exit: - %ret = phi i32 [ 0, %entry ], [ %conv, %for.inc ] - ret i32 %ret -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr20680.ll b/llvm/test/Transforms/IndVarSimplify/pr20680.ll deleted file mode 100644 index 2c9eb54a789..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr20680.ll +++ /dev/null @@ -1,223 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -; Provide legal integer types. -target datalayout = "n8:16:32:64" - - -@a = common global i32 0, align 4 -@c = common global i32 0, align 4 -@b = common global i32 0, align 4 - -define void @f() { -; CHECK-LABEL: @f( -; CHECK-LABEL: entry: -; CHECK: br label %[[for_cond2_preheader:.*]] - -; CHECK: [[for_cond2_preheader]]: -; CHECK-NEXT: %[[indvars_iv:.*]] = phi i32 [ %[[indvars_iv_next:.*]], %[[for_inc13:.*]] ], [ -14, %entry ] -; br i1 {{.*}}, label %[[for_inc13]], label % -entry: - %0 = load i32, i32* @a, align 4 - %tobool2 = icmp eq i32 %0, 0 - %1 = load i32, i32* @a, align 4 - %tobool = icmp eq i32 %1, 0 - br label %for.cond2.preheader - -for.cond2.preheader: ; preds = %for.inc13, %entry - %storemerge15 = phi i8 [ -14, %entry ], [ %inc14, %for.inc13 ] - br i1 %tobool2, label %for.inc13, label %for.body3.lr.ph - -for.body3.lr.ph: ; preds = %for.cond2.preheader - %tobool5 = icmp eq i8 %storemerge15, 0 - %conv7 = sext i8 %storemerge15 to i32 - %2 = add nsw i32 %conv7, 1 - %3 = icmp ult i32 %2, 3 - %div = select i1 %3, i32 %conv7, i32 0 - br i1 %tobool5, label %for.body3.lr.ph.split.us, label %for.body3.lr.ph.for.body3.lr.ph.split_crit_edge - -for.body3.lr.ph.for.body3.lr.ph.split_crit_edge: ; preds = %for.body3.lr.ph - br label %for.body3.lr.ph.split - -for.body3.lr.ph.split.us: ; preds = %for.body3.lr.ph - br i1 %tobool, label %for.body3.lr.ph.split.us.split.us, label %for.body3.lr.ph.split.us.for.body3.lr.ph.split.us.split_crit_edge - -for.body3.lr.ph.split.us.for.body3.lr.ph.split.us.split_crit_edge: ; preds = %for.body3.lr.ph.split.us - br label %for.body3.lr.ph.split.us.split - -for.body3.lr.ph.split.us.split.us: ; preds = %for.body3.lr.ph.split.us - br label %for.body3.us.us - -for.body3.us.us: ; preds = %for.cond2.loopexit.us.us, %for.body3.lr.ph.split.us.split.us - br i1 true, label %cond.false.us.us, label %cond.end.us.us - -cond.false.us.us: ; preds = %for.body3.us.us - br label %cond.end.us.us - -cond.end.us.us: ; preds = %cond.false.us.us, %for.body3.us.us - %cond.us.us = phi i32 [ %div, %cond.false.us.us ], [ %conv7, %for.body3.us.us ] - %4 = load i32, i32* @b, align 4 - %cmp91.us.us = icmp slt i32 %4, 1 - br i1 %cmp91.us.us, label %for.inc.lr.ph.us.us, label %for.cond2.loopexit.us.us - -for.cond2.loopexit.us.us: ; preds = %for.cond8.for.cond2.loopexit_crit_edge.us.us, %cond.end.us.us - br i1 true, label %for.cond2.for.inc13_crit_edge.us-lcssa.us.us-lcssa.us, label %for.body3.us.us - -for.inc.lr.ph.us.us: ; preds = %cond.end.us.us - br label %for.inc.us.us - -for.cond8.for.cond2.loopexit_crit_edge.us.us: ; preds = %for.inc.us.us - %inc.lcssa.us.us = phi i32 [ %inc.us.us, %for.inc.us.us ] - store i32 %inc.lcssa.us.us, i32* @b, align 4 - br label %for.cond2.loopexit.us.us - -for.inc.us.us: ; preds = %for.inc.us.us, %for.inc.lr.ph.us.us - %5 = phi i32 [ %4, %for.inc.lr.ph.us.us ], [ %inc.us.us, %for.inc.us.us ] - %inc.us.us = add nsw i32 %5, 1 - %cmp9.us.us = icmp slt i32 %inc.us.us, 1 - br i1 %cmp9.us.us, label %for.inc.us.us, label %for.cond8.for.cond2.loopexit_crit_edge.us.us - -for.cond2.for.inc13_crit_edge.us-lcssa.us.us-lcssa.us: ; preds = %for.cond2.loopexit.us.us - %cond.lcssa.ph.us.ph.us = phi i32 [ %cond.us.us, %for.cond2.loopexit.us.us ] - br label %for.cond2.for.inc13_crit_edge.us-lcssa.us - -for.body3.lr.ph.split.us.split: ; preds = %for.body3.lr.ph.split.us.for.body3.lr.ph.split.us.split_crit_edge - br label %for.body3.us - -for.body3.us: ; preds = %for.cond2.loopexit.us, %for.body3.lr.ph.split.us.split - br i1 true, label %cond.false.us, label %cond.end.us - -cond.false.us: ; preds = %for.body3.us - br label %cond.end.us - -cond.end.us: ; preds = %cond.false.us, %for.body3.us - %cond.us = phi i32 [ %div, %cond.false.us ], [ %conv7, %for.body3.us ] - %6 = load i32, i32* @b, align 4 - %cmp91.us = icmp slt i32 %6, 1 - br i1 %cmp91.us, label %for.inc.lr.ph.us, label %for.cond2.loopexit.us - -for.inc.us: ; preds = %for.inc.lr.ph.us, %for.inc.us - %7 = phi i32 [ %6, %for.inc.lr.ph.us ], [ %inc.us, %for.inc.us ] - %inc.us = add nsw i32 %7, 1 - %cmp9.us = icmp slt i32 %inc.us, 1 - br i1 %cmp9.us, label %for.inc.us, label %for.cond8.for.cond2.loopexit_crit_edge.us - -for.cond2.loopexit.us: ; preds = %for.cond8.for.cond2.loopexit_crit_edge.us, %cond.end.us - br i1 false, label %for.cond2.for.inc13_crit_edge.us-lcssa.us.us-lcssa, label %for.body3.us - -for.inc.lr.ph.us: ; preds = %cond.end.us - br label %for.inc.us - -for.cond8.for.cond2.loopexit_crit_edge.us: ; preds = %for.inc.us - %inc.lcssa.us = phi i32 [ %inc.us, %for.inc.us ] - store i32 %inc.lcssa.us, i32* @b, align 4 - br label %for.cond2.loopexit.us - -for.cond2.for.inc13_crit_edge.us-lcssa.us.us-lcssa: ; preds = %for.cond2.loopexit.us - %cond.lcssa.ph.us.ph = phi i32 [ %cond.us, %for.cond2.loopexit.us ] - br label %for.cond2.for.inc13_crit_edge.us-lcssa.us - -for.cond2.for.inc13_crit_edge.us-lcssa.us: ; preds = %for.cond2.for.inc13_crit_edge.us-lcssa.us.us-lcssa, %for.cond2.for.inc13_crit_edge.us-lcssa.us.us-lcssa.us - %cond.lcssa.ph.us = phi i32 [ %cond.lcssa.ph.us.ph, %for.cond2.for.inc13_crit_edge.us-lcssa.us.us-lcssa ], [ %cond.lcssa.ph.us.ph.us, %for.cond2.for.inc13_crit_edge.us-lcssa.us.us-lcssa.us ] - br label %for.cond2.for.inc13_crit_edge - -for.body3.lr.ph.split: ; preds = %for.body3.lr.ph.for.body3.lr.ph.split_crit_edge - br i1 %tobool, label %for.body3.lr.ph.split.split.us, label %for.body3.lr.ph.split.for.body3.lr.ph.split.split_crit_edge - -for.body3.lr.ph.split.for.body3.lr.ph.split.split_crit_edge: ; preds = %for.body3.lr.ph.split - br label %for.body3.lr.ph.split.split - -for.body3.lr.ph.split.split.us: ; preds = %for.body3.lr.ph.split - br label %for.body3.us3 - -for.body3.us3: ; preds = %for.cond2.loopexit.us11, %for.body3.lr.ph.split.split.us - br i1 false, label %cond.false.us4, label %cond.end.us5 - -cond.false.us4: ; preds = %for.body3.us3 - br label %cond.end.us5 - -cond.end.us5: ; preds = %cond.false.us4, %for.body3.us3 - %cond.us6 = phi i32 [ %div, %cond.false.us4 ], [ %conv7, %for.body3.us3 ] - %8 = load i32, i32* @b, align 4 - %cmp91.us7 = icmp slt i32 %8, 1 - br i1 %cmp91.us7, label %for.inc.lr.ph.us12, label %for.cond2.loopexit.us11 - -for.inc.us8: ; preds = %for.inc.lr.ph.us12, %for.inc.us8 - %9 = phi i32 [ %8, %for.inc.lr.ph.us12 ], [ %inc.us9, %for.inc.us8 ] - %inc.us9 = add nsw i32 %9, 1 - %cmp9.us10 = icmp slt i32 %inc.us9, 1 - br i1 %cmp9.us10, label %for.inc.us8, label %for.cond8.for.cond2.loopexit_crit_edge.us13 - -for.cond2.loopexit.us11: ; preds = %for.cond8.for.cond2.loopexit_crit_edge.us13, %cond.end.us5 - br i1 true, label %for.cond2.for.inc13_crit_edge.us-lcssa.us-lcssa.us, label %for.body3.us3 - -for.inc.lr.ph.us12: ; preds = %cond.end.us5 - br label %for.inc.us8 - -for.cond8.for.cond2.loopexit_crit_edge.us13: ; preds = %for.inc.us8 - %inc.lcssa.us14 = phi i32 [ %inc.us9, %for.inc.us8 ] - store i32 %inc.lcssa.us14, i32* @b, align 4 - br label %for.cond2.loopexit.us11 - -for.cond2.for.inc13_crit_edge.us-lcssa.us-lcssa.us: ; preds = %for.cond2.loopexit.us11 - %cond.lcssa.ph.ph.us = phi i32 [ %cond.us6, %for.cond2.loopexit.us11 ] - br label %for.cond2.for.inc13_crit_edge.us-lcssa - -for.body3.lr.ph.split.split: ; preds = %for.body3.lr.ph.split.for.body3.lr.ph.split.split_crit_edge - br label %for.body3 - -for.cond8.for.cond2.loopexit_crit_edge: ; preds = %for.inc - %inc.lcssa = phi i32 [ %inc, %for.inc ] - store i32 %inc.lcssa, i32* @b, align 4 - br label %for.cond2.loopexit - -for.cond2.loopexit: ; preds = %cond.end, %for.cond8.for.cond2.loopexit_crit_edge - br i1 false, label %for.cond2.for.inc13_crit_edge.us-lcssa.us-lcssa, label %for.body3 - -for.body3: ; preds = %for.cond2.loopexit, %for.body3.lr.ph.split.split - br i1 false, label %cond.false, label %cond.end - -cond.false: ; preds = %for.body3 - br label %cond.end - -cond.end: ; preds = %cond.false, %for.body3 - %cond = phi i32 [ %div, %cond.false ], [ %conv7, %for.body3 ] - %10 = load i32, i32* @b, align 4 - %cmp91 = icmp slt i32 %10, 1 - br i1 %cmp91, label %for.inc.lr.ph, label %for.cond2.loopexit - -for.inc.lr.ph: ; preds = %cond.end - br label %for.inc - -for.inc: ; preds = %for.inc, %for.inc.lr.ph - %11 = phi i32 [ %10, %for.inc.lr.ph ], [ %inc, %for.inc ] - %inc = add nsw i32 %11, 1 - %cmp9 = icmp slt i32 %inc, 1 - br i1 %cmp9, label %for.inc, label %for.cond8.for.cond2.loopexit_crit_edge - -for.cond2.for.inc13_crit_edge.us-lcssa.us-lcssa: ; preds = %for.cond2.loopexit - %cond.lcssa.ph.ph = phi i32 [ %cond, %for.cond2.loopexit ] - br label %for.cond2.for.inc13_crit_edge.us-lcssa - -for.cond2.for.inc13_crit_edge.us-lcssa: ; preds = %for.cond2.for.inc13_crit_edge.us-lcssa.us-lcssa, %for.cond2.for.inc13_crit_edge.us-lcssa.us-lcssa.us - %cond.lcssa.ph = phi i32 [ %cond.lcssa.ph.ph, %for.cond2.for.inc13_crit_edge.us-lcssa.us-lcssa ], [ %cond.lcssa.ph.ph.us, %for.cond2.for.inc13_crit_edge.us-lcssa.us-lcssa.us ] - br label %for.cond2.for.inc13_crit_edge - -for.cond2.for.inc13_crit_edge: ; preds = %for.cond2.for.inc13_crit_edge.us-lcssa, %for.cond2.for.inc13_crit_edge.us-lcssa.us - %cond.lcssa = phi i32 [ %cond.lcssa.ph, %for.cond2.for.inc13_crit_edge.us-lcssa ], [ %cond.lcssa.ph.us, %for.cond2.for.inc13_crit_edge.us-lcssa.us ] - store i32 %cond.lcssa, i32* @c, align 4 - br label %for.inc13 - -; CHECK: [[for_inc13]]: -; CHECK-NEXT: %[[indvars_iv_next]] = add nsw i32 %[[indvars_iv]], 1 -; CHECK-NEXT: %[[exitcond4:.*]] = icmp ne i32 %[[indvars_iv_next]], 0 -; CHECK-NEXT: br i1 %[[exitcond4]], label %[[for_cond2_preheader]], label %[[for_end15:.*]] -for.inc13: ; preds = %for.cond2.for.inc13_crit_edge, %for.cond2.preheader - %inc14 = add i8 %storemerge15, 1 - %cmp = icmp ugt i8 %inc14, 50 - br i1 %cmp, label %for.cond2.preheader, label %for.end15 - -; CHECK: [[for_end15]]: -; CHECK-NEXT: ret void -for.end15: ; preds = %for.inc13 - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr22222.ll b/llvm/test/Transforms/IndVarSimplify/pr22222.ll deleted file mode 100644 index d1f04906ae4..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr22222.ll +++ /dev/null @@ -1,46 +0,0 @@ -; RUN: opt -indvars -S < %s | FileCheck %s - -@b = common global i32 0, align 4 -@c = common global i32 0, align 4 -@a = common global i32 0, align 4 - -declare void @abort() #1 - -; Function Attrs: nounwind ssp uwtable -define i32 @main() { -entry: - %a.promoted13 = load i32, i32* @a, align 4 - br label %for.cond1.preheader - -for.cond1.preheader: ; preds = %entry, %for.end - %or.lcssa14 = phi i32 [ %a.promoted13, %entry ], [ %or.lcssa, %for.end ] - %d.010 = phi i32 [ 1, %entry ], [ 0, %for.end ] - br label %for.body3 - -for.body3: ; preds = %for.cond1.preheader, %for.body3 - %inc12 = phi i32 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] - %or11 = phi i32 [ %or.lcssa14, %for.cond1.preheader ], [ %or, %for.body3 ] -; CHECK-NOT: sub nuw i32 %inc12, %d.010 -; CHECK: sub i32 %inc12, %d.010 - %add = sub i32 %inc12, %d.010 - %or = or i32 %or11, %add - %inc = add i32 %inc12, 1 - br i1 false, label %for.body3, label %for.end - -for.end: ; preds = %for.body3 - %or.lcssa = phi i32 [ %or, %for.body3 ] - br i1 false, label %for.cond1.preheader, label %for.end6 - -for.end6: ; preds = %for.end - %or.lcssa.lcssa = phi i32 [ %or.lcssa, %for.end ] - store i32 %or.lcssa.lcssa, i32* @a, align 4 - %cmp7 = icmp eq i32 %or.lcssa.lcssa, -1 - br i1 %cmp7, label %if.end, label %if.then - -if.then: ; preds = %for.end6 - tail call void @abort() #2 - unreachable - -if.end: ; preds = %for.end6 - ret i32 0 -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr24356.ll b/llvm/test/Transforms/IndVarSimplify/pr24356.ll deleted file mode 100644 index eac4204c0e1..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr24356.ll +++ /dev/null @@ -1,63 +0,0 @@ -; RUN: opt -S -indvars < %s | FileCheck %s - -target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-apple-macosx10.10.0" - -@a = common global i32 0, align 4 - -; Function Attrs: nounwind ssp uwtable -define void @fn1() { -; CHECK-LABEL: @fn1( -bb: - br label %bb4.preheader - -bb4.preheader: ; preds = %bb, %bb16 -; CHECK-LABEL: bb4.preheader: - %b.03 = phi i8 [ 0, %bb ], [ %tmp17, %bb16 ] -; CHECK: %tmp9 = icmp ugt i8 %b.03, 1 -; CHECK-NOT: %tmp9 = icmp ugt i8 0, 1 - - %tmp9 = icmp ugt i8 %b.03, 1 - br i1 %tmp9, label %bb4.preheader.bb18.loopexit.split_crit_edge, label %bb4.preheader.bb4.preheader.split_crit_edge - -bb4.preheader.bb4.preheader.split_crit_edge: ; preds = %bb4.preheader - br label %bb4.preheader.split - -bb4.preheader.bb18.loopexit.split_crit_edge: ; preds = %bb4.preheader - store i32 0, i32* @a, align 4 - br label %bb18.loopexit.split - -bb4.preheader.split: ; preds = %bb4.preheader.bb4.preheader.split_crit_edge - br label %bb7 - -bb4: ; preds = %bb7 - %tmp6 = icmp slt i32 %storemerge2, 0 - br i1 %tmp6, label %bb7, label %bb16 - -bb7: ; preds = %bb4.preheader.split, %bb4 - %storemerge2 = phi i32 [ 0, %bb4.preheader.split ], [ %tmp14, %bb4 ] - %tmp14 = add nsw i32 %storemerge2, 1 - br i1 false, label %bb18.loopexit, label %bb4 - -bb16: ; preds = %bb4 - %tmp14.lcssa5 = phi i32 [ %tmp14, %bb4 ] - %tmp17 = add i8 %b.03, -1 - %tmp2 = icmp eq i8 %tmp17, -2 - br i1 %tmp2, label %bb18.loopexit1, label %bb4.preheader - -bb18.loopexit: ; preds = %bb7 - br label %bb18.loopexit.split - -bb18.loopexit.split: ; preds = %bb4.preheader.bb18.loopexit.split_crit_edge, %bb18.loopexit - br label %bb18 - -bb18.loopexit1: ; preds = %bb16 - %tmp14.lcssa5.lcssa = phi i32 [ %tmp14.lcssa5, %bb16 ] - store i32 %tmp14.lcssa5.lcssa, i32* @a, align 4 - br label %bb18 - -bb18: ; preds = %bb18.loopexit1, %bb18.loopexit.split - ret void -} - -declare void @abort() diff --git a/llvm/test/Transforms/IndVarSimplify/pr24783.ll b/llvm/test/Transforms/IndVarSimplify/pr24783.ll deleted file mode 100644 index 2c19aada35e..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr24783.ll +++ /dev/null @@ -1,27 +0,0 @@ -; RUN: opt -S -indvars < %s | FileCheck %s - -target datalayout = "E-m:e-i64:64-n32:64" -target triple = "powerpc64-unknown-linux-gnu" - -define void @f(i32* %end.s, i8** %loc, i32 %p) { -; CHECK-LABEL: @f( -entry: - %end = getelementptr inbounds i32, i32* %end.s, i32 %p - %init = bitcast i32* %end.s to i8* - br label %while.body.i - -while.body.i: - %ptr = phi i8* [ %ptr.inc, %while.body.i ], [ %init, %entry ] - %ptr.inc = getelementptr inbounds i8, i8* %ptr, i8 1 - %ptr.inc.cast = bitcast i8* %ptr.inc to i32* - %cmp.i = icmp eq i32* %ptr.inc.cast, %end - br i1 %cmp.i, label %loop.exit, label %while.body.i - -loop.exit: -; CHECK: loop.exit: -; CHECK: [[END_BCASTED:%[a-z0-9]+]] = bitcast i32* %end to i8* -; CHECK: store i8* [[END_BCASTED]], i8** %loc - %ptr.inc.lcssa = phi i8* [ %ptr.inc, %while.body.i ] - store i8* %ptr.inc.lcssa, i8** %loc - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr24804.ll b/llvm/test/Transforms/IndVarSimplify/pr24804.ll deleted file mode 100644 index 6f89481853a..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr24804.ll +++ /dev/null @@ -1,25 +0,0 @@ -; RUN: opt -indvars -loop-idiom -loop-deletion -S < %s | FileCheck %s - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -; Checking for a crash - -define void @f(i32* %a) { -; CHECK-LABEL: @f( -entry: - br label %for.cond - -for.cond: ; preds = %for.inc, %for.cond, %entry - %iv = phi i32 [ 0, %entry ], [ %add, %for.inc ], [ %iv, %for.cond ] - %add = add nsw i32 %iv, 1 - %idxprom = sext i32 %add to i64 - %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom - br i1 undef, label %for.cond, label %for.inc - -for.inc: ; preds = %for.cond - br i1 undef, label %for.cond, label %for.end - -for.end: ; preds = %for.inc - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr24952.ll b/llvm/test/Transforms/IndVarSimplify/pr24952.ll deleted file mode 100644 index c430cae98f5..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr24952.ll +++ /dev/null @@ -1,27 +0,0 @@ -; RUN: opt -indvars -S < %s | FileCheck %s - -declare void @use(i1) - -define void @f() { -; CHECK-LABEL: @f( - entry: - %x = alloca i32 - %y = alloca i32 - br label %loop - - loop: - %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] - %iv.inc = add i32 %iv, 1 - - %x.gep = getelementptr i32, i32* %x, i32 %iv - %eql = icmp eq i32* %x.gep, %y -; CHECK-NOT: @use(i1 true) - call void @use(i1 %eql) - - ; %be.cond deliberately 'false' -- we want want the trip count to be 0. - %be.cond = icmp ult i32 %iv, 0 - br i1 %be.cond, label %loop, label %leave - - leave: - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr24956.ll b/llvm/test/Transforms/IndVarSimplify/pr24956.ll deleted file mode 100644 index 58688912cc3..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr24956.ll +++ /dev/null @@ -1,37 +0,0 @@ -; RUN: opt -S -indvars < %s | FileCheck %s - -; Check that this test does not crash. - -target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-apple-macosx10.10.0" - -define void @re_update_line(i8* %new) { -; CHECK: @re_update_line( -entry: - %incdec.ptr6 = getelementptr inbounds i8, i8* %new, i64 1 - br label %for.cond.11.preheader - -for.cond.11.preheader: ; preds = %for.inc.26, %entry - %n.154 = phi i8* [ %new, %entry ], [ %incdec.ptr27, %for.inc.26 ] - %cmp12.52 = icmp ult i8* %n.154, %incdec.ptr6 - br i1 %cmp12.52, label %land.rhs.16.lr.ph, label %for.inc.26 - -land.rhs.16.lr.ph: ; preds = %for.cond.11.preheader - br label %land.rhs.16 - -for.cond.11: ; preds = %land.rhs.16 - %incdec.ptr24 = getelementptr inbounds i8, i8* %p.053, i64 1 - %cmp12 = icmp ult i8* %p.053, %new - br i1 %cmp12, label %land.rhs.16, label %for.inc.26 - -land.rhs.16: ; preds = %for.cond.11, %land.rhs.16.lr.ph - %p.053 = phi i8* [ %n.154, %land.rhs.16.lr.ph ], [ %incdec.ptr24, %for.cond.11 ] - br i1 undef, label %for.cond.11, label %for.inc.26 - -for.inc.26: ; preds = %land.rhs.16, %for.cond.11, %for.cond.11.preheader - %incdec.ptr27 = getelementptr inbounds i8, i8* %n.154, i64 1 - br i1 false, label %for.cond.11.preheader, label %for.end.28 - -for.end.28: ; preds = %for.inc.26 - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr25047.ll b/llvm/test/Transforms/IndVarSimplify/pr25047.ll deleted file mode 100644 index dc39a78c7eb..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr25047.ll +++ /dev/null @@ -1,49 +0,0 @@ -; RUN: opt -indvars -S < %s | FileCheck %s - -target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-apple-macosx10.11.0" - -define void @fn1(i1 %c0, i1 %c1) { -; CHECK-LABEL: @fn1( -entry: - br i1 %c0, label %for.end.34, label %for.cond.1thread-pre-split - -for.cond.loopexit: ; preds = %for.end.29, %for.end.7 - %f.lcssa = phi i32 [ %f.1, %for.end.29 ], [ %f.1, %for.end.7 ] - br i1 %c1, label %for.end.34, label %for.cond.1thread-pre-split - -for.cond.1thread-pre-split: ; preds = %for.cond.loopexit, %entry - %f.047 = phi i32 [ %f.lcssa, %for.cond.loopexit ], [ 0, %entry ] - br label %for.cond.1 - -for.cond.1: ; preds = %for.cond.1, %for.cond.1thread-pre-split - br i1 %c1, label %for.cond.4, label %for.cond.1 - -for.cond.4: ; preds = %for.end.29, %for.cond.1 - %f.1 = phi i32 [ 0, %for.end.29 ], [ %f.047, %for.cond.1 ] - br label %for.cond.5 - -for.cond.5: ; preds = %for.cond.5, %for.cond.4 - %h.0 = phi i32 [ 0, %for.cond.4 ], [ %inc, %for.cond.5 ] - %cmp = icmp slt i32 %h.0, 1 - %inc = add nsw i32 %h.0, 1 - br i1 %cmp, label %for.cond.5, label %for.end.7 - -for.end.7: ; preds = %for.cond.5 - %g.lcssa = phi i32 [ %h.0, %for.cond.5 ] - %tobool10 = icmp eq i32 %g.lcssa, 0 - br i1 %tobool10, label %for.end.8, label %for.cond.loopexit - -for.end.8: ; preds = %for.end.7 - br i1 %c1, label %for.cond.19, label %for.end.29 - -for.cond.19: ; preds = %for.cond.19, %for.end.8 - br label %for.cond.19 - -for.end.29: ; preds = %for.end.8 - %tobool30 = icmp eq i32 %f.1, 0 - br i1 %tobool30, label %for.cond.4, label %for.cond.loopexit - -for.end.34: ; preds = %for.cond.loopexit, %entry - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr25051.ll b/llvm/test/Transforms/IndVarSimplify/pr25051.ll deleted file mode 100644 index a02d539a66d..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr25051.ll +++ /dev/null @@ -1,44 +0,0 @@ -; RUN: opt -S -indvars < %s | FileCheck %s - -target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-apple-macosx10.11.0" - -define i32 @somefunc(double* %arr) { -; CHECK-LABEL: @somefunc( -entry: - br label %for.cond.1.preheader - -for.cond.1.preheader: ; preds = %for.inc.9, %entry - %index3.013 = phi i32 [ 0, %entry ], [ %index3.1.lcssa, %for.inc.9 ] - %index.012 = phi i32 [ 0, %entry ], [ %inc10, %for.inc.9 ] - %cmp2.9 = icmp sgt i32 %index.012, 0 - br i1 %cmp2.9, label %for.body.3.lr.ph, label %for.inc.9 - -for.body.3.lr.ph: ; preds = %for.cond.1.preheader - %idxprom5 = sext i32 %index.012 to i64 - br label %for.body.3 - -for.body.3: ; preds = %for.body.3, %for.body.3.lr.ph - %index3.111 = phi i32 [ %index3.013, %for.body.3.lr.ph ], [ %inc, %for.body.3 ] - %index2.010 = phi i32 [ 0, %for.body.3.lr.ph ], [ %inc8, %for.body.3 ] - %inc = add nsw i32 %index3.111, 1 - %idxprom = sext i32 %index3.111 to i64 - %arrayidx = getelementptr inbounds double, double* %arr, i64 %idxprom - %idxprom4 = sext i32 %index2.010 to i64 - %inc8 = add nsw i32 %index2.010, 1 - %cmp2 = icmp slt i32 %inc8, %index.012 - br i1 %cmp2, label %for.body.3, label %for.inc.9.loopexit - -for.inc.9.loopexit: ; preds = %for.body.3 - %inc.lcssa = phi i32 [ %inc, %for.body.3 ] - br label %for.inc.9 - -for.inc.9: ; preds = %for.inc.9.loopexit, %for.cond.1.preheader - %index3.1.lcssa = phi i32 [ %index3.013, %for.cond.1.preheader ], [ %inc.lcssa, %for.inc.9.loopexit ] - %inc10 = add nsw i32 %index.012, 1 - %cmp = icmp slt i32 %inc10, 10 - br i1 %cmp, label %for.cond.1.preheader, label %for.end.11 - -for.end.11: ; preds = %for.inc.9 - ret i32 1 -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr25060.ll b/llvm/test/Transforms/IndVarSimplify/pr25060.ll deleted file mode 100644 index 25863fff2d3..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr25060.ll +++ /dev/null @@ -1,37 +0,0 @@ -; RUN: opt -S -indvars < %s | FileCheck %s - -define i16 @fn1() { -; CHECK-LABEL: @fn1( -entry: - br label %bb1 - -bb1: - %i = phi i16 [ 0, %entry ], [ 1, %bb1 ] - %storemerge = phi i16 [ %storemerge2, %bb1 ], [ 0, %entry ] - %storemerge2 = phi i16 [ 10, %entry ], [ 200, %bb1 ] - %tmp10 = icmp eq i16 %i, 1 - br i1 %tmp10, label %bb5, label %bb1 - -bb5: - %storemerge.lcssa = phi i16 [ %storemerge, %bb1 ] -; CHECK: ret i16 10 - ret i16 %storemerge.lcssa -} - -define i16 @fn2() { -; CHECK-LABEL: @fn2( -entry: - br label %bb1 - -bb1: - %canary = phi i16 [ 0, %entry ], [ %canary.inc, %bb1 ] - %i = phi i16 [ 0, %entry ], [ %storemerge, %bb1 ] - %storemerge = phi i16 [ 0, %bb1 ], [ 10, %entry ] - %canary.inc = add i16 %canary, 1 - %_tmp10 = icmp eq i16 %i, 10 - br i1 %_tmp10, label %bb5, label %bb1 - -bb5: -; CHECK: ret i16 1 - ret i16 %canary -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr25360.ll b/llvm/test/Transforms/IndVarSimplify/pr25360.ll deleted file mode 100644 index 9f6df7051ea..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr25360.ll +++ /dev/null @@ -1,33 +0,0 @@ -; RUN: opt -indvars -S < %s | FileCheck %s - - -; Ensure that does not crash - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -define void @f() { -; CHECK-LABEL: @f( -entry: - br label %for.end - -for.condt: ; preds = %for.end - br i1 true, label %for.cond.0, label %for.end - -for.end: ; preds = %for.body.3 - %inc = select i1 undef, i32 2, i32 1 - br i1 false, label %for.condt, label %for.cond.0 - -for.cond.0: ; preds = %for.end, %for.condt - %init = phi i32 [ 0, %for.condt ], [ %inc, %for.end ] - br i1 true, label %for.end.13, label %for.body.9 - -for.body.9: ; preds = %for.body.9, %for.cond.0 - %p1.addr.22 = phi i32 [ %inc10, %for.body.9 ], [ %init, %for.cond.0 ] - %inc10 = add i32 %p1.addr.22, 1 - br i1 true, label %for.end.13, label %for.body.9 - -for.end.13: ; preds = %for.cond.7.for.end.13_crit_edge, %for.cond.0 - %p1.addr.2.lcssa = phi i32 [ %inc10, %for.body.9 ], [ %init, %for.cond.0 ] - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr25421.ll b/llvm/test/Transforms/IndVarSimplify/pr25421.ll deleted file mode 100644 index efb71f9c303..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr25421.ll +++ /dev/null @@ -1,30 +0,0 @@ -; RUN: opt -S -indvars < %s | FileCheck %s - -target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-apple-macosx10.11.0" - -declare void @use(i1) - -define void @f(i32 %x) { -; CHECK-LABEL: @f( - entry: - %conv = sext i32 %x to i64 - %sub = add i64 %conv, -1 - %ec = icmp sgt i32 %x, 0 - br i1 %ec, label %loop, label %leave - - loop: -; CHECK: loop: - %iv = phi i64 [ 0, %entry ], [ %iv.inc, %loop ] - %iv.inc = add i64 %iv, 1 - %cmp = icmp slt i64 %iv, %sub - call void @use(i1 %cmp) -; CHECK: call void @use(i1 %cmp) -; CHECK-NOT: call void @use(i1 true) - - %be.cond = icmp slt i64 %iv.inc, %conv - br i1 %be.cond, label %loop, label %leave - - leave: - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr25576.ll b/llvm/test/Transforms/IndVarSimplify/pr25576.ll deleted file mode 100644 index c9ebc479535..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr25576.ll +++ /dev/null @@ -1,31 +0,0 @@ -; RUN: opt -S -indvars < %s | FileCheck %s - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -define void @fn1() { -; CHECK-LABEL: @fn1( -entry: - br label %for.cond.loopexit - -for.cond.loopexit: ; preds = %for.inc7, %for.cond.loopexit, %entry - %c.1.lcssa = phi i32 [ %inc8, %for.inc7 ], [ 0, %for.cond.loopexit ], [ 0, %entry ] - br i1 undef, label %for.cond.loopexit, label %for.cond4.preheader - -for.cond4.preheader: ; preds = %for.inc7, %for.cond.loopexit - %c.17 = phi i32 [ %inc8, %for.inc7 ], [ 0, %for.cond.loopexit ] - br label %for.body6 - -for.body6: ; preds = %for.body6, %for.cond4.preheader - %inc14 = phi i32 [ 0, %for.cond4.preheader ], [ %inc, %for.body6 ] - %idxprom = zext i32 %inc14 to i64 - %inc = add i32 %inc14, 1 - %cmp5 = icmp ult i32 %inc, 2 - br i1 %cmp5, label %for.body6, label %for.inc7 - -for.inc7: ; preds = %for.body6 - %inc.lcssa = phi i32 [ %inc, %for.body6 ] - %inc8 = add i32 %c.17, 1 - %cmp = icmp ult i32 %inc8, %inc.lcssa - br i1 %cmp, label %for.cond4.preheader, label %for.cond.loopexit -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr25578.ll b/llvm/test/Transforms/IndVarSimplify/pr25578.ll deleted file mode 100644 index b9d374a4c77..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr25578.ll +++ /dev/null @@ -1,48 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" - -declare void @use(i64 %x) - -; CHECK-LABEL: @foo -define void @foo() { -entry: - br label %L1_header - -L1_header: - br label %L2_header - -; CHECK: L2_header: -; CHECK: %[[INDVAR:.*]] = phi i64 -; CHECK: %[[TRUNC:.*]] = trunc i64 %[[INDVAR]] to i32 -L2_header: - %i = phi i32 [ 0, %L1_header ], [ %i_next, %L2_latch ] - %i_prom = sext i32 %i to i64 - call void @use(i64 %i_prom) - br label %L3_header - -L3_header: - br i1 undef, label %L3_latch, label %L2_exiting_1 - -L3_latch: - br i1 undef, label %L3_header, label %L2_exiting_2 - -L2_exiting_1: - br i1 undef, label %L2_latch, label %L1_latch - -L2_exiting_2: - br i1 undef, label %L2_latch, label %L1_latch - -L2_latch: - %i_next = add nsw i32 %i, 1 - br label %L2_header - -L1_latch: -; CHECK: L1_latch: -; CHECK: %i_lcssa = phi i32 [ %[[TRUNC]], %L2_exiting_1 ], [ %[[TRUNC]], %L2_exiting_2 ] - - %i_lcssa = phi i32 [ %i, %L2_exiting_1 ], [ %i, %L2_exiting_2 ] - br i1 undef, label %exit, label %L1_header - -exit: - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr26973.ll b/llvm/test/Transforms/IndVarSimplify/pr26973.ll deleted file mode 100644 index 8bad303ce88..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr26973.ll +++ /dev/null @@ -1,33 +0,0 @@ -; RUN: opt -S -indvars < %s | FileCheck %s - -target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-apple-macosx10.11.0" - -@a = common global double* null, align 8 -@b = common global double 0.000000e+00, align 8 - -define void @fn1(i32 %p1) { -; CHECK-LABEL: @fn1( -entry: - %ld = load double*, double** @a, align 8 - br label %outer.loop - -outer.loop: - %iv.outer = phi i32 [ %p1, %entry ], [ %iv.outer.dec, %outer.be ] - %idxprom = sext i32 %iv.outer to i64 - %arrayidx = getelementptr inbounds double, double* %ld, i64 %idxprom - %arrayidx.bc = bitcast double* %arrayidx to i64* - br label %inner.loop - -inner.loop: - %iv.inner = phi i32 [ %iv.outer, %outer.loop ], [ %iv.inner.dec, %inner.loop ] - %ld.arr = load i64, i64* %arrayidx.bc, align 8 - store i64 %ld.arr, i64* bitcast (double* @b to i64*), align 8 - %iv.inner.dec = add nsw i32 %iv.inner, -1 - %cmp = icmp slt i32 %iv.outer, %iv.inner.dec - br i1 %cmp, label %outer.be, label %inner.loop - -outer.be: - %iv.outer.dec = add nsw i32 %iv.outer, -1 - br label %outer.loop -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr26974.ll b/llvm/test/Transforms/IndVarSimplify/pr26974.ll deleted file mode 100644 index 28a736441cd..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr26974.ll +++ /dev/null @@ -1,60 +0,0 @@ -; RUN: opt -indvars -S < %s | FileCheck %s - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" - -; indvars will try to replace %b.0.lcssa with %t.1. If it does this, -; it will break LCSSA. - -@c = external global i32, align 4 - -; CHECK-LABEL: @fn1 -define void @fn1() { -entry: - br label %for.body - -for.cond1.preheader: ; preds = %for.body - %0 = load i32, i32* @c, align 4 - br i1 undef, label %for.cond1.us.preheader, label %for.cond1 - -for.cond1.us.preheader: ; preds = %for.cond1.preheader - br label %for.cond1.us - -for.cond1.us: ; preds = %for.cond1.us, %for.cond1.us.preheader - br label %for.cond1.us - -for.body: ; preds = %for.body, %entry - br i1 undef, label %for.body, label %for.cond1.preheader - -for.cond1: ; preds = %for.cond1.preheader - br i1 true, label %for.body9.lr.ph, label %for.cond13.preheader - -for.body9.lr.ph: ; preds = %for.cond1 - br i1 undef, label %for.body9.us.preheader, label %for.body9 - -for.body9.us.preheader: ; preds = %for.body9.lr.ph - br label %for.body9.us - -for.body9.us: ; preds = %for.body9.us, %for.body9.us.preheader - br label %for.body9.us - -for.cond13.preheader: ; preds = %for.body9, %for.cond1 - %b.0.lcssa = phi i32 [ %0, %for.body9 ], [ 0, %for.cond1 ] - br label %for.cond13 - -for.body9: ; preds = %for.body9.lr.ph - br label %for.cond13.preheader - -for.cond13: ; preds = %for.cond13, %for.cond13.preheader - %d.1 = phi i32 [ %t.1, %for.cond13 ], [ %0, %for.cond13.preheader ] - %t.1 = phi i32 [ %b.0.lcssa, %for.cond13 ], [ %0, %for.cond13.preheader ] - br i1 undef, label %for.cond18.preheader, label %for.cond13 - -for.cond18.preheader: ; preds = %for.cond13 - br label %for.cond18 - -for.cond18: ; preds = %for.cond18, %for.cond18.preheader - %b.1 = phi i32 [ %xor, %for.cond18 ], [ %b.0.lcssa, %for.cond18.preheader ] - %add = add nsw i32 %b.1, %d.1 - %xor = xor i32 %add, %b.1 - br label %for.cond18 -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr27133.ll b/llvm/test/Transforms/IndVarSimplify/pr27133.ll deleted file mode 100644 index 1262407ea82..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr27133.ll +++ /dev/null @@ -1,38 +0,0 @@ -; RUN: opt -indvars -S < %s | FileCheck %s -target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-pc-windows-msvc18.0.0" - -define i32 @fn2() personality i32 (...)* @__CxxFrameHandler3 { -entry: - br label %for.cond - -for.cond: ; preds = %for.inc, %entry - %c.0 = phi i32 [ %inc, %for.inc ], [ 0, %entry ] -; CHECK: %[[WIDE:.*]] = phi i64 -; CHECK: %[[NORM:.*]] = phi i32 -; CHECK: invoke void @fn1(i64 %[[WIDE]]) - %idxprom = sext i32 %c.0 to i64 - invoke void @fn1(i64 %idxprom) - to label %for.inc unwind label %catch.dispatch - -catch.dispatch: ; preds = %for.cond - %c.0.lcssa = phi i32 [ %c.0, %for.cond ] -; CHECK: %[[LCSSA:.*]] = phi i32 [ %[[NORM]], - %0 = catchswitch within none [label %catch] unwind to caller - -catch: ; preds = %catch.dispatch - %1 = catchpad within %0 [i8* null, i32 64, i8* null] - catchret from %1 to label %exit - -exit: -; CHECK: ret i32 %[[LCSSA]] - ret i32 %c.0.lcssa - -for.inc: ; preds = %for.cond - %inc = add nsw nuw i32 %c.0, 1 - br label %for.cond -} - -declare void @fn1(i64 %idxprom) - -declare i32 @__CxxFrameHandler3(...) diff --git a/llvm/test/Transforms/IndVarSimplify/pr28935.ll b/llvm/test/Transforms/IndVarSimplify/pr28935.ll deleted file mode 100644 index 0cfd1d31a41..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr28935.ll +++ /dev/null @@ -1,20 +0,0 @@ -; RUN: opt -S -indvars < %s | FileCheck %s - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -declare i16 @fn1(i16 returned, i64) - -define void @fn2() { -; CHECK-LABEL: @fn2( -entry: - br label %for.cond - -for.cond: - %f.0 = phi i64 [ undef, %entry ], [ %inc, %for.cond ] - %conv = trunc i64 %f.0 to i16 - %call = tail call i16 @fn1(i16 %conv, i64 %f.0) - %conv2 = zext i16 %call to i32 - %inc = add nsw i64 %f.0, 1 - br label %for.cond -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr32045.ll b/llvm/test/Transforms/IndVarSimplify/pr32045.ll deleted file mode 100644 index 31efac3f833..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr32045.ll +++ /dev/null @@ -1,39 +0,0 @@ -; RUN: opt -S -indvars < %s | FileCheck %s - -; This is not an IndVarSimplify bug, but the original symptom -; manifested as one. - -define i32 @foo(i32 %a, i32 %b, i32 %c, i32* %sink) { -; CHECK-LABEL: @foo( -; CHECK: for.end: -; CHECK-NEXT: [[SHR:%.*]] = ashr i32 %neg3, -1 -; CHECK-NEXT: [[SUB:%.*]] = sub nsw i32 0, [[SHR]] -; CHECK-NEXT: [[SHR1:%.*]] = ashr i32 [[SUB]], [[B:%.*]] -; CHECK-NEXT: [[NEG:%.*]] = xor i32 [[SHR1]], -1 -; CHECK-NEXT: store i32 [[NEG]], i32* %sink -; -entry: - %tobool2 = icmp eq i32 %a, 0 - br i1 %tobool2, label %exit, label %preheader - -preheader: - %neg3 = phi i32 [ %c, %entry ], [ %neg, %for.end ] - br label %for - -for: - %p = phi i32 [ %dec, %for ], [ 1, %preheader ] - %cmp = icmp sgt i32 %p, -1 - %dec = add nsw i32 %p, -1 - br i1 %cmp, label %for, label %for.end - -for.end: - %shr = ashr i32 %neg3, %p - %sub = sub nsw i32 0, %shr - %shr1 = ashr i32 %sub, %b - %neg = xor i32 %shr1, -1 - store i32 %neg, i32* %sink - br i1 false, label %exit, label %preheader - -exit: - ret i32 0 -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr35406.ll b/llvm/test/Transforms/IndVarSimplify/pr35406.ll deleted file mode 100644 index 1d4a00b6500..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr35406.ll +++ /dev/null @@ -1,88 +0,0 @@ -; RUN: opt -S -indvars %s | FileCheck %s -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128-ni:1" -target triple = "x86_64-unknown-linux-gnu" - -define i32 @testDiv(i8* %p, i64* %p1) { -; CHECK-LABEL: @testDiv -entry: - br label %loop1 - -loop1: - %local_0_ = phi i32 [ 8, %entry ], [ %9, %loop2.exit ] - %local_2_ = phi i32 [ 63864, %entry ], [ %local_2_43, %loop2.exit ] - %local_3_ = phi i32 [ 51, %entry ], [ %local_3_44, %loop2.exit ] -; CHECK-NOT: udiv - %0 = udiv i32 14, %local_0_ - %1 = icmp ugt i32 %local_0_, 14 - br i1 %1, label %exit, label %general_case24 - -; CHECK-LABEL: general_case24 -general_case24: - %2 = udiv i32 60392, %0 - br i1 false, label %loop2, label %loop2.exit - -loop2: - %local_1_56 = phi i32 [ %2, %general_case24 ], [ %3, %loop2 ] - %local_2_57 = phi i32 [ 1, %general_case24 ], [ %7, %loop2 ] - %3 = add i32 %local_1_56, -1 - %4 = load atomic i64, i64* %p1 unordered, align 8 - %5 = sext i32 %3 to i64 - %6 = sub i64 %4, %5 - store atomic i64 %6, i64* %p1 unordered, align 8 - %7 = add nuw nsw i32 %local_2_57, 1 - %8 = icmp ugt i32 %local_2_57, 7 - br i1 %8, label %loop2.exit, label %loop2 - -loop2.exit: - %local_2_43 = phi i32 [ %local_2_, %general_case24 ], [ 9, %loop2 ] - %local_3_44 = phi i32 [ %local_3_, %general_case24 ], [ %local_1_56, %loop2 ] - %9 = add nuw nsw i32 %local_0_, 1 - %10 = icmp ugt i32 %local_0_, 129 - br i1 %10, label %exit, label %loop1 - -exit: - ret i32 0 -} - -define i32 @testRem(i8* %p, i64* %p1) { -; CHECK-LABEL: @testRem -entry: - br label %loop1 - -loop1: - %local_0_ = phi i32 [ 8, %entry ], [ %9, %loop2.exit ] - %local_2_ = phi i32 [ 63864, %entry ], [ %local_2_43, %loop2.exit ] - %local_3_ = phi i32 [ 51, %entry ], [ %local_3_44, %loop2.exit ] -; CHECK: udiv -; CHECK-NOT: udiv - %0 = udiv i32 14, %local_0_ - %1 = icmp ugt i32 %local_0_, 14 - br i1 %1, label %exit, label %general_case24 - -; CHECK-LABEL: general_case24 -general_case24: - %2 = urem i32 60392, %0 - br i1 false, label %loop2, label %loop2.exit - -loop2: - %local_1_56 = phi i32 [ %2, %general_case24 ], [ %3, %loop2 ] - %local_2_57 = phi i32 [ 1, %general_case24 ], [ %7, %loop2 ] - %3 = add i32 %local_1_56, -1 - %4 = load atomic i64, i64* %p1 unordered, align 8 - %5 = sext i32 %3 to i64 - %6 = sub i64 %4, %5 - store atomic i64 %6, i64* %p1 unordered, align 8 - %7 = add nuw nsw i32 %local_2_57, 1 - %8 = icmp ugt i32 %local_2_57, 7 - br i1 %8, label %loop2.exit, label %loop2 - -loop2.exit: - %local_2_43 = phi i32 [ %local_2_, %general_case24 ], [ 9, %loop2 ] - %local_3_44 = phi i32 [ %local_3_, %general_case24 ], [ %local_1_56, %loop2 ] - %9 = add nuw nsw i32 %local_0_, 1 - %10 = icmp ugt i32 %local_0_, 129 - br i1 %10, label %exit, label %loop1 - -exit: - ret i32 0 -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr38674.ll b/llvm/test/Transforms/IndVarSimplify/pr38674.ll deleted file mode 100644 index 78d59a372f2..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr38674.ll +++ /dev/null @@ -1,141 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -S -indvars < %s | FileCheck %s - -; Check that we don't reuse %zext instead of %inc11 for LCSSA Phi node. Case -; with constants SCEV. - -define i32 @test_01() { -; CHECK-LABEL: @test_01( -; CHECK-NEXT: entry: -; CHECK-NEXT: br label [[FOR_COND1_PREHEADER:%.*]] -; CHECK: for.cond1.preheader: -; CHECK-NEXT: br label [[FOR_COND4_PREHEADER:%.*]] -; CHECK: for.cond4.preheader: -; CHECK-NEXT: [[ZEXT:%.*]] = zext i16 1 to i32 -; CHECK-NEXT: br label [[FOR_BODY6:%.*]] -; CHECK: for.cond4: -; CHECK-NEXT: [[CMP5:%.*]] = icmp ult i32 [[INC:%.*]], 2 -; CHECK-NEXT: br i1 [[CMP5]], label [[FOR_BODY6]], label [[FOR_END:%.*]] -; CHECK: for.body6: -; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[FOR_COND4_PREHEADER]] ], [ [[INC]], [[FOR_COND4:%.*]] ] -; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i32 [[IV]], [[ZEXT]] -; CHECK-NEXT: [[INC]] = add nuw nsw i32 [[IV]], 1 -; CHECK-NEXT: br i1 [[TMP0]], label [[RETURN_LOOPEXIT:%.*]], label [[FOR_COND4]] -; CHECK: for.end: -; CHECK-NEXT: br i1 false, label [[FOR_COND4_PREHEADER]], label [[FOR_END9:%.*]] -; CHECK: for.end9: -; CHECK-NEXT: br i1 false, label [[FOR_COND1_PREHEADER]], label [[RETURN_LOOPEXIT3:%.*]] -; CHECK: return.loopexit: -; CHECK-NEXT: unreachable -; CHECK: return.loopexit3: -; CHECK-NEXT: br label [[RETURN:%.*]] -; CHECK: return: -; CHECK-NEXT: ret i32 1 -; -entry: - br label %for.cond1.preheader - -for.cond1.preheader: ; preds = %for.end9, %entry - br label %for.cond4.preheader - -for.cond4.preheader: ; preds = %for.end, %for.cond1.preheader - %zext = zext i16 1 to i32 - br label %for.body6 - -for.cond4: ; preds = %for.body6 - %cmp5 = icmp ult i32 %inc, 2 - br i1 %cmp5, label %for.body6, label %for.end - -for.body6: ; preds = %for.cond4, %for.cond4.preheader - %iv = phi i32 [ 0, %for.cond4.preheader ], [ %inc, %for.cond4 ] - %0 = icmp eq i32 %iv, %zext - %inc = add nuw nsw i32 %iv, 1 - br i1 %0, label %return.loopexit, label %for.cond4 - -for.end: ; preds = %for.cond4 - br i1 false, label %for.cond4.preheader, label %for.end9 - -for.end9: ; preds = %for.end - %inc11 = add nuw nsw i32 0, 1 - br i1 false, label %for.cond1.preheader, label %return.loopexit3 - -return.loopexit: ; preds = %for.body6 - unreachable - -return.loopexit3: ; preds = %for.end9 - %inc11.lcssa = phi i32 [ %inc11, %for.end9 ] - br label %return - -return: ; preds = %return.loopexit3 - ret i32 %inc11.lcssa -} - -; Same as test_01, but the instructions with the same SCEV have a non-constant -; SCEV. -define i32 @test_02(i32 %x) { -; CHECK-LABEL: @test_02( -; CHECK-NEXT: entry: -; CHECK-NEXT: br label [[FOR_COND1_PREHEADER:%.*]] -; CHECK: for.cond1.preheader: -; CHECK-NEXT: br label [[FOR_COND4_PREHEADER:%.*]] -; CHECK: for.cond4.preheader: -; CHECK-NEXT: [[ZEXT:%.*]] = mul i32 [[X:%.*]], 1 -; CHECK-NEXT: br label [[FOR_BODY6:%.*]] -; CHECK: for.cond4: -; CHECK-NEXT: [[CMP5:%.*]] = icmp ult i32 [[INC:%.*]], 2 -; CHECK-NEXT: br i1 [[CMP5]], label [[FOR_BODY6]], label [[FOR_END:%.*]] -; CHECK: for.body6: -; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[FOR_COND4_PREHEADER]] ], [ [[INC]], [[FOR_COND4:%.*]] ] -; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i32 [[IV]], [[ZEXT]] -; CHECK-NEXT: [[INC]] = add nuw nsw i32 [[IV]], 1 -; CHECK-NEXT: br i1 [[TMP0]], label [[RETURN_LOOPEXIT:%.*]], label [[FOR_COND4]] -; CHECK: for.end: -; CHECK-NEXT: br i1 false, label [[FOR_COND4_PREHEADER]], label [[FOR_END9:%.*]] -; CHECK: for.end9: -; CHECK-NEXT: [[INC11:%.*]] = add nuw nsw i32 0, [[X]] -; CHECK-NEXT: br i1 false, label [[FOR_COND1_PREHEADER]], label [[RETURN_LOOPEXIT3:%.*]] -; CHECK: return.loopexit: -; CHECK-NEXT: unreachable -; CHECK: return.loopexit3: -; CHECK-NEXT: [[INC11_LCSSA:%.*]] = phi i32 [ [[INC11]], [[FOR_END9]] ] -; CHECK-NEXT: br label [[RETURN:%.*]] -; CHECK: return: -; CHECK-NEXT: ret i32 [[INC11_LCSSA]] -; -entry: - br label %for.cond1.preheader - -for.cond1.preheader: ; preds = %for.end9, %entry - br label %for.cond4.preheader - -for.cond4.preheader: ; preds = %for.end, %for.cond1.preheader - %zext = mul i32 %x, 1 - br label %for.body6 - -for.cond4: ; preds = %for.body6 - %cmp5 = icmp ult i32 %inc, 2 - br i1 %cmp5, label %for.body6, label %for.end - -for.body6: ; preds = %for.cond4, %for.cond4.preheader - %iv = phi i32 [ 0, %for.cond4.preheader ], [ %inc, %for.cond4 ] - %0 = icmp eq i32 %iv, %zext - %inc = add nuw nsw i32 %iv, 1 - br i1 %0, label %return.loopexit, label %for.cond4 - -for.end: ; preds = %for.cond4 - br i1 false, label %for.cond4.preheader, label %for.end9 - -for.end9: ; preds = %for.end - %inc11 = add nuw nsw i32 0, %x - br i1 false, label %for.cond1.preheader, label %return.loopexit3 - -return.loopexit: ; preds = %for.body6 - unreachable - -return.loopexit3: ; preds = %for.end9 - %inc11.lcssa = phi i32 [ %inc11, %for.end9 ] - br label %return - -return: ; preds = %return.loopexit3 - ret i32 %inc11.lcssa -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr38855.ll b/llvm/test/Transforms/IndVarSimplify/pr38855.ll deleted file mode 100644 index 67887f5146c..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr38855.ll +++ /dev/null @@ -1,24 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -S -disable-nounwind-inference=false -inline -functionattrs -indvars < %s | FileCheck %s - -; Check that the invalidation happens correctly and the test does not crash. -define void @f2() { -; CHECK-LABEL: @f2( -; CHECK-NEXT: entry: -; CHECK-NEXT: br label [[FOR_COND:%.*]] -; CHECK: for.cond: -; CHECK-NEXT: br label [[FOR_COND]] -; -entry: - br label %for.cond - -for.cond: ; preds = %for.cond, %entry - %a.0 = phi i32 [ 1, %entry ], [ 0, %for.cond ] - call void @f1(i32 %a.0) - br label %for.cond -} - -define internal void @f1(i32 %p1) noinline { -entry: - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/pr39673.ll b/llvm/test/Transforms/IndVarSimplify/pr39673.ll deleted file mode 100644 index 4ab79a935c9..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr39673.ll +++ /dev/null @@ -1,56 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -S -indvars < %s | FileCheck %s - -define i16 @test() { -; CHECK-LABEL: @test( -; CHECK-NEXT: entry: -; CHECK-NEXT: br label [[LOOP1:%.*]] -; CHECK: loop1: -; CHECK-NEXT: [[L1:%.*]] = phi i16 [ 0, [[ENTRY:%.*]] ], [ [[L1_ADD:%.*]], [[LOOP1]] ] -; CHECK-NEXT: [[L1_ADD]] = add nuw nsw i16 [[L1]], 1 -; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i16 [[L1_ADD]], 2 -; CHECK-NEXT: br i1 [[CMP1]], label [[LOOP1]], label [[LOOP2_PREHEADER:%.*]] -; CHECK: loop2.preheader: -; CHECK-NEXT: br label [[LOOP2:%.*]] -; CHECK: loop2: -; CHECK-NEXT: [[K2:%.*]] = phi i16 [ [[K2_ADD:%.*]], [[LOOP2]] ], [ 182, [[LOOP2_PREHEADER]] ] -; CHECK-NEXT: [[L2:%.*]] = phi i16 [ [[L2_ADD:%.*]], [[LOOP2]] ], [ 0, [[LOOP2_PREHEADER]] ] -; CHECK-NEXT: [[L2_ADD]] = add nuw nsw i16 [[L2]], 1 -; CHECK-NEXT: tail call void @foo(i16 [[K2]]) -; CHECK-NEXT: [[K2_ADD]] = add nuw nsw i16 [[K2]], 1 -; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i16 [[L2_ADD]], 2 -; CHECK-NEXT: br i1 [[CMP2]], label [[LOOP2]], label [[LOOP2_END:%.*]] -; CHECK: loop2.end: -; CHECK-NEXT: [[K2_ADD_LCSSA:%.*]] = phi i16 [ [[K2_ADD]], [[LOOP2]] ] -; CHECK-NEXT: ret i16 [[K2_ADD_LCSSA]] -; -entry: - br label %loop1 - -loop1: ; preds = %entry, %loop1 - %k1 = phi i16 [ 180, %entry ], [ %k1.add, %loop1 ] - %l1 = phi i16 [ 0, %entry ], [ %l1.add, %loop1 ] - %k1.add = add nuw nsw i16 %k1, 1 - %l1.add = add nuw nsw i16 %l1, 1 - %cmp1 = icmp ult i16 %l1.add, 2 - br i1 %cmp1, label %loop1, label %loop2.preheader - -loop2.preheader: ; preds = %loop1 - %k1.add.lcssa = phi i16 [ %k1.add, %loop1 ] - br label %loop2 - -loop2: ; preds = %loop2.preheader, %loop2 - %k2 = phi i16 [ %k2.add, %loop2 ], [ %k1.add.lcssa, %loop2.preheader ] - %l2 = phi i16 [ %l2.add, %loop2 ], [ 0, %loop2.preheader ] - %l2.add = add nuw i16 %l2, 1 - tail call void @foo(i16 %k2) - %k2.add = add nuw nsw i16 %k2, 1 - %cmp2 = icmp ult i16 %l2.add, 2 - br i1 %cmp2, label %loop2, label %loop2.end - -loop2.end: ; preds = %loop2 - %k2.add.lcssa = phi i16 [ %k2.add, %loop2 ] - ret i16 %k2.add.lcssa -} - -declare void @foo(i16) diff --git a/llvm/test/Transforms/IndVarSimplify/pr40454.ll b/llvm/test/Transforms/IndVarSimplify/pr40454.ll deleted file mode 100644 index c0ad01e4a7f..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/pr40454.ll +++ /dev/null @@ -1,62 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -S -indvars < %s | FileCheck %s - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" - -define void @test() { -; CHECK-LABEL: @test( -; CHECK-NEXT: bb: -; CHECK-NEXT: br label [[BB2:%.*]] -; CHECK: bb1: -; CHECK-NEXT: br label [[BB2]] -; CHECK: bb2: -; CHECK-NEXT: [[TMP:%.*]] = phi i32 [ -9, [[BB:%.*]] ], [ [[TMP6:%.*]], [[BB1:%.*]] ] -; CHECK-NEXT: br label [[BB3:%.*]] -; CHECK: bb3: -; CHECK-NEXT: [[TMP4:%.*]] = phi i32 [ -9, [[BB2]] ], [ [[TMP6]], [[BB10:%.*]] ] -; CHECK-NEXT: br i1 false, label [[BB5:%.*]], label [[BB12:%.*]] -; CHECK: bb5: -; CHECK-NEXT: [[TMP6]] = add nsw i32 [[TMP4]], -1 -; CHECK-NEXT: br i1 undef, label [[BB8:%.*]], label [[BB9:%.*]] -; CHECK: bb8: -; CHECK-NEXT: br label [[BB10]] -; CHECK: bb9: -; CHECK-NEXT: br label [[BB10]] -; CHECK: bb10: -; CHECK-NEXT: br label [[BB3]] -; CHECK: bb12: -; CHECK-NEXT: ret void -; - -bb: - br label %bb2 - -bb1: ; No predecessors! - br label %bb2 - -bb2: ; preds = %bb1, %bb - %tmp = phi i32 [ -9, %bb ], [ %tmp6, %bb1 ] - br label %bb3 - -bb3: ; preds = %bb10, %bb2 - %tmp4 = phi i32 [ -9, %bb2 ], [ %tmp6, %bb10 ] - br i1 undef, label %bb5, label %bb12 - -bb5: ; preds = %bb3 - %tmp6 = add i32 %tmp4, -1 - %tmp7 = zext i32 %tmp6 to i64 - br i1 undef, label %bb8, label %bb9 - -bb8: ; preds = %bb5 - br label %bb10 - -bb9: ; preds = %bb5 - br label %bb10 - -bb10: ; preds = %bb9, %bb8 - %tmp11 = and i64 undef, %tmp7 - br label %bb3 - -bb12: ; preds = %bb3 - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/preserve-signed-wrap.ll b/llvm/test/Transforms/IndVarSimplify/preserve-signed-wrap.ll deleted file mode 100644 index c8d34acb24a..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/preserve-signed-wrap.ll +++ /dev/null @@ -1,43 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -; Indvars should insert a 64-bit induction variable to eliminate the -; sext for the addressing, however it shouldn't eliminate the sext -; on the other phi, since that value undergoes signed wrapping. - -; Provide legal integer types. -target datalayout = "n8:16:32:64" - - -define void @foo(i32* nocapture %d, i32 %n) nounwind { -entry: - %0 = icmp sgt i32 %n, 0 ; <i1> [#uses=1] - br i1 %0, label %bb.nph, label %return - -bb.nph: ; preds = %entry - br label %bb - -; CHECK: bb: -; CHECK: phi i64 -; CHECK: sext i8 -; CHECK-NOT: sext -bb: ; preds = %bb1, %bb.nph - %i.02 = phi i32 [ %5, %bb1 ], [ 0, %bb.nph ] ; <i32> [#uses=2] - %p.01 = phi i8 [ %4, %bb1 ], [ -1, %bb.nph ] ; <i8> [#uses=2] - %1 = sext i8 %p.01 to i32 ; <i32> [#uses=1] - %2 = sext i32 %i.02 to i64 ; <i64> [#uses=1] - %3 = getelementptr i32, i32* %d, i64 %2 ; <i32*> [#uses=1] - store i32 %1, i32* %3, align 4 - %4 = add i8 %p.01, 1 ; <i8> [#uses=1] - %5 = add i32 %i.02, 1 ; <i32> [#uses=2] - br label %bb1 - -bb1: ; preds = %bb - %6 = icmp slt i32 %5, %n ; <i1> [#uses=1] - br i1 %6, 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 -} diff --git a/llvm/test/Transforms/IndVarSimplify/promote-iv-to-eliminate-casts.ll b/llvm/test/Transforms/IndVarSimplify/promote-iv-to-eliminate-casts.ll deleted file mode 100644 index d1712da3a6b..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/promote-iv-to-eliminate-casts.ll +++ /dev/null @@ -1,230 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -; Provide legal integer types. -target datalayout = "n8:16:32:64" - -; CHECK-NOT: sext - -define i64 @test(i64* nocapture %first, i32 %count) nounwind readonly { -entry: - %t0 = icmp sgt i32 %count, 0 ; <i1> [#uses=1] - br i1 %t0, label %bb.nph, label %bb2 - -bb.nph: ; preds = %entry - br label %bb - -bb: ; preds = %bb1, %bb.nph - %result.02 = phi i64 [ %t5, %bb1 ], [ 0, %bb.nph ] ; <i64> [#uses=1] - %n.01 = phi i32 [ %t6, %bb1 ], [ 0, %bb.nph ] ; <i32> [#uses=2] - %t1 = sext i32 %n.01 to i64 ; <i64> [#uses=1] - %t2 = getelementptr i64, i64* %first, i64 %t1 ; <i64*> [#uses=1] - %t3 = load i64, i64* %t2, align 8 ; <i64> [#uses=1] - %t4 = lshr i64 %t3, 4 ; <i64> [#uses=1] - %t5 = add i64 %t4, %result.02 ; <i64> [#uses=2] - %t6 = add i32 %n.01, 1 ; <i32> [#uses=2] - br label %bb1 - -bb1: ; preds = %bb - %t7 = icmp slt i32 %t6, %count ; <i1> [#uses=1] - br i1 %t7, label %bb, label %bb1.bb2_crit_edge - -bb1.bb2_crit_edge: ; preds = %bb1 - %.lcssa = phi i64 [ %t5, %bb1 ] ; <i64> [#uses=1] - br label %bb2 - -bb2: ; preds = %bb1.bb2_crit_edge, %entry - %result.0.lcssa = phi i64 [ %.lcssa, %bb1.bb2_crit_edge ], [ 0, %entry ] ; <i64> [#uses=1] - ret i64 %result.0.lcssa -} - -define void @foo(i16 signext %N, i32* nocapture %P) nounwind { -entry: - %t0 = icmp sgt i16 %N, 0 ; <i1> [#uses=1] - br i1 %t0, label %bb.nph, label %return - -bb.nph: ; preds = %entry - br label %bb - -bb: ; preds = %bb1, %bb.nph - %i.01 = phi i16 [ %t3, %bb1 ], [ 0, %bb.nph ] ; <i16> [#uses=2] - %t1 = sext i16 %i.01 to i64 ; <i64> [#uses=1] - %t2 = getelementptr i32, i32* %P, i64 %t1 ; <i32*> [#uses=1] - store i32 123, i32* %t2, align 4 - %t3 = add i16 %i.01, 1 ; <i16> [#uses=2] - br label %bb1 - -bb1: ; preds = %bb - %t4 = icmp slt i16 %t3, %N ; <i1> [#uses=1] - br i1 %t4, 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 -} - -; Test cases from PR1301: - -define void @kinds__srangezero([21 x i32]* nocapture %a) nounwind { -bb.thread: - br label %bb - -bb: ; preds = %bb, %bb.thread - %i.0.reg2mem.0 = phi i8 [ -10, %bb.thread ], [ %tmp7, %bb ] ; <i8> [#uses=2] - %tmp12 = sext i8 %i.0.reg2mem.0 to i32 ; <i32> [#uses=1] - %tmp4 = add i32 %tmp12, 10 ; <i32> [#uses=1] - %tmp5 = getelementptr [21 x i32], [21 x i32]* %a, i32 0, i32 %tmp4 ; <i32*> [#uses=1] - store i32 0, i32* %tmp5 - %tmp7 = add i8 %i.0.reg2mem.0, 1 ; <i8> [#uses=2] - %0 = icmp sgt i8 %tmp7, 10 ; <i1> [#uses=1] - br i1 %0, label %return, label %bb - -return: ; preds = %bb - ret void -} - -define void @kinds__urangezero([21 x i32]* nocapture %a) nounwind { -bb.thread: - br label %bb - -bb: ; preds = %bb, %bb.thread - %i.0.reg2mem.0 = phi i8 [ 10, %bb.thread ], [ %tmp7, %bb ] ; <i8> [#uses=2] - %tmp12 = sext i8 %i.0.reg2mem.0 to i32 ; <i32> [#uses=1] - %tmp4 = add i32 %tmp12, -10 ; <i32> [#uses=1] - %tmp5 = getelementptr [21 x i32], [21 x i32]* %a, i32 0, i32 %tmp4 ; <i32*> [#uses=1] - store i32 0, i32* %tmp5 - %tmp7 = add i8 %i.0.reg2mem.0, 1 ; <i8> [#uses=2] - %0 = icmp sgt i8 %tmp7, 30 ; <i1> [#uses=1] - br i1 %0, label %return, label %bb - -return: ; preds = %bb - ret void -} - -define void @promote_latch_condition_decrementing_loop_01(i32* %p, i32* %a) { - -; CHECK-LABEL: @promote_latch_condition_decrementing_loop_01( -; CHECK-NOT: trunc - -entry: - %len = load i32, i32* %p, align 4, !range !0 - %len.minus.1 = add nsw i32 %len, -1 - %zero_check = icmp eq i32 %len, 0 - br i1 %zero_check, label %loopexit, label %preheader - -preheader: - br label %loop - -loopexit: - ret void - -loop: - %iv = phi i32 [ %iv.next, %loop ], [ %len.minus.1, %preheader ] - ; CHECK: %indvars.iv = phi i64 - %iv.wide = zext i32 %iv to i64 - %el = getelementptr inbounds i32, i32* %a, i64 %iv.wide - store atomic i32 0, i32* %el unordered, align 4 - %iv.next = add nsw i32 %iv, -1 - ; CHECK: %loopcond = icmp slt i64 %indvars.iv, 1 - %loopcond = icmp slt i32 %iv, 1 - br i1 %loopcond, label %loopexit, label %loop -} - -define void @promote_latch_condition_decrementing_loop_02(i32* %p, i32* %a) { - -; CHECK-LABEL: @promote_latch_condition_decrementing_loop_02( -; CHECK-NOT: trunc - -entry: - %len = load i32, i32* %p, align 4, !range !0 - %zero_check = icmp eq i32 %len, 0 - br i1 %zero_check, label %loopexit, label %preheader - -preheader: - br label %loop - -loopexit: - ret void - -loop: - %iv = phi i32 [ %iv.next, %loop ], [ %len, %preheader ] - ; CHECK: %indvars.iv = phi i64 - %iv.wide = zext i32 %iv to i64 - %el = getelementptr inbounds i32, i32* %a, i64 %iv.wide - store atomic i32 0, i32* %el unordered, align 4 - %iv.next = add nsw i32 %iv, -1 - ; CHECK: %loopcond = icmp slt i64 %indvars.iv, 1 - %loopcond = icmp slt i32 %iv, 1 - br i1 %loopcond, label %loopexit, label %loop -} - -define void @promote_latch_condition_decrementing_loop_03(i32* %p, i32* %a) { - -; CHECK-LABEL: @promote_latch_condition_decrementing_loop_03( -; CHECK-NOT: trunc - -entry: - %len = load i32, i32* %p, align 4, !range !0 - %len.plus.1 = add i32 %len, 1 - %zero_check = icmp eq i32 %len, 0 - br i1 %zero_check, label %loopexit, label %preheader - -preheader: - br label %loop - -loopexit: - ret void - -loop: - %iv = phi i32 [ %iv.next, %loop ], [ %len.plus.1, %preheader ] - ; CHECK: %indvars.iv = phi i64 - %iv.wide = zext i32 %iv to i64 - %el = getelementptr inbounds i32, i32* %a, i64 %iv.wide - store atomic i32 0, i32* %el unordered, align 4 - %iv.next = add nsw i32 %iv, -1 - ; CHECK: %loopcond = icmp slt i64 %indvars.iv, 1 - %loopcond = icmp slt i32 %iv, 1 - br i1 %loopcond, label %loopexit, label %loop -} - -define void @promote_latch_condition_decrementing_loop_04(i32* %p, i32* %a, i1 %cond) { - -; CHECK-LABEL: @promote_latch_condition_decrementing_loop_04( -; CHECK-NOT: trunc - -entry: - %len = load i32, i32* %p, align 4, !range !0 - %len.minus.1 = add nsw i32 %len, -1 - br i1 %cond, label %if.true, label %if.false - -if.true: - br label %merge - -if.false: - br label %merge - -merge: - %iv_start = phi i32 [ %len, %if.true ], [%len.minus.1, %if.false ] - %zero_check = icmp eq i32 %len, 0 - br i1 %zero_check, label %loopexit, label %preheader - -preheader: - br label %loop - -loopexit: - ret void - -loop: - %iv = phi i32 [ %iv.next, %loop ], [ %iv_start, %preheader ] - ; CHECK: %indvars.iv = phi i64 - %iv.wide = zext i32 %iv to i64 - %el = getelementptr inbounds i32, i32* %a, i64 %iv.wide - store atomic i32 0, i32* %el unordered, align 4 - %iv.next = add nsw i32 %iv, -1 - ; CHECK: %loopcond = icmp slt i64 %indvars.iv, 1 - %loopcond = icmp slt i32 %iv, 1 - br i1 %loopcond, label %loopexit, label %loop -} - -!0 = !{i32 0, i32 2147483647} diff --git a/llvm/test/Transforms/IndVarSimplify/replace-iv-with-loop-invariant.ll b/llvm/test/Transforms/IndVarSimplify/replace-iv-with-loop-invariant.ll deleted file mode 100644 index d3d6d1ed4fa..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/replace-iv-with-loop-invariant.ll +++ /dev/null @@ -1,88 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -@G = external global i32 - -define void @test0(i64* %arg) { -bb: - br label %bb2 - -bb2: - %tmp = phi i64* [%arg, %bb ], [ %tmp7, %bb2 ] - %tmp4 = call i32* @wobble(i64* nonnull %tmp, i32* null) - %tmp5 = load i32, i32* %tmp4, align 8 - %tmp7 = load i64*, i64** undef, align 8 - br label %bb2 -} - -; CHECK-LABEL: void @test0 -; CHECK: load i32, i32* null - -define void @test1(i64* %arg) { -bb: - br label %bb2 - -bb2: - %tmp = phi i64* [%arg, %bb ], [ %tmp7, %bb2 ] - %tmp4 = call i32* @wobble(i64* nonnull %tmp, i32* inttoptr (i64 4 to i32*)) - %tmp5 = load i32, i32* %tmp4 - %tmp7 = load i64*, i64** undef, align 8 - br label %bb2 -} - -; CHECK-LABEL: void @test1 -; CHECK: load i32, i32* inttoptr (i64 4 to i32*) - -define void @test2(i64* %arg) { -bb: - br label %bb2 - -bb2: - %tmp = phi i64* [%arg, %bb ], [ %tmp7, %bb2 ] - %tmp4 = call i32* @wobble(i64* nonnull %tmp, i32* @G) - %tmp5 = load i32, i32* %tmp4 - %tmp7 = load i64*, i64** undef, align 8 - br label %bb2 -} - -; CHECK-LABEL: void @test2 -; CHECK: load i32, i32* @G - - -define void @test3(i64* %arg, i32* %loop.invariant) { -bb: - br label %bb2 - -bb2: - %tmp = phi i64* [%arg, %bb ], [ %tmp7, %bb2 ] - %tmp4 = call i32* @wobble(i64* nonnull %tmp, i32* %loop.invariant) - %tmp5 = load i32, i32* %tmp4 - %tmp7 = load i64*, i64** undef, align 8 - br label %bb2 -} - -; CHECK-LABEL: void @test3 -; CHECK: load i32, i32* %loop.invariant - -define void @test4(i64* %arg, i32* %loop.invariant, i64 %N) { -bb: - br label %bb2 - -bb2: - %tmp = phi i64* [%arg, %bb ], [ %tmp7, %bb2 ] - %mul = mul nsw i64 %N, 64 - %ptr = getelementptr inbounds i32, i32* %loop.invariant, i64 %mul - %tmp4 = call i32* @wobble(i64* nonnull %tmp, i32* %ptr) - %tmp5 = load i32, i32* %tmp4 - %tmp7 = load i64*, i64** undef, align 8 - br label %bb2 -} - -; CHECK-LABEL: void @test4 -; CHECK: [[P:%[a-zA-Z$._0-9]+]] = getelementptr i32, i32* %loop.invariant -; CHECK: phi -; CHECK: load i32, i32* [[P]] - -declare i32* @wobble(i64*, i32* returned) diff --git a/llvm/test/Transforms/IndVarSimplify/replace-loop-exit-folds.ll b/llvm/test/Transforms/IndVarSimplify/replace-loop-exit-folds.ll deleted file mode 100644 index 5bac86d32e2..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/replace-loop-exit-folds.ll +++ /dev/null @@ -1,197 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -indvars -S < %s | FileCheck %s - -target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" - -define i32 @remove_loop(i32 %size) { -; CHECK-LABEL: @remove_loop( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[TMP0:%.*]] = sub i32 -1, [[SIZE:%.*]] -; CHECK-NEXT: [[TMP1:%.*]] = icmp ugt i32 [[TMP0]], -32 -; CHECK-NEXT: [[UMAX:%.*]] = select i1 [[TMP1]], i32 [[TMP0]], i32 -32 -; CHECK-NEXT: [[TMP2:%.*]] = add i32 [[SIZE]], [[UMAX]] -; CHECK-NEXT: [[TMP3:%.*]] = add i32 [[TMP2]], 32 -; CHECK-NEXT: [[TMP4:%.*]] = lshr i32 [[TMP3]], 5 -; CHECK-NEXT: [[TMP5:%.*]] = shl i32 [[TMP4]], 5 -; CHECK-NEXT: br label [[WHILE_COND:%.*]] -; CHECK: while.cond: -; CHECK-NEXT: [[SIZE_ADDR_0:%.*]] = phi i32 [ [[SIZE]], [[ENTRY:%.*]] ], [ [[SUB:%.*]], [[WHILE_COND]] ] -; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[SIZE_ADDR_0]], 31 -; CHECK-NEXT: [[SUB]] = add i32 [[SIZE_ADDR_0]], -32 -; CHECK-NEXT: br i1 [[CMP]], label [[WHILE_COND]], label [[WHILE_END:%.*]] -; CHECK: while.end: -; CHECK-NEXT: [[TMP6:%.*]] = sub i32 [[SIZE]], [[TMP5]] -; CHECK-NEXT: ret i32 [[TMP6]] -; -entry: - br label %while.cond - -while.cond: ; preds = %while.cond, %entry - %size.addr.0 = phi i32 [ %size, %entry ], [ %sub, %while.cond ] - %cmp = icmp ugt i32 %size.addr.0, 31 - %sub = add i32 %size.addr.0, -32 - br i1 %cmp, label %while.cond, label %while.end - -while.end: ; preds = %while.cond - %size.lcssa = phi i32 [ %size.addr.0, %while.cond ] - ret i32 %size.lcssa -} - -define i32 @used_loop(i32 %size) minsize { -; CHECK-LABEL: @used_loop( -; CHECK-NEXT: entry: -; CHECK-NEXT: br label [[WHILE_COND:%.*]] -; CHECK: while.cond: -; CHECK-NEXT: [[SIZE_ADDR_0:%.*]] = phi i32 [ [[SIZE:%.*]], [[ENTRY:%.*]] ], [ [[SUB:%.*]], [[WHILE_COND]] ] -; CHECK-NEXT: tail call void @call() -; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[SIZE_ADDR_0]], 31 -; CHECK-NEXT: [[SUB]] = add i32 [[SIZE_ADDR_0]], -32 -; CHECK-NEXT: br i1 [[CMP]], label [[WHILE_COND]], label [[WHILE_END:%.*]] -; CHECK: while.end: -; CHECK-NEXT: [[SIZE_LCSSA:%.*]] = phi i32 [ [[SIZE_ADDR_0]], [[WHILE_COND]] ] -; CHECK-NEXT: ret i32 [[SIZE_LCSSA]] -; -entry: - br label %while.cond - -while.cond: ; preds = %while.cond, %entry - %size.addr.0 = phi i32 [ %size, %entry ], [ %sub, %while.cond ] - tail call void @call() - %cmp = icmp ugt i32 %size.addr.0, 31 - %sub = add i32 %size.addr.0, -32 - br i1 %cmp, label %while.cond, label %while.end - -while.end: ; preds = %while.cond - %size.lcssa = phi i32 [ %size.addr.0, %while.cond ] - ret i32 %size.lcssa -} - - -define i32 @test_signed_while(i32 %S) { -; CHECK-LABEL: @test_signed_while( -; CHECK-NEXT: entry: -; CHECK-NEXT: br label [[WHILE_COND:%.*]] -; CHECK: while.cond: -; CHECK-NEXT: [[S_ADDR_0:%.*]] = phi i32 [ [[S:%.*]], [[ENTRY:%.*]] ], [ [[SUB:%.*]], [[WHILE_BODY:%.*]] ] -; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[S_ADDR_0]], 31 -; CHECK-NEXT: br i1 [[CMP]], label [[WHILE_BODY]], label [[WHILE_END:%.*]] -; CHECK: while.body: -; CHECK-NEXT: [[SUB]] = add nsw i32 [[S_ADDR_0]], -32 -; CHECK-NEXT: tail call void @call() -; CHECK-NEXT: br label [[WHILE_COND]] -; CHECK: while.end: -; CHECK-NEXT: [[S_ADDR_0_LCSSA:%.*]] = phi i32 [ [[S_ADDR_0]], [[WHILE_COND]] ] -; CHECK-NEXT: ret i32 [[S_ADDR_0_LCSSA]] -; -entry: - br label %while.cond - -while.cond: ; preds = %while.body, %entry - %S.addr.0 = phi i32 [ %S, %entry ], [ %sub, %while.body ] - %cmp = icmp sgt i32 %S.addr.0, 31 - br i1 %cmp, label %while.body, label %while.end - -while.body: ; preds = %while.cond - %sub = add nsw i32 %S.addr.0, -32 - tail call void @call() - br label %while.cond - -while.end: ; preds = %while.cond - %S.addr.0.lcssa = phi i32 [ %S.addr.0, %while.cond ] - ret i32 %S.addr.0.lcssa -} - -define i32 @test_signed_do(i32 %S) { -; CHECK-LABEL: @test_signed_do( -; CHECK-NEXT: entry: -; CHECK-NEXT: br label [[DO_BODY:%.*]] -; CHECK: do.body: -; CHECK-NEXT: [[S_ADDR_0:%.*]] = phi i32 [ [[S:%.*]], [[ENTRY:%.*]] ], [ [[SUB:%.*]], [[DO_BODY]] ] -; CHECK-NEXT: [[SUB]] = add nsw i32 [[S_ADDR_0]], -16 -; CHECK-NEXT: tail call void @call() -; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[SUB]], 15 -; CHECK-NEXT: br i1 [[CMP]], label [[DO_BODY]], label [[DO_END:%.*]] -; CHECK: do.end: -; CHECK-NEXT: [[SUB_LCSSA:%.*]] = phi i32 [ [[SUB]], [[DO_BODY]] ] -; CHECK-NEXT: ret i32 [[SUB_LCSSA]] -; -entry: - br label %do.body - -do.body: ; preds = %do.body, %entry - %S.addr.0 = phi i32 [ %S, %entry ], [ %sub, %do.body ] - %sub = add nsw i32 %S.addr.0, -16 - tail call void @call() - %cmp = icmp sgt i32 %sub, 15 - br i1 %cmp, label %do.body, label %do.end - -do.end: ; preds = %do.body - %sub.lcssa = phi i32 [ %sub, %do.body ] - ret i32 %sub.lcssa -} - -define i32 @test_unsigned_while(i32 %S) { -; CHECK-LABEL: @test_unsigned_while( -; CHECK-NEXT: entry: -; CHECK-NEXT: br label [[WHILE_COND:%.*]] -; CHECK: while.cond: -; CHECK-NEXT: [[S_ADDR_0:%.*]] = phi i32 [ [[S:%.*]], [[ENTRY:%.*]] ], [ [[SUB:%.*]], [[WHILE_BODY:%.*]] ] -; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[S_ADDR_0]], 15 -; CHECK-NEXT: br i1 [[CMP]], label [[WHILE_BODY]], label [[WHILE_END:%.*]] -; CHECK: while.body: -; CHECK-NEXT: [[SUB]] = add i32 [[S_ADDR_0]], -16 -; CHECK-NEXT: tail call void @call() -; CHECK-NEXT: br label [[WHILE_COND]] -; CHECK: while.end: -; CHECK-NEXT: [[S_ADDR_0_LCSSA:%.*]] = phi i32 [ [[S_ADDR_0]], [[WHILE_COND]] ] -; CHECK-NEXT: ret i32 [[S_ADDR_0_LCSSA]] -; -entry: - br label %while.cond - -while.cond: ; preds = %while.body, %entry - %S.addr.0 = phi i32 [ %S, %entry ], [ %sub, %while.body ] - %cmp = icmp ugt i32 %S.addr.0, 15 - br i1 %cmp, label %while.body, label %while.end - -while.body: ; preds = %while.cond - %sub = add i32 %S.addr.0, -16 - tail call void @call() - br label %while.cond - -while.end: ; preds = %while.cond - %S.addr.0.lcssa = phi i32 [ %S.addr.0, %while.cond ] - ret i32 %S.addr.0.lcssa -} - -define i32 @test_unsigned_do(i32 %S) { -; CHECK-LABEL: @test_unsigned_do( -; CHECK-NEXT: entry: -; CHECK-NEXT: br label [[DO_BODY:%.*]] -; CHECK: do.body: -; CHECK-NEXT: [[S_ADDR_0:%.*]] = phi i32 [ [[S:%.*]], [[ENTRY:%.*]] ], [ [[SUB:%.*]], [[DO_BODY]] ] -; CHECK-NEXT: [[SUB]] = add i32 [[S_ADDR_0]], -16 -; CHECK-NEXT: tail call void @call() -; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[SUB]], 15 -; CHECK-NEXT: br i1 [[CMP]], label [[DO_BODY]], label [[DO_END:%.*]] -; CHECK: do.end: -; CHECK-NEXT: [[SUB_LCSSA:%.*]] = phi i32 [ [[SUB]], [[DO_BODY]] ] -; CHECK-NEXT: ret i32 [[SUB_LCSSA]] -; -entry: - br label %do.body - -do.body: ; preds = %do.body, %entry - %S.addr.0 = phi i32 [ %S, %entry ], [ %sub, %do.body ] - %sub = add i32 %S.addr.0, -16 - tail call void @call() - %cmp = icmp ugt i32 %sub, 15 - br i1 %cmp, label %do.body, label %do.end - -do.end: ; preds = %do.body - %sub.lcssa = phi i32 [ %sub, %do.body ] - ret i32 %sub.lcssa -} - - -declare void @call() diff --git a/llvm/test/Transforms/IndVarSimplify/replace-sdiv-by-udiv.ll b/llvm/test/Transforms/IndVarSimplify/replace-sdiv-by-udiv.ll deleted file mode 100644 index af25b20bec3..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/replace-sdiv-by-udiv.ll +++ /dev/null @@ -1,130 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -define void @test0(i32* %a) { -; CHECK-LABEL: @test0( -entry: - br label %for.body - -for.body: ; preds = %entry, %for.body - %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %div = sdiv i32 %i.01, 2 -; CHECK-NOT: sdiv -; CHECK: udiv - %idxprom = sext i32 %div to i64 - %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom - store i32 %i.01, i32* %arrayidx, align 4 - %inc = add nsw i32 %i.01, 1 - %cmp = icmp slt i32 %inc, 64 - br i1 %cmp, label %for.body, label %for.end - -for.end: ; preds = %for.body - ret void -} - -define void @test1(i32* %a) { -; CHECK-LABEL: @test1( -entry: - br label %for.body - -for.body: ; preds = %entry, %for.body - %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %div = sdiv exact i32 %i.01, 2 -; CHECK-NOT: sdiv -; CHECK: udiv exact - %idxprom = sext i32 %div to i64 - %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom - store i32 %i.01, i32* %arrayidx, align 4 - %inc = add nsw i32 %i.01, 1 - %cmp = icmp slt i32 %inc, 64 - br i1 %cmp, label %for.body, label %for.end - -for.end: ; preds = %for.body - ret void -} - -define void @test2(i32* %a, i32 %d) { -; CHECK-LABEL: @test2( -entry: - br label %for.body - -for.body: ; preds = %entry, %for.body - %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %mul = mul nsw i32 %i.01, 64 - %div = sdiv i32 %mul, %d -; CHECK-NOT: udiv - %idxprom = sext i32 %div to i64 - %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom - store i32 %i.01, i32* %arrayidx, align 4 - %inc = add nsw i32 %i.01, 1 - %cmp = icmp slt i32 %inc, 64 - br i1 %cmp, label %for.body, label %for.end - -for.end: ; preds = %for.body - ret void -} - -define void @test3(i32* %a) { -; CHECK-LABEL: @test3( -entry: - br label %for.body - -for.body: ; preds = %entry, %for.body - %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %div = sdiv i32 2048, %i.01 -; CHECK: udiv -; CHECK-NOT: sdiv - %idxprom = sext i32 %div to i64 - %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom - store i32 %i.01, i32* %arrayidx, align 4 - %inc = add nsw i32 %i.01, 1 - %cmp = icmp slt i32 %inc, 64 - br i1 %cmp, label %for.body, label %for.end - -for.end: ; preds = %for.body - ret void -} - -define void @test4(i32* %a) { -; CHECK-LABEL: @test4( -entry: - br label %for.body - -for.body: ; preds = %entry, %for.body - %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %mul = mul nsw i32 %i.01, 64 - %div = sdiv i32 %mul, 8 -; CHECK: udiv -; CHECK-NOT: sdiv - %idxprom = sext i32 %div to i64 - %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom - store i32 %i.01, i32* %arrayidx, align 4 - %inc = add nsw i32 %i.01, 1 - %cmp = icmp slt i32 %inc, 64 - br i1 %cmp, label %for.body, label %for.end - -for.end: ; preds = %for.body - ret void -} - -define void @test5(i32* %a) { -; CHECK-LABEL: @test5( -entry: - br label %for.body - -for.body: ; preds = %entry, %for.body - %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %mul = mul nsw i32 %i.01, 64 - %div = sdiv i32 %mul, 6 -; CHECK: udiv -; CHECK-NOT: sdiv - %idxprom = sext i32 %div to i64 - %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom - store i32 %i.01, i32* %arrayidx, align 4 - %inc = add nsw i32 %i.01, 1 - %cmp = icmp slt i32 %inc, 64 - br i1 %cmp, label %for.body, label %for.end - -for.end: ; preds = %for.body - ret void -} - diff --git a/llvm/test/Transforms/IndVarSimplify/replace-srem-by-urem.ll b/llvm/test/Transforms/IndVarSimplify/replace-srem-by-urem.ll deleted file mode 100644 index ec1ccffbc5c..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/replace-srem-by-urem.ll +++ /dev/null @@ -1,109 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -define void @test0(i32* %a) { -; CHECK-LABEL: @test0( -entry: - br label %for.body - -for.body: ; preds = %entry, %for.body - %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %rem = srem i32 %i.01, 2 -; CHECK-NOT: srem -; CHECK: urem - %idxprom = sext i32 %rem to i64 - %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom - store i32 %i.01, i32* %arrayidx, align 4 - %inc = add nsw i32 %i.01, 1 - %cmp = icmp slt i32 %inc, 64 - br i1 %cmp, label %for.body, label %for.end - -for.end: ; preds = %for.body - ret void -} - -define void @test2(i32* %a, i32 %d) { -; CHECK-LABEL: @test2( -entry: - br label %for.body - -for.body: ; preds = %entry, %for.body - %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %mul = mul nsw i32 %i.01, 64 - %rem = srem i32 %mul, %d -; CHECK-NOT: urem - %idxprom = sext i32 %rem to i64 - %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom - store i32 %i.01, i32* %arrayidx, align 4 - %inc = add nsw i32 %i.01, 1 - %cmp = icmp slt i32 %inc, 64 - br i1 %cmp, label %for.body, label %for.end - -for.end: ; preds = %for.body - ret void -} - -define void @test3(i32* %a) { -; CHECK-LABEL: @test3( -entry: - br label %for.body - -for.body: ; preds = %entry, %for.body - %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %rem = srem i32 2048, %i.01 -; CHECK: urem -; CHECK-NOT: srem - %idxprom = sext i32 %rem to i64 - %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom - store i32 %i.01, i32* %arrayidx, align 4 - %inc = add nsw i32 %i.01, 1 - %cmp = icmp slt i32 %inc, 64 - br i1 %cmp, label %for.body, label %for.end - -for.end: ; preds = %for.body - ret void -} - -define void @test4(i32* %a) { -; CHECK-LABEL: @test4( -entry: - br label %for.body - -for.body: ; preds = %entry, %for.body - %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %mul = mul nsw i32 %i.01, 64 - %rem = srem i32 %mul, 7 -; CHECK: urem -; CHECK-NOT: srem - %idxprom = sext i32 %rem to i64 - %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom - store i32 %i.01, i32* %arrayidx, align 4 - %inc = add nsw i32 %i.01, 1 - %cmp = icmp slt i32 %inc, 64 - br i1 %cmp, label %for.body, label %for.end - -for.end: ; preds = %for.body - ret void -} - -define void @test5(i32* %a) { -; CHECK-LABEL: @test5( -entry: - br label %for.body - -for.body: ; preds = %entry, %for.body - %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %mul = mul nsw i32 %i.01, 64 - %rem = srem i32 %mul, 6 -; CHECK: urem -; CHECK-NOT: srem - %idxprom = sext i32 %rem to i64 - %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom - store i32 %i.01, i32* %arrayidx, align 4 - %inc = add nsw i32 %i.01, 1 - %cmp = icmp slt i32 %inc, 64 - br i1 %cmp, label %for.body, label %for.end - -for.end: ; preds = %for.body - ret void -} - diff --git a/llvm/test/Transforms/IndVarSimplify/rewrite-loop-exit-value.ll b/llvm/test/Transforms/IndVarSimplify/rewrite-loop-exit-value.ll deleted file mode 100644 index 6993946b951..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/rewrite-loop-exit-value.ll +++ /dev/null @@ -1,63 +0,0 @@ -; RUN: opt -indvars -instcombine -S < %s | FileCheck %s - -;; Test that loop's exit value is rewritten to its initial -;; value from loop preheader -define i32 @test1(i32* %var) { -; CHECK-LABEL: @test1 -entry: - %cond = icmp eq i32* %var, null - br label %header - -header: - %phi_indvar = phi i32 [0, %entry], [%indvar, %loop] - br i1 %cond, label %loop, label %exit - -loop: - %indvar = add i32 %phi_indvar, 1 - br label %header - -exit: -; CHECK: ret i32 0 - ret i32 %phi_indvar -} - -;; Test that we can not rewrite loop exit value if it's not -;; a phi node (%indvar is an add instruction in this test). -define i32 @test2(i32* %var) { -; CHECK-LABEL: @test2 -entry: - %cond = icmp eq i32* %var, null - br label %header - -header: - %phi_indvar = phi i32 [0, %entry], [%indvar, %header] - %indvar = add i32 %phi_indvar, 1 - br i1 %cond, label %header, label %exit - -exit: -; CHECK: ret i32 %indvar - ret i32 %indvar -} - -;; Test that we can not rewrite loop exit value if the condition -;; is not in loop header. -define i32 @test3(i32* %var) { -; CHECK-LABEL: @test3 -entry: - %cond1 = icmp eq i32* %var, null - br label %header - -header: - %phi_indvar = phi i32 [0, %entry], [%indvar, %header], [%indvar, %body] - %indvar = add i32 %phi_indvar, 1 - %cond2 = icmp eq i32 %indvar, 10 - br i1 %cond2, label %header, label %body - -body: - br i1 %cond1, label %header, label %exit - -exit: -; CHECK: ret i32 %phi_indvar - ret i32 %phi_indvar -} - diff --git a/llvm/test/Transforms/IndVarSimplify/scev-phi-debug-info.ll b/llvm/test/Transforms/IndVarSimplify/scev-phi-debug-info.ll deleted file mode 100644 index 0eced1aacb7..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/scev-phi-debug-info.ll +++ /dev/null @@ -1,71 +0,0 @@ -; RUN: opt %s -indvars -S -o - | FileCheck %s -source_filename = "/Data/llvm/test/Transforms/IndVarSimplify/scev-phi-debug-info.ll" -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -%struct.status = type { i32, i8* } - -@status = internal unnamed_addr global [32 x %struct.status] zeroinitializer, align 16, !dbg !0 - -define void @f0() local_unnamed_addr !dbg !20 { -entry: - tail call void @llvm.dbg.value(metadata i32 0, metadata !23, metadata !DIExpression()), !dbg !24 - br label %for.cond, !dbg !24 - -for.cond: ; preds = %for.body, %entry - ; CHECK: %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ] - ; CHECK: call void @llvm.dbg.value(metadata i64 %indvars.iv, metadata !23, metadata !DIExpression()), !dbg !24 - %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - tail call void @llvm.dbg.value(metadata i32 %i.0, metadata !23, metadata !DIExpression()), !dbg !24 - %cmp = icmp slt i32 %i.0, 32, !dbg !24 - br i1 %cmp, label %for.body, label %for.end, !dbg !24 - -for.body: ; preds = %for.cond - %idxprom = sext i32 %i.0 to i64, !dbg !24 - %value = getelementptr inbounds [32 x %struct.status], [32 x %struct.status]* @status, i64 0, i64 %idxprom, i32 0, !dbg !24 - store i32 42, i32* %value, align 16, !dbg !24 - tail call void @use(i32 %i.0), !dbg !24 - %inc = add nsw i32 %i.0, 1, !dbg !24 - tail call void @llvm.dbg.value(metadata i32 %inc, metadata !23, metadata !DIExpression()), !dbg !24 - br label %for.cond, !dbg !24 - -for.end: ; preds = %for.cond - ret void, !dbg !24 -} - -declare void @use(i32) - -; Function Attrs: nounwind readnone speculatable -declare void @llvm.dbg.value(metadata, metadata, metadata) #0 - -attributes #0 = { nounwind readnone speculatable } - -!llvm.dbg.cu = !{!2} -!llvm.module.flags = !{!16, !17, !18} -!llvm.ident = !{!19} - -!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression()) -!1 = distinct !DIGlobalVariable(name: "status", scope: !2, file: !3, line: 5, type: !6, isLocal: true, isDefinition: true) -!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang version 6.0.0 (trunk 316001) (llvm/trunk 316171)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5) -!3 = !DIFile(filename: "x.c", directory: "/home/davide/work/llvm/build-release/bin") -!4 = !{} -!5 = !{!0} -!6 = !DICompositeType(tag: DW_TAG_array_type, baseType: !7, size: 4096, elements: !14) -!7 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "status", file: !3, line: 2, size: 128, elements: !8) -!8 = !{!9, !11} -!9 = !DIDerivedType(tag: DW_TAG_member, name: "value", scope: !7, file: !3, line: 3, baseType: !10, size: 32) -!10 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -!11 = !DIDerivedType(tag: DW_TAG_member, name: "p", scope: !7, file: !3, line: 4, baseType: !12, size: 64, offset: 64) -!12 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !13, size: 64) -!13 = !DIBasicType(name: "unsigned char", size: 8, encoding: DW_ATE_unsigned_char) -!14 = !{!15} -!15 = !DISubrange(count: 32) -!16 = !{i32 2, !"Dwarf Version", i32 4} -!17 = !{i32 2, !"Debug Info Version", i32 3} -!18 = !{i32 1, !"wchar_size", i32 4} -!19 = !{!"clang version 6.0.0 (trunk 316001) (llvm/trunk 316171)"} -!20 = distinct !DISubprogram(name: "f0", scope: !3, file: !3, line: 6, type: !21, isLocal: false, isDefinition: true, scopeLine: 7, flags: DIFlagPrototyped, isOptimized: true, unit: !2, retainedNodes: !22) -!21 = !DISubroutineType(types: !4) -!22 = !{!23} -!23 = !DILocalVariable(name: "i", scope: !20, file: !3, line: 8, type: !10) -!24 = !DILocation(line: 9, scope: !20) diff --git a/llvm/test/Transforms/IndVarSimplify/scevexpander-phi-base-case.ll b/llvm/test/Transforms/IndVarSimplify/scevexpander-phi-base-case.ll deleted file mode 100644 index 86b1648e571..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/scevexpander-phi-base-case.ll +++ /dev/null @@ -1,63 +0,0 @@ -; RUN: opt -indvars -S < %s | FileCheck %s - -define i32 @fn() { -entry: - ret i32 10 -} - -define i32 @test_nested2(i32 %tnr) { -; CHECK-LABEL: test_nested2 -; CHECK-NOT: %indvars.iv -; CHECK: %i.0 - -; indvars should not replace the i.0 variable with a new one; SCEVExpander -; should determine that the old one is good to reuse. - -entry: - %res = alloca i32, align 4 - store volatile i32 0, i32* %res, align 4 - %call = call i32 @fn() - br label %for.cond - -for.cond: ; preds = %for.inc6, %entry - %i.0 = phi i32 [ 0, %entry ], [ %inc7, %for.inc6 ] - %cmp = icmp slt i32 %i.0, %call - br i1 %cmp, label %for.body, label %for.cond.cleanup - -for.cond.cleanup: ; preds = %for.cond - br label %for.end8 - -for.body: ; preds = %for.cond - br label %for.cond1 - -for.cond1: ; preds = %for.inc, %for.body - %j.0 = phi i32 [ 0, %for.body ], [ %inc5, %for.inc ] - %cmp2 = icmp slt i32 %j.0, %i.0 - br i1 %cmp2, label %for.body4, label %for.cond.cleanup3 - -for.cond.cleanup3: ; preds = %for.cond1 - br label %for.end - -for.body4: ; preds = %for.cond1 - %0 = load volatile i32, i32* %res, align 4 - %inc = add nsw i32 %0, 1 - store volatile i32 %inc, i32* %res, align 4 - br label %for.inc - -for.inc: ; preds = %for.body4 - %inc5 = add nsw i32 %j.0, 1 - br label %for.cond1 - -for.end: ; preds = %for.cond.cleanup3 - br label %for.inc6 - -for.inc6: ; preds = %for.end - %inc7 = add nsw i32 %i.0, 1 - br label %for.cond - -for.end8: ; preds = %for.cond.cleanup - %1 = load volatile i32, i32* %res, align 4 - %cmp9 = icmp eq i32 %1, 45 - %conv = zext i1 %cmp9 to i32 - ret i32 %conv -} diff --git a/llvm/test/Transforms/IndVarSimplify/sharpen-range.ll b/llvm/test/Transforms/IndVarSimplify/sharpen-range.ll deleted file mode 100644 index e9fac3900a5..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/sharpen-range.ll +++ /dev/null @@ -1,114 +0,0 @@ -;; RUN: opt -S < %s -indvars | FileCheck %s -; RUN: opt -lcssa -loop-simplify -S < %s | opt -S -passes='require<targetir>,require<scalar-evolution>,require<domtree>,loop(indvars)' - -;; Check if llvm can narrow !range metadata based on loop entry -;; predicates. - -declare void @abort() - -define i1 @bounded_below_slt(i32* nocapture readonly %buffer) { -; CHECK-LABEL: bounded_below_slt -entry: - %length = load i32, i32* %buffer, !range !0 - %entry.pred = icmp eq i32 %length, 0 - br i1 %entry.pred, label %abort, label %loop.preheader - -loop.preheader: - br label %loop - -loop: -; CHECK: loop - %idx = phi i32 [ %idx.inc, %loop.next ], [ 0, %loop.preheader ] - %oob.pred = icmp slt i32 %idx, %length - br i1 %oob.pred, label %loop.next, label %oob -; CHECK: br i1 true, label %loop.next, label %oob - -loop.next: -; CHECK: loop.next - %idx.inc = add i32 %idx, 1 - %exit.pred = icmp slt i32 %idx.inc, %length - br i1 %exit.pred, label %loop, label %abort.loopexit - -abort.loopexit: - br label %abort - -abort: - ret i1 false - -oob: - tail call void @abort() - ret i1 false -} - -define i1 @bounded_below_sle(i32* nocapture readonly %buffer) { -; CHECK-LABEL: bounded_below_sle -entry: - %length = load i32, i32* %buffer, !range !0 - %entry.pred = icmp eq i32 %length, 0 - br i1 %entry.pred, label %abort, label %loop.preheader - -loop.preheader: - br label %loop - -loop: -; CHECK: loop - %idx = phi i32 [ %idx.inc, %loop.next ], [ 0, %loop.preheader ] - %oob.pred = icmp sle i32 %idx, %length - br i1 %oob.pred, label %loop.next, label %oob -; CHECK: br i1 true, label %loop.next, label %oob - -loop.next: -; CHECK: loop.next - %idx.inc = add i32 %idx, 1 - %exit.pred = icmp sle i32 %idx.inc, %length - br i1 %exit.pred, label %loop, label %abort.loopexit - -abort.loopexit: - br label %abort - -abort: - ret i1 false - -oob: - tail call void @abort() - ret i1 false -} - -;; Assert that we're not making an incorrect transform. - -declare i32 @check(i8*) - -define void @NoChange() { -; CHECK-LABEL: NoChange -entry: - br label %loop.begin - -loop.begin: -; CHECK: loop.begin: - %i.01 = phi i64 [ 2, %entry ], [ %add, %loop.end ] - %cmp = icmp ugt i64 %i.01, 1 -; CHECK: %cmp = icmp ugt i64 %i.01, 1 - br i1 %cmp, label %loop, label %loop.end - -loop: -; CHECK: loop - %.sum = add i64 %i.01, -2 - %v = getelementptr inbounds i8, i8* null, i64 %.sum - %r = tail call i32 @check(i8* %v) - %c = icmp eq i32 %r, 0 - br i1 %c, label %loop.end, label %abort.now - -abort.now: - tail call void @abort() - unreachable - -loop.end: - %add = add i64 %i.01, -1 - %eq = icmp eq i64 %add, 0 - br i1 %eq, label %exit, label %loop.begin - -exit: - ret void -} - -!0 = !{i32 0, i32 100} diff --git a/llvm/test/Transforms/IndVarSimplify/shrunk-constant.ll b/llvm/test/Transforms/IndVarSimplify/shrunk-constant.ll deleted file mode 100644 index ba20b2c6a51..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/shrunk-constant.ll +++ /dev/null @@ -1,16 +0,0 @@ -; RUN: opt < %s -scalar-evolution -analyze | FileCheck %s - -; CHECK: --> (1 + (zext i4 {-8,+,-8}<%loop> to i32))<nuw><nsw> - -define fastcc void @foo() nounwind { -entry: - br label %loop - -loop: - %i = phi i32 [ 0, %entry ], [ %t2, %loop ] - %t0 = add i32 %i, 9 - %t1 = and i32 %t0, 9 - store i32 %t1, i32* null - %t2 = add i32 %i, 8 - br label %loop -} diff --git a/llvm/test/Transforms/IndVarSimplify/signed-trip-count.ll b/llvm/test/Transforms/IndVarSimplify/signed-trip-count.ll deleted file mode 100644 index 41968ac0518..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/signed-trip-count.ll +++ /dev/null @@ -1,36 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -; Provide legal integer types. -target datalayout = "n8:16:32:64" - - -define void @foo(i64* nocapture %x, i32 %n) nounwind { -; CHECK-LABEL: @foo( -; CHECK-NOT: sext -; CHECK: phi -; CHECK-NOT: phi -entry: - %tmp102 = icmp sgt i32 %n, 0 ; <i1> [#uses=1] - br i1 %tmp102, label %bb.nph, label %return - -bb.nph: ; preds = %entry - br label %bb - -bb: ; preds = %bb7, %bb.nph - %i.01 = phi i32 [ %tmp6, %bb7 ], [ 0, %bb.nph ] ; <i32> [#uses=3] - %tmp1 = sext i32 %i.01 to i64 ; <i64> [#uses=1] - %tmp4 = getelementptr i64, i64* %x, i32 %i.01 ; <i64*> [#uses=1] - store i64 %tmp1, i64* %tmp4, align 8 - %tmp6 = add i32 %i.01, 1 ; <i32> [#uses=2] - br label %bb7 - -bb7: ; preds = %bb - %tmp10 = icmp slt i32 %tmp6, %n ; <i1> [#uses=1] - br i1 %tmp10, label %bb, label %bb7.return_crit_edge - -bb7.return_crit_edge: ; preds = %bb7 - br label %return - -return: ; preds = %bb7.return_crit_edge, %entry - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/single-element-range.ll b/llvm/test/Transforms/IndVarSimplify/single-element-range.ll deleted file mode 100644 index e047a0b254e..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/single-element-range.ll +++ /dev/null @@ -1,27 +0,0 @@ -; RUN: opt < %s -indvars - -target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:64:64-v128:128:128-a0:0:64" -target triple = "armv6-apple-darwin10" - -define void @sqlite3_free_table(i8** %azResult) nounwind { -entry: - br i1 undef, label %return, label %bb - -bb: ; preds = %entry - %0 = load i8*, i8** undef, align 4 ; <i8*> [#uses=2] - %1 = ptrtoint i8* %0 to i32 ; <i32> [#uses=1] - %2 = icmp sgt i8* %0, inttoptr (i32 1 to i8*) ; <i1> [#uses=1] - br i1 %2, label %bb1, label %bb5 - -bb1: ; preds = %bb1, %bb - %i.01 = phi i32 [ %3, %bb1 ], [ 1, %bb ] ; <i32> [#uses=1] - %3 = add i32 %i.01, 1 ; <i32> [#uses=2] - %4 = icmp slt i32 %3, %1 ; <i1> [#uses=1] - br i1 %4, label %bb1, label %bb5 - -bb5: ; preds = %bb1, %bb - ret void - -return: ; preds = %entry - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/sink-alloca.ll b/llvm/test/Transforms/IndVarSimplify/sink-alloca.ll deleted file mode 100644 index 38c2d3140de..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/sink-alloca.ll +++ /dev/null @@ -1,56 +0,0 @@ -; RUN: opt < %s -indvars -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" -target triple = "i386-apple-darwin10.0" - -; PR4775 -; Indvars shouldn't sink the alloca out of the entry block, even though -; it's not used until after the loop. -define i32 @main() nounwind { -; CHECK: entry: -; CHECK-NEXT: %result.i = alloca i32, align 4 -entry: - %result.i = alloca i32, align 4 ; <i32*> [#uses=2] - br label %while.cond - -while.cond: ; preds = %while.cond, %entry - %call = call i32 @bar() nounwind ; <i32> [#uses=1] - %tobool = icmp eq i32 %call, 0 ; <i1> [#uses=1] - br i1 %tobool, label %while.end, label %while.cond - -while.end: ; preds = %while.cond - store volatile i32 0, i32* %result.i - %tmp.i = load volatile i32, i32* %result.i ; <i32> [#uses=0] - ret i32 0 -} -declare i32 @bar() - -; <rdar://problem/10352360> -; Indvars shouldn't sink the first alloca between the stacksave and stackrestore -; intrinsics. -declare i8* @a(...) -declare i8* @llvm.stacksave() nounwind -declare void @llvm.stackrestore(i8*) nounwind -define void @h(i64 %n) nounwind uwtable ssp { -; CHECK: entry: -; CHECK-NEXT: %vla = alloca i8* -; CHECK-NEXT: %savedstack = call i8* @llvm.stacksave() -entry: - %vla = alloca i8*, i64 %n, align 16 - %savedstack = call i8* @llvm.stacksave() nounwind - %vla.i = alloca i8*, i64 %n, align 16 - br label %for.body.i - -for.body.i: - %indvars.iv37.i = phi i64 [ %indvars.iv.next38.i, %for.body.i ], [ 0, %entry ] - %call.i = call i8* (...) @a() nounwind - %arrayidx.i = getelementptr inbounds i8*, i8** %vla.i, i64 %indvars.iv37.i - store i8* %call.i, i8** %arrayidx.i, align 8 - %indvars.iv.next38.i = add i64 %indvars.iv37.i, 1 - %exitcond5 = icmp eq i64 %indvars.iv.next38.i, %n - br i1 %exitcond5, label %g.exit, label %for.body.i - -g.exit: - call void @llvm.stackrestore(i8* %savedstack) nounwind - %call1 = call i8* (...) @a(i8** %vla) nounwind - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/sink-from-preheader.ll b/llvm/test/Transforms/IndVarSimplify/sink-from-preheader.ll deleted file mode 100644 index 29e8b638281..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/sink-from-preheader.ll +++ /dev/null @@ -1,32 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt < %s -indvars -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" -target triple = "i386-apple-darwin10.0" - -; We make sinking here, Changed flag should be set properly. -define i32 @test(i32 %a, i32 %b, i32 %N) { -; CHECK-LABEL: @test( -; CHECK-NEXT: entry: -; CHECK-NEXT: br label [[LOOP:%.*]] -; CHECK: loop: -; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1 -; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[IV_NEXT]], [[N:%.*]] -; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]] -; CHECK: exit: -; CHECK-NEXT: [[ADD:%.*]] = add i32 [[A:%.*]], [[B:%.*]] -; CHECK-NEXT: ret i32 [[ADD]] -; -entry: - %add = add i32 %a, %b - br label %loop - -loop: - %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ] - %iv.next = add i32 %iv, 1 - %cmp = icmp slt i32 %iv.next, %N - br i1 %cmp, label %loop, label %exit - -exit: - ret i32 %add -} diff --git a/llvm/test/Transforms/IndVarSimplify/sink-trapping.ll b/llvm/test/Transforms/IndVarSimplify/sink-trapping.ll deleted file mode 100644 index d6e04950760..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/sink-trapping.ll +++ /dev/null @@ -1,19 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -declare i1 @b() - -define i32 @a(i32 %x) nounwind { -for.body.preheader: - %y = sdiv i32 10, %x - br label %for.body - -for.body: - %cmp = call i1 @b() - br i1 %cmp, label %for.body, label %for.end.loopexit - -for.end.loopexit: - ret i32 %y -} -; CHECK: for.end.loopexit: -; CHECK: sdiv -; CHECK: ret diff --git a/llvm/test/Transforms/IndVarSimplify/strengthen-overflow.ll b/llvm/test/Transforms/IndVarSimplify/strengthen-overflow.ll deleted file mode 100644 index 6e0538e04d6..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/strengthen-overflow.ll +++ /dev/null @@ -1,192 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -define i32 @test.signed.add.0(i32* %array, i32 %length, i32 %init) { -; CHECK-LABEL: @test.signed.add.0 - entry: - %upper = icmp slt i32 %init, %length - br i1 %upper, label %loop, label %exit - - loop: -; CHECK-LABEL: loop - %civ = phi i32 [ %init, %entry ], [ %civ.inc, %latch ] - %civ.inc = add i32 %civ, 1 -; CHECK: %civ.inc = add nsw i32 %civ, 1 - %cmp = icmp slt i32 %civ.inc, %length - br i1 %cmp, label %latch, label %break - - latch: - store i32 0, i32* %array - %check = icmp slt i32 %civ.inc, %length - br i1 %check, label %loop, label %break - - break: - ret i32 %civ.inc - - exit: - ret i32 42 -} - -define i32 @test.signed.add.1(i32* %array, i32 %length, i32 %init) { -; CHECK-LABEL: @test.signed.add.1 - entry: - %upper = icmp sle i32 %init, %length - br i1 %upper, label %loop, label %exit - - loop: -; CHECK-LABEL: loop - %civ = phi i32 [ %init, %entry ], [ %civ.inc, %latch ] - %civ.inc = add i32 %civ, 1 -; CHECK: %civ.inc = add i32 %civ, 1 - %cmp = icmp slt i32 %civ.inc, %length - br i1 %cmp, label %latch, label %break - - latch: - store i32 0, i32* %array - %check = icmp slt i32 %civ.inc, %length - br i1 %check, label %loop, label %break - - break: - ret i32 %civ.inc - - exit: - ret i32 42 -} - -define i32 @test.unsigned.add.0(i32* %array, i32 %length, i32 %init) { -; CHECK-LABEL: @test.unsigned.add.0 - entry: - %upper = icmp ult i32 %init, %length - br i1 %upper, label %loop, label %exit - - loop: -; CHECK-LABEL: loop - %civ = phi i32 [ %init, %entry ], [ %civ.inc, %latch ] - %civ.inc = add i32 %civ, 1 -; CHECK: %civ.inc = add nuw i32 %civ, 1 - %cmp = icmp slt i32 %civ.inc, %length - br i1 %cmp, label %latch, label %break - - latch: - store i32 0, i32* %array - %check = icmp ult i32 %civ.inc, %length - br i1 %check, label %loop, label %break - - break: - ret i32 %civ.inc - - exit: - ret i32 42 -} - -define i32 @test.unsigned.add.1(i32* %array, i32 %length, i32 %init) { -; CHECK-LABEL: @test.unsigned.add.1 - entry: - %upper = icmp ule i32 %init, %length - br i1 %upper, label %loop, label %exit - - loop: -; CHECK-LABEL: loop - %civ = phi i32 [ %init, %entry ], [ %civ.inc, %latch ] - %civ.inc = add i32 %civ, 1 -; CHECK: %civ.inc = add i32 %civ, 1 - %cmp = icmp slt i32 %civ.inc, %length - br i1 %cmp, label %latch, label %break - - latch: - store i32 0, i32* %array - %check = icmp ult i32 %civ.inc, %length - br i1 %check, label %loop, label %break - - break: - ret i32 %civ.inc - - exit: - ret i32 42 -} - -define hidden void @test.shl.exact.equal() { -; CHECK-LABEL: @test.shl.exact.equal -entry: - br label %for.body - -for.body: -; CHECK-LABEL: for.body - %k.021 = phi i32 [ 1, %entry ], [ %inc, %for.body ] - %shl = shl i32 1, %k.021 - %shr1 = ashr i32 %shl, 1 -; CHECK: %shr1 = ashr exact i32 %shl, 1 - %shr2 = lshr i32 %shl, 1 -; CHECK: %shr2 = lshr exact i32 %shl, 1 - %inc = add nuw nsw i32 %k.021, 1 - %exitcond = icmp eq i32 %inc, 9 - br i1 %exitcond, label %for.end, label %for.body - -for.end: - ret void -} - -define hidden void @test.shl.exact.greater() { -; CHECK-LABEL: @test.shl.exact.greater -entry: - br label %for.body - -for.body: -; CHECK-LABEL: for.body - %k.021 = phi i32 [ 3, %entry ], [ %inc, %for.body ] - %shl = shl i32 1, %k.021 - %shr1 = ashr i32 %shl, 2 -; CHECK: %shr1 = ashr exact i32 %shl, 2 - %shr2 = lshr i32 %shl, 2 -; CHECK: %shr2 = lshr exact i32 %shl, 2 - %inc = add nuw nsw i32 %k.021, 1 - %exitcond = icmp eq i32 %inc, 9 - br i1 %exitcond, label %for.end, label %for.body - -for.end: - ret void -} - -define hidden void @test.shl.exact.unbound(i32 %arg) { -; CHECK-LABEL: @test.shl.exact.unbound -entry: - br label %for.body - -for.body: -; CHECK-LABEL: for.body - %k.021 = phi i32 [ 2, %entry ], [ %inc, %for.body ] - %shl = shl i32 1, %k.021 - %shr1 = ashr i32 %shl, 2 -; CHECK: %shr1 = ashr exact i32 %shl, 2 - %shr2 = lshr i32 %shl, 2 -; CHECK: %shr2 = lshr exact i32 %shl, 2 - %inc = add nuw nsw i32 %k.021, 1 - %exitcond = icmp eq i32 %inc, %arg - br i1 %exitcond, label %for.end, label %for.body - -for.end: - ret void -} - -define hidden void @test.shl.nonexact() { -; CHECK-LABEL: @test.shl.nonexact -entry: - br label %for.body - -for.body: -; CHECK-LABEL: for.body - %k.021 = phi i32 [ 2, %entry ], [ %inc, %for.body ] - %shl = shl i32 1, %k.021 - %shr1 = ashr i32 %shl, 3 -; CHECK: %shr1 = ashr i32 %shl, 3 - %shr2 = lshr i32 %shl, 3 -; CHECK: %shr2 = lshr i32 %shl, 3 - %inc = add nuw nsw i32 %k.021, 1 - %exitcond = icmp eq i32 %inc, 9 - br i1 %exitcond, label %for.end, label %for.body - -for.end: - ret void -} - -!0 = !{i32 0, i32 2} -!1 = !{i32 0, i32 42} diff --git a/llvm/test/Transforms/IndVarSimplify/tripcount_compute.ll b/llvm/test/Transforms/IndVarSimplify/tripcount_compute.ll deleted file mode 100644 index 966d152cda6..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/tripcount_compute.ll +++ /dev/null @@ -1,193 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s - -; These tests ensure that we can compute the trip count of various forms of -; loops. If the trip count of the loop is computable, then we will know what -; the exit value of the loop will be for some value, allowing us to substitute -; it directly into users outside of the loop, making the loop dead. - -; CHECK-LABEL: @linear_setne( -; CHECK: ret i32 100 - -define i32 @linear_setne() { -entry: - br label %loop - -loop: ; preds = %loop, %entry - %i = phi i32 [ 0, %entry ], [ %i.next, %loop ] ; <i32> [#uses=3] - %i.next = add i32 %i, 1 ; <i32> [#uses=1] - %c = icmp ne i32 %i, 100 ; <i1> [#uses=1] - br i1 %c, label %loop, label %loopexit - -loopexit: ; preds = %loop - ret i32 %i -} - -; CHECK-LABEL: @linear_setne_2( -; CHECK: ret i32 100 - -define i32 @linear_setne_2() { -entry: - br label %loop - -loop: ; preds = %loop, %entry - %i = phi i32 [ 0, %entry ], [ %i.next, %loop ] ; <i32> [#uses=3] - %i.next = add i32 %i, 2 ; <i32> [#uses=1] - %c = icmp ne i32 %i, 100 ; <i1> [#uses=1] - br i1 %c, label %loop, label %loopexit - -loopexit: ; preds = %loop - ret i32 %i -} - -; CHECK-LABEL: @linear_setne_overflow( -; CHECK: ret i32 0 - -define i32 @linear_setne_overflow() { -entry: - br label %loop - -loop: ; preds = %loop, %entry - %i = phi i32 [ 1024, %entry ], [ %i.next, %loop ] ; <i32> [#uses=3] - %i.next = add i32 %i, 1024 ; <i32> [#uses=1] - %c = icmp ne i32 %i, 0 ; <i1> [#uses=1] - br i1 %c, label %loop, label %loopexit - -loopexit: ; preds = %loop - ret i32 %i -} - -; CHECK-LABEL: @linear_setlt( -; CHECK: ret i32 100 - -define i32 @linear_setlt() { -entry: - br label %loop - -loop: ; preds = %loop, %entry - %i = phi i32 [ 0, %entry ], [ %i.next, %loop ] ; <i32> [#uses=3] - %i.next = add i32 %i, 1 ; <i32> [#uses=1] - %c = icmp slt i32 %i, 100 ; <i1> [#uses=1] - br i1 %c, label %loop, label %loopexit - -loopexit: ; preds = %loop - ret i32 %i -} - -; CHECK-LABEL: @quadratic_setlt( -; CHECK: ret i32 34 - -define i32 @quadratic_setlt() { -entry: - br label %loop - -loop: ; preds = %loop, %entry - %i = phi i32 [ 7, %entry ], [ %i.next, %loop ] ; <i32> [#uses=4] - %i.next = add i32 %i, 3 ; <i32> [#uses=1] - %i2 = mul i32 %i, %i ; <i32> [#uses=1] - %c = icmp slt i32 %i2, 1000 ; <i1> [#uses=1] - br i1 %c, label %loop, label %loopexit - -loopexit: ; preds = %loop - ret i32 %i -} - -; CHECK-LABEL: @chained( -; CHECK: ret i32 200 - -define i32 @chained() { -entry: - br label %loop - -loop: ; preds = %loop, %entry - %i = phi i32 [ 0, %entry ], [ %i.next, %loop ] ; <i32> [#uses=3] - %i.next = add i32 %i, 1 ; <i32> [#uses=1] - %c = icmp ne i32 %i, 100 ; <i1> [#uses=1] - br i1 %c, label %loop, label %loopexit - -loopexit: ; preds = %loop - br label %loop2 - -loop2: ; preds = %loop2, %loopexit - %j = phi i32 [ %i, %loopexit ], [ %j.next, %loop2 ] ; <i32> [#uses=3] - %j.next = add i32 %j, 1 ; <i32> [#uses=1] - %c2 = icmp ne i32 %j, 200 ; <i1> [#uses=1] - br i1 %c2, label %loop2, label %loopexit2 - -loopexit2: ; preds = %loop2 - ret i32 %j -} - -; CHECK-LABEL: @chained4( -; CHECK: ret i32 400 - -define i32 @chained4() { -entry: - br label %loop - -loop: ; preds = %loop, %entry - %i = phi i32 [ 0, %entry ], [ %i.next, %loop ] ; <i32> [#uses=3] - %i.next = add i32 %i, 1 ; <i32> [#uses=1] - %c = icmp ne i32 %i.next, 100 ; <i1> [#uses=1] - br i1 %c, label %loop, label %loopexit - -loopexit: ; preds = %loop - br label %loop2 - -loop2: ; preds = %loop2, %loopexit - %j = phi i32 [ %i.next, %loopexit ], [ %j.next, %loop2 ] ; <i32> [#uses=3] - %j.next = add i32 %j, 1 ; <i32> [#uses=1] - %c2 = icmp ne i32 %j.next, 200 ; <i1> [#uses=1] - br i1 %c2, label %loop2, label %loopexit2 - -loopexit2: ; preds = %loop - br label %loop8 - -loop8: ; preds = %loop2, %loopexit - %k = phi i32 [ %j.next, %loopexit2 ], [ %k.next, %loop8 ] ; <i32> [#uses=3] - %k.next = add i32 %k, 1 ; <i32> [#uses=1] - %c8 = icmp ne i32 %k.next, 300 ; <i1> [#uses=1] - br i1 %c8, label %loop8, label %loopexit8 - -loopexit8: ; preds = %loop2 - br label %loop9 - -loop9: ; preds = %loop2, %loopexit - %l = phi i32 [ %k.next, %loopexit8 ], [ %l.next, %loop9 ] ; <i32> [#uses=3] - %l.next = add i32 %l, 1 ; <i32> [#uses=1] - %c9 = icmp ne i32 %l.next, 400 ; <i1> [#uses=1] - br i1 %c9, label %loop9, label %loopexit9 - -loopexit9: ; preds = %loop2 - ret i32 %l.next -} - -; PR18449. Check that the early exit is reduced to never taken. -; -; CHECK-LABEL: @twoexit -; CHECK-LABEL: loop: -; CHECK: phi -; CHECK: br i1 false -; CHECK: br -; CHECK: ret -define void @twoexit() { -"function top level": - br label %loop - -loop: ; preds = %body, %"function top level" - %0 = phi i64 [ 0, %"function top level" ], [ %2, %body ] - %1 = icmp ugt i64 %0, 2 - br i1 %1, label %fail, label %body - -fail: ; preds = %loop - tail call void @bounds_fail() - unreachable - -body: ; preds = %loop - %2 = add i64 %0, 1 - %3 = icmp slt i64 %2, 3 - br i1 %3, label %loop, label %out - -out: ; preds = %body - ret void -} -declare void @bounds_fail() diff --git a/llvm/test/Transforms/IndVarSimplify/tripcount_infinite.ll b/llvm/test/Transforms/IndVarSimplify/tripcount_infinite.ll deleted file mode 100644 index 658598d3b7e..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/tripcount_infinite.ll +++ /dev/null @@ -1,45 +0,0 @@ -; These tests have an infinite trip count. We obviously shouldn't remove the -; loops! :) -; -; RUN: opt < %s -indvars -adce -simplifycfg -S | FileCheck %s - -;; test for (i = 1; i != 100; i += 2) -define i32 @infinite_linear() { -; CHECK-LABEL: @infinite_linear( -entry: - br label %loop - -loop: ; preds = %loop, %entry -; CHECK-LABEL: loop: - %i = phi i32 [ 1, %entry ], [ %i.next, %loop ] ; <i32> [#uses=3] - %i.next = add i32 %i, 2 ; <i32> [#uses=1] - %c = icmp ne i32 %i, 100 ; <i1> [#uses=1] -; CHECK: icmp -; CHECK: br - br i1 %c, label %loop, label %loopexit - -loopexit: ; preds = %loop -; CHECK-LABEL: loopexit: - ret i32 %i -} - -;; test for (i = 1; i*i != 63; ++i) -define i32 @infinite_quadratic() { -; CHECK-LABEL: @infinite_quadratic( -entry: - br label %loop - -loop: ; preds = %loop, %entry -; CHECK-LABEL: loop: - %i = phi i32 [ 1, %entry ], [ %i.next, %loop ] ; <i32> [#uses=4] - %isquare = mul i32 %i, %i ; <i32> [#uses=1] - %i.next = add i32 %i, 1 ; <i32> [#uses=1] - %c = icmp ne i32 %isquare, 63 ; <i1> [#uses=1] -; CHECK: icmp -; CHECK: br - br i1 %c, label %loop, label %loopexit - -loopexit: ; preds = %loop -; CHECK-LABEL: loopexit: - ret i32 %i -} diff --git a/llvm/test/Transforms/IndVarSimplify/udiv-invariant-but-traps.ll b/llvm/test/Transforms/IndVarSimplify/udiv-invariant-but-traps.ll deleted file mode 100644 index ef38f5d6a91..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/udiv-invariant-but-traps.ll +++ /dev/null @@ -1,32 +0,0 @@ -; RUN: opt -indvars -S < %s | FileCheck %s - -@b = common global i32 0, align 4 - -define i32 @foo(i32 %x, i1 %y) { -bb0: - br label %bb1 - -bb1: - br i1 %y, label %bb14, label %bb8 - -bb8: - %i = phi i64 [ %i.next, %bb8 ], [ 0, %bb1 ] - %i.next = add i64 %i, 1 - %div = udiv i32 1, %x - %c = icmp eq i64 %i.next, 6 - br i1 %c, label %bb11, label %bb8 - -bb11: - br i1 %y, label %bb1, label %bb13 - -bb13: - store i32 %div, i32* @b, align 4 - br label %bb14 - -bb14: - ret i32 0 -} - -; CHECK-LABEL: @foo( -; CHECK: bb8: -; CHECK: udiv diff --git a/llvm/test/Transforms/IndVarSimplify/udiv.ll b/llvm/test/Transforms/IndVarSimplify/udiv.ll deleted file mode 100644 index b3f2c2a6a66..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/udiv.ll +++ /dev/null @@ -1,162 +0,0 @@ -; RUN: opt -indvars -S < %s | 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-n8:16:32:64" - -@main.flags = internal global [8193 x i8] zeroinitializer, align 1 ; <[8193 x i8]*> [#uses=5] -@.str = private constant [11 x i8] c"Count: %d\0A\00" ; <[11 x i8]*> [#uses=1] - -; Indvars shouldn't emit a udiv here, because there's no udiv in the -; original code. This comes from SingleSource/Benchmarks/Shootout/sieve.c. - -; CHECK-LABEL: @main( -; CHECK-NOT: div - -define i32 @main(i32 %argc, i8** nocapture %argv) nounwind { -entry: - %cmp = icmp eq i32 %argc, 2 ; <i1> [#uses=1] - br i1 %cmp, label %cond.true, label %while.cond.preheader - -cond.true: ; preds = %entry - %arrayidx = getelementptr inbounds i8*, i8** %argv, i64 1 ; <i8**> [#uses=1] - %tmp2 = load i8*, i8** %arrayidx ; <i8*> [#uses=1] - %call = tail call i32 @atoi(i8* %tmp2) nounwind readonly ; <i32> [#uses=1] - br label %while.cond.preheader - -while.cond.preheader: ; preds = %entry, %cond.true - %NUM.0.ph = phi i32 [ %call, %cond.true ], [ 170000, %entry ] ; <i32> [#uses=2] - %tobool18 = icmp eq i32 %NUM.0.ph, 0 ; <i1> [#uses=1] - br i1 %tobool18, label %while.end, label %bb.nph30 - -while.cond.loopexit: ; preds = %for.cond12.while.cond.loopexit_crit_edge, %for.cond12.loopexit - %count.2.lcssa = phi i32 [ %count.1.lcssa, %for.cond12.while.cond.loopexit_crit_edge ], [ 0, %for.cond12.loopexit ] ; <i32> [#uses=1] - br label %while.cond - -while.cond: ; preds = %while.cond.loopexit - %tobool = icmp eq i32 %dec19, 0 ; <i1> [#uses=1] - br i1 %tobool, label %while.cond.while.end_crit_edge, label %for.cond.preheader - -while.cond.while.end_crit_edge: ; preds = %while.cond - %count.2.lcssa.lcssa = phi i32 [ %count.2.lcssa, %while.cond ] ; <i32> [#uses=1] - br label %while.end - -bb.nph30: ; preds = %while.cond.preheader - br label %for.cond.preheader - -for.cond.preheader: ; preds = %bb.nph30, %while.cond - %dec19.in = phi i32 [ %NUM.0.ph, %bb.nph30 ], [ %dec19, %while.cond ] ; <i32> [#uses=1] - %dec19 = add i32 %dec19.in, -1 ; <i32> [#uses=2] - br i1 true, label %bb.nph, label %for.cond12.loopexit - -for.cond: ; preds = %for.body - %cmp8 = icmp slt i64 %inc, 8193 ; <i1> [#uses=1] - br i1 %cmp8, label %for.body, label %for.cond.for.cond12.loopexit_crit_edge - -for.cond.for.cond12.loopexit_crit_edge: ; preds = %for.cond - br label %for.cond12.loopexit - -bb.nph: ; preds = %for.cond.preheader - br label %for.body - -for.body: ; preds = %bb.nph, %for.cond - %i.02 = phi i64 [ 2, %bb.nph ], [ %inc, %for.cond ] ; <i64> [#uses=2] - %arrayidx10 = getelementptr inbounds [8193 x i8], [8193 x i8]* @main.flags, i64 0, i64 %i.02 ; <i8*> [#uses=1] - store i8 1, i8* %arrayidx10 - %inc = add nsw i64 %i.02, 1 ; <i64> [#uses=2] - br label %for.cond - -for.cond12.loopexit: ; preds = %for.cond.for.cond12.loopexit_crit_edge, %for.cond.preheader - br i1 true, label %bb.nph16, label %while.cond.loopexit - -for.cond12: ; preds = %for.inc35 - %cmp14 = icmp slt i64 %inc37, 8193 ; <i1> [#uses=1] - br i1 %cmp14, label %for.body15, label %for.cond12.while.cond.loopexit_crit_edge - -for.cond12.while.cond.loopexit_crit_edge: ; preds = %for.cond12 - %count.1.lcssa = phi i32 [ %count.1, %for.cond12 ] ; <i32> [#uses=1] - br label %while.cond.loopexit - -bb.nph16: ; preds = %for.cond12.loopexit - br label %for.body15 - -for.body15: ; preds = %bb.nph16, %for.cond12 - %count.212 = phi i32 [ 0, %bb.nph16 ], [ %count.1, %for.cond12 ] ; <i32> [#uses=2] - %i.17 = phi i64 [ 2, %bb.nph16 ], [ %inc37, %for.cond12 ] ; <i64> [#uses=4] - %arrayidx17 = getelementptr inbounds [8193 x i8], [8193 x i8]* @main.flags, i64 0, i64 %i.17 ; <i8*> [#uses=1] - %tmp18 = load i8, i8* %arrayidx17 ; <i8> [#uses=1] - %tobool19 = icmp eq i8 %tmp18, 0 ; <i1> [#uses=1] - br i1 %tobool19, label %for.inc35, label %if.then - -if.then: ; preds = %for.body15 - %add = shl i64 %i.17, 1 ; <i64> [#uses=2] - %cmp243 = icmp slt i64 %add, 8193 ; <i1> [#uses=1] - br i1 %cmp243, label %bb.nph5, label %for.end32 - -for.cond22: ; preds = %for.body25 - %cmp24 = icmp slt i64 %add31, 8193 ; <i1> [#uses=1] - br i1 %cmp24, label %for.body25, label %for.cond22.for.end32_crit_edge - -for.cond22.for.end32_crit_edge: ; preds = %for.cond22 - br label %for.end32 - -bb.nph5: ; preds = %if.then - br label %for.body25 - -for.body25: ; preds = %bb.nph5, %for.cond22 - %k.04 = phi i64 [ %add, %bb.nph5 ], [ %add31, %for.cond22 ] ; <i64> [#uses=2] - %arrayidx27 = getelementptr inbounds [8193 x i8], [8193 x i8]* @main.flags, i64 0, i64 %k.04 ; <i8*> [#uses=1] - store i8 0, i8* %arrayidx27 - %add31 = add nsw i64 %k.04, %i.17 ; <i64> [#uses=2] - br label %for.cond22 - -for.end32: ; preds = %for.cond22.for.end32_crit_edge, %if.then - %inc34 = add nsw i32 %count.212, 1 ; <i32> [#uses=1] - br label %for.inc35 - -for.inc35: ; preds = %for.body15, %for.end32 - %count.1 = phi i32 [ %inc34, %for.end32 ], [ %count.212, %for.body15 ] ; <i32> [#uses=2] - %inc37 = add nsw i64 %i.17, 1 ; <i64> [#uses=2] - br label %for.cond12 - -while.end: ; preds = %while.cond.while.end_crit_edge, %while.cond.preheader - %count.0.lcssa = phi i32 [ %count.2.lcssa.lcssa, %while.cond.while.end_crit_edge ], [ 0, %while.cond.preheader ] ; <i32> [#uses=1] - %call40 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %count.0.lcssa) nounwind ; <i32> [#uses=0] - ret i32 0 -} - -declare i32 @atoi(i8* nocapture) nounwind readonly - -declare i32 @printf(i8* nocapture, ...) nounwind - -; IndVars doesn't emit a udiv in for.body.preheader since SCEVExpander::expand will -; find out there's already a udiv in the original code. - -; CHECK-LABEL: @foo( -; CHECK: for.body.preheader: -; CHECK-NOT: udiv - -define void @foo(double* %p, i64 %n) nounwind { -entry: - %div0 = udiv i64 %n, 7 ; <i64> [#uses=1] - %div1 = add i64 %div0, 1 - %cmp2 = icmp ult i64 0, %div1 ; <i1> [#uses=1] - br i1 %cmp2, label %for.body.preheader, label %for.end - -for.body.preheader: ; preds = %entry - br label %for.body - -for.body: ; preds = %for.body.preheader, %for.body - %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ] ; <i64> [#uses=2] - %arrayidx = getelementptr inbounds double, double* %p, i64 %i.03 ; <double*> [#uses=1] - store double 0.000000e+00, double* %arrayidx - %inc = add i64 %i.03, 1 ; <i64> [#uses=2] - %divx = udiv i64 %n, 7 ; <i64> [#uses=1] - %div = add i64 %divx, 1 - %cmp = icmp ult i64 %inc, %div ; <i1> [#uses=1] - br i1 %cmp, label %for.body, label %for.end.loopexit - -for.end.loopexit: ; preds = %for.body - br label %for.end - -for.end: ; preds = %for.end.loopexit, %entry - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/uglygep.ll b/llvm/test/Transforms/IndVarSimplify/uglygep.ll deleted file mode 100644 index 4ee231f932c..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/uglygep.ll +++ /dev/null @@ -1,42 +0,0 @@ -; RUN: opt -indvars -S < %s | FileCheck %s -; rdar://8197217 - -; Indvars should be able to emit a clean GEP here, not an uglygep. - -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-n8:16:32:64" -target triple = "x86_64-apple-darwin11.0" - -@numf2s = external global i32 ; <i32*> [#uses=1] -@numf1s = external global i32 ; <i32*> [#uses=1] -@tds = external global double** ; <double***> [#uses=1] - -define void @init_td(i32 %tmp7) nounwind { -; CHECK-LABEL: @init_td -; CHECK-NOT: uglygep -entry: - br label %bb4 - -bb4: ; preds = %bb3, %entry - %i.0 = phi i32 [ 0, %entry ], [ %tmp9, %bb3 ] ; <i32> [#uses=3] - br label %bb - -bb: ; preds = %bb4 - br label %bb2 - -bb2: ; preds = %bb1, %bb - %j.0 = phi i32 [ 0, %bb ], [ %tmp6, %bb1 ] ; <i32> [#uses=3] - %tmp8 = icmp slt i32 %j.0, %tmp7 ; <i1> [#uses=1] - br i1 %tmp8, label %bb1, label %bb3 - -bb1: ; preds = %bb2 - %tmp = load double**, double*** @tds, align 8 ; <double**> [#uses=1] - %tmp1 = sext i32 %i.0 to i64 ; <i64> [#uses=1] - %tmp2 = getelementptr inbounds double*, double** %tmp, i64 %tmp1 ; <double**> [#uses=1] - %tmp3 = load double*, double** %tmp2, align 1 ; <double*> [#uses=1] - %tmp6 = add nsw i32 %j.0, 1 ; <i32> [#uses=1] - br label %bb2 - -bb3: ; preds = %bb2 - %tmp9 = add nsw i32 %i.0, 1 ; <i32> [#uses=1] - br label %bb4 -} diff --git a/llvm/test/Transforms/IndVarSimplify/ult-sub-to-eq.ll b/llvm/test/Transforms/IndVarSimplify/ult-sub-to-eq.ll deleted file mode 100644 index 6a7e5b70ca1..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/ult-sub-to-eq.ll +++ /dev/null @@ -1,41 +0,0 @@ -; RUN: opt -S -indvars < %s | FileCheck %s - -; Provide legal integer types. -target datalayout = "n8:16:32:64" - - -define void @test1(float* nocapture %autoc, float* nocapture %data, float %d, i32 %data_len, i32 %sample) nounwind { -entry: - %sub = sub i32 %data_len, %sample - %cmp4 = icmp eq i32 %data_len, %sample - br i1 %cmp4, label %for.end, label %for.body - -for.body: ; preds = %entry, %for.body - %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ] - %0 = trunc i64 %indvars.iv to i32 - %add = add i32 %0, %sample - %idxprom = zext i32 %add to i64 - %arrayidx = getelementptr inbounds float, float* %data, i64 %idxprom - %1 = load float, float* %arrayidx, align 4 - %mul = fmul float %1, %d - %arrayidx2 = getelementptr inbounds float, float* %autoc, i64 %indvars.iv - %2 = load float, float* %arrayidx2, align 4 - %add3 = fadd float %2, %mul - store float %add3, float* %arrayidx2, align 4 - %indvars.iv.next = add i64 %indvars.iv, 1 - %3 = trunc i64 %indvars.iv.next to i32 - %cmp = icmp ult i32 %3, %sub - br i1 %cmp, label %for.body, label %for.end - -for.end: ; preds = %for.body, %entry - ret void - -; CHECK-LABEL: @test1( - -; check that we turn the IV test into an eq. -; CHECK: %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 -; CHECK: %wide.trip.count = zext i32 %sub to i64 -; CHECK: %exitcond = icmp ne i64 %indvars.iv.next, %wide.trip.count -; CHECK: br i1 %exitcond, label %for.body, label %for.end.loopexit -} - diff --git a/llvm/test/Transforms/IndVarSimplify/use-range-metadata.ll b/llvm/test/Transforms/IndVarSimplify/use-range-metadata.ll deleted file mode 100644 index 1f0142608b5..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/use-range-metadata.ll +++ /dev/null @@ -1,37 +0,0 @@ -;; RUN: opt -S < %s -indvars | FileCheck %s - -;; Check if IndVarSimplify understands !range metadata. - -declare void @abort() - -define i1 @iterate(i32* nocapture readonly %buffer) { -entry: - %length = load i32, i32* %buffer, !range !0 - br label %loop.preheader - -loop.preheader: - br label %loop - -loop: - %idx = phi i32 [ %idx.inc, %loop.next ], [ 0, %loop.preheader ] - %oob.pred = icmp slt i32 %idx, %length - br i1 %oob.pred, label %loop.next, label %oob -; CHECK: br i1 true, label %loop.next, label %oob - -loop.next: - %idx.inc = add i32 %idx, 1 - %exit.pred = icmp slt i32 %idx.inc, %length - br i1 %exit.pred, label %loop, label %abort.loopexit - -abort.loopexit: - br label %abort - -abort: - ret i1 false - -oob: - tail call void @abort() - ret i1 false -} - -!0 = !{i32 1, i32 100} diff --git a/llvm/test/Transforms/IndVarSimplify/variable-stride-ivs-0.ll b/llvm/test/Transforms/IndVarSimplify/variable-stride-ivs-0.ll deleted file mode 100644 index 5fa4a17b915..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/variable-stride-ivs-0.ll +++ /dev/null @@ -1,43 +0,0 @@ -; RUN: opt < %s -indvars -instcombine -S | FileCheck %s -; -; Test that -indvars can reduce variable stride IVs. If it can reduce variable -; stride iv's, it will make %iv. and %m.0.0 isomorphic to each other without -; cycles, allowing the tmp.21 subtraction to be eliminated. - -define void @vnum_test8(i32* %data) { -entry: - %tmp.1 = getelementptr i32, i32* %data, i32 3 ; <i32*> [#uses=1] - %tmp.2 = load i32, i32* %tmp.1 ; <i32> [#uses=2] - %tmp.4 = getelementptr i32, i32* %data, i32 4 ; <i32*> [#uses=1] - %tmp.5 = load i32, i32* %tmp.4 ; <i32> [#uses=2] - %tmp.8 = getelementptr i32, i32* %data, i32 2 ; <i32*> [#uses=1] - %tmp.9 = load i32, i32* %tmp.8 ; <i32> [#uses=3] - %tmp.125 = icmp sgt i32 %tmp.2, 0 ; <i1> [#uses=1] - br i1 %tmp.125, label %no_exit.preheader, label %return - -no_exit.preheader: ; preds = %entry - %tmp.16 = getelementptr i32, i32* %data, i32 %tmp.9 ; <i32*> [#uses=1] - br label %no_exit - -; CHECK: store i32 0 -no_exit: ; preds = %no_exit, %no_exit.preheader - %iv.ui = phi i32 [ 0, %no_exit.preheader ], [ %iv..inc.ui, %no_exit ] ; <i32> [#uses=1] - %iv. = phi i32 [ %tmp.5, %no_exit.preheader ], [ %iv..inc, %no_exit ] ; <i32> [#uses=2] - %m.0.0 = phi i32 [ %tmp.5, %no_exit.preheader ], [ %tmp.24, %no_exit ] ; <i32> [#uses=2] - store i32 2, i32* %tmp.16 - %tmp.21 = sub i32 %m.0.0, %iv. ; <i32> [#uses=1] - store i32 %tmp.21, i32* %data - %tmp.24 = add i32 %m.0.0, %tmp.9 ; <i32> [#uses=1] - %iv..inc = add i32 %tmp.9, %iv. ; <i32> [#uses=1] - %iv..inc.ui = add i32 %iv.ui, 1 ; <i32> [#uses=2] - %iv..inc1 = bitcast i32 %iv..inc.ui to i32 ; <i32> [#uses=1] - %tmp.12 = icmp slt i32 %iv..inc1, %tmp.2 ; <i1> [#uses=1] - br i1 %tmp.12, label %no_exit, label %return.loopexit - -return.loopexit: ; preds = %no_exit - br label %return - -return: ; preds = %return.loopexit, %entry - ret void -} - diff --git a/llvm/test/Transforms/IndVarSimplify/variable-stride-ivs-1.ll b/llvm/test/Transforms/IndVarSimplify/variable-stride-ivs-1.ll deleted file mode 100644 index 98cfa345962..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/variable-stride-ivs-1.ll +++ /dev/null @@ -1,43 +0,0 @@ -; RUN: opt < %s -indvars -; PR4315 - -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-f80:128:128" -target triple = "x86_64-undermydesk-freebsd8.0" - %struct.mbuf = type <{ %struct.mbuf*, i8*, i32, i8, i8, i8, i8 }> - -define i32 @crash(%struct.mbuf* %m) nounwind { -entry: - br label %for.cond - -for.cond: ; preds = %if.end, %entry - %i.0 = phi i32 [ 0, %entry ], [ %inc, %if.end ] ; <i32> [#uses=3] - %chksum.0 = phi i8 [ 0, %entry ], [ %conv3, %if.end ] ; <i8> [#uses=3] - %cmp = icmp slt i32 %i.0, 1 ; <i1> [#uses=1] - br i1 %cmp, label %for.body, label %do.body - -for.body: ; preds = %for.cond - br i1 undef, label %if.end, label %do.body - -if.end: ; preds = %for.body - %i.02 = trunc i32 %i.0 to i8 ; <i8> [#uses=1] - %conv3 = add i8 %chksum.0, %i.02 ; <i8> [#uses=1] - %inc = add i32 %i.0, 1 ; <i32> [#uses=1] - br label %for.cond - -do.body: ; preds = %do.cond, %for.body, %for.cond - %chksum.2 = phi i8 [ undef, %do.cond ], [ %chksum.0, %for.body ], [ %chksum.0, %for.cond ] ; <i8> [#uses=1] - br i1 undef, label %do.cond, label %bb.nph - -bb.nph: ; preds = %do.body - br label %while.body - -while.body: ; preds = %while.body, %bb.nph - %chksum.13 = phi i8 [ undef, %while.body ], [ %chksum.2, %bb.nph ] ; <i8> [#uses=0] - br i1 undef, label %do.cond, label %while.body - -do.cond: ; preds = %while.body, %do.body - br i1 false, label %do.end, label %do.body - -do.end: ; preds = %do.cond - ret i32 0 -} diff --git a/llvm/test/Transforms/IndVarSimplify/verify-scev.ll b/llvm/test/Transforms/IndVarSimplify/verify-scev.ll deleted file mode 100644 index ddf2e7f1e14..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/verify-scev.ll +++ /dev/null @@ -1,421 +0,0 @@ -; RUN: opt < %s -S -indvars -verify-scev -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-n8:16:32:64-S128" -target triple = "x86_64-apple-macosx10.8.0" - -define void @test1() nounwind uwtable ssp { -entry: - br i1 undef, label %for.end, label %for.body - -for.body: ; preds = %for.body, %entry - br i1 false, label %for.end, label %for.body - -for.end: ; preds = %for.body, %entry - br i1 undef, label %for.end11, label %for.body3 - -for.body3: ; preds = %for.end - unreachable - -for.end11: ; preds = %for.end - br i1 undef, label %while.body, label %while.end - -while.body: ; preds = %for.end11 - unreachable - -while.end: ; preds = %for.end11 - br i1 undef, label %if.end115, label %for.cond109 - -for.cond109: ; preds = %while.end - unreachable - -if.end115: ; preds = %while.end - br i1 undef, label %while.body119.lr.ph.lr.ph, label %for.cond612 - -while.body119.lr.ph.lr.ph: ; preds = %if.end115 - br i1 undef, label %for.cond612, label %if.end123.us - -if.end123.us: ; preds = %while.body119.lr.ph.lr.ph - br label %for.cond132.us - -for.cond132.us: ; preds = %for.cond132.us, %if.end123.us - br i1 undef, label %if.then136.us, label %for.cond132.us - -if.then136.us: ; preds = %for.cond132.us - br i1 undef, label %while.end220, label %while.body211 - -while.body211: ; preds = %while.body211, %if.then136.us - br i1 undef, label %while.end220, label %while.body211 - -while.end220: ; preds = %while.body211, %if.then136.us - br label %for.cond246.outer - -for.cond246.outer: ; preds = %for.inc558, %for.cond394.preheader, %if.then274, %for.cond404.preheader, %while.end220 - br label %for.cond246 - -for.cond246: ; preds = %for.cond372.loopexit, %for.cond246.outer - br i1 undef, label %for.end562, label %if.end250 - -if.end250: ; preds = %for.cond246 - br i1 undef, label %if.end256, label %for.end562 - -if.end256: ; preds = %if.end250 - %cmp272 = icmp eq i32 undef, undef - br i1 %cmp272, label %if.then274, label %for.cond404.preheader - -for.cond404.preheader: ; preds = %if.end256 - br i1 undef, label %for.cond246.outer, label %for.body409.lr.ph - -for.body409.lr.ph: ; preds = %for.cond404.preheader - br label %for.body409 - -if.then274: ; preds = %if.end256 - br i1 undef, label %for.cond246.outer, label %if.end309 - -if.end309: ; preds = %if.then274 - br i1 undef, label %for.cond372.loopexit, label %for.body361 - -for.body361: ; preds = %for.body361, %if.end309 - br i1 undef, label %for.cond372.loopexit, label %for.body361 - -for.cond372.loopexit: ; preds = %for.body361, %if.end309 - br i1 undef, label %for.cond394.preheader, label %for.cond246 - -for.cond394.preheader: ; preds = %for.cond372.loopexit - br i1 undef, label %for.cond246.outer, label %for.body397 - -for.body397: ; preds = %for.cond394.preheader - unreachable - -for.body409: ; preds = %for.inc558, %for.body409.lr.ph - %k.029 = phi i32 [ 1, %for.body409.lr.ph ], [ %inc559, %for.inc558 ] - br i1 undef, label %if.then412, label %if.else433 - -if.then412: ; preds = %for.body409 - br label %if.end440 - -if.else433: ; preds = %for.body409 - br label %if.end440 - -if.end440: ; preds = %if.else433, %if.then412 - br i1 undef, label %for.inc558, label %if.end461 - -if.end461: ; preds = %if.end440 - br i1 undef, label %for.cond528.loopexit, label %for.body517 - -for.body517: ; preds = %for.body517, %if.end461 - br i1 undef, label %for.cond528.loopexit, label %for.body517 - -for.cond528.loopexit: ; preds = %for.body517, %if.end461 - br label %for.inc558 - -for.inc558: ; preds = %for.cond528.loopexit, %if.end440 - %inc559 = add nsw i32 %k.029, 1 - %cmp407 = icmp sgt i32 %inc559, undef - br i1 %cmp407, label %for.cond246.outer, label %for.body409 - -for.end562: ; preds = %if.end250, %for.cond246 - unreachable - -for.cond612: ; preds = %while.body119.lr.ph.lr.ph, %if.end115 - unreachable -} - -define void @test2() nounwind uwtable ssp { -entry: - br i1 undef, label %for.end, label %for.body - -for.body: ; preds = %for.body, %entry - br i1 undef, label %for.end, label %for.body - -for.end: ; preds = %for.body, %entry - br i1 undef, label %for.end11, label %for.body3 - -for.body3: ; preds = %for.end - unreachable - -for.end11: ; preds = %for.end - br i1 undef, label %while.body, label %while.end - -while.body: ; preds = %for.end11 - unreachable - -while.end: ; preds = %for.end11 - br i1 undef, label %if.end115, label %for.cond109 - -for.cond109: ; preds = %while.end - unreachable - -if.end115: ; preds = %while.end - br i1 undef, label %while.body119.lr.ph.lr.ph, label %for.cond612 - -while.body119.lr.ph.lr.ph: ; preds = %if.end115 - br i1 undef, label %for.cond612, label %if.end123.us - -if.end123.us: ; preds = %while.body119.lr.ph.lr.ph - br label %for.cond132.us - -for.cond132.us: ; preds = %for.cond132.us, %if.end123.us - br i1 undef, label %if.then136.us, label %for.cond132.us - -if.then136.us: ; preds = %for.cond132.us - br i1 undef, label %while.end220, label %while.body211 - -while.body211: ; preds = %while.body211, %if.then136.us - br i1 undef, label %while.end220, label %while.body211 - -while.end220: ; preds = %while.body211, %if.then136.us - br label %for.cond246.outer - -for.cond246.outer: ; preds = %for.inc558, %for.cond394.preheader, %if.then274, %for.cond404.preheader, %while.end220 - br label %for.cond246 - -for.cond246: ; preds = %for.cond372.loopexit, %for.cond246.outer - br i1 undef, label %for.end562, label %if.end250 - -if.end250: ; preds = %for.cond246 - br i1 undef, label %if.end256, label %for.end562 - -if.end256: ; preds = %if.end250 - %0 = load i32, i32* undef, align 4 - br i1 undef, label %if.then274, label %for.cond404.preheader - -for.cond404.preheader: ; preds = %if.end256 - %add406 = add i32 0, %0 - br i1 undef, label %for.cond246.outer, label %for.body409.lr.ph - -for.body409.lr.ph: ; preds = %for.cond404.preheader - br label %for.body409 - -if.then274: ; preds = %if.end256 - br i1 undef, label %for.cond246.outer, label %if.end309 - -if.end309: ; preds = %if.then274 - br i1 undef, label %for.cond372.loopexit, label %for.body361 - -for.body361: ; preds = %for.body361, %if.end309 - br i1 undef, label %for.cond372.loopexit, label %for.body361 - -for.cond372.loopexit: ; preds = %for.body361, %if.end309 - br i1 undef, label %for.cond394.preheader, label %for.cond246 - -for.cond394.preheader: ; preds = %for.cond372.loopexit - br i1 undef, label %for.cond246.outer, label %for.body397 - -for.body397: ; preds = %for.cond394.preheader - unreachable - -for.body409: ; preds = %for.inc558, %for.body409.lr.ph - %k.029 = phi i32 [ 1, %for.body409.lr.ph ], [ %inc559, %for.inc558 ] - br i1 undef, label %if.then412, label %if.else433 - -if.then412: ; preds = %for.body409 - br label %if.end440 - -if.else433: ; preds = %for.body409 - br label %if.end440 - -if.end440: ; preds = %if.else433, %if.then412 - br i1 undef, label %for.inc558, label %if.end461 - -if.end461: ; preds = %if.end440 - br i1 undef, label %for.cond528.loopexit, label %for.body517 - -for.body517: ; preds = %for.body517, %if.end461 - br i1 undef, label %for.cond528.loopexit, label %for.body517 - -for.cond528.loopexit: ; preds = %for.body517, %if.end461 - br label %for.inc558 - -for.inc558: ; preds = %for.cond528.loopexit, %if.end440 - %inc559 = add nsw i32 %k.029, 1 - %cmp407 = icmp sgt i32 %inc559, %add406 - br i1 %cmp407, label %for.cond246.outer, label %for.body409 - -for.end562: ; preds = %if.end250, %for.cond246 - unreachable - -for.cond612: ; preds = %while.body119.lr.ph.lr.ph, %if.end115 - unreachable -} - -define void @test3() nounwind uwtable ssp { -entry: - br i1 undef, label %for.end, label %for.body - -for.body: ; preds = %for.body, %entry - br i1 undef, label %for.end, label %for.body - -for.end: ; preds = %for.body, %entry - br i1 undef, label %for.end11, label %for.body3 - -for.body3: ; preds = %for.end - unreachable - -for.end11: ; preds = %for.end - br i1 undef, label %while.body, label %while.end - -while.body: ; preds = %for.end11 - unreachable - -while.end: ; preds = %for.end11 - br i1 undef, label %if.end115, label %for.cond109 - -for.cond109: ; preds = %while.end - unreachable - -if.end115: ; preds = %while.end - br i1 undef, label %while.body119.lr.ph.lr.ph, label %for.cond612 - -while.body119.lr.ph.lr.ph: ; preds = %if.end115 - br i1 undef, label %for.cond612, label %if.end123.us - -if.end123.us: ; preds = %while.body119.lr.ph.lr.ph - br label %for.cond132.us - -for.cond132.us: ; preds = %for.cond132.us, %if.end123.us - br i1 undef, label %if.then136.us, label %for.cond132.us - -if.then136.us: ; preds = %for.cond132.us - br i1 undef, label %while.end220, label %while.body211 - -while.body211: ; preds = %while.body211, %if.then136.us - br i1 undef, label %while.end220, label %while.body211 - -while.end220: ; preds = %while.body211, %if.then136.us - br label %for.cond246.outer - -for.cond246.outer: ; preds = %for.inc558, %for.cond394.preheader, %if.then274, %for.cond404.preheader, %while.end220 - br label %for.cond246 - -for.cond246: ; preds = %for.cond372.loopexit, %for.cond246.outer - br i1 undef, label %for.end562, label %if.end250 - -if.end250: ; preds = %for.cond246 - br i1 undef, label %if.end256, label %for.end562 - -if.end256: ; preds = %if.end250 - br i1 undef, label %if.then274, label %for.cond404.preheader - -for.cond404.preheader: ; preds = %if.end256 - br i1 undef, label %for.cond246.outer, label %for.body409.lr.ph - -for.body409.lr.ph: ; preds = %for.cond404.preheader - br label %for.body409 - -if.then274: ; preds = %if.end256 - br i1 undef, label %for.cond246.outer, label %if.end309 - -if.end309: ; preds = %if.then274 - br i1 undef, label %for.cond372.loopexit, label %for.body361 - -for.body361: ; preds = %for.body361, %if.end309 - br i1 undef, label %for.cond372.loopexit, label %for.body361 - -for.cond372.loopexit: ; preds = %for.body361, %if.end309 - br i1 undef, label %for.cond394.preheader, label %for.cond246 - -for.cond394.preheader: ; preds = %for.cond372.loopexit - br i1 undef, label %for.cond246.outer, label %for.body397 - -for.body397: ; preds = %for.cond394.preheader - unreachable - -for.body409: ; preds = %for.inc558, %for.body409.lr.ph - br i1 undef, label %if.then412, label %if.else433 - -if.then412: ; preds = %for.body409 - br label %if.end440 - -if.else433: ; preds = %for.body409 - br label %if.end440 - -if.end440: ; preds = %if.else433, %if.then412 - br i1 undef, label %for.inc558, label %if.end461 - -if.end461: ; preds = %if.end440 - br i1 undef, label %for.cond528.loopexit, label %for.body517 - -for.body517: ; preds = %for.body517, %if.end461 - br i1 undef, label %for.cond528.loopexit, label %for.body517 - -for.cond528.loopexit: ; preds = %for.body517, %if.end461 - br label %for.inc558 - -for.inc558: ; preds = %for.cond528.loopexit, %if.end440 - br i1 undef, label %for.cond246.outer, label %for.body409 - -for.end562: ; preds = %if.end250, %for.cond246 - unreachable - -for.cond612: ; preds = %while.body119.lr.ph.lr.ph, %if.end115 - unreachable -} - -define void @test4() nounwind uwtable ssp { -entry: - br i1 undef, label %if.end8, label %if.else - -if.else: ; preds = %entry - br label %if.end8 - -if.end8: ; preds = %if.else, %entry - br i1 undef, label %if.end26, label %if.else22 - -if.else22: ; preds = %if.end8 - br label %if.end26 - -if.end26: ; preds = %if.else22, %if.end8 - br i1 undef, label %if.end35, label %if.else31 - -if.else31: ; preds = %if.end26 - br label %if.end35 - -if.end35: ; preds = %if.else31, %if.end26 - br i1 undef, label %for.end226, label %for.body.lr.ph - -for.body.lr.ph: ; preds = %if.end35 - br label %for.body48 - -for.body48: ; preds = %for.inc221, %for.body.lr.ph - br i1 undef, label %for.inc221, label %for.body65.lr.ph - -for.body65.lr.ph: ; preds = %for.body48 - %0 = load i32, i32* undef, align 4 - %1 = sext i32 %0 to i64 - br label %for.body65.us - -for.body65.us: ; preds = %for.inc219.us, %for.body65.lr.ph - %indvars.iv = phi i64 [ %indvars.iv.next, %for.inc219.us ], [ 1, %for.body65.lr.ph ] - br i1 undef, label %for.inc219.us, label %if.end72.us - -if.end72.us: ; preds = %for.body65.us - br i1 undef, label %if.end93.us, label %if.then76.us - -if.then76.us: ; preds = %if.end72.us - br label %if.end93.us - -if.end93.us: ; preds = %if.then76.us, %if.end72.us - br i1 undef, label %if.end110.us, label %for.inc219.us - -if.end110.us: ; preds = %if.end93.us - br i1 undef, label %for.inc219.us, label %for.body142.us - -for.body142.us: ; preds = %for.cond139.loopexit.us, %if.end110.us - br label %for.cond152.us - -for.cond152.us: ; preds = %for.cond152.us, %for.body142.us - br i1 undef, label %for.cond139.loopexit.us, label %for.cond152.us - -for.inc219.us: ; preds = %for.cond139.loopexit.us, %if.end110.us, %if.end93.us, %for.body65.us - %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 - %cmp64.us = icmp sgt i64 %indvars.iv.next, %1 - br i1 %cmp64.us, label %for.inc221, label %for.body65.us - -for.cond139.loopexit.us: ; preds = %for.cond152.us - br i1 undef, label %for.inc219.us, label %for.body142.us - -for.inc221: ; preds = %for.inc219.us, %for.body48 - br label %for.body48 - -for.end226: ; preds = %if.end35 - ret void -} diff --git a/llvm/test/Transforms/IndVarSimplify/widen-loop-comp.ll b/llvm/test/Transforms/IndVarSimplify/widen-loop-comp.ll deleted file mode 100644 index 5630c5dd075..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/widen-loop-comp.ll +++ /dev/null @@ -1,355 +0,0 @@ -; RUN: opt < %s -indvars -S | FileCheck %s -target triple = "aarch64--linux-gnu" - -; Provide legal integer types. -target datalayout = "n8:16:32:64" - - -; Check the loop exit i32 compare instruction and operand are widened to i64 -; instead of truncating IV before its use in the i32 compare instruction. - -@idx = common global i32 0, align 4 -@e = common global i32 0, align 4 -@ptr = common global i32* null, align 8 - -; CHECK-LABEL: @test1 -; CHECK: for.body.lr.ph: -; CHECK: sext i32 -; CHECK: for.cond: -; CHECK: icmp slt i64 -; CHECK: for.body: -; CHECK: phi i64 - -define i32 @test1() { -entry: - store i32 -1, i32* @idx, align 4 - %0 = load i32, i32* @e, align 4 - %cmp4 = icmp slt i32 %0, 0 - br i1 %cmp4, label %for.end.loopexit, label %for.body.lr.ph - -for.body.lr.ph: - %1 = load i32*, i32** @ptr, align 8 - %2 = load i32, i32* @e, align 4 - br label %for.body - -for.cond: - %inc = add nsw i32 %i.05, 1 - %cmp = icmp slt i32 %i.05, %2 - br i1 %cmp, label %for.body, label %for.cond.for.end.loopexit_crit_edge - -for.body: - %i.05 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.cond ] - %idxprom = sext i32 %i.05 to i64 - %arrayidx = getelementptr inbounds i32, i32* %1, i64 %idxprom - %3 = load i32, i32* %arrayidx, align 4 - %tobool = icmp eq i32 %3, 0 - br i1 %tobool, label %if.then, label %for.cond - -if.then: - %i.05.lcssa = phi i32 [ %i.05, %for.body ] - store i32 %i.05.lcssa, i32* @idx, align 4 - br label %for.end - -for.cond.for.end.loopexit_crit_edge: - br label %for.end.loopexit - -for.end.loopexit: - br label %for.end - -for.end: - %4 = load i32, i32* @idx, align 4 - ret i32 %4 -} - -; CHECK-LABEL: @test2 -; CHECK: for.body4.us -; CHECK: %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 -; CHECK: %cmp2.us = icmp ult i64 -; CHECK-NOT: %2 = trunc i64 %indvars.iv.next to i32 -; CHECK-NOT: %cmp2.us = icmp slt i32 - -define void @test2([8 x i8]* %a, i8* %b, i8 %limit) { -entry: - %conv = zext i8 %limit to i32 - br i1 undef, label %for.cond1.preheader, label %for.cond1.preheader.us - -for.cond1.preheader.us: - %storemerge5.us = phi i32 [ 0, %entry ], [ %inc14.us, %for.inc13.us ] - br i1 true, label %for.body4.lr.ph.us, label %for.inc13.us - -for.inc13.us: - %inc14.us = add nsw i32 %storemerge5.us, 1 - %cmp.us = icmp slt i32 %inc14.us, 4 - br i1 %cmp.us, label %for.cond1.preheader.us, label %for.end - -for.body4.us: - %storemerge14.us = phi i32 [ 0, %for.body4.lr.ph.us ], [ %inc.us, %for.body4.us ] - %idxprom.us = sext i32 %storemerge14.us to i64 - %arrayidx6.us = getelementptr inbounds [8 x i8], [8 x i8]* %a, i64 %idxprom5.us, i64 %idxprom.us - %0 = load i8, i8* %arrayidx6.us, align 1 - %idxprom7.us = zext i8 %0 to i64 - %arrayidx8.us = getelementptr inbounds i8, i8* %b, i64 %idxprom7.us - %1 = load i8, i8* %arrayidx8.us, align 1 - store i8 %1, i8* %arrayidx6.us, align 1 - %inc.us = add nsw i32 %storemerge14.us, 1 - %cmp2.us = icmp slt i32 %inc.us, %conv - br i1 %cmp2.us, label %for.body4.us, label %for.inc13.us - -for.body4.lr.ph.us: - %idxprom5.us = sext i32 %storemerge5.us to i64 - br label %for.body4.us - -for.cond1.preheader: - %storemerge5 = phi i32 [ 0, %entry ], [ %inc14, %for.inc13 ] - br i1 false, label %for.inc13, label %for.inc13 - -for.inc13: - %inc14 = add nsw i32 %storemerge5, 1 - %cmp = icmp slt i32 %inc14, 4 - br i1 %cmp, label %for.cond1.preheader, label %for.end - -for.end: - ret void -} - -; CHECK-LABEL: @test3 -; CHECK: sext i32 %b -; CHECK: for.cond: -; CHECK: phi i64 -; CHECK: icmp slt i64 - -define i32 @test3(i32* %a, i32 %b) { -entry: - br label %for.cond - -for.cond: - %sum.0 = phi i32 [ 0, %entry ], [ %add, %for.body ] - %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %cmp = icmp slt i32 %i.0, %b - br i1 %cmp, label %for.body, label %for.end - -for.body: - %idxprom = sext i32 %i.0 to i64 - %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom - %0 = load i32, i32* %arrayidx, align 4 - %add = add nsw i32 %sum.0, %0 - %inc = add nsw i32 %i.0, 1 - br label %for.cond - -for.end: - ret i32 %sum.0 -} - -declare i32 @fn1(i8 signext) - -; PR21030 -; CHECK-LABEL: @test4 -; CHECK: for.body: -; CHECK: phi i32 -; CHECK: icmp sgt i8 - -define i32 @test4(i32 %a) { -entry: - br label %for.body - -for.body: - %c.07 = phi i8 [ -3, %entry ], [ %dec, %for.body ] - %conv6 = zext i8 %c.07 to i32 - %or = or i32 %a, %conv6 - %conv3 = trunc i32 %or to i8 - %call = call i32 @fn1(i8 signext %conv3) - %dec = add i8 %c.07, -1 - %cmp = icmp sgt i8 %dec, -14 - br i1 %cmp, label %for.body, label %for.end - -for.end: - ret i32 0 -} - -; CHECK-LABEL: @test5 -; CHECK: zext i32 %b -; CHECK: for.cond: -; CHECK: phi i64 -; CHECK: icmp ule i64 - -define i32 @test5(i32* %a, i32 %b) { -entry: - br label %for.cond - -for.cond: - %sum.0 = phi i32 [ 0, %entry ], [ %add, %for.body ] - %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %cmp = icmp ule i32 %i.0, %b - br i1 %cmp, label %for.body, label %for.end - -for.body: - %idxprom = zext i32 %i.0 to i64 - %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom - %0 = load i32, i32* %arrayidx, align 4 - %add = add nsw i32 %sum.0, %0 - %inc = add nsw i32 %i.0, 1 - br label %for.cond - -for.end: - ret i32 %sum.0 -} - -define i32 @test6(i32* %a, i32 %b) { -; CHECK-LABEL: @test6( -; CHECK: [[B_SEXT:%[a-z0-9]+]] = sext i32 %b to i64 -; CHECK: for.cond: -; CHECK: icmp sle i64 %indvars.iv, [[B_SEXT]] - -entry: - br label %for.cond - -for.cond: - %sum.0 = phi i32 [ 0, %entry ], [ %add, %for.body ] - %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %cmp = icmp sle i32 %i.0, %b - br i1 %cmp, label %for.body, label %for.end - -for.body: - %idxprom = zext i32 %i.0 to i64 - %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom - %0 = load i32, i32* %arrayidx, align 4 - %add = add nsw i32 %sum.0, %0 - %inc = add nsw i32 %i.0, 1 - br label %for.cond - -for.end: - ret i32 %sum.0 -} - -define i32 @test7(i32* %a, i32 %b) { -; CHECK-LABEL: @test7( -; CHECK: [[B_ZEXT:%[a-z0-9]+]] = zext i32 %b to i64 -; CHECK: [[B_SEXT:%[a-z0-9]+]] = sext i32 %b to i64 -; CHECK: for.cond: -; CHECK: icmp ule i64 %indvars.iv, [[B_ZEXT]] -; CHECK: for.body: -; CHECK: icmp sle i64 %indvars.iv, [[B_SEXT]] - -entry: - br label %for.cond - -for.cond: - %sum.0 = phi i32 [ 0, %entry ], [ %add, %for.body ] - %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %cmp = icmp ule i32 %i.0, %b - br i1 %cmp, label %for.body, label %for.end - -for.body: - %idxprom = sext i32 %i.0 to i64 - %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom - %0 = load i32, i32* %arrayidx, align 4 - %add = add nsw i32 %sum.0, %0 - %inc = add nsw i32 %i.0, 1 - %cmp2 = icmp sle i32 %i.0, %b - br i1 %cmp2, label %for.cond, label %for.end - -for.end: - ret i32 %sum.0 -} - -define i32 @test8(i32* %a, i32 %b, i32 %init) { -; CHECK-LABEL: @test8( -; CHECK: [[INIT_SEXT:%[a-z0-9]+]] = sext i32 %init to i64 -; CHECK: [[B_ZEXT:%[a-z0-9]+]] = zext i32 %b to i64 -; CHECK: for.cond: -; Note: %indvars.iv is the sign extension of %i.0 -; CHECK: %indvars.iv = phi i64 [ [[INIT_SEXT]], %for.cond.preheader ], [ %indvars.iv.next, %for.body ] -; CHECK: icmp ule i64 %indvars.iv, [[B_ZEXT]] - -entry: - %e = icmp sgt i32 %init, 0 - br i1 %e, label %for.cond, label %leave - -for.cond: - %sum.0 = phi i32 [ 0, %entry ], [ %add, %for.body ] - %i.0 = phi i32 [ %init, %entry ], [ %inc, %for.body ] - %cmp = icmp ule i32 %i.0, %b - br i1 %cmp, label %for.body, label %for.end - -for.body: - %idxprom = sext i32 %i.0 to i64 - %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom - %0 = load i32, i32* %arrayidx, align 4 - %add = add nsw i32 %sum.0, %0 - %inc = add nsw i32 %i.0, 1 - %cmp2 = icmp slt i32 0, %inc - br i1 %cmp2, label %for.cond, label %for.end - -for.end: - ret i32 %sum.0 - -leave: - ret i32 0 -} - -define i32 @test9(i32* %a, i32 %b, i32 %init) { -; CHECK-LABEL: @test9( -; CHECK: [[INIT_ZEXT:%[a-z0-9]+]] = zext i32 %init to i64 -; CHECK: [[B_SEXT:%[a-z0-9]+]] = sext i32 %b to i64 -; CHECK: for.cond: -; Note: %indvars.iv is the zero extension of %i.0 -; CHECK: %indvars.iv = phi i64 [ [[INIT_ZEXT]], %for.cond.preheader ], [ %indvars.iv.next, %for.body ] -; CHECK: icmp slt i64 %indvars.iv, [[B_SEXT]] - -entry: - %e = icmp sgt i32 %init, 0 - br i1 %e, label %for.cond, label %leave - -for.cond: - %sum.0 = phi i32 [ 0, %entry ], [ %add, %for.body ] - %i.0 = phi i32 [ %init, %entry ], [ %inc, %for.body ] - %cmp = icmp slt i32 %i.0, %b - br i1 %cmp, label %for.body, label %for.end - -for.body: - %idxprom = zext i32 %i.0 to i64 - %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom - %0 = load i32, i32* %arrayidx, align 4 - %add = add nsw i32 %sum.0, %0 - %inc = add nsw i32 %i.0, 1 - %cmp2 = icmp slt i32 0, %inc - br i1 %cmp2, label %for.cond, label %for.end - -for.end: - ret i32 %sum.0 - -leave: - ret i32 0 -} - -declare void @consume.i64(i64) -declare void @consume.i1(i1) - -define i32 @test10(i32 %v) { -; CHECK-LABEL: @test10( - entry: -; CHECK-NOT: zext - br label %loop - - loop: -; CHECK: [[WIDE_V:%[a-z0-9]+]] = sext i32 %v to i64 -; CHECK: loop: -; CHECK: %indvars.iv = phi i64 [ %indvars.iv.next, %loop ], [ 0, %entry ] -; CHECK: %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 -; CHECK: [[MUL:%[a-z0-9]+]] = mul nsw i64 %indvars.iv, -1 -; CHECK: [[CMP:%[a-z0-9]+]] = icmp eq i64 [[MUL]], [[WIDE_V]] -; CHECK: call void @consume.i1(i1 [[CMP]]) - - %i = phi i32 [ 0, %entry ], [ %i.inc, %loop ] - %i.inc = add i32 %i, 1 - %iv = mul i32 %i, -1 - %cmp = icmp eq i32 %iv, %v - call void @consume.i1(i1 %cmp) - %be.cond = icmp slt i32 %i.inc, 11 - %ext = sext i32 %iv to i64 - call void @consume.i64(i64 %ext) - br i1 %be.cond, label %loop, label %leave - - leave: - ret i32 22 -} diff --git a/llvm/test/Transforms/IndVarSimplify/widen-nsw.ll b/llvm/test/Transforms/IndVarSimplify/widen-nsw.ll deleted file mode 100644 index 8dbbb51ee51..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/widen-nsw.ll +++ /dev/null @@ -1,29 +0,0 @@ -; RUN: opt < %s -indvars -S | 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-n8:16:32:64-S128" -target triple = "x86_64-apple-macosx" - -; CHECK-LABEL: @test1 -; CHECK: %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 -define i32 @test1(i32* %a) #0 { -entry: - br label %for.cond - -for.cond: ; preds = %for.body, %entry - %sum.0 = phi i32 [ 0, %entry ], [ %add, %for.body ] - %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %cmp = icmp slt i32 %i.0, 1000 - br i1 %cmp, label %for.body, label %for.end - -for.body: ; preds = %for.cond - %idxprom = sext i32 %i.0 to i64 - %arrayidx = getelementptr inbounds i32, i32* %a, i64 %idxprom - %0 = load i32, i32* %arrayidx, align 4 - %add = add nsw i32 %sum.0, %0 - %inc = add nsw i32 %i.0, 1 - br label %for.cond - -for.end: ; preds = %for.cond - ret i32 %sum.0 -} - -attributes #0 = { nounwind ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } diff --git a/llvm/test/Transforms/IndVarSimplify/zext-nuw.ll b/llvm/test/Transforms/IndVarSimplify/zext-nuw.ll deleted file mode 100644 index 13138de6a50..00000000000 --- a/llvm/test/Transforms/IndVarSimplify/zext-nuw.ll +++ /dev/null @@ -1,49 +0,0 @@ -; RUN: opt -indvars -S %s | FileCheck %s - -%struct.A = type { i8 } - -@c = global %struct.A* null -@d = global i32 4 - -define void @_Z3fn1v() { - %x2 = load i32, i32* @d - %x3 = icmp slt i32 %x2, 1 - %x4 = select i1 %x3, i32 1, i32 %x2 - %x5 = load %struct.A*, %struct.A** @c - %j.sroa.0.0..sroa_idx = getelementptr %struct.A, %struct.A* %x5, i64 0, i32 0 - %j.sroa.0.0.copyload = load i8, i8* %j.sroa.0.0..sroa_idx - br label %.preheader4.lr.ph - -.preheader4.lr.ph: ; preds = %0 - ; CHECK-NOT: add i64 {{.*}}, 4294967296 - br label %.preheader4 - -.preheader4: ; preds = %x22, %.preheader4.lr.ph - %k.09 = phi i8* [ undef, %.preheader4.lr.ph ], [ %x25, %x22 ] - %x8 = icmp ult i32 0, 4 - br i1 %x8, label %.preheader.lr.ph, label %x22 - -.preheader.lr.ph: ; preds = %.preheader4 - br label %.preheader - -.preheader: ; preds = %x17, %.preheader.lr.ph - %k.17 = phi i8* [ %k.09, %.preheader.lr.ph ], [ %x19, %x17 ] - %v.06 = phi i32 [ 0, %.preheader.lr.ph ], [ %x20, %x17 ] - br label %x17 - -x17: ; preds = %.preheader - %x18 = sext i8 %j.sroa.0.0.copyload to i64 - %x19 = getelementptr i8, i8* %k.17, i64 %x18 - %x20 = add i32 %v.06, 1 - %x21 = icmp ult i32 %x20, %x4 - br i1 %x21, label %.preheader, label %._crit_edge.8 - -._crit_edge.8: ; preds = %x17 - %split = phi i8* [ %x19, %x17 ] - br label %x22 - -x22: ; preds = %._crit_edge.8, %.preheader4 - %k.1.lcssa = phi i8* [ %split, %._crit_edge.8 ], [ %k.09, %.preheader4 ] - %x25 = getelementptr i8, i8* %k.1.lcssa - br label %.preheader4 -} |