mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-18 10:32:48 +02:00
[NewPM] Consistently use 'simplifycfg' rather than 'simplify-cfg'
There was an alias between 'simplifycfg' and 'simplify-cfg' in the PassRegistry. That was the original reason for this patch, which effectively removes the alias. This patch also replaces all occurrances of 'simplify-cfg' by 'simplifycfg'. Reason for choosing that form for the name is that it matches the DEBUG_TYPE for the pass, and the legacy PM name and also how it is spelled out in other passes such as 'loop-simplifycfg', and in other options such as 'simplifycfg-merge-cond-stores'. I for some reason the name should be changed to 'simplify-cfg' in the future, then I think such a renaming should be more widely done and not only impacting the PassRegistry. Reviewed By: aeubanks Differential Revision: https://reviews.llvm.org/D105627
This commit is contained in:
parent
6cdbedb38b
commit
8be96b95c4
@ -2211,7 +2211,7 @@ bool CallAnalyzer::visitSwitchInst(SwitchInst &SI) {
|
|||||||
// proportional to the size of the tree or the size of jump table range.
|
// proportional to the size of the tree or the size of jump table range.
|
||||||
//
|
//
|
||||||
// NB: We convert large switches which are just used to initialize large phi
|
// NB: We convert large switches which are just used to initialize large phi
|
||||||
// nodes to lookup tables instead in simplify-cfg, so this shouldn't prevent
|
// nodes to lookup tables instead in simplifycfg, so this shouldn't prevent
|
||||||
// inlining those. It will prevent inlining in cases where the optimization
|
// inlining those. It will prevent inlining in cases where the optimization
|
||||||
// does not (yet) fire.
|
// does not (yet) fire.
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ void llvm::handleExecNameEncodedOptimizerOpts(StringRef ExecName) {
|
|||||||
} else if (Opt == "earlycse") {
|
} else if (Opt == "earlycse") {
|
||||||
Args.push_back("-passes=early-cse");
|
Args.push_back("-passes=early-cse");
|
||||||
} else if (Opt == "simplifycfg") {
|
} else if (Opt == "simplifycfg") {
|
||||||
Args.push_back("-passes=simplify-cfg");
|
Args.push_back("-passes=simplifycfg");
|
||||||
} else if (Opt == "gvn") {
|
} else if (Opt == "gvn") {
|
||||||
Args.push_back("-passes=gvn");
|
Args.push_back("-passes=gvn");
|
||||||
} else if (Opt == "sccp") {
|
} else if (Opt == "sccp") {
|
||||||
|
@ -1154,7 +1154,7 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
|
|||||||
|
|
||||||
// Promote any localized globals to SSA registers.
|
// Promote any localized globals to SSA registers.
|
||||||
// FIXME: Should this instead by a run of SROA?
|
// FIXME: Should this instead by a run of SROA?
|
||||||
// FIXME: We should probably run instcombine and simplify-cfg afterward to
|
// FIXME: We should probably run instcombine and simplifycfg afterward to
|
||||||
// delete control flows that are dead once globals have been folded to
|
// delete control flows that are dead once globals have been folded to
|
||||||
// constants.
|
// constants.
|
||||||
MPM.addPass(createModuleToFunctionPassAdaptor(PromotePass()));
|
MPM.addPass(createModuleToFunctionPassAdaptor(PromotePass()));
|
||||||
@ -1388,7 +1388,7 @@ PassBuilder::buildModuleOptimizationPipeline(OptimizationLevel Level,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: We need to run some loop optimizations to re-rotate loops after
|
// FIXME: We need to run some loop optimizations to re-rotate loops after
|
||||||
// simplify-cfg and others undo their rotation.
|
// simplifycfg and others undo their rotation.
|
||||||
|
|
||||||
// Optimize the loop execution. These passes operate on entire loop nests
|
// Optimize the loop execution. These passes operate on entire loop nests
|
||||||
// rather than on each loop in an inside-out manner, and so they are actually
|
// rather than on each loop in an inside-out manner, and so they are actually
|
||||||
|
@ -301,7 +301,6 @@ FUNCTION_PASS("scalarize-masked-mem-intrin", ScalarizeMaskedMemIntrinPass())
|
|||||||
FUNCTION_PASS("scalarizer", ScalarizerPass())
|
FUNCTION_PASS("scalarizer", ScalarizerPass())
|
||||||
FUNCTION_PASS("separate-const-offset-from-gep", SeparateConstOffsetFromGEPPass())
|
FUNCTION_PASS("separate-const-offset-from-gep", SeparateConstOffsetFromGEPPass())
|
||||||
FUNCTION_PASS("sccp", SCCPPass())
|
FUNCTION_PASS("sccp", SCCPPass())
|
||||||
FUNCTION_PASS("simplifycfg", SimplifyCFGPass())
|
|
||||||
FUNCTION_PASS("sink", SinkingPass())
|
FUNCTION_PASS("sink", SinkingPass())
|
||||||
FUNCTION_PASS("slp-vectorizer", SLPVectorizerPass())
|
FUNCTION_PASS("slp-vectorizer", SLPVectorizerPass())
|
||||||
FUNCTION_PASS("slsr", StraightLineStrengthReducePass())
|
FUNCTION_PASS("slsr", StraightLineStrengthReducePass())
|
||||||
@ -352,7 +351,7 @@ FUNCTION_PASS_WITH_PARAMS("msan",
|
|||||||
},
|
},
|
||||||
parseMSanPassOptions,
|
parseMSanPassOptions,
|
||||||
"recover;kernel;track-origins=N")
|
"recover;kernel;track-origins=N")
|
||||||
FUNCTION_PASS_WITH_PARAMS("simplify-cfg",
|
FUNCTION_PASS_WITH_PARAMS("simplifycfg",
|
||||||
"SimplifyCFGPass",
|
"SimplifyCFGPass",
|
||||||
[](SimplifyCFGOptions Opts) {
|
[](SimplifyCFGOptions Opts) {
|
||||||
return SimplifyCFGPass(Opts);
|
return SimplifyCFGPass(Opts);
|
||||||
|
@ -454,7 +454,7 @@ void PassManagerBuilder::addFunctionSimplificationPasses(
|
|||||||
else
|
else
|
||||||
MPM.add(createLoopUnswitchPass(SizeLevel || OptLevel < 3, DivergentTarget));
|
MPM.add(createLoopUnswitchPass(SizeLevel || OptLevel < 3, DivergentTarget));
|
||||||
// FIXME: We break the loop pass pipeline here in order to do full
|
// FIXME: We break the loop pass pipeline here in order to do full
|
||||||
// simplify-cfg. Eventually loop-simplifycfg should be enhanced to replace the
|
// simplifycfg. Eventually loop-simplifycfg should be enhanced to replace the
|
||||||
// need for this.
|
// need for this.
|
||||||
MPM.add(createCFGSimplificationPass());
|
MPM.add(createCFGSimplificationPass());
|
||||||
MPM.add(createInstructionCombiningPass());
|
MPM.add(createInstructionCombiningPass());
|
||||||
|
@ -420,7 +420,7 @@ static Loop *getTopMostExitingLoop(BasicBlock *ExitBB, LoopInfo &LI) {
|
|||||||
/// hoists the branch above that split. Preserves loop simplified form
|
/// hoists the branch above that split. Preserves loop simplified form
|
||||||
/// (splitting the exit block as necessary). It simplifies the branch within
|
/// (splitting the exit block as necessary). It simplifies the branch within
|
||||||
/// the loop to an unconditional branch but doesn't remove it entirely. Further
|
/// the loop to an unconditional branch but doesn't remove it entirely. Further
|
||||||
/// cleanup can be done with some simplify-cfg like pass.
|
/// cleanup can be done with some simplifycfg like pass.
|
||||||
///
|
///
|
||||||
/// If `SE` is not null, it will be updated based on the potential loop SCEVs
|
/// If `SE` is not null, it will be updated based on the potential loop SCEVs
|
||||||
/// invalidated by this.
|
/// invalidated by this.
|
||||||
@ -648,7 +648,7 @@ static bool unswitchTrivialBranch(Loop &L, BranchInst &BI, DominatorTree &DT,
|
|||||||
/// considered for unswitching so this is a stable transform and the same
|
/// considered for unswitching so this is a stable transform and the same
|
||||||
/// switch will not be revisited. If after unswitching there is only a single
|
/// switch will not be revisited. If after unswitching there is only a single
|
||||||
/// in-loop successor, the switch is further simplified to an unconditional
|
/// in-loop successor, the switch is further simplified to an unconditional
|
||||||
/// branch. Still more cleanup can be done with some simplify-cfg like pass.
|
/// branch. Still more cleanup can be done with some simplifycfg like pass.
|
||||||
///
|
///
|
||||||
/// If `SE` is not null, it will be updated based on the potential loop SCEVs
|
/// If `SE` is not null, it will be updated based on the potential loop SCEVs
|
||||||
/// invalidated by this.
|
/// invalidated by this.
|
||||||
@ -983,7 +983,7 @@ static bool unswitchAllTrivialConditions(Loop &L, DominatorTree &DT,
|
|||||||
if (auto *SI = dyn_cast<SwitchInst>(CurrentTerm)) {
|
if (auto *SI = dyn_cast<SwitchInst>(CurrentTerm)) {
|
||||||
// Don't bother trying to unswitch past a switch with a constant
|
// Don't bother trying to unswitch past a switch with a constant
|
||||||
// condition. This should be removed prior to running this pass by
|
// condition. This should be removed prior to running this pass by
|
||||||
// simplify-cfg.
|
// simplifycfg.
|
||||||
if (isa<Constant>(SI->getCondition()))
|
if (isa<Constant>(SI->getCondition()))
|
||||||
return Changed;
|
return Changed;
|
||||||
|
|
||||||
@ -1012,7 +1012,7 @@ static bool unswitchAllTrivialConditions(Loop &L, DominatorTree &DT,
|
|||||||
return Changed;
|
return Changed;
|
||||||
|
|
||||||
// Don't bother trying to unswitch past an unconditional branch or a branch
|
// Don't bother trying to unswitch past an unconditional branch or a branch
|
||||||
// with a constant value. These should be removed by simplify-cfg prior to
|
// with a constant value. These should be removed by simplifycfg prior to
|
||||||
// running this pass.
|
// running this pass.
|
||||||
if (!BI->isConditional() || isa<Constant>(BI->getCondition()))
|
if (!BI->isConditional() || isa<Constant>(BI->getCondition()))
|
||||||
return Changed;
|
return Changed;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
; RUN: opt -loop-unswitch -loop-reduce -loop-simplifycfg -verify-memoryssa -S %s | FileCheck %s
|
; RUN: opt -loop-unswitch -loop-reduce -loop-simplifycfg -verify-memoryssa -S %s | FileCheck %s
|
||||||
|
|
||||||
; TODO: also run with NPM, but currently LSR does not preserve LCSSA, causing a verification failure on the test.
|
; TODO: also run with NPM, but currently LSR does not preserve LCSSA, causing a verification failure on the test.
|
||||||
; opt -passes='loop-mssa(unswitch<nontrivial>,loop-reduce,simplify-cfg)' -verify-memoryssa -S %s | FileCheck %s
|
; opt -passes='loop-mssa(unswitch<nontrivial>,loop-reduce,simplifycfg)' -verify-memoryssa -S %s | FileCheck %s
|
||||||
|
|
||||||
; Test case for PR47557.
|
; Test case for PR47557.
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
; Test that patterns of transformations which disconnect a region of the call
|
; Test that patterns of transformations which disconnect a region of the call
|
||||||
; graph mid-traversal and then invalidate it function correctly.
|
; graph mid-traversal and then invalidate it function correctly.
|
||||||
;
|
;
|
||||||
; RUN: opt -S -passes='cgscc(inline,function(simplify-cfg))' < %s | FileCheck %s
|
; RUN: opt -S -passes='cgscc(inline,function(simplifycfg))' < %s | FileCheck %s
|
||||||
|
|
||||||
define internal void @test_scc_internal(i1 %flag) {
|
define internal void @test_scc_internal(i1 %flag) {
|
||||||
; CHECK-NOT: @test_scc_internal
|
; CHECK-NOT: @test_scc_internal
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
; RUN: opt -aa-pipeline=basic-aa -passes='cgscc(function-attrs,function(simplify-cfg))' -S < %s | FileCheck %s
|
; RUN: opt -aa-pipeline=basic-aa -passes='cgscc(function-attrs,function(simplifycfg))' -S < %s | FileCheck %s
|
||||||
|
|
||||||
declare void @readnone() nofree nosync readnone
|
declare void @readnone() nofree nosync readnone
|
||||||
declare void @unknown()
|
declare void @unknown()
|
||||||
declare void @reference_function_pointer(void()*) nofree nosync readnone
|
declare void @reference_function_pointer(void()*) nofree nosync readnone
|
||||||
|
|
||||||
; The @test1_* set of functions checks that when we mutate functions with
|
; The @test1_* set of functions checks that when we mutate functions with
|
||||||
; simplify-cfg to delete call edges and this ends up splitting both the SCCs
|
; simplifycfg to delete call edges and this ends up splitting both the SCCs
|
||||||
; and the RefSCCs that those functions are in, we re-run the CGSCC passes to
|
; and the RefSCCs that those functions are in, we re-run the CGSCC passes to
|
||||||
; observe the refined call graph structure.
|
; observe the refined call graph structure.
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@
|
|||||||
; CHECK-O2-NOT: Manager
|
; CHECK-O2-NOT: Manager
|
||||||
; CHECK-O2: Loop Pass Manager
|
; CHECK-O2: Loop Pass Manager
|
||||||
; CHECK-O2-NOT: Manager
|
; CHECK-O2-NOT: Manager
|
||||||
; FIXME: We shouldn't be pulling out to simplify-cfg and instcombine and
|
; FIXME: We shouldn't be pulling out to simplifycfg and instcombine and
|
||||||
; causing new loop pass managers.
|
; causing new loop pass managers.
|
||||||
; CHECK-O2: Simplify the CFG
|
; CHECK-O2: Simplify the CFG
|
||||||
; CHECK-O2-NOT: Manager
|
; CHECK-O2-NOT: Manager
|
||||||
|
@ -7,13 +7,13 @@
|
|||||||
; RUN: -simplifycfg -print-after=simplifycfg -print-module-scope \
|
; RUN: -simplifycfg -print-after=simplifycfg -print-module-scope \
|
||||||
; RUN: | FileCheck %s -check-prefix=CFG
|
; RUN: | FileCheck %s -check-prefix=CFG
|
||||||
; RUN: opt < %s 2>&1 -disable-output \
|
; RUN: opt < %s 2>&1 -disable-output \
|
||||||
; RUN: -passes=simplify-cfg -print-after-all -print-module-scope \
|
; RUN: -passes=simplifycfg -print-after-all -print-module-scope \
|
||||||
; RUN: | FileCheck %s -check-prefix=CFG
|
; RUN: | FileCheck %s -check-prefix=CFG
|
||||||
; RUN: opt -enable-new-pm=0 < %s 2>&1 -disable-output \
|
; RUN: opt -enable-new-pm=0 < %s 2>&1 -disable-output \
|
||||||
; RUN: -simplifycfg -print-after=simplifycfg -filter-print-funcs=foo -print-module-scope \
|
; RUN: -simplifycfg -print-after=simplifycfg -filter-print-funcs=foo -print-module-scope \
|
||||||
; RUN: | FileCheck %s -check-prefix=FOO
|
; RUN: | FileCheck %s -check-prefix=FOO
|
||||||
; RUN: opt < %s 2>&1 -disable-output \
|
; RUN: opt < %s 2>&1 -disable-output \
|
||||||
; RUN: -passes=simplify-cfg -print-after-all -filter-print-funcs=foo -print-module-scope \
|
; RUN: -passes=simplifycfg -print-after-all -filter-print-funcs=foo -print-module-scope \
|
||||||
; RUN: | FileCheck %s -check-prefix=FOO
|
; RUN: | FileCheck %s -check-prefix=FOO
|
||||||
|
|
||||||
; CFG: IR Dump After {{Simplify the CFG|SimplifyCFGPass}} {{.*}}foo
|
; CFG: IR Dump After {{Simplify the CFG|SimplifyCFGPass}} {{.*}}foo
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Need to move users of allocas that were moved into the coroutine frame after
|
; Need to move users of allocas that were moved into the coroutine frame after
|
||||||
; coro.begin.
|
; coro.begin.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
define nonnull i8* @f(i32 %n) "coroutine.presplit"="1" {
|
define nonnull i8* @f(i32 %n) "coroutine.presplit"="1" {
|
||||||
; CHECK-LABEL: @f(
|
; CHECK-LABEL: @f(
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Check that we can handle the case when both alloc function and
|
; Check that we can handle the case when both alloc function and
|
||||||
; the user body consume the same argument.
|
; the user body consume the same argument.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
; using copy of this (as it would happen under -O0)
|
; using copy of this (as it would happen under -O0)
|
||||||
define i8* @f_copy(i64 %this_arg) "coroutine.presplit"="1" {
|
define i8* @f_copy(i64 %this_arg) "coroutine.presplit"="1" {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Check that we can handle the case when both alloc function and
|
; Check that we can handle the case when both alloc function and
|
||||||
; the user body consume the same argument.
|
; the user body consume the same argument.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
; using this directly (as it would happen under -O2)
|
; using this directly (as it would happen under -O2)
|
||||||
define i8* @f_direct(i64 %this) "coroutine.presplit"="1" {
|
define i8* @f_direct(i64 %this) "coroutine.presplit"="1" {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Tests that CoroSplit can succesfully determine allocas should live on the frame
|
; Tests that CoroSplit can succesfully determine allocas should live on the frame
|
||||||
; if their aliases are used across suspension points through PHINode.
|
; if their aliases are used across suspension points through PHINode.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
define i8* @f(i1 %n) "coroutine.presplit"="1" {
|
define i8* @f(i1 %n) "coroutine.presplit"="1" {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Tests that if an alloca is escaped through storing the address,
|
; Tests that if an alloca is escaped through storing the address,
|
||||||
; the alloac will be put on the frame.
|
; the alloac will be put on the frame.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
define i8* @f() "coroutine.presplit"="1" {
|
define i8* @f() "coroutine.presplit"="1" {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; Tests that allocas escaped through function calls will live on the frame.
|
; Tests that allocas escaped through function calls will live on the frame.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
define i8* @f() "coroutine.presplit"="1" {
|
define i8* @f() "coroutine.presplit"="1" {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Tests that CoroSplit can succesfully determine allocas should live on the frame
|
; Tests that CoroSplit can succesfully determine allocas should live on the frame
|
||||||
; if their aliases are used across suspension points through PHINode.
|
; if their aliases are used across suspension points through PHINode.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
define i8* @f(i1 %n) "coroutine.presplit"="1" {
|
define i8* @f(i1 %n) "coroutine.presplit"="1" {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Tests that allocas after coro.begin are properly that do not need to
|
; Tests that allocas after coro.begin are properly that do not need to
|
||||||
; live on the frame are properly moved to the .resume function.
|
; live on the frame are properly moved to the .resume function.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
define i8* @f() "coroutine.presplit"="1" {
|
define i8* @f() "coroutine.presplit"="1" {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Test that in some simple cases allocas will not live on the frame even
|
; Test that in some simple cases allocas will not live on the frame even
|
||||||
; though their pointers are stored.
|
; though their pointers are stored.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
%handle = type { i8* }
|
%handle = type { i8* }
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Tests that CoroSplit can succesfully determine allocas should live on the frame
|
; Tests that CoroSplit can succesfully determine allocas should live on the frame
|
||||||
; if their aliases are used across suspension points through PHINode.
|
; if their aliases are used across suspension points through PHINode.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
define i8* @f(i1 %n) "coroutine.presplit"="1" {
|
define i8* @f(i1 %n) "coroutine.presplit"="1" {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
%"struct.std::coroutine_handle" = type { i8* }
|
%"struct.std::coroutine_handle" = type { i8* }
|
||||||
%"struct.std::coroutine_handle.0" = type { %"struct.std::coroutine_handle" }
|
%"struct.std::coroutine_handle.0" = type { %"struct.std::coroutine_handle" }
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
%promise_type = type { i8 }
|
%promise_type = type { i8 }
|
||||||
%struct.A = type <{ i64, i64, i32, [4 x i8] }>
|
%struct.A = type <{ i64, i64, i32, [4 x i8] }>
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Tests the PHI nodes in cleanuppads for catchswitch instructions are correctly
|
; Tests the PHI nodes in cleanuppads for catchswitch instructions are correctly
|
||||||
; split up.
|
; split up.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
declare i32 @__CxxFrameHandler3(...)
|
declare i32 @__CxxFrameHandler3(...)
|
||||||
define i8* @f2(i1 %val) "coroutine.presplit"="1" personality i32 (...)* @__CxxFrameHandler3 {
|
define i8* @f2(i1 %val) "coroutine.presplit"="1" personality i32 (...)* @__CxxFrameHandler3 {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; Verifies that we can insert the spill for a PHI preceding the catchswitch
|
; Verifies that we can insert the spill for a PHI preceding the catchswitch
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
|
target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
|
||||||
target triple = "i686-pc-windows-msvc"
|
target triple = "i686-pc-windows-msvc"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; Tests that debug information is sane after coro-split
|
; Tests that debug information is sane after coro-split
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
source_filename = "simple-repro.c"
|
source_filename = "simple-repro.c"
|
||||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; Check that we can handle edge splits leading into a landingpad
|
; Check that we can handle edge splits leading into a landingpad
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
target triple = "x86_64-unknown-linux-gnu"
|
target triple = "x86_64-unknown-linux-gnu"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; Check that we can handle edge splits leading into a landingpad
|
; Check that we can handle edge splits leading into a landingpad
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
target triple = "x86_64-unknown-linux-gnu"
|
target triple = "x86_64-unknown-linux-gnu"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; Check that we can handle edge splits leading into a landingpad
|
; Check that we can handle edge splits leading into a landingpad
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
target triple = "x86_64-unknown-linux-gnu"
|
target triple = "x86_64-unknown-linux-gnu"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; Check that we can handle spills of array allocas
|
; Check that we can handle spills of array allocas
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
declare void @consume.double.ptr(double*)
|
declare void @consume.double.ptr(double*)
|
||||||
declare void @consume.i32.ptr(i32*)
|
declare void @consume.i32.ptr(i32*)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; Check that we can handle spills of array allocas
|
; Check that we can handle spills of array allocas
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -reuse-storage-in-coroutine-frame -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -reuse-storage-in-coroutine-frame -S | FileCheck %s
|
||||||
|
|
||||||
%struct.big_structure = type { [500 x i8] }
|
%struct.big_structure = type { [500 x i8] }
|
||||||
declare void @consume(%struct.big_structure*)
|
declare void @consume(%struct.big_structure*)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Tests that variables in a Corotuine whose lifetime range is not overlapping each other
|
; Tests that variables in a Corotuine whose lifetime range is not overlapping each other
|
||||||
; re-use the same slot in Coroutine frame.
|
; re-use the same slot in Coroutine frame.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -reuse-storage-in-coroutine-frame -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -reuse-storage-in-coroutine-frame -S | FileCheck %s
|
||||||
%"struct.task::promise_type" = type { i8 }
|
%"struct.task::promise_type" = type { i8 }
|
||||||
%struct.awaitable = type { i8 }
|
%struct.awaitable = type { i8 }
|
||||||
%struct.big_structure = type { [500 x i8] }
|
%struct.big_structure = type { [500 x i8] }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Tests that variables of different type in a Corotuine whose lifetime range is not overlapping each other
|
; Tests that variables of different type in a Corotuine whose lifetime range is not overlapping each other
|
||||||
; re-use the same slot in Coroutine frame.
|
; re-use the same slot in Coroutine frame.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -reuse-storage-in-coroutine-frame -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -reuse-storage-in-coroutine-frame -S | FileCheck %s
|
||||||
%"struct.task::promise_type" = type { i8 }
|
%"struct.task::promise_type" = type { i8 }
|
||||||
%struct.awaitable = type { i8 }
|
%struct.awaitable = type { i8 }
|
||||||
%struct.big_structure = type { [500 x i8] }
|
%struct.big_structure = type { [500 x i8] }
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; Check that we should not reuse alloca sotrage in O0.
|
; Check that we should not reuse alloca sotrage in O0.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
%struct.big_structure = type { [500 x i8] }
|
%struct.big_structure = type { [500 x i8] }
|
||||||
declare void @consume(%struct.big_structure*)
|
declare void @consume(%struct.big_structure*)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Tests that variables of different type with incompatible alignment in a Corotuine whose lifetime
|
; Tests that variables of different type with incompatible alignment in a Corotuine whose lifetime
|
||||||
; range is not overlapping each other should not re-use the same slot in Coroutine frame.
|
; range is not overlapping each other should not re-use the same slot in Coroutine frame.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -reuse-storage-in-coroutine-frame -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -reuse-storage-in-coroutine-frame -S | FileCheck %s
|
||||||
%"struct.task::promise_type" = type { i8 }
|
%"struct.task::promise_type" = type { i8 }
|
||||||
%struct.awaitable = type { i8 }
|
%struct.awaitable = type { i8 }
|
||||||
%struct.big_structure = type { [500 x i8] }
|
%struct.big_structure = type { [500 x i8] }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Tests that variables of different type with incompatible alignment in a Corotuine whose
|
; Tests that variables of different type with incompatible alignment in a Corotuine whose
|
||||||
; lifetime range is not overlapping each other re-use the same slot in CorotuineFrame.
|
; lifetime range is not overlapping each other re-use the same slot in CorotuineFrame.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -reuse-storage-in-coroutine-frame -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -reuse-storage-in-coroutine-frame -S | FileCheck %s
|
||||||
%"struct.task::promise_type" = type { i8 }
|
%"struct.task::promise_type" = type { i8 }
|
||||||
%struct.awaitable = type { i8 }
|
%struct.awaitable = type { i8 }
|
||||||
%struct.big_structure = type { [500 x i8] }
|
%struct.big_structure = type { [500 x i8] }
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; Check that coro-split doesn't choke on intrinsics in unreachable blocks
|
; Check that coro-split doesn't choke on intrinsics in unreachable blocks
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S
|
||||||
|
|
||||||
define i8* @f(i1 %arg) "coroutine.presplit"="1" personality i32 0 {
|
define i8* @f(i1 %arg) "coroutine.presplit"="1" personality i32 0 {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; Check that we can handle spills of the result of the invoke instruction
|
; Check that we can handle spills of the result of the invoke instruction
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
define i8* @f(i64 %this) "coroutine.presplit"="1" personality i32 0 {
|
define i8* @f(i64 %this) "coroutine.presplit"="1" personality i32 0 {
|
||||||
entry:
|
entry:
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
; elided and any tail calls referencing the coroutine frame has the tail
|
; elided and any tail calls referencing the coroutine frame has the tail
|
||||||
; call attribute removed.
|
; call attribute removed.
|
||||||
; RUN: opt < %s -S \
|
; RUN: opt < %s -S \
|
||||||
; RUN: -passes='cgscc(inline,function(coro-elide,instsimplify,simplify-cfg))' \
|
; RUN: -passes='cgscc(inline,function(coro-elide,instsimplify,simplifycfg))' \
|
||||||
; RUN: -aa-pipeline='basic-aa' | FileCheck %s
|
; RUN: -aa-pipeline='basic-aa' | FileCheck %s
|
||||||
|
|
||||||
declare void @print(i32) nounwind
|
declare void @print(i32) nounwind
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; Verifies that we materialize instruction across suspend points
|
; Verifies that we materialize instruction across suspend points
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
define i8* @f(i32 %n) "coroutine.presplit"="1" {
|
define i8* @f(i32 %n) "coroutine.presplit"="1" {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Check that we will insert the correct padding if natural alignment of the
|
; Check that we will insert the correct padding if natural alignment of the
|
||||||
; spilled data does not match the alignment specified in alloca instruction.
|
; spilled data does not match the alignment specified in alloca instruction.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
%PackedStruct = type <{ i64 }>
|
%PackedStruct = type <{ i64 }>
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Check that we create copy the data from the alloca into the coroutine
|
; Check that we create copy the data from the alloca into the coroutine
|
||||||
; frame slot if it was written to.
|
; frame slot if it was written to.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
define i8* @f() "coroutine.presplit"="1" {
|
define i8* @f() "coroutine.presplit"="1" {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
target datalayout = "p:64:64:64"
|
target datalayout = "p:64:64:64"
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --include-generated-funcs
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --include-generated-funcs
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse,coro-cleanup' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse,coro-cleanup' -S | FileCheck %s
|
||||||
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
|
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
target triple = "x86_64-apple-macosx10.12.0"
|
target triple = "x86_64-apple-macosx10.12.0"
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --include-generated-funcs
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --include-generated-funcs
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse,simplify-cfg,coro-cleanup' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse,simplifycfg,coro-cleanup' -S | FileCheck %s
|
||||||
|
|
||||||
define i8* @f(i8* %buffer, i32 %n) "coroutine.presplit"="1" {
|
define i8* @f(i8* %buffer, i32 %n) "coroutine.presplit"="1" {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||||
; RUN: opt < %s -passes='function(coro-early),cgscc(coro-split),function(simplify-cfg,early-cse)' -S | FileCheck %s
|
; RUN: opt < %s -passes='function(coro-early),cgscc(coro-split),function(simplifycfg,early-cse)' -S | FileCheck %s
|
||||||
target datalayout = "E-p:64:64"
|
target datalayout = "E-p:64:64"
|
||||||
|
|
||||||
%swift.type = type { i64 }
|
%swift.type = type { i64 }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||||
; Verifies that we insert spills of PHI instruction _after) all PHI Nodes
|
; Verifies that we insert spills of PHI instruction _after) all PHI Nodes
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse,simplify-cfg' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse,simplifycfg' -S | FileCheck %s
|
||||||
|
|
||||||
; Verifies that the both phis are stored correctly in the coroutine frame
|
; Verifies that the both phis are stored correctly in the coroutine frame
|
||||||
; CHECK: %f.Frame = type { void (%f.Frame*)*, void (%f.Frame*)*, i32, i32, i1 }
|
; CHECK: %f.Frame = type { void (%f.Frame*)*, void (%f.Frame*)*, i32, i32, i1 }
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; Check that we can spills coro.begin from an inlined inner coroutine.
|
; Check that we can spills coro.begin from an inlined inner coroutine.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
%g.Frame = type { void (%g.Frame*)*, void (%g.Frame*)*, i32, i1, i32 }
|
%g.Frame = type { void (%g.Frame*)*, void (%g.Frame*)*, i32, i1, i32 }
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; Verifies that phi and invoke definitions before CoroBegin are spilled properly.
|
; Verifies that phi and invoke definitions before CoroBegin are spilled properly.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse,simplify-cfg' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse,simplifycfg' -S | FileCheck %s
|
||||||
|
|
||||||
define i8* @f(i1 %n) "coroutine.presplit"="1" personality i32 0 {
|
define i8* @f(i1 %n) "coroutine.presplit"="1" personality i32 0 {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; Check that promise object is reloaded from the correct index of the coro frame.
|
; Check that promise object is reloaded from the correct index of the coro frame.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
%"class.task::promise_type" = type { [64 x i8] }
|
%"class.task::promise_type" = type { [64 x i8] }
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; Tests that coro-split pass splits the coroutine into f, f.resume and f.destroy
|
; Tests that coro-split pass splits the coroutine into f, f.resume and f.destroy
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
define i8* @f() "coroutine.presplit"="1" {
|
define i8* @f() "coroutine.presplit"="1" {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
; Tests that coro-split can handle the case when a code after coro.suspend uses
|
; Tests that coro-split can handle the case when a code after coro.suspend uses
|
||||||
; a value produces between coro.save and coro.suspend (%Result.i19)
|
; a value produces between coro.save and coro.suspend (%Result.i19)
|
||||||
; and checks whether stray coro.saves are properly removed
|
; and checks whether stray coro.saves are properly removed
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse,simplify-cfg' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse,simplifycfg' -S | FileCheck %s
|
||||||
|
|
||||||
%"struct.std::coroutine_handle" = type { i8* }
|
%"struct.std::coroutine_handle" = type { i8* }
|
||||||
%"struct.std::coroutine_handle.0" = type { %"struct.std::coroutine_handle" }
|
%"struct.std::coroutine_handle.0" = type { %"struct.std::coroutine_handle" }
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; Tests that coro-split passes initialized values to coroutine frame allocator.
|
; Tests that coro-split passes initialized values to coroutine frame allocator.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
define i8* @f(i32 %argument) "coroutine.presplit"="1" {
|
define i8* @f(i32 %argument) "coroutine.presplit"="1" {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Make sure that coro-split correctly deals with debug information.
|
; Make sure that coro-split correctly deals with debug information.
|
||||||
; The test here is simply that it does not result in bad IR that will crash opt.
|
; The test here is simply that it does not result in bad IR that will crash opt.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -disable-output
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -disable-output
|
||||||
source_filename = "coro.c"
|
source_filename = "coro.c"
|
||||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
target triple = "x86_64-unknown-linux-gnu"
|
target triple = "x86_64-unknown-linux-gnu"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Tests that coro-split removes cleanup code after coro.end in resume functions
|
; Tests that coro-split removes cleanup code after coro.end in resume functions
|
||||||
; and retains it in the start function.
|
; and retains it in the start function.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
define i8* @f(i1 %val) "coroutine.presplit"="1" personality i32 3 {
|
define i8* @f(i1 %val) "coroutine.presplit"="1" personality i32 3 {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Tests that coro-split removes cleanup code after coro.end in resume functions
|
; Tests that coro-split removes cleanup code after coro.end in resume functions
|
||||||
; and retains it in the start function.
|
; and retains it in the start function.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
define i8* @f2(i1 %val) "coroutine.presplit"="1" personality i32 4 {
|
define i8* @f2(i1 %val) "coroutine.presplit"="1" personality i32 4 {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
; Tests that coro-split can convert functions with hidden visibility.
|
; Tests that coro-split can convert functions with hidden visibility.
|
||||||
; These may be generated by a frontend such as Clang, when inlining with
|
; These may be generated by a frontend such as Clang, when inlining with
|
||||||
; '-fvisibility-inlines-hidden'.
|
; '-fvisibility-inlines-hidden'.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
define hidden i8* @f() "coroutine.presplit"="1" {
|
define hidden i8* @f() "coroutine.presplit"="1" {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Tests that coro-split will convert coro.resume followed by a suspend to a
|
; Tests that coro-split will convert coro.resume followed by a suspend to a
|
||||||
; musttail call.
|
; musttail call.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
define void @f() #0 {
|
define void @f() #0 {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Tests that coro-split will convert coro.resume followed by a suspend to a
|
; Tests that coro-split will convert coro.resume followed by a suspend to a
|
||||||
; musttail call.
|
; musttail call.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
define void @f() #0 {
|
define void @f() #0 {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Tests that coro-split will convert coro.resume followed by a suspend to a
|
; Tests that coro-split will convert coro.resume followed by a suspend to a
|
||||||
; musttail call.
|
; musttail call.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
define void @fakeresume1(i8*) {
|
define void @fakeresume1(i8*) {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Tests that coro-split will convert coro.resume followed by a suspend to a
|
; Tests that coro-split will convert coro.resume followed by a suspend to a
|
||||||
; musttail call.
|
; musttail call.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
define void @f() #0 {
|
define void @f() #0 {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Tests that coro-split will optimize the lifetime.start maker of each local variable,
|
; Tests that coro-split will optimize the lifetime.start maker of each local variable,
|
||||||
; sink them to the places after the suspend block.
|
; sink them to the places after the suspend block.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse,simplify-cfg' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse,simplifycfg' -S | FileCheck %s
|
||||||
|
|
||||||
%"struct.std::coroutine_handle" = type { i8* }
|
%"struct.std::coroutine_handle" = type { i8* }
|
||||||
%"struct.std::coroutine_handle.0" = type { %"struct.std::coroutine_handle" }
|
%"struct.std::coroutine_handle.0" = type { %"struct.std::coroutine_handle" }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Tests that coro-split will optimize the lifetime.start maker of each local variable,
|
; Tests that coro-split will optimize the lifetime.start maker of each local variable,
|
||||||
; sink them to the places after the suspend block.
|
; sink them to the places after the suspend block.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
%"struct.std::coroutine_handle" = type { i8* }
|
%"struct.std::coroutine_handle" = type { i8* }
|
||||||
%"struct.std::coroutine_handle.0" = type { %"struct.std::coroutine_handle" }
|
%"struct.std::coroutine_handle.0" = type { %"struct.std::coroutine_handle" }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Corresponding to coro-split-sink-lifetime-01.ll. This file tests that whether the CoroFrame
|
; Corresponding to coro-split-sink-lifetime-01.ll. This file tests that whether the CoroFrame
|
||||||
; pass knows the operand of lifetime.start intrinsic may be GEP as well.
|
; pass knows the operand of lifetime.start intrinsic may be GEP as well.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse,simplify-cfg' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse,simplifycfg' -S | FileCheck %s
|
||||||
|
|
||||||
%"struct.std::coroutine_handle" = type { i8* }
|
%"struct.std::coroutine_handle" = type { i8* }
|
||||||
%"struct.std::coroutine_handle.0" = type { %"struct.std::coroutine_handle" }
|
%"struct.std::coroutine_handle.0" = type { %"struct.std::coroutine_handle" }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Tests that coro-split will optimize the lifetime.start maker of each local variable,
|
; Tests that coro-split will optimize the lifetime.start maker of each local variable,
|
||||||
; sink them to the places after the suspend block.
|
; sink them to the places after the suspend block.
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse,simplify-cfg' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse,simplifycfg' -S | FileCheck %s
|
||||||
|
|
||||||
%"struct.std::coroutine_handle" = type { i8* }
|
%"struct.std::coroutine_handle" = type { i8* }
|
||||||
%"struct.std::coroutine_handle.0" = type { %"struct.std::coroutine_handle" }
|
%"struct.std::coroutine_handle.0" = type { %"struct.std::coroutine_handle" }
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s
|
||||||
|
|
||||||
declare i8* @malloc(i64)
|
declare i8* @malloc(i64)
|
||||||
declare void @free(i8*)
|
declare void @free(i8*)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; Test no suspend coroutines
|
; Test no suspend coroutines
|
||||||
; RUN: opt < %s -passes='cgscc(coro-split),simplify-cfg,early-cse,simplify-cfg' -S | FileCheck %s
|
; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse,simplifycfg' -S | FileCheck %s
|
||||||
|
|
||||||
; Coroutine with no-suspends will turn into:
|
; Coroutine with no-suspends will turn into:
|
||||||
;
|
;
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
; more than 16 calls in them.
|
; more than 16 calls in them.
|
||||||
;
|
;
|
||||||
; This test is extracted from the following C++ program compiled with Clang.
|
; This test is extracted from the following C++ program compiled with Clang.
|
||||||
; The IR is simplified with SROA, instcombine, and simplify-cfg. Then C++
|
; The IR is simplified with SROA, instcombine, and simplifycfg. Then C++
|
||||||
; linkage stuff, attributes, target specific things, metadata and comments were
|
; linkage stuff, attributes, target specific things, metadata and comments were
|
||||||
; removed. The order of the fuctions is also made more predictable than Clang's
|
; removed. The order of the fuctions is also made more predictable than Clang's
|
||||||
; output order.
|
; output order.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||||
; RUN: opt -S -passes=instcombine,simplify-cfg < %s 2>&1 | FileCheck %s
|
; RUN: opt -S -passes=instcombine,simplifycfg < %s 2>&1 | FileCheck %s
|
||||||
|
|
||||||
declare void @llvm.assume(i1 noundef)
|
declare void @llvm.assume(i1 noundef)
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||||
; RUN: opt < %s -S -passes='require<opt-remark-emit>,loop-unroll<peeling;no-runtime>,simplify-cfg,instcombine' -unroll-force-peel-count=3 -verify-dom-info | FileCheck %s
|
; RUN: opt < %s -S -passes='require<opt-remark-emit>,loop-unroll<peeling;no-runtime>,simplifycfg,instcombine' -unroll-force-peel-count=3 -verify-dom-info | FileCheck %s
|
||||||
|
|
||||||
define void @basic(i32 %K, i32 %N) {
|
define void @basic(i32 %K, i32 %N) {
|
||||||
; CHECK-LABEL: @basic(
|
; CHECK-LABEL: @basic(
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; RUN: opt < %s -S -loop-unroll -unroll-force-peel-count=3 -verify-dom-info -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -instcombine | FileCheck %s
|
; RUN: opt < %s -S -loop-unroll -unroll-force-peel-count=3 -verify-dom-info -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -instcombine | FileCheck %s
|
||||||
; RUN: opt < %s -S -passes='require<opt-remark-emit>,loop-unroll,simplify-cfg,instcombine' -unroll-force-peel-count=3 -verify-dom-info | FileCheck %s
|
; RUN: opt < %s -S -passes='require<opt-remark-emit>,loop-unroll,simplifycfg,instcombine' -unroll-force-peel-count=3 -verify-dom-info | FileCheck %s
|
||||||
; RUN: opt < %s -S -passes='require<opt-remark-emit>,loop-unroll<peeling;no-runtime>,simplify-cfg,instcombine' -unroll-force-peel-count=3 -verify-dom-info | FileCheck %s
|
; RUN: opt < %s -S -passes='require<opt-remark-emit>,loop-unroll<peeling;no-runtime>,simplifycfg,instcombine' -unroll-force-peel-count=3 -verify-dom-info | FileCheck %s
|
||||||
|
|
||||||
; Basic loop peeling - check that we can peel-off the first 3 loop iterations
|
; Basic loop peeling - check that we can peel-off the first 3 loop iterations
|
||||||
; when explicitly requested.
|
; when explicitly requested.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||||
; RUN: opt < %s -chr -instcombine -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S -enable-new-pm=0 | FileCheck %s
|
; RUN: opt < %s -chr -instcombine -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S -enable-new-pm=0 | FileCheck %s
|
||||||
; RUN: opt < %s -passes='require<profile-summary>,function(chr,instcombine,simplify-cfg)' -S | FileCheck %s
|
; RUN: opt < %s -passes='require<profile-summary>,function(chr,instcombine,simplifycfg)' -S | FileCheck %s
|
||||||
|
|
||||||
declare void @foo()
|
declare void @foo()
|
||||||
declare void @bar()
|
declare void @bar()
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; RUN: opt < %s -prune-eh -enable-new-pm=0 -S | FileCheck %s
|
; RUN: opt < %s -prune-eh -enable-new-pm=0 -S | FileCheck %s
|
||||||
; RUN: opt < %s -passes='function-attrs,function(simplify-cfg)' -S | FileCheck %s
|
; RUN: opt < %s -passes='function-attrs,function(simplifycfg)' -S | FileCheck %s
|
||||||
|
|
||||||
; We should not infer 'nounwind' for/from a weak function,
|
; We should not infer 'nounwind' for/from a weak function,
|
||||||
; since it can be overriden by throwing implementation.
|
; since it can be overriden by throwing implementation.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||||
; RUN: opt -S -prune-eh -enable-new-pm=0 < %s | FileCheck --check-prefixes=ALL,OLDPM %s
|
; RUN: opt -S -prune-eh -enable-new-pm=0 < %s | FileCheck --check-prefixes=ALL,OLDPM %s
|
||||||
; RUN: opt -S -passes='function-attrs,function(simplify-cfg)' < %s | FileCheck --check-prefixes=ALL,NEWPM %s
|
; RUN: opt -S -passes='function-attrs,function(simplifycfg)' < %s | FileCheck --check-prefixes=ALL,NEWPM %s
|
||||||
|
|
||||||
declare void @may_throw()
|
declare void @may_throw()
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; RUN: opt < %s -prune-eh -S -enable-new-pm=0 | FileCheck %s
|
; RUN: opt < %s -prune-eh -S -enable-new-pm=0 | FileCheck %s
|
||||||
; RUN: opt < %s -passes='function-attrs,function(simplify-cfg)' -S | FileCheck %s
|
; RUN: opt < %s -passes='function-attrs,function(simplifycfg)' -S | FileCheck %s
|
||||||
|
|
||||||
declare void @nounwind() nounwind
|
declare void @nounwind() nounwind
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; RUN: opt -prune-eh -enable-new-pm=0 -S < %s | FileCheck %s
|
; RUN: opt -prune-eh -enable-new-pm=0 -S < %s | FileCheck %s
|
||||||
; RUN: opt < %s -passes='function-attrs,function(simplify-cfg)' -S | FileCheck %s
|
; RUN: opt < %s -passes='function-attrs,function(simplifycfg)' -S | FileCheck %s
|
||||||
|
|
||||||
declare void @noreturn()
|
declare void @noreturn()
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; RUN: opt < %s -prune-eh -enable-new-pm=0 -S | FileCheck %s
|
; RUN: opt < %s -prune-eh -enable-new-pm=0 -S | FileCheck %s
|
||||||
; RUN: opt < %s -passes='function-attrs,function(simplify-cfg)' -S | FileCheck %s
|
; RUN: opt < %s -passes='function-attrs,function(simplifycfg)' -S | FileCheck %s
|
||||||
|
|
||||||
declare void @nounwind() nounwind
|
declare void @nounwind() nounwind
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; RUN: opt -S -prune-eh -enable-new-pm=0 < %s | FileCheck %s
|
; RUN: opt -S -prune-eh -enable-new-pm=0 < %s | FileCheck %s
|
||||||
; RUN: opt -S -passes='function-attrs,function(simplify-cfg)' < %s | FileCheck %s
|
; RUN: opt -S -passes='function-attrs,function(simplifycfg)' < %s | FileCheck %s
|
||||||
|
|
||||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
target triple = "x86_64-unknown-linux-gnu"
|
target triple = "x86_64-unknown-linux-gnu"
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
; PruneEH is less powerful than simplify-cfg in terms of cfg simplification,
|
; PruneEH is less powerful than simplifycfg in terms of cfg simplification,
|
||||||
; so it leaves some of the unreachable stuff hanging around.
|
; so it leaves some of the unreachable stuff hanging around.
|
||||||
; Checking it with CHECK-OLD.
|
; Checking it with CHECK-OLD.
|
||||||
;
|
;
|
||||||
; RUN: opt -prune-eh -enable-new-pm=0 -S < %s | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-OLD
|
; RUN: opt -prune-eh -enable-new-pm=0 -S < %s | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-OLD
|
||||||
; RUN: opt -passes='function-attrs,function(simplify-cfg)' -S < %s | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NEW
|
; RUN: opt -passes='function-attrs,function(simplifycfg)' -S < %s | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NEW
|
||||||
|
|
||||||
target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
|
target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
|
||||||
target triple = "i386-pc-windows-msvc"
|
target triple = "i386-pc-windows-msvc"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; RUN: opt < %s -prune-eh -enable-new-pm=0 -S | FileCheck %s
|
; RUN: opt < %s -prune-eh -enable-new-pm=0 -S | FileCheck %s
|
||||||
; RUN: opt < %s -passes='function-attrs,function(simplify-cfg)' -S | FileCheck %s
|
; RUN: opt < %s -passes='function-attrs,function(simplifycfg)' -S | FileCheck %s
|
||||||
|
|
||||||
; CHECK-LABEL: define internal i32 @foo()
|
; CHECK-LABEL: define internal i32 @foo()
|
||||||
define internal i32 @foo() personality i32 (...)* @__gxx_personality_v0 {
|
define internal i32 @foo() personality i32 (...)* @__gxx_personality_v0 {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; RUN: opt -S -prune-eh -enable-new-pm=0 < %s | FileCheck %s
|
; RUN: opt -S -prune-eh -enable-new-pm=0 < %s | FileCheck %s
|
||||||
; RUN: opt -S -passes='function-attrs,function(simplify-cfg)' < %s | FileCheck %s
|
; RUN: opt -S -passes='function-attrs,function(simplifycfg)' < %s | FileCheck %s
|
||||||
|
|
||||||
; Don't remove invokes of nounwind functions if the personality handles async
|
; Don't remove invokes of nounwind functions if the personality handles async
|
||||||
; exceptions. The @div function in this test can fault, even though it can't
|
; exceptions. The @div function in this test can fault, even though it can't
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; RUN: opt < %s -prune-eh -enable-new-pm=0 -S | FileCheck %s
|
; RUN: opt < %s -prune-eh -enable-new-pm=0 -S | FileCheck %s
|
||||||
; RUN: opt < %s -passes='function-attrs,function(simplify-cfg)' -S | FileCheck %s
|
; RUN: opt < %s -passes='function-attrs,function(simplifycfg)' -S | FileCheck %s
|
||||||
|
|
||||||
declare void @nounwind() nounwind
|
declare void @nounwind() nounwind
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: opt -passes=simplify-cfg -S < %s | FileCheck %s
|
; RUN: opt -passes=simplifycfg -S < %s | FileCheck %s
|
||||||
|
|
||||||
; Ensure that we do not crash when trying to evaluate alignment of a <1 x ???*>.
|
; Ensure that we do not crash when trying to evaluate alignment of a <1 x ???*>.
|
||||||
|
|
||||||
|
@ -5,11 +5,11 @@
|
|||||||
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -switch-to-lookup -mtriple=arm -relocation-model=rwpi < %s | FileCheck %s --check-prefix=CHECK --check-prefix=DISABLE
|
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -switch-to-lookup -mtriple=arm -relocation-model=rwpi < %s | FileCheck %s --check-prefix=CHECK --check-prefix=DISABLE
|
||||||
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -switch-to-lookup -mtriple=arm -relocation-model=ropi-rwpi < %s | FileCheck %s --check-prefix=CHECK --check-prefix=DISABLE
|
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -switch-to-lookup -mtriple=arm -relocation-model=ropi-rwpi < %s | FileCheck %s --check-prefix=CHECK --check-prefix=DISABLE
|
||||||
|
|
||||||
; RUN: opt -S -passes='simplify-cfg<switch-to-lookup>' -mtriple=arm -relocation-model=static < %s | FileCheck %s --check-prefix=CHECK --check-prefix=ENABLE
|
; RUN: opt -S -passes='simplifycfg<switch-to-lookup>' -mtriple=arm -relocation-model=static < %s | FileCheck %s --check-prefix=CHECK --check-prefix=ENABLE
|
||||||
; RUN: opt -S -passes='simplify-cfg<switch-to-lookup>' -mtriple=arm -relocation-model=pic < %s | FileCheck %s --check-prefix=CHECK --check-prefix=ENABLE
|
; RUN: opt -S -passes='simplifycfg<switch-to-lookup>' -mtriple=arm -relocation-model=pic < %s | FileCheck %s --check-prefix=CHECK --check-prefix=ENABLE
|
||||||
; RUN: opt -S -passes='simplify-cfg<switch-to-lookup>' -mtriple=arm -relocation-model=ropi < %s | FileCheck %s --check-prefix=CHECK --check-prefix=DISABLE
|
; RUN: opt -S -passes='simplifycfg<switch-to-lookup>' -mtriple=arm -relocation-model=ropi < %s | FileCheck %s --check-prefix=CHECK --check-prefix=DISABLE
|
||||||
; RUN: opt -S -passes='simplify-cfg<switch-to-lookup>' -mtriple=arm -relocation-model=rwpi < %s | FileCheck %s --check-prefix=CHECK --check-prefix=DISABLE
|
; RUN: opt -S -passes='simplifycfg<switch-to-lookup>' -mtriple=arm -relocation-model=rwpi < %s | FileCheck %s --check-prefix=CHECK --check-prefix=DISABLE
|
||||||
; RUN: opt -S -passes='simplify-cfg<switch-to-lookup>' -mtriple=arm -relocation-model=ropi-rwpi < %s | FileCheck %s --check-prefix=CHECK --check-prefix=DISABLE
|
; RUN: opt -S -passes='simplifycfg<switch-to-lookup>' -mtriple=arm -relocation-model=ropi-rwpi < %s | FileCheck %s --check-prefix=CHECK --check-prefix=DISABLE
|
||||||
|
|
||||||
; CHECK: @{{.*}} = private unnamed_addr constant [3 x i32] [i32 1234, i32 5678, i32 15532]
|
; CHECK: @{{.*}} = private unnamed_addr constant [3 x i32] [i32 1234, i32 5678, i32 15532]
|
||||||
; ENABLE: @{{.*}} = private unnamed_addr constant [3 x i32*] [i32* @c1, i32* @c2, i32* @c3]
|
; ENABLE: @{{.*}} = private unnamed_addr constant [3 x i32*] [i32* @c1, i32* @c2, i32* @c3]
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -forward-switch-cond=false -S | FileCheck %s --check-prefix=NO_FWD
|
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -forward-switch-cond=false -S | FileCheck %s --check-prefix=NO_FWD
|
||||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -forward-switch-cond=true -S | FileCheck %s --check-prefix=FWD
|
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -forward-switch-cond=true -S | FileCheck %s --check-prefix=FWD
|
||||||
|
|
||||||
; RUN: opt < %s -passes='simplify-cfg<no-forward-switch-cond>' -S | FileCheck %s --check-prefix=NO_FWD
|
; RUN: opt < %s -passes='simplifycfg<no-forward-switch-cond>' -S | FileCheck %s --check-prefix=NO_FWD
|
||||||
; RUN: opt < %s -passes='simplify-cfg<forward-switch-cond>' -S | FileCheck %s --check-prefix=FWD
|
; RUN: opt < %s -passes='simplifycfg<forward-switch-cond>' -S | FileCheck %s --check-prefix=FWD
|
||||||
|
|
||||||
; PR10131
|
; PR10131
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||||
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -switch-to-lookup -S %s | FileCheck %s
|
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -switch-to-lookup -S %s | FileCheck %s
|
||||||
; RUN: opt -passes='simplify-cfg<switch-to-lookup>' -S %s | FileCheck %s
|
; RUN: opt -passes='simplifycfg<switch-to-lookup>' -S %s | FileCheck %s
|
||||||
; rdar://15268442
|
; rdar://15268442
|
||||||
|
|
||||||
target datalayout = "e-p:64:64:64-S128-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f16:16:16-f32:32:32-f64:64:64-f128:128:128-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
target datalayout = "e-p:64:64:64-S128-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f16:16:16-f32:32:32-f64:64:64-f128:128:128-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -switch-to-lookup -S -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
|
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -switch-to-lookup -S -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
|
||||||
; RUN: opt < %s -passes='simplify-cfg<switch-to-lookup>' -S -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
|
; RUN: opt < %s -passes='simplifycfg<switch-to-lookup>' -S -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
|
||||||
|
|
||||||
; In the presence of "-no-jump-tables"="true", simplifycfg should not convert switches to lookup tables.
|
; In the presence of "-no-jump-tables"="true", simplifycfg should not convert switches to lookup tables.
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -sink-common-insts -S | FileCheck %s
|
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -sink-common-insts -S | FileCheck %s
|
||||||
; RUN: opt < %s -passes='simplify-cfg<sink-common-insts>' -S | FileCheck %s
|
; RUN: opt < %s -passes='simplifycfg<sink-common-insts>' -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"
|
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-pc-linux-gnu"
|
target triple = "x86_64-pc-linux-gnu"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||||
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -switch-to-lookup < %s -mtriple=x86_64-apple-darwin12.0.0 | FileCheck %s
|
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -switch-to-lookup < %s -mtriple=x86_64-apple-darwin12.0.0 | FileCheck %s
|
||||||
; RUN: opt -S -passes='simplify-cfg<switch-to-lookup>' < %s -mtriple=x86_64-apple-darwin12.0.0 | FileCheck %s
|
; RUN: opt -S -passes='simplifycfg<switch-to-lookup>' < %s -mtriple=x86_64-apple-darwin12.0.0 | FileCheck %s
|
||||||
|
|
||||||
; rdar://17887153
|
; rdar://17887153
|
||||||
target datalayout = "e-p:64:64:64-S128-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f16:16:16-f32:32:32-f64:64:64-f128:128:128-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
target datalayout = "e-p:64:64:64-S128-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f16:16:16-f32:32:32-f64:64:64-f128:128:128-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||||
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -switch-to-lookup < %s -mtriple=x86_64-apple-darwin12.0.0 | FileCheck %s
|
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -switch-to-lookup < %s -mtriple=x86_64-apple-darwin12.0.0 | FileCheck %s
|
||||||
; RUN: opt -S -passes='simplify-cfg<switch-to-lookup>' < %s -mtriple=x86_64-apple-darwin12.0.0 | FileCheck %s
|
; RUN: opt -S -passes='simplifycfg<switch-to-lookup>' < %s -mtriple=x86_64-apple-darwin12.0.0 | FileCheck %s
|
||||||
|
|
||||||
; rdar://17735071
|
; rdar://17735071
|
||||||
target datalayout = "e-p:64:64:64-S128-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f16:16:16-f32:32:32-f64:64:64-f128:128:128-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
target datalayout = "e-p:64:64:64-S128-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f16:16:16-f32:32:32-f64:64:64-f128:128:128-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||||
; RUN: opt < %s -simplifycfg -switch-to-lookup=true -keep-loops=false -S -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
|
; RUN: opt < %s -simplifycfg -switch-to-lookup=true -keep-loops=false -S -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
|
||||||
; RUN: opt < %s -passes='simplify-cfg<no-keep-loops;switch-to-lookup>' -S -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
|
; RUN: opt < %s -passes='simplifycfg<no-keep-loops;switch-to-lookup>' -S -mtriple=x86_64-unknown-linux-gnu | 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 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-unknown-linux-gnu"
|
target triple = "x86_64-unknown-linux-gnu"
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
; Test CFG simplify removal of branch instructions.
|
; Test CFG simplify removal of branch instructions.
|
||||||
;
|
;
|
||||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
|
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
|
||||||
; RUN: opt < %s -passes=simplify-cfg -S | FileCheck %s
|
; RUN: opt < %s -passes=simplifycfg -S | FileCheck %s
|
||||||
|
|
||||||
define void @test1() {
|
define void @test1() {
|
||||||
; CHECK-LABEL: @test1(
|
; CHECK-LABEL: @test1(
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
; RUN: opt %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s --check-prefix=NORMAL
|
; RUN: opt %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s --check-prefix=NORMAL
|
||||||
; RUN: opt %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S -bonus-inst-threshold=2 | FileCheck %s --check-prefix=AGGRESSIVE
|
; RUN: opt %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S -bonus-inst-threshold=2 | FileCheck %s --check-prefix=AGGRESSIVE
|
||||||
; RUN: opt %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S -bonus-inst-threshold=4 | FileCheck %s --check-prefix=WAYAGGRESSIVE
|
; RUN: opt %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S -bonus-inst-threshold=4 | FileCheck %s --check-prefix=WAYAGGRESSIVE
|
||||||
; RUN: opt %s -passes=simplify-cfg -S | FileCheck %s --check-prefix=NORMAL
|
; RUN: opt %s -passes=simplifycfg -S | FileCheck %s --check-prefix=NORMAL
|
||||||
; RUN: opt %s -passes='simplify-cfg<bonus-inst-threshold=2>' -S | FileCheck %s --check-prefix=AGGRESSIVE
|
; RUN: opt %s -passes='simplifycfg<bonus-inst-threshold=2>' -S | FileCheck %s --check-prefix=AGGRESSIVE
|
||||||
; RUN: opt %s -passes='simplify-cfg<bonus-inst-threshold=4>' -S | FileCheck %s --check-prefix=WAYAGGRESSIVE
|
; RUN: opt %s -passes='simplifycfg<bonus-inst-threshold=4>' -S | FileCheck %s --check-prefix=WAYAGGRESSIVE
|
||||||
|
|
||||||
define i32 @foo(i32 %a, i32 %b, i32 %c, i32 %d, i32* %input) {
|
define i32 @foo(i32 %a, i32 %b, i32 %c, i32 %d, i32* %input) {
|
||||||
; NORMAL-LABEL: @foo(
|
; NORMAL-LABEL: @foo(
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||||
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 < %s | FileCheck %s
|
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 < %s | FileCheck %s
|
||||||
; RUN: opt -S -passes=simplify-cfg < %s | FileCheck %s
|
; RUN: opt -S -passes=simplifycfg < %s | FileCheck %s
|
||||||
|
|
||||||
declare void @foo() convergent
|
declare void @foo() convergent
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||||
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -keep-loops=false -S < %s | FileCheck %s
|
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -keep-loops=false -S < %s | FileCheck %s
|
||||||
; RUN: opt -passes='simplify-cfg<no-keep-loops>' -S < %s | FileCheck %s
|
; RUN: opt -passes='simplifycfg<no-keep-loops>' -S < %s | FileCheck %s
|
||||||
|
|
||||||
; It's not worthwhile to if-convert one of the phi nodes and leave
|
; It's not worthwhile to if-convert one of the phi nodes and leave
|
||||||
; the other behind, because that still requires a branch. If
|
; the other behind, because that still requires a branch. If
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -sink-common-insts -S | FileCheck %s
|
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -sink-common-insts -S | FileCheck %s
|
||||||
; RUN: opt < %s -passes='simplify-cfg<sink-common-insts>' -S | FileCheck %s
|
; RUN: opt < %s -passes='simplifycfg<sink-common-insts>' -S | FileCheck %s
|
||||||
|
|
||||||
define i1 @test1(i1 zeroext %flag, i8* %y) #0 {
|
define i1 @test1(i1 zeroext %flag, i8* %y) #0 {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -keep-loops=false -S < %s | FileCheck %s
|
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -keep-loops=false -S < %s | FileCheck %s
|
||||||
; RUN: opt -passes='simplify-cfg<no-keep-loops>' -S < %s | FileCheck %s
|
; RUN: opt -passes='simplifycfg<no-keep-loops>' -S < %s | FileCheck %s
|
||||||
|
|
||||||
define void @test1(i32 %n) #0 {
|
define void @test1(i32 %n) #0 {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -switch-to-lookup -S | FileCheck %s
|
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -switch-to-lookup -S | FileCheck %s
|
||||||
; RUN: opt < %s -passes='simplify-cfg<switch-to-lookup>' -S | FileCheck %s
|
; RUN: opt < %s -passes='simplifycfg<switch-to-lookup>' -S | FileCheck %s
|
||||||
|
|
||||||
target datalayout = "e-n32"
|
target datalayout = "e-n32"
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||||
; RUN: opt %s -S -passes='simplify-cfg<switch-to-lookup>' -simplifycfg-require-and-preserve-domtree=1 | FileCheck %s
|
; RUN: opt %s -S -passes='simplifycfg<switch-to-lookup>' -simplifycfg-require-and-preserve-domtree=1 | FileCheck %s
|
||||||
|
|
||||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
declare void @foo(i32)
|
declare void @foo(i32)
|
||||||
@ -220,7 +220,7 @@ default:
|
|||||||
}
|
}
|
||||||
|
|
||||||
; Check that we can eliminate both dead cases and dead defaults
|
; Check that we can eliminate both dead cases and dead defaults
|
||||||
; within a single run of simplify-cfg
|
; within a single run of simplifycfg
|
||||||
define void @test7(i8 %a) {
|
define void @test7(i8 %a) {
|
||||||
; CHECK-LABEL: @test7(
|
; CHECK-LABEL: @test7(
|
||||||
; CHECK-NEXT: [[AND:%.*]] = and i8 [[A:%.*]], -2
|
; CHECK-NEXT: [[AND:%.*]] = and i8 [[A:%.*]], -2
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||||
; RUN: opt %s -keep-loops=false -switch-to-lookup=true -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
|
; RUN: opt %s -keep-loops=false -switch-to-lookup=true -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
|
||||||
; RUN: opt %s -passes='simplify-cfg<no-keep-loops;switch-to-lookup>' -S | FileCheck %s
|
; RUN: opt %s -passes='simplifycfg<no-keep-loops;switch-to-lookup>' -S | FileCheck %s
|
||||||
|
|
||||||
define void @f6() #0 {
|
define void @f6() #0 {
|
||||||
; CHECK-LABEL: @f6(
|
; CHECK-LABEL: @f6(
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user