llvm-project/llvm/test/Transforms
Juneyoung Lee 39eb2665d9 [InstCombine] Add a few more patterns for folding select of select
This is a patch that folds select of select to salvage some optimizations after select -> and/or folding is disabled.

```
select (select a, true, b), c, false -> select a, c, false
select c, (select a, true, b), false -> select c, a, false
  if c implies that b is false (isImpliedCondition).
```
https://alive2.llvm.org/ce/z/ANatjt, https://alive2.llvm.org/ce/z/rv8zTB

```
sel (sel c, a, false), true, (sel !c, b, false) -> sel c, a, b
sel (sel !c, a, false), true, (sel c, b, false) -> sel c, b, a
```
https://alive2.llvm.org/ce/z/U2kp-t, https://alive2.llvm.org/ce/z/bc88EE

See D101191

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D101375
2021-05-02 19:00:42 +09:00
..
ADCE [DCE] Don't remove non-willreturn calls 2021-02-19 12:35:40 +01:00
AddDiscriminators
AggressiveInstCombine [AggressiveInstCombine] Generalize foldGuardedRotateToFunnelShift to generic funnel shifts (REAPPLIED) 2020-12-21 15:22:27 +00:00
AlignmentFromAssumptions [AssumeBundles] offset should be added to correctly calculate align 2021-04-02 12:32:05 +09:00
ArgumentPromotion Reapply "OpaquePtr: Turn inalloca into a type attribute" 2021-03-29 08:55:30 -04:00
AtomicExpand [AArch64] Prevent spilling between ldxr/stxr pairs 2021-05-01 17:17:05 +02:00
Attributor Revert "[IR] Ignore bitcasts of function pointers which are only used as callees in callbase instruction" 2021-04-06 16:33:28 +02:00
BDCE [DCE] Don't remove non-willreturn calls 2021-02-19 12:35:40 +01:00
BlockExtractor [BlockExtract][NewPM] Port -extract-blocks to NPM 2020-10-21 12:51:11 -07:00
BranchFolding
CallSiteSplitting [SimplifyCFG] Teach simplifyUnreachable() to preserve DomTree 2020-12-18 00:37:22 +03:00
CalledValuePropagation
CanonicalizeAliases [NPM] Move more O0 pass building into PassBuilder 2020-11-19 11:22:23 -08:00
CanonicalizeFreezeInLoops
CodeExtractor [HotColdSplit] Reflect full cost of parameters in split penalty 2020-12-18 17:06:17 -08:00
CodeGenPrepare [test, ARM] Fix use of var defined in CHECK-NOT 2021-03-30 16:28:13 +01:00
ConstantHoisting [ConstantHoisting] Fix bug where constant materialization could insert into EH pad 2021-02-01 11:23:56 -08:00
ConstantMerge [ConstantMerge] Don't merge thread_local constants with non-thread_local constants 2021-04-28 23:44:20 +01:00
ConstraintElimination [ConstraintElimination] Only strip casts preserving the representation. 2021-03-26 20:07:41 +00:00
Coroutines [Coroutine] Collect CoroBegin if all of terminators are dominated by one coro.destroy 2021-04-22 11:21:37 +08:00
CorrelatedValuePropagation [LVI] Handle mask not equal zero conditions 2021-05-01 23:08:49 +02:00
CrossDSOCFI
DCE [Tests] Add willreturn to libcalls in some tests 2021-01-22 21:47:35 +01:00
DeadArgElim Reapply "OpaquePtr: Turn inalloca into a type attribute" 2021-03-29 08:55:30 -04:00
DeadStoreElimination [DSE] Eliminate zero memset after calloc 2021-04-28 03:30:52 +02:00
DivRemPairs
EarlyCSE [gvn] CSE gc.relocates based on meaning, not spelling (try 2) 2021-03-16 10:59:31 -07:00
EliminateAvailableExternally
EntryExitInstrumenter
ExpandMemCmp
FixIrreducible
Float2Int
ForcedFunctionAttrs
FunctionAttrs [test] Fix some func-attrs tests under the legacy PM 2021-04-27 13:07:56 -07:00
FunctionImport [CGProfile] allows bitcast in metadata node storing function pointers 2020-11-13 09:28:21 -08:00
GCOVProfiling [gcov] Set nounwind and respect module flags metadata "frame-pointer" & "uwtable" for synthesized functions 2021-04-26 13:30:21 -07:00
GVN [GVN] Clobber partially aliased loads. 2021-04-24 14:14:20 +03:00
GVNHoist Reapply "OpaquePtr: Turn inalloca into a type attribute" 2021-03-29 08:55:30 -04:00
GVNSink [GVNSink] auto-generate test checks; NFC 2021-04-02 13:16:35 -04:00
GlobalDCE [SimplifyCFG] MergeBlockIntoPredecessor() already knows how to preserve DomTree 2020-12-17 01:03:49 +03:00
GlobalMerge
GlobalOpt [GlobalOpt] Don't replace alias with aliasee if aliasee is interposable 2021-04-22 13:12:34 -07:00
GlobalSplit [test] Fix mix of variable use/def and regex match 2021-03-24 17:58:16 +00:00
GuardWidening
HardwareLoops [test, HardwareLoops] Fix use of var defined in CHECK-NOT 2021-03-30 15:06:32 +01:00
HelloNew
HotColdSplit [HotColdSplit] Reflect full cost of parameters in split penalty 2020-12-18 17:06:17 -08:00
IRCE [IRCE] Add tests for conservative bound check 2021-04-28 11:14:21 +01:00
IROutliner [IROutliner] Adapting to hoisted bitcasts in CodeExtractor 2021-01-13 11:10:37 -06:00
IndVarSimplify [IndVars] avoid crash in LFTR when assuming an add recurrence 2021-04-27 08:26:02 -04:00
IndirectBrExpand
InferAddressSpaces [NewPM] Port infer-address-spaces 2020-12-28 19:58:12 -08:00
InferFunctionAttrs [BuildLibCalls] Remove inaccessiblememonly inference for calloc 2021-04-29 00:17:37 +02:00
Inline [InlineCost] CallAnalyzer: use TTI info for extractvalue - they are free (PR50099) 2021-04-30 13:55:11 +03:00
InstCombine [InstCombine] Add a few more patterns for folding select of select 2021-05-02 19:00:42 +09:00
InstMerge OpaquePtr: Bulk update tests to use typed sret 2020-11-20 17:58:26 -05:00
InstNamer Port -instnamer to NPM 2020-10-22 12:08:36 -07:00
InstSimplify [ConstantFolding] propagate poison through vector reduction intrinsics 2021-04-29 12:54:20 -04:00
InterleavedAccess [CodeGen] Update transformations to use poison for shufflevector/insertelem's initial vector elem 2021-01-10 18:03:51 +09:00
Internalize
JumpThreading [JumpThreading] merge debug info when merging select+br 2021-04-12 17:51:21 -07:00
LCSSA [DebugInfo] Avoid re-ordering assignments in LCSSA 2020-12-17 16:17:32 +00:00
LICM [LICM] Make capture check more precise 2021-04-19 20:34:23 +02:00
LoadStoreVectorizer Add support for llvm.assume intrinsic to the LoadStoreVectorizer pass 2021-04-30 13:39:46 -07:00
LoopDataPrefetch
LoopDeletion [LoopDeletion] Add test for PR49967 (NFC) 2021-04-18 22:08:51 +02:00
LoopDistribute [SCEVExpander] ReuseOrCreateCast(): use IRBuilder to actually create the cast 2021-04-19 18:38:39 +03:00
LoopFlatten [NFC] Improve debug message and test description in 4c1f74a 2021-03-24 18:21:13 +08:00
LoopFusion [llvm] Unbreak no-asserts testing after 18839be9c5 2021-04-27 05:46:43 -04:00
LoopIdiom Revert "[loop-idiom] Hoist loop memcpys to loop preheader" 2021-04-28 13:16:34 +02:00
LoopInstSimplify
LoopInterchange [LoopInterchange] Fix transformation bugs in loop interchange 2021-04-08 14:58:13 -04:00
LoopLoadElim [IndVars] Provide eliminateIVComparison with context 2021-03-19 12:28:22 +07:00
LoopPredication [NFCI] SCEVExpander: emit intrinsics for integral {u,s}{min,max} SCEV expressions 2021-03-06 21:52:46 +03:00
LoopReroll [LoopReroll] Fix rerolling loop with extra instructions 2021-04-23 15:14:46 +09:00
LoopRotate [NewPM] Change tests to run them without PreserveCFGChecker. NFC 2021-04-06 11:33:07 +07:00
LoopSimplify Make FoldBranchToCommonDest poison-safe by default 2021-03-27 19:05:12 +09:00
LoopSimplifyCFG
LoopStrengthReduce [LSR][DebugInfo] Don't unnecessarily drop DebugLocs 2021-04-26 13:14:42 +01:00
LoopTransformWarning
LoopUnroll [AArch64] Enable runtime unrolling for in-order sched models 2021-04-27 13:22:10 +01:00
LoopUnrollAndJam [LoopUnrollAndJam] Avoid repeated instructions for UAJ analysis 2021-04-15 12:59:42 -04:00
LoopUnswitch Explicitly enable the new pass manager in this test. 2021-03-25 18:10:36 -07:00
LoopVectorize run update_test_checks.py for the tests in D101191 (NFC) 2021-05-02 13:11:57 +09:00
LoopVersioning Revert "[BasicAA] Handle two unknown sizes for GEPs" 2020-12-18 17:59:12 +00:00
LoopVersioningLICM [NewPM][opt] Run the "default" AA pipeline by default 2021-01-21 21:08:54 -08:00
LowerAtomic
LowerConstantIntrinsics [LowerConstantIntrinsics] avoid crashing on alloca with unexpected operand type 2021-04-19 13:06:29 -04:00
LowerExpectIntrinsic Revert "clang-misexpect: Profile Guided Validation of Performance Annotations in LLVM" 2020-11-14 13:12:38 +03:00
LowerGuardIntrinsic
LowerInvoke
LowerMatrixIntrinsics Reland "[Libcalls, Attrs] Annotate libcalls with noundef" 2021-02-20 06:18:48 +01:00
LowerSwitch
LowerTypeTests [LTT] Don't attempt to lower type tests used only by assumes 2021-02-06 09:02:10 -08:00
LowerWidenableCondition
MakeGuardsExplicit
Mem2Reg
MemCpyOpt [MemCpyOpt] Allow variable lengths in memcpy optimizer 2021-04-21 23:23:38 +02:00
MergeFunc OpaquePtr: Bulk update tests to use typed sret 2020-11-20 17:58:26 -05:00
MergeICmps Tweak a test so it actually gets autogened 2021-03-22 11:32:32 -07:00
MetaRenamer OpaquePtr: Bulk update tests to use typed sret 2020-11-20 17:58:26 -05:00
NameAnonGlobals [NPM] Move more O0 pass building into PassBuilder 2020-11-19 11:22:23 -08:00
NaryReassociate [NARY] Don't optimize min/max if there are side uses (part2) 2021-04-30 19:02:02 +07:00
NewGVN [NewGVN] Use ExprResult to add extra predicate users. 2021-04-25 11:13:32 +01:00
ObjCARC [ObjC][ARC] Use operand bundle 'clang.arc.attachedcall' instead of 2021-03-04 11:22:30 -08:00
OpenMP [OpenMP] Remove legacy pass manager run lines 2021-04-27 18:03:28 -04:00
PGOProfile [Passes] Run sinking/hoisting in SimplifyCFG earlier. 2021-04-30 12:23:57 +01:00
PartialInlining [PartialInliner]: Handle code regions in a switch stmt cases 2020-11-02 14:32:45 -05:00
PartiallyInlineLibCalls
PhaseOrdering [Passes] Run sinking/hoisting in SimplifyCFG earlier. 2021-04-30 12:23:57 +01:00
PlaceSafepoints [PlaceSafepoints] Pin tests to legacy PM 2020-10-26 20:07:37 -07:00
PreISelIntrinsicLowering
PruneEH [FuncAttrs] Infer noreturn 2021-01-05 13:25:42 -08:00
Reassociate Revert "Re-reapply "[DebugInfo] Use variadic debug values to salvage BinOps and GEP instrs with non-const operands"" 2021-04-30 20:23:21 -07:00
Reg2Mem [Reg2Mem] add support for the new pass manager 2020-11-08 11:14:05 +00:00
RelLookupTableConverter/X86 [Passes] Add relative lookup table converter pass 2021-04-13 01:29:41 +00:00
RewriteStatepointsForGC [rs4gc] Fix a latent bug around attribute stripping for intrinsics 2021-04-19 13:14:07 -07:00
SCCP Revert "[IR] Ignore bitcasts of function pointers which are only used as callees in callbase instruction" 2021-04-06 16:33:28 +02:00
SLPVectorizer [SLP]Fix the crash on cost calculation if non-compatible vectors shuffled. 2021-04-30 09:34:20 -07:00
SROA [SROA][TBAA] Handle shift of regular TBAA nodes 2021-04-14 14:35:20 -04:00
SafeStack OpaquePtr: Bulk update tests to use typed byval 2020-11-20 14:00:46 -05:00
SampleProfile [CSSPGO] Unblock optimizations with pseudo probe instrumentation part 2. 2021-04-26 16:52:33 -07:00
ScalarizeMaskedMemIntrin Expand masked mem intrinsics correctly wrt big-endian 2021-02-11 08:59:52 +00:00
Scalarizer [Scalarizer] Use poison as insertelement's placeholder 2021-01-04 00:35:28 +09:00
SeparateConstOffsetFromGEP [test] Make global in split-gep-and-gvn.ll not constant 2021-04-19 11:03:19 -07:00
SimpleLoopUnswitch [SimpleLoopUnswitch] Port partially invariant unswitch from LoopUnswitch to SimpleLoopUnswitch 2021-04-30 15:55:56 +01:00
SimplifyCFG [SimplifyCFG] Common code sinking: fix application of profitability check 2021-04-29 21:11:40 +03:00
Sink
SpeculateAroundPHIs
SpeculativeExecution Precommit tests that have poison as shufflevector's placeholder 2020-12-29 17:09:31 +09:00
StraightLineStrengthReduce [NPM] Add remaining test of -slsr 2020-11-17 14:41:01 +08:00
StripDeadPrototypes
StripSymbols [DebugInfo] Support for signed constants inside DIExpression 2021-03-30 23:20:38 +05:30
StructurizeCFG [test] Pin backedge-id-bug-xfail.ll to legacy PM 2021-01-04 13:09:42 -08:00
SyntheticCountsPropagation
TailCallElim Autogen some tests for ease of update 2021-03-22 11:06:29 -07:00
ThinLTOBitcodeWriter [ThinLTO] Copy UnnamedAddr when spliting module. 2021-04-19 14:04:58 -07:00
TypePromotion/ARM
UnifyFunctionExitNodes [NPM] Port -mergereturn to NPM 2020-10-20 10:33:58 -07:00
UnifyLoopExits [NPM] port -unify-loop-exits to NPM 2020-10-20 10:46:57 -07:00
Util [AnnotationRemarks] Use subprogram location for summary remarks. 2021-03-23 12:05:41 +00:00
VectorCombine [VectorCombine] Add tests for load/extract scalarization. 2021-04-11 21:39:48 +01:00
WholeProgramDevirt Don't use $ as suffix for symbol names in ThinLTOBitcodeWriter and other places 2021-03-29 13:03:52 +02:00