mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
ae19e5c0f7
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 llvm-svn: 340519
40 lines
1021 B
LLVM
40 lines
1021 B
LLVM
; Verify that forward declarations from call instructions work even with non-zero AS
|
|
; RUN: llvm-as %s -o - | llvm-dis - | FileCheck %s
|
|
|
|
define void @call_named() {
|
|
entry:
|
|
%0 = tail call addrspace(40) i32 @named(i16* null)
|
|
; CHECK: %0 = tail call addrspace(40) i32 @named(i16* null)
|
|
ret void
|
|
}
|
|
|
|
define void @call_numbered() {
|
|
entry:
|
|
%0 = tail call addrspace(40) i32 @0(i16* null)
|
|
; CHECK: %0 = tail call addrspace(40) i32 @0(i16* null)
|
|
ret void
|
|
}
|
|
|
|
|
|
define i32 @invoked() personality i8* null {
|
|
entry:
|
|
%0 = invoke addrspace(40) i32 @foo() to label %l1 unwind label %lpad
|
|
; CHECK: invoke addrspace(40) i32 @foo()
|
|
l1:
|
|
br label %return
|
|
lpad:
|
|
%1 = landingpad { i8*, i32 }
|
|
catch i8* null
|
|
catch i8* null
|
|
ret i32 0
|
|
return:
|
|
ret i32 0
|
|
}
|
|
|
|
declare i32 @foo() addrspace(40)
|
|
; CHECK: declare i32 @foo() addrspace(40)
|
|
declare i32 @named(i16* nocapture) addrspace(40)
|
|
; CHECK: declare i32 @named(i16* nocapture) addrspace(40)
|
|
declare i32 @0(i16*) addrspace(40)
|
|
; CHECK: declare i32 @0(i16*) addrspace(40)
|