diff options
author | Alexander Richardson <arichardson.kde@gmail.com> | 2018-08-23 09:25:17 +0000 |
---|---|---|
committer | Alexander Richardson <arichardson.kde@gmail.com> | 2018-08-23 09:25:17 +0000 |
commit | 6bcf2ba2f0fff179602fd60b5e0127cd20fc907e (patch) | |
tree | e75d5473ea23982ba49e0c6ee1b24fd35b57dd8f /llvm/test/Bitcode/function-nonzero-address-spaces.ll | |
parent | ba9eee5fadf1114d5ed422ce80dca50099057933 (diff) | |
download | bcm5719-llvm-6bcf2ba2f0fff179602fd60b5e0127cd20fc907e.tar.gz bcm5719-llvm-6bcf2ba2f0fff179602fd60b5e0127cd20fc907e.zip |
Allow creating llvm::Function in non-zero address spaces
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
Diffstat (limited to 'llvm/test/Bitcode/function-nonzero-address-spaces.ll')
-rw-r--r-- | llvm/test/Bitcode/function-nonzero-address-spaces.ll | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/llvm/test/Bitcode/function-nonzero-address-spaces.ll b/llvm/test/Bitcode/function-nonzero-address-spaces.ll new file mode 100644 index 00000000000..54f6735f50a --- /dev/null +++ b/llvm/test/Bitcode/function-nonzero-address-spaces.ll @@ -0,0 +1,29 @@ +; 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: '%fnptr' defined with type 'void (i16) addrspace(40)*' but expected 'void (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: '%fnptr' defined with type 'void (i16) addrspace(40)*' but expected 'void (i16)*' + +define void @f_named(i16 %n, void (i16) addrspace(40)* %f) addrspace(40) { +entry: + %f.addr = alloca void (i16) addrspace(40)*, align 1 + store void (i16) addrspace(40)* %f, void (i16) addrspace(40)** %f.addr + %fnptr = load void (i16) addrspace(40)*, void (i16) addrspace(40)** %f.addr + call void %fnptr(i16 8) + ret void +} + +define void @f_numbered(i16 %n, void (i16) addrspace(40)* %f) addrspace(40){ +entry: + %f.addr = alloca void (i16) addrspace(40)*, align 1 + store void (i16) addrspace(40)* %f, void (i16) addrspace(40)** %f.addr + %0 = load void (i16) addrspace(40)*, void (i16) addrspace(40)** %f.addr + call void %0(i16 8) + ret void +} |