mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
6f5ce86e80
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
18 lines
527 B
LLVM
18 lines
527 B
LLVM
; RUN: opt -globalopt -S -o - < %s | FileCheck %s
|
|
; The check here is that it doesn't crash.
|
|
|
|
declare {}* @llvm.invariant.start.p0i8(i64 %size, i8* nocapture %ptr)
|
|
|
|
@object1 = global { i32, i32 } zeroinitializer
|
|
; CHECK: @object1 = global { i32, i32 } zeroinitializer
|
|
|
|
define void @ctor1() {
|
|
%ptr = bitcast {i32, i32}* @object1 to i8*
|
|
call {}* @llvm.invariant.start.p0i8(i64 4, i8* %ptr)
|
|
ret void
|
|
}
|
|
|
|
@llvm.global_ctors = appending constant
|
|
[1 x { i32, void ()* }]
|
|
[ { i32, void ()* } { i32 65535, void ()* @ctor1 } ]
|