llvm-project/llvm/lib/Transforms/Scalar
Daniel Neilson fb99a493be [LoopIdiom] Be more aggressive when setting alignment in memcpy
Summary:
This change is part of step five in the series of changes to remove alignment argument from
memcpy/memmove/memset in favour of alignment attributes. In particular, this changes the
LoopIdiom pass to cease using the old IRBuilder CreateMemCpy single-alignment APIs in
favour of the new API that allows setting source and destination alignments independently.
This allows us to be slightly more aggressive in setting the alignment of memcpy calls that
loop idiom creates.

Steps:
Step 1) Remove alignment parameter and create alignment parameter attributes for
memcpy/memmove/memset. ( rL322965, rC322964, rL322963 )
Step 2) Expand the IRBuilder API to allow creation of memcpy/memmove with differing
source and dest alignments. ( rL323597 )
Step 3) Update Clang to use the new IRBuilder API. ( rC323617 )
Step 4) Update Polly to use the new IRBuilder API. ( rL323618 )
Step 5) Update LLVM passes that create memcpy/memmove calls to use the new IRBuilder API,
and those that use use MemIntrinsicInst::[get|set]Alignment() to use [get|set]DestAlignment()
and [get|set]SourceAlignment() instead. ( rL323886, rL323891, rL324148, rL324273, rL324278,
rL324384, rL324395, rL324402 )
Step 6) Remove the single-alignment IRBuilder API for memcpy/memmove, and the
MemIntrinsicInst::[get|set]Alignment() methods.

Reference
   http://lists.llvm.org/pipermail/llvm-dev/2015-August/089384.html
   http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20151109/312083.html

llvm-svn: 324626
2018-02-08 17:33:08 +00:00
..
ADCE.cpp [ADCE] Use MapVector for BlockInfo to make iteration order deterministic 2017-11-03 14:15:08 +00:00
AlignmentFromAssumptions.cpp [NFC] Change MemIntrinsicInst::setAlignment() to take an unsigned instead of a Constant 2018-01-12 21:33:37 +00:00
BDCE.cpp Remove redundant includes from lib/Transforms. 2017-12-13 21:31:01 +00:00
CMakeLists.txt Add a new pass to speculate around PHI nodes with constant (integer) operands when profitable. 2017-11-28 11:32:31 +00:00
CallSiteSplitting.cpp [CallSiteSplitting] Fix infinite loop when recording conditions. 2018-01-26 10:36:50 +00:00
ConstantHoisting.cpp Fix out-of-order stepping behavior in programs with hoisted constants. 2017-11-09 20:01:31 +00:00
ConstantProp.cpp Sort the remaining #include lines in include/... and lib/.... 2017-06-06 11:49:48 +00:00
CorrelatedValuePropagation.cpp [CVP] Don't Replace incoming values from unreachable blocks with undef. 2018-01-29 05:59:55 +00:00
DCE.cpp Sort the remaining #include lines in include/... and lib/.... 2017-06-06 11:49:48 +00:00
DeadStoreElimination.cpp [DSE] Upgrade uses of MemoryIntrinic::getAlignment() to new API. (NFC) 2018-02-06 21:18:33 +00:00
DivRemPairs.cpp [DivRempairs] add a pass to optimize div/rem pairs (PR31028) 2017-09-09 13:38:18 +00:00
EarlyCSE.cpp [EarlyCSE] Salvage debug info during DCE 2018-01-09 15:08:37 +00:00
FlattenCFGPass.cpp Sort the remaining #include lines in include/... and lib/.... 2017-06-06 11:49:48 +00:00
Float2Int.cpp [Float2Int] Replace a ConstantRange copy with a move. Remove an extra call to MapVector::find. 2017-05-05 17:09:29 +00:00
GVN.cpp Hardware-assisted AddressSanitizer (llvm part). 2017-12-09 00:21:41 +00:00
GVNHoist.cpp Add missed PostDominatorTree analysis dependency to GVN hoist pass. 2018-02-08 11:45:36 +00:00
GVNSink.cpp Use phi ranges to simplify code. No functionality change intended. 2017-12-30 15:27:33 +00:00
GuardWidening.cpp Guard print() functions only used by dump() functions. 2017-07-31 10:07:49 +00:00
IVUsersPrinter.cpp
IndVarSimplify.cpp Use phi ranges to simplify code. No functionality change intended. 2017-12-30 15:27:33 +00:00
InductiveRangeCheckElimination.cpp Re-apply [SCEV] Fix isLoopEntryGuardedByCond usage 2018-02-05 05:49:47 +00:00
InferAddressSpaces.cpp [InferAddressSpaces] Update uses of IRBuilder memory intrinsic creation to new API 2018-02-06 20:33:36 +00:00
JumpThreading.cpp [JumpThreading][NFC] Rename LoadInst variables 2018-01-29 21:29:44 +00:00
LICM.cpp Re-commit : [LICM] Allow sinking when foldable in loop 2017-12-15 20:33:24 +00:00
LLVMBuild.txt Another try to commit 323321 (aggressive instruction combine). 2018-01-25 12:06:32 +00:00
LoopAccessAnalysisPrinter.cpp
LoopDataPrefetch.cpp [NFC] fix trivial typos in comments 2018-01-19 10:55:29 +00:00
LoopDeletion.cpp Use phi ranges to simplify code. No functionality change intended. 2017-12-30 15:27:33 +00:00
LoopDistribute.cpp Add MemorySSA as loop dependency, disabled by default [NFC]. 2017-11-21 15:45:46 +00:00
LoopIdiomRecognize.cpp [LoopIdiom] Be more aggressive when setting alignment in memcpy 2018-02-08 17:33:08 +00:00
LoopInstSimplify.cpp [Transforms] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-10-16 21:34:24 +00:00
LoopInterchange.cpp [LoopInterchange] Fix phi node ordering miscompile. 2017-10-21 13:58:37 +00:00
LoopLoadElimination.cpp Add MemorySSA as loop dependency, disabled by default [NFC]. 2017-11-21 15:45:46 +00:00
LoopPassManager.cpp
LoopPredication.cpp [Loop Predication] Teach LP about reverse loops with uge and sge latch conditions 2018-02-08 10:34:08 +00:00
LoopRerollPass.cpp [Transforms] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-10-18 21:46:47 +00:00
LoopRotation.cpp [Debug] Add a utility to propagate dbg.value to new PHIs, NFC 2018-01-25 21:37:05 +00:00
LoopSimplifyCFG.cpp Rename WeakVH to WeakTrackingVH; NFC 2017-05-01 17:07:49 +00:00
LoopSink.cpp Add hasProfileData() to check if a function has profile data. NFC. 2017-12-22 01:33:52 +00:00
LoopStrengthReduce.cpp [LoopStrengthReduce, x86] don't add cost for a cmp that will be macro-fused (PR35681) 2018-02-05 23:43:05 +00:00
LoopUnrollPass.cpp Add hasProfileData() to check if a function has profile data. NFC. 2017-12-22 01:33:52 +00:00
LoopUnswitch.cpp Use phi ranges to simplify code. No functionality change intended. 2017-12-30 15:27:33 +00:00
LoopVersioningLICM.cpp This change add's optimization remark in LoopVersioning LICM pass. 2018-01-23 09:47:28 +00:00
LowerAtomic.cpp Remove redundant includes from lib/Transforms. 2017-12-13 21:31:01 +00:00
LowerExpectIntrinsic.cpp Fix builin_expect lowering bug 2017-06-07 18:32:24 +00:00
LowerGuardIntrinsic.cpp Sort the remaining #include lines in include/... and lib/.... 2017-06-06 11:49:48 +00:00
MemCpyOptimizer.cpp Revert "[memcpyopt] Teach memcpyopt to optimize across basic blocks" 2017-12-28 05:10:33 +00:00
MergeICmps.cpp [MergeICmps] Handle chains with several complex BCE basic blocks. 2018-02-06 12:25:33 +00:00
MergedLoadStoreMotion.cpp Remove redundant includes from lib/Transforms. 2017-12-13 21:31:01 +00:00
NaryReassociate.cpp [Transforms] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-10-17 21:27:42 +00:00
NewGVN.cpp NewGVN: Fix PR/33367, which was causing us to delete non-copy intrinsics accidentally in some rare cases 2018-01-09 20:12:42 +00:00
PartiallyInlineLibCalls.cpp [PartiallyInlineLibCalls][x86] add TTI hook to allow sqrt inlining to depend on arg rather than result 2017-11-27 21:15:43 +00:00
PlaceSafepoints.cpp All libcalls should be considered to be GC-leaf functions. 2017-07-27 16:49:39 +00:00
Reassociate.cpp Reassociate: add global reassociation algorithm 2017-12-12 19:18:02 +00:00
Reg2Mem.cpp Sort the remaining #include lines in include/... and lib/.... 2017-06-06 11:49:48 +00:00
RewriteStatepointsForGC.cpp [RS4GC] Handle call/invoke instructions as base defining values of vectors 2018-01-30 14:43:41 +00:00
SCCP.cpp [IPSCCP] Remove calls without side effects 2018-01-09 21:58:46 +00:00
SROA.cpp [NFC] fix trivial typos in comments and documents 2018-01-26 08:15:29 +00:00
Scalar.cpp [PM] port Rewrite Statepoints For GC to the new pass manager. 2017-12-15 09:32:11 +00:00
Scalarizer.cpp [Transforms] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-10-20 21:47:29 +00:00
SeparateConstOffsetFromGEP.cpp [SeparateConstOffsetFromGEP] Preserve metadata when splitting GEPs 2018-01-31 20:17:52 +00:00
SimpleLoopUnswitch.cpp Use phi ranges to simplify code. No functionality change intended. 2017-12-30 15:27:33 +00:00
SimplifyCFGPass.cpp [SimplifyCFG] don't sink common insts too soon (PR34603) 2017-12-14 22:05:20 +00:00
Sink.cpp [Sink] Really really fix predicate in legality check 2018-01-11 21:28:57 +00:00
SpeculateAroundPHIs.cpp Add a new pass to speculate around PHI nodes with constant (integer) operands when profitable. 2017-11-28 11:32:31 +00:00
SpeculativeExecution.cpp Revert r301950: SpeculativeExecution: Stop using whitelist for costs 2017-05-10 12:30:07 +00:00
StraightLineStrengthReduce.cpp [Transforms] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-10-27 01:09:08 +00:00
StructurizeCFG.cpp Revert r321751, "StructurizeCFG: Fix broken backedge detection" 2018-01-24 18:02:05 +00:00
TailRecursionElimination.cpp Remove redundant includes from lib/Transforms. 2017-12-13 21:31:01 +00:00