1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 04:02:41 +01:00
llvm-mirror/lib/Transforms/Scalar
Daniel Neilson e6d5325391 [SROA] Take advantage of separate alignments for memcpy source and destination
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
SROA pass to cease using the old getAlignment() & setAlignment() APIs of MemoryIntrinsic in
favour of getting source & dest specific alignments through the new API. This allows us
to enhance visitMemTransferInst to be more aggressive setting the alignment in memcpy
calls that it creates, as well as to only change the alignment of a memcpy/memmove
argument that it replaces.

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, rL324626, rL324642, rL324653, rL324654, rL324773, rL324774,
rL324781, rL324784, rL324955, rL324960, rL325816 )
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

Reviewers: chandlerc, bollu, efriedma

Reviewed By: efriedma

Subscribers: efriedma, eraman, llvm-commits

Differential Revision: https://reviews.llvm.org/D42974

llvm-svn: 327398
2018-03-13 14:25:33 +00:00
..
ADCE.cpp
AlignmentFromAssumptions.cpp [AlignmentFromAssumptions] Set source and dest alignments of memory intrinsiscs separately 2018-02-22 18:55:59 +00:00
BDCE.cpp [BDCE] Salvage debug info from dying insts 2018-02-21 01:55:33 +00:00
CallSiteSplitting.cpp [CallSiteSplitting] Use !Instruction::use_empty instead of checking for a non-zero return from getNumUses 2018-03-12 18:40:59 +00:00
CMakeLists.txt Remove the LoopInstSimplify pass (-loop-instsimplify) 2018-03-12 20:49:42 +00:00
ConstantHoisting.cpp
ConstantProp.cpp
CorrelatedValuePropagation.cpp Back out "Re-land: Teach CorrelatedValuePropagation to reduce the width of udiv/urem instructions." 2018-03-12 09:26:09 +00:00
DCE.cpp [DCE] Salvage debug info from dead insts 2018-02-15 22:26:18 +00:00
DeadStoreElimination.cpp [DSE] Don't DSE stores that subsequent memmove calls read from 2018-02-20 23:19:34 +00:00
DivRemPairs.cpp
EarlyCSE.cpp [NFC] Consolidate six getPointerOperand() utility functions into one place 2018-03-09 21:05:58 +00:00
FlattenCFGPass.cpp
Float2Int.cpp
GuardWidening.cpp
GVN.cpp [GVN] Partially revert debug info salvage change (r325063) 2018-02-16 01:15:20 +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
InductiveRangeCheckElimination.cpp [NFC] Fix typos 2018-02-12 05:16:28 +00:00
IndVarSimplify.cpp Use phi ranges to simplify code. No functionality change intended. 2017-12-30 15:27:33 +00:00
InferAddressSpaces.cpp [InferAddressSpaces] Update uses of IRBuilder memory intrinsic creation to new API 2018-02-06 20:33:36 +00:00
IVUsersPrinter.cpp
JumpThreading.cpp [JumpThreading] Don't restrict cast-traversal to i1 2018-03-09 16:43:46 +00:00
LICM.cpp Move llvm::computeLoopSafetyInfo from LICM.cpp to LoopUtils.cpp. NFC 2018-02-14 18:34:53 +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 [Dominators] Remove verifyDomTree and add some verifying for Post Dom Trees 2018-02-28 11:00:08 +00:00
LoopIdiomRecognize.cpp [LoopIdiom] Be more aggressive when setting alignment in memcpy 2018-02-08 17:33:08 +00:00
LoopInterchange.cpp DA: remove uses of GEP, only ask SCEV 2018-03-06 21:55:59 +00:00
LoopLoadElimination.cpp
LoopPassManager.cpp
LoopPredication.cpp Rename and move utility function getLatchPredicateForGuard. NFC. 2018-02-09 07:59:07 +00:00
LoopRerollPass.cpp
LoopRotation.cpp [Debug] Add a utility to propagate dbg.value to new PHIs, NFC 2018-01-25 21:37:05 +00:00
LoopSimplifyCFG.cpp
LoopSink.cpp Add hasProfileData() to check if a function has profile data. NFC. 2017-12-22 01:33:52 +00:00
LoopStrengthReduce.cpp Revert "[LSR] Avoid UB overflow when examining reuse opportunities" 2018-02-12 22:42:13 +00:00
LoopUnrollPass.cpp LoopUnroll: respect pragma unroll when AllowRemainder is disabled 2018-03-02 16:22:32 +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
LowerExpectIntrinsic.cpp
LowerGuardIntrinsic.cpp
MemCpyOptimizer.cpp Revert "[memcpyopt] Teach memcpyopt to optimize across basic blocks" 2017-12-28 05:10:33 +00:00
MergedLoadStoreMotion.cpp Mark MergedLoadStoreMotion as not preserving MemDep results 2018-02-23 10:41:57 +00:00
MergeICmps.cpp [MergeICmps] Make sure that the comparison only has one use. 2018-03-13 07:05:55 +00:00
NaryReassociate.cpp Add early exit on reassociation of 0 expression. 2018-03-07 02:17:08 +00:00
NewGVN.cpp [NewGVN] Update phi-of-ops def block when updating existing ValuePHI. 2018-02-27 09:34:51 +00:00
PartiallyInlineLibCalls.cpp
PlaceSafepoints.cpp
Reassociate.cpp
Reg2Mem.cpp
RewriteStatepointsForGC.cpp [RewriteStatepoints] Fix stale parse points 2018-03-05 22:27:30 +00:00
Scalar.cpp Remove the LoopInstSimplify pass (-loop-instsimplify) 2018-03-12 20:49:42 +00:00
Scalarizer.cpp
SCCP.cpp [IPSCCP] Add getCompare which returns either true, false, undef or null. 2018-03-05 17:33:50 +00:00
SeparateConstOffsetFromGEP.cpp Adding a width of the GEP index to the Data Layout. 2018-02-14 06:58:08 +00:00
SimpleLoopUnswitch.cpp [Dominators] Remove verifyDomTree and add some verifying for Post Dom Trees 2018-02-28 11:00:08 +00:00
SimplifyCFGPass.cpp
Sink.cpp [Sink] Really really fix predicate in legality check 2018-01-11 21:28:57 +00:00
SpeculateAroundPHIs.cpp
SpeculativeExecution.cpp
SROA.cpp [SROA] Take advantage of separate alignments for memcpy source and destination 2018-03-13 14:25:33 +00:00
StraightLineStrengthReduce.cpp
StructurizeCFG.cpp Revert "StructurizeCFG: Test for branch divergence correctly" 2018-02-24 17:29:09 +00:00
TailRecursionElimination.cpp