mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-13 09:33:50 +00:00
fe63fb986d
regions of memory that have a target specific relationship, as described in the Embedded C Technical Report. This also implements the 2007-12-11-AddressSpaces test, which demonstrates how address space attributes can be used in LLVM IR. In addition, this patch changes the bitcode signature for stores (in a backwards compatible manner), such that the pointer type, rather than the pointee type, is encoded. This permits type information in the pointer (e.g. address space) to be preserved for stores. LangRef updates are forthcoming. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44858 91177308-0d34-0410-b5e6-96231b3b80d8
26 lines
1.5 KiB
LLVM
26 lines
1.5 KiB
LLVM
; RUN: llvm-as < %s | llvm-dis |& grep {addrspace(33)} | count 7
|
|
; RUN: llvm-as < %s | llvm-dis |& grep {addrspace(42)} | count 2
|
|
; RUN: llvm-as < %s | llvm-dis |& grep {addrspace(66)} | count 2
|
|
; RUN: llvm-as < %s | llvm-dis |& grep {addrspace(11)} | count 6
|
|
; RUN: llvm-as < %s | llvm-dis |& grep {addrspace(22)} | count 5
|
|
|
|
%struct.mystruct = type { i32, i32 addrspace(33)*, i32, i32 addrspace(33)* }
|
|
@input = global %struct.mystruct zeroinitializer addrspace(42) ; <%struct.mystruct addrspace(42)*> [#uses=1]
|
|
@output = global %struct.mystruct zeroinitializer addrspace(66) ; <%struct.mystruct addrspace(66)*> [#uses=1]
|
|
@y = global i32 addrspace(11)* addrspace(22)* null addrspace(33) ; <i32 addrspace(11)* addrspace(22)* addrspace(33)*> [#uses=1]
|
|
|
|
define void @foo() {
|
|
entry:
|
|
%tmp1 = load i32 addrspace(33)* addrspace(42)* getelementptr (%struct.mystruct addrspace(42)* @input, i32 0, i32 3), align 4 ; <i32 addrspace(33)*> [#uses=1]
|
|
store i32 addrspace(33)* %tmp1, i32 addrspace(33)* addrspace(66)* getelementptr (%struct.mystruct addrspace(66)* @output, i32 0, i32 1), align 4
|
|
ret void
|
|
}
|
|
|
|
define i32 addrspace(11)* @bar(i32 addrspace(11)* addrspace(22)* addrspace(33)* %x) {
|
|
entry:
|
|
%tmp1 = load i32 addrspace(11)* addrspace(22)* addrspace(33)* @y, align 4 ; <i32 addrspace(11)* addrspace(22)*> [#uses=2]
|
|
store i32 addrspace(11)* addrspace(22)* %tmp1, i32 addrspace(11)* addrspace(22)* addrspace(33)* %x, align 4
|
|
%tmp5 = load i32 addrspace(11)* addrspace(22)* %tmp1, align 4 ; <i32 addrspace(11)*> [#uses=1]
|
|
ret i32 addrspace(11)* %tmp5
|
|
}
|