This is an archive of the discontinued LLVM Phabricator instance.

[SafeStack] Use updated CreateMemCpy API to set more accurate source and destination alignments.
ClosedPublic

Authored by dneilson on Jan 30 2018, 2:26 PM.

Details

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
creation of memcpys in the SafeStack pass to set the alignment of the destination object to
its stack alignment while separately setting the source byval arguments alignment to its
alignment.

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.
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

Diff Detail

Event Timeline

dneilson created this revision.Jan 30 2018, 2:26 PM
eugenis accepted this revision.Feb 12 2018, 1:52 PM

LGTM, thank you!

This revision is now accepted and ready to land.Feb 12 2018, 1:52 PM
This revision was automatically updated to reflect the committed changes.