[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
e24bb698bb
commit
472462c472
|
@ -2211,7 +2211,7 @@ bool CallAnalyzer::visitSwitchInst(SwitchInst &SI) {
|
|||
// 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
|
||||
// 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
|
||||
// does not (yet) fire.
|
||||
|
||||
|
|
|
@ -88,7 +88,7 @@ void llvm::handleExecNameEncodedOptimizerOpts(StringRef ExecName) {
|
|||
} else if (Opt == "earlycse") {
|
||||
Args.push_back("-passes=early-cse");
|
||||
} else if (Opt == "simplifycfg") {
|
||||
Args.push_back("-passes=simplify-cfg");
|
||||
Args.push_back("-passes=simplifycfg");
|
||||
} else if (Opt == "gvn") {
|
||||
Args.push_back("-passes=gvn");
|
||||
} else if (Opt == "sccp") {
|
||||
|
|
|
@ -1154,7 +1154,7 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
|
|||
|
||||
// Promote any localized globals to SSA registers.
|
||||
// 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
|
||||
// constants.
|
||||
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
|
||||
// simplify-cfg and others undo their rotation.
|
||||
// simplifycfg and others undo their rotation.
|
||||
|
||||
// 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
|
||||
|
|
|
@ -301,7 +301,6 @@ FUNCTION_PASS("scalarize-masked-mem-intrin", ScalarizeMaskedMemIntrinPass())
|
|||
FUNCTION_PASS("scalarizer", ScalarizerPass())
|
||||
FUNCTION_PASS("separate-const-offset-from-gep", SeparateConstOffsetFromGEPPass())
|
||||
FUNCTION_PASS("sccp", SCCPPass())
|
||||
FUNCTION_PASS("simplifycfg", SimplifyCFGPass())
|
||||
FUNCTION_PASS("sink", SinkingPass())
|
||||
FUNCTION_PASS("slp-vectorizer", SLPVectorizerPass())
|
||||
FUNCTION_PASS("slsr", StraightLineStrengthReducePass())
|
||||
|
@ -352,7 +351,7 @@ FUNCTION_PASS_WITH_PARAMS("msan",
|
|||
},
|
||||
parseMSanPassOptions,
|
||||
"recover;kernel;track-origins=N")
|
||||
FUNCTION_PASS_WITH_PARAMS("simplify-cfg",
|
||||
FUNCTION_PASS_WITH_PARAMS("simplifycfg",
|
||||
"SimplifyCFGPass",
|
||||
[](SimplifyCFGOptions Opts) {
|
||||
return SimplifyCFGPass(Opts);
|
||||
|
|
|
@ -454,7 +454,7 @@ void PassManagerBuilder::addFunctionSimplificationPasses(
|
|||
else
|
||||
MPM.add(createLoopUnswitchPass(SizeLevel || OptLevel < 3, DivergentTarget));
|
||||
// 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.
|
||||
MPM.add(createCFGSimplificationPass());
|
||||
MPM.add(createInstructionCombiningPass());
|
||||
|
|
|
@ -420,7 +420,7 @@ static Loop *getTopMostExitingLoop(BasicBlock *ExitBB, LoopInfo &LI) {
|
|||
/// hoists the branch above that split. Preserves loop simplified form
|
||||
/// (splitting the exit block as necessary). It simplifies the branch within
|
||||
/// 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
|
||||
/// 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
|
||||
/// switch will not be revisited. If after unswitching there is only a single
|
||||
/// 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
|
||||
/// invalidated by this.
|
||||
|
@ -983,7 +983,7 @@ static bool unswitchAllTrivialConditions(Loop &L, DominatorTree &DT,
|
|||
if (auto *SI = dyn_cast<SwitchInst>(CurrentTerm)) {
|
||||
// Don't bother trying to unswitch past a switch with a constant
|
||||
// condition. This should be removed prior to running this pass by
|
||||
// simplify-cfg.
|
||||
// simplifycfg.
|
||||
if (isa<Constant>(SI->getCondition()))
|
||||
return Changed;
|
||||
|
||||
|
@ -1012,7 +1012,7 @@ static bool unswitchAllTrivialConditions(Loop &L, DominatorTree &DT,
|
|||
return Changed;
|
||||
|
||||
// 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.
|
||||
if (!BI->isConditional() || isa<Constant>(BI->getCondition()))
|
||||
return Changed;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
; 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.
|
||||
; 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.
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
; Test that patterns of transformations which disconnect a region of the call
|
||||
; 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) {
|
||||
; 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 @unknown()
|
||||
declare void @reference_function_pointer(void()*) nofree nosync readnone
|
||||
|
||||
; 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
|
||||
; observe the refined call graph structure.
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
; CHECK-O2-NOT: Manager
|
||||
; CHECK-O2: Loop Pass 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.
|
||||
; CHECK-O2: Simplify the CFG
|
||||
; CHECK-O2-NOT: Manager
|
||||
|
|
|
@ -7,13 +7,13 @@
|
|||
; RUN: -simplifycfg -print-after=simplifycfg -print-module-scope \
|
||||
; RUN: | FileCheck %s -check-prefix=CFG
|
||||
; 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: opt -enable-new-pm=0 < %s 2>&1 -disable-output \
|
||||
; RUN: -simplifycfg -print-after=simplifycfg -filter-print-funcs=foo -print-module-scope \
|
||||
; RUN: | FileCheck %s -check-prefix=FOO
|
||||
; 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
|
||||
|
||||
; 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
|
||||
; 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" {
|
||||
; CHECK-LABEL: @f(
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; Check that we can handle the case when both alloc function and
|
||||
; 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)
|
||||
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
|
||||
; 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)
|
||||
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
|
||||
; 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" {
|
||||
entry:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; Tests that if an alloca is escaped through storing the address,
|
||||
; 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" {
|
||||
entry:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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" {
|
||||
entry:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; Tests that CoroSplit can succesfully determine allocas should live on the frame
|
||||
; 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" {
|
||||
entry:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; Tests that allocas after coro.begin are properly that do not need to
|
||||
; 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" {
|
||||
entry:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; Test that in some simple cases allocas will not live on the frame even
|
||||
; 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* }
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; Tests that CoroSplit can succesfully determine allocas should live on the frame
|
||||
; 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" {
|
||||
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.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 }
|
||||
%struct.A = type <{ i64, i64, i32, [4 x i8] }>
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; Tests the PHI nodes in cleanuppads for catchswitch instructions are correctly
|
||||
; 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(...)
|
||||
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
|
||||
; 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 triple = "i686-pc-windows-msvc"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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"
|
||||
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
|
||||
; 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 triple = "x86_64-unknown-linux-gnu"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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 triple = "x86_64-unknown-linux-gnu"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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 triple = "x86_64-unknown-linux-gnu"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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.i32.ptr(i32*)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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] }
|
||||
declare void @consume(%struct.big_structure*)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; Tests that variables in a Corotuine whose lifetime range is not overlapping each other
|
||||
; 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.awaitable = type { 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
|
||||
; 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.awaitable = type { i8 }
|
||||
%struct.big_structure = type { [500 x i8] }
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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] }
|
||||
declare void @consume(%struct.big_structure*)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; 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.
|
||||
; 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.awaitable = type { 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
|
||||
; 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.awaitable = type { i8 }
|
||||
%struct.big_structure = type { [500 x i8] }
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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 {
|
||||
entry:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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 {
|
||||
entry:
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
; elided and any tail calls referencing the coroutine frame has the tail
|
||||
; call attribute removed.
|
||||
; 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
|
||||
|
||||
declare void @print(i32) nounwind
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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" {
|
||||
entry:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; Check that we will insert the correct padding if natural alignment of the
|
||||
; 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 }>
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; Check that we create copy the data from the alloca into the coroutine
|
||||
; 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" {
|
||||
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"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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 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
|
||||
; 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" {
|
||||
entry:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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"
|
||||
|
||||
%swift.type = type { i64 }
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; 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
|
||||
; 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.
|
||||
; 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 }
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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 {
|
||||
entry:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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] }
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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" {
|
||||
entry:
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
; 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)
|
||||
; 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.0" = type { %"struct.std::coroutine_handle" }
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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" {
|
||||
entry:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; 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.
|
||||
; 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"
|
||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; Tests that coro-split removes cleanup code after coro.end in resume functions
|
||||
; 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 {
|
||||
entry:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; Tests that coro-split removes cleanup code after coro.end in resume functions
|
||||
; 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 {
|
||||
entry:
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
; Tests that coro-split can convert functions with hidden visibility.
|
||||
; These may be generated by a frontend such as Clang, when inlining with
|
||||
; '-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" {
|
||||
entry:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; Tests that coro-split will convert coro.resume followed by a suspend to a
|
||||
; 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 {
|
||||
entry:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; Tests that coro-split will convert coro.resume followed by a suspend to a
|
||||
; 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 {
|
||||
entry:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; Tests that coro-split will convert coro.resume followed by a suspend to a
|
||||
; 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*) {
|
||||
entry:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; Tests that coro-split will convert coro.resume followed by a suspend to a
|
||||
; 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 {
|
||||
entry:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; Tests that coro-split will optimize the lifetime.start maker of each local variable,
|
||||
; 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.0" = type { %"struct.std::coroutine_handle" }
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; Tests that coro-split will optimize the lifetime.start maker of each local variable,
|
||||
; 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.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
|
||||
; 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.0" = type { %"struct.std::coroutine_handle" }
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; Tests that coro-split will optimize the lifetime.start maker of each local variable,
|
||||
; 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.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 void @free(i8*)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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:
|
||||
;
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
; more than 16 calls in them.
|
||||
;
|
||||
; 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
|
||||
; removed. The order of the fuctions is also made more predictable than Clang's
|
||||
; output order.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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)
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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) {
|
||||
; 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 -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<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,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>,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
|
||||
; when explicitly requested.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; 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 -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 @bar()
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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,
|
||||
; since it can be overriden by throwing implementation.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; 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 -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()
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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()
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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 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.
|
||||
; 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 -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 triple = "i386-pc-windows-msvc"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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()
|
||||
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 -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
|
||||
; 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 -passes='function-attrs,function(simplify-cfg)' -S | FileCheck %s
|
||||
; RUN: opt < %s -passes='function-attrs,function(simplifycfg)' -S | FileCheck %s
|
||||
|
||||
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 ???*>.
|
||||
|
||||
|
|
|
@ -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=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='simplify-cfg<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='simplify-cfg<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=static < %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='simplifycfg<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=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]
|
||||
; 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=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='simplify-cfg<forward-switch-cond>' -S | FileCheck %s --check-prefix=FWD
|
||||
; RUN: opt < %s -passes='simplifycfg<no-forward-switch-cond>' -S | FileCheck %s --check-prefix=NO_FWD
|
||||
; RUN: opt < %s -passes='simplifycfg<forward-switch-cond>' -S | FileCheck %s --check-prefix=FWD
|
||||
|
||||
; PR10131
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; 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 -passes='simplify-cfg<switch-to-lookup>' -S %s | FileCheck %s
|
||||
; RUN: opt -passes='simplifycfg<switch-to-lookup>' -S %s | FileCheck %s
|
||||
; 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"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; 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 -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.
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; 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 -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 triple = "x86_64-pc-linux-gnu"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; 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 -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
|
||||
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
|
||||
; 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
|
||||
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
|
||||
; 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 triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
; Test CFG simplify removal of branch instructions.
|
||||
;
|
||||
; 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() {
|
||||
; 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 -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 -passes=simplify-cfg -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='simplify-cfg<bonus-inst-threshold=4>' -S | FileCheck %s --check-prefix=WAYAGGRESSIVE
|
||||
; RUN: opt %s -passes=simplifycfg -S | FileCheck %s --check-prefix=NORMAL
|
||||
; RUN: opt %s -passes='simplifycfg<bonus-inst-threshold=2>' -S | FileCheck %s --check-prefix=AGGRESSIVE
|
||||
; 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) {
|
||||
; NORMAL-LABEL: @foo(
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; 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 -passes=simplify-cfg < %s | FileCheck %s
|
||||
; RUN: opt -S -passes=simplifycfg < %s | FileCheck %s
|
||||
|
||||
declare void @foo() convergent
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; 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 -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
|
||||
; 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 -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 {
|
||||
entry:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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 {
|
||||
entry:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; 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 -passes='simplify-cfg<switch-to-lookup>' -S | FileCheck %s
|
||||
; RUN: opt < %s -passes='simplifycfg<switch-to-lookup>' -S | FileCheck %s
|
||||
|
||||
target datalayout = "e-n32"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; 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"
|
||||
declare void @foo(i32)
|
||||
|
@ -220,7 +220,7 @@ default:
|
|||
}
|
||||
|
||||
; 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) {
|
||||
; CHECK-LABEL: @test7(
|
||||
; CHECK-NEXT: [[AND:%.*]] = and i8 [[A:%.*]], -2
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
; 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 -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 {
|
||||
; 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