llvm-project/llvm/test/Transforms
Chuang-Yu Cheng 68f7f1cf00 Teaching SimplifyCFG to recognize the Or-Mask trick that InstCombine uses to
reduce the number of comparisons.

Specifically, InstCombine can turn:
  (i == 5334 || i == 5335)
into:
  ((i | 1) == 5335)

SimplifyCFG was already able to detect the pattern:
  (i == 5334 || i == 5335)
to:
  ((i & -2) == 5334)

This patch supersedes D21315 and resolves PR27555
(https://llvm.org/bugs/show_bug.cgi?id=27555).

Thanks to David and Chandler for the suggestions!

Author: Thomas Jablin (tjablin)
Reviewers: majnemer chandlerc halfdan cycheng

http://reviews.llvm.org/D21397

llvm-svn: 273639
2016-06-24 01:59:00 +00:00
..
ADCE [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
AddDiscriminators [PM] Port Add discriminator pass to new PM 2016-06-15 21:51:30 +00:00
AlignmentFromAssumptions [PM] Port AlignmentFromAssumptions to the new PM. 2016-06-15 06:18:01 +00:00
ArgumentPromotion Remove the ScalarReplAggregates pass 2016-06-15 00:19:09 +00:00
AtomicExpand Support expanding partial-word cmpxchg to full-word cmpxchg in AtomicExpandPass. 2016-06-17 18:11:48 +00:00
BBVectorize [BBVectorize] Don't vectorize selects with a scalar condition and vector operands. 2016-05-26 18:43:57 +00:00
BDCE [PM] Port BDCE to the new pass manager. 2016-05-25 01:57:04 +00:00
BranchFolding
CodeExtractor
CodeGenPrepare [CodeGenPrepare] Don't sink a cast past its user 2016-04-27 19:36:38 +00:00
ConstProp Revert "[SCCP] Partially propagate informations when the input is not fully defined." 2016-05-11 23:06:10 +00:00
ConstantHoisting ARM: don't try to hoist constant RHS out of a division. 2016-04-15 18:17:18 +00:00
ConstantMerge [PM] Port ConstantMerge to the new pass manager. 2016-05-05 00:51:09 +00:00
CorrelatedValuePropagation Remove extra whitespace. NFC. 2016-05-02 16:45:00 +00:00
CrossDSOCFI [cfi] Cross-DSO CFI diagnostic mode (LLVM part). 2016-01-25 23:35:03 +00:00
DCE Mark guards on true as "trivially dead" 2016-04-29 22:23:16 +00:00
DeadArgElim [PM] Port DeadArgumentElimination to the new PM 2016-06-12 09:16:39 +00:00
DeadStoreElimination Allow DeadStoreElimination to track combinations of partial later wrties 2016-06-23 13:46:39 +00:00
EarlyCSE [EarlyCSE] Fold invariant loads 2016-06-16 20:47:57 +00:00
EliminateAvailableExternally [PM] Port EliminateAvailableExternally pass to the new pass manager. 2016-05-05 02:37:32 +00:00
Float2Int
ForcedFunctionAttrs [attrs] Split off the forced attributes utility into its own pass that 2015-12-27 08:13:45 +00:00
FunctionAttrs [PM] Port ReversePostOrderFunctionAttrs to the new PM 2016-06-12 07:48:51 +00:00
FunctionImport ThinLTO: do not import function whose linkage prevents inlining. 2016-05-03 00:27:28 +00:00
GCOVProfiling [PM] Port GCOVProfiler pass to the new pass manager 2016-06-05 05:12:23 +00:00
GVN [GVN] Preserve !range metadata when PRE'ing loads 2016-05-27 19:03:10 +00:00
GlobalDCE [GlobalDCE, Misc] Don't remove functions referenced by ifuncs 2016-05-04 00:20:48 +00:00
GlobalMerge CodeGen: Make the global-merge pass independently testable, and add a test. 2016-05-19 04:38:56 +00:00
GlobalOpt IR: Introduce local_unnamed_addr attribute. 2016-06-14 21:01:22 +00:00
GuardWidening [GuardWidening] Fix incorrect use of remove_if 2016-05-21 02:24:44 +00:00
IPConstantProp [PM] Port Interprocedural SCCP to the new pass manager. 2016-05-05 21:05:36 +00:00
IRCE [IRCE] Optimize conjunctions of range checks 2016-05-26 00:09:02 +00:00
IndVarSimplify Upgrade other old memset/memcpy signatures in tests causing buildbot failures with rL273568. 2016-06-23 16:34:52 +00:00
InferFunctionAttrs [TLI] Also cover Linux 64 libfunc (stat64, ...) prototype checking. 2016-05-25 21:16:33 +00:00
Inline Upgrade old memset/memcpy signatures (without isVolatile argument) in tests 2016-06-22 15:16:06 +00:00
InstCombine InstCombine rule to fold trunc when value available 2016-06-23 20:22:22 +00:00
InstMerge [PM] Port MergedLoadStoreMotion to the new pass manager, take two. 2016-06-17 19:10:09 +00:00
InstSimplify [ValueTracking] improve ComputeNumSignBits for vector constants 2016-06-22 19:20:59 +00:00
Internalize [Internalize] Test that __stack_chk_{guard, fail} are not internalized. 2016-06-05 19:08:54 +00:00
JumpThreading Revert r272891 "[JumpThreading] Prevent dangling pointer problems in BranchProbabilityInfo" 2016-06-16 16:25:53 +00:00
LCSSA [PM] Port LCSSA to the new PM. 2016-06-09 19:44:46 +00:00
LICM [ValueTracking] Calls to @llvm.assume always return 2016-06-14 20:23:16 +00:00
LoadCombine [LoadCombine] Combine Loads formed from GEPS with negative indexes 2016-06-19 06:14:56 +00:00
LoopDataPrefetch [Kryo] Enable loop prefetcher. 2016-06-21 22:47:56 +00:00
LoopDeletion Use all_of instead of a raw loop; NFC 2016-05-03 17:50:06 +00:00
LoopDistribute [LAA] Enable symbolic stride speculation for all LAA clients 2016-06-17 22:35:41 +00:00
LoopIdiom Reapply "[LoopIdiom] Don't remove dead operands manually" 2016-06-20 16:03:25 +00:00
LoopInterchange
LoopLoadElim [LAA] Enable symbolic stride speculation for all LAA clients 2016-06-17 22:35:41 +00:00
LoopReroll Be wary of abnormal exits from loop when exploiting UB 2016-06-09 01:13:59 +00:00
LoopRotate LPM: Drop require<loops> from these tests, it's redundant. NFC 2016-05-10 18:28:10 +00:00
LoopSimplify Remove the ScalarReplAggregates pass 2016-06-15 00:19:09 +00:00
LoopSimplifyCFG LPM: Drop require<loops> from these tests, it's redundant. NFC 2016-05-10 18:28:10 +00:00
LoopStrengthReduce AMDGPU: Run pointer optimization passes 2016-06-15 00:11:01 +00:00
LoopUnroll [LoopUnrollAnalyzer] Fix a bug in UnrolledInstAnalyzer::visitLoad. 2016-06-23 14:31:31 +00:00
LoopUnswitch Remove the ScalarReplAggregates pass 2016-06-15 00:19:09 +00:00
LoopVectorize reverted the prev commit due to assertion failure 2016-06-21 12:10:11 +00:00
LoopVersioning [LoopVer] Update all existing PHIs in the exit block 2016-06-14 09:38:54 +00:00
LoopVersioningLICM [LoopVersioningLICM] Add test coverage for llvm.loop.licm_versioning.disable 2016-04-22 18:34:50 +00:00
LowerAtomic [PM] Port LowerAtomic to the new pass manager. 2016-05-13 22:52:35 +00:00
LowerBitSets [cfi] Support explicit sections for functions in cfi-icall. 2016-04-15 22:55:38 +00:00
LowerExpectIntrinsic [LowerExpectIntrinsic] make default likely/unlikely ratio bigger 2016-04-26 22:23:38 +00:00
LowerGuardIntrinsic [Guards] Add branch metadata when lowering 2016-05-17 17:51:19 +00:00
LowerInvoke
LowerSwitch
Mem2Reg [PM] Port Mem2Reg to the new pass manager. 2016-06-14 03:22:22 +00:00
MemCpyOpt [PM] Port MemCpyOpt to the new PM. 2016-06-14 02:44:55 +00:00
MergeFunc Fix a crash in MergeFunctions related to ordering of weak/strong functions 2016-05-31 17:20:23 +00:00
MetaRenamer
NameAnonFunctions Add a pass to name anonymous/nameless function 2016-04-12 21:35:28 +00:00
NaryReassociate
ObjCARC Form objc_storeStrong in the presence of bitcasts. 2016-05-27 02:13:53 +00:00
PGOProfile Fix PR28219: Use profile summary from reader and not compute it 2016-06-21 19:29:49 +00:00
PartiallyInlineLibCalls [PM] Port PartiallyInlineLibCalls to the new pass manager. 2016-05-25 23:38:53 +00:00
PhaseOrdering Mark that SpeculativeExecution preserves Globals Alias Analysis. 2016-05-03 08:33:26 +00:00
PlaceSafepoints [PlaceSafepoints] Clamp NoStatepoints to true 2016-01-28 21:51:14 +00:00
PreISelIntrinsicLowering Introduce llvm.load.relative intrinsic. 2016-04-22 21:18:02 +00:00
PruneEH [PruneEH] Don't try to insert a terminator after another terminator 2016-01-23 06:00:44 +00:00
Reassociate PM: Port Reassociate to the new pass manager 2016-04-26 23:39:29 +00:00
Reg2Mem
RewriteStatepointsForGC [RewriteStatepointsForGC] All constant should have null base pointer 2016-05-27 13:13:59 +00:00
SCCP [SCCP] Don't assume all Constants are ConstantInt 2016-06-23 00:14:29 +00:00
SLPVectorizer [SLPVectorizer][X86] Added ceil/floor/nearbyint/rint/trunc vectorization tests 2016-06-22 14:07:46 +00:00
SROA [SROA] Function canConvertValue needs to check whether both NewTy and OldTy pointers are 2016-05-03 19:30:48 +00:00
SafeStack [safestack] Sink unsafe address computation to each use. 2016-06-16 22:34:04 +00:00
SampleProfile Pass AssumptionCacheTracker from SampleProfileLoader to Inliner 2016-06-20 20:53:40 +00:00
Scalarizer PR27938: Don't remove valid DebugLoc in Scalarizer 2016-06-16 10:48:54 +00:00
SeparateConstOffsetFromGEP [ValueTracking] Remove dead code from an old experiment 2016-03-03 19:44:06 +00:00
SimplifyCFG Teaching SimplifyCFG to recognize the Or-Mask trick that InstCombine uses to 2016-06-24 01:59:00 +00:00
Sink PM: Port SinkingPass to the new pass manager 2016-04-22 19:54:10 +00:00
SpeculativeExecution Move divergent-target test into CodeGen/NVPTX because it requires an NVPTX target. 2016-04-15 01:20:52 +00:00
StraightLineStrengthReduce
StripDeadPrototypes
StripSymbols Fix strip-dead-debug-info test if path contains "bar". 2016-06-16 19:39:55 +00:00
StructurizeCFG AMDGPU: Remove leftover ShaderType attributes in tests 2016-04-13 00:39:48 +00:00
TailCallElim Push isDereferenceableAndAlignedPointer down into isSafeToLoadUnconditionally 2016-01-17 12:35:29 +00:00
Util [MemorySSA] Port to new pass manager 2016-06-01 21:30:40 +00:00
WholeProgramDevirt [PM] Port WholeProgramDevirt to the new pass manager. 2016-06-14 21:44:19 +00:00