Invariant start/end intrinsics overloaded for address space
authorAnna Thomas <anna@azul.com>
Fri, 22 Jul 2016 17:49:40 +0000 (17:49 +0000)
committerAnna Thomas <anna@azul.com>
Fri, 22 Jul 2016 17:49:40 +0000 (17:49 +0000)
commit0be4a0e6a4256df2d14a6723723fc73e7a1d30a8
treea4ce581802eaf61d57f70fe86bc5e8a0e34fc4b5
parent2b8747a14e03158957861afcf5cbcf73162ce334
Invariant start/end intrinsics overloaded for address space

Summary:
The llvm.invariant.start and llvm.invariant.end intrinsics currently
support specifying invariant memory objects only in the default address
space.

With this change, these intrinsics are overloaded for any adddress space
for memory objects
and we can use these llvm invariant intrinsics in non-default address
spaces.

Example: llvm.invariant.start.p1i8(i64 4, i8 addrspace(1)* %ptr)

This overloaded intrinsic is needed for representing final or invariant
memory in managed languages.

Reviewers: apilipenko, reames

Subscribers: llvm-commits
llvm-svn: 276447
llvm/docs/LangRef.rst
llvm/include/llvm/IR/Intrinsics.td
llvm/lib/IR/AutoUpgrade.cpp
llvm/test/Assembler/auto_upgrade_intrinsics.ll
llvm/test/CodeGen/AMDGPU/promote-alloca-invariant-markers.ll
llvm/test/Feature/memorymarkers.ll
llvm/test/Transforms/GlobalOpt/invariant-nodatalayout.ll
llvm/test/Transforms/GlobalOpt/invariant.ll
llvm/test/Transforms/InstCombine/invariant.ll