mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-15 13:35:46 -04:00
47ff67b78d
Most users won't have to worry about this as all of the 'getOrInsertFunction' functions on Module will default to the program address space. An overload has been added to Function::Create to abstract away the details for most callers. This is based on https://reviews.llvm.org/D37054 but without the changes to make passing a Module to Function::Create() mandatory. I have also added some more tests and fixed the LLParser to accept call instructions for types in the program address space. Reviewed By: bjope Differential Revision: https://reviews.llvm.org/D47541 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340519 91177308-0d34-0410-b5e6-96231b3b80d8
24 lines
909 B
LLVM
24 lines
909 B
LLVM
; Verify that we accept calls to variables in the program AS:
|
|
; RUN: llvm-as -data-layout "P40" %s -o - | llvm-dis - | FileCheck %s
|
|
; CHECK: target datalayout = "P40"
|
|
|
|
; We should get a sensible error for a non-program address call:
|
|
; RUN: not llvm-as -data-layout "P39" %s -o /dev/null 2>&1 | FileCheck %s -check-prefix ERR-AS39
|
|
; ERR-AS39: error: '%0' defined with type 'i16 (i16) addrspace(40)*' but expected 'i16 (i16) addrspace(39)*'
|
|
|
|
; And also if we don't set a custom program address space:
|
|
; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s -check-prefix ERR-AS0
|
|
; ERR-AS0: error: '%0' defined with type 'i16 (i16) addrspace(40)*' but expected 'i16 (i16)*'
|
|
|
|
%fun1 = type i16 (i16)
|
|
%funptr1 = type %fun1 addrspace(40)*
|
|
|
|
@fun_ptr = global %funptr1 @fun
|
|
|
|
define i16 @fun(i16 %arg) addrspace(40) {
|
|
entry:
|
|
%0 = load %funptr1, %funptr1* @fun_ptr
|
|
%result = call i16 %0(i16 %arg)
|
|
ret i16 %result
|
|
}
|