summaryrefslogtreecommitdiffstats
path: root/llvm/test/Assembler/invoke-nonzero-program-addrspace.ll
diff options
context:
space:
mode:
authorAlexander Richardson <arichardson.kde@gmail.com>2018-08-23 09:25:17 +0000
committerAlexander Richardson <arichardson.kde@gmail.com>2018-08-23 09:25:17 +0000
commit6bcf2ba2f0fff179602fd60b5e0127cd20fc907e (patch)
treee75d5473ea23982ba49e0c6ee1b24fd35b57dd8f /llvm/test/Assembler/invoke-nonzero-program-addrspace.ll
parentba9eee5fadf1114d5ed422ce80dca50099057933 (diff)
downloadbcm5719-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/Assembler/invoke-nonzero-program-addrspace.ll')
-rw-r--r--llvm/test/Assembler/invoke-nonzero-program-addrspace.ll22
1 files changed, 17 insertions, 5 deletions
diff --git a/llvm/test/Assembler/invoke-nonzero-program-addrspace.ll b/llvm/test/Assembler/invoke-nonzero-program-addrspace.ll
index 443884590d6..a3f70aec30d 100644
--- a/llvm/test/Assembler/invoke-nonzero-program-addrspace.ll
+++ b/llvm/test/Assembler/invoke-nonzero-program-addrspace.ll
@@ -1,12 +1,15 @@
-; RUN: llvm-as %s -data-layout=P200 -o /dev/null
; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s
+; RUN: llvm-as %s -data-layout=P200 -o - | llvm-dis - -o - | FileCheck %s -check-prefix PROGAS200
+
; Check that variables in a nonzero program address space 200 can be used in a invoke instruction
-define i8 @test_invoke(i8(i32)* %fnptr0, i8(i32) addrspace(200)* %fnptr200) personality i32 (...)* @__gxx_personality_v0 {
- %first = invoke i8 %fnptr0(i32 0) to label %ok unwind label %lpad ; this is fine
- %second = invoke i8 %fnptr200(i32 0) to label %ok unwind label %lpad ; this is also fine if it's the program AS
- ; CHECK: invoke-nonzero-program-addrspace.ll:[[@LINE-1]]:23: error: '%fnptr200' defined with type 'i8 (i32) addrspace(200)*'
+define i8 @test_invoke(i8(i32)* %fnptr0, i8(i32) addrspace(200)* %fnptr200) personality i32 (...) addrspace(200)* @__gxx_personality_v0 {
+ %explicit_as_0 = invoke addrspace(0) i8 %fnptr0(i32 0) to label %ok unwind label %lpad
+ %explicit_as_42 = invoke addrspace(200) i8 %fnptr200(i32 0) to label %ok unwind label %lpad
+ ; The following is only okay if the program address space is 200:
+ %no_as = invoke i8 %fnptr200(i32 0) to label %ok unwind label %lpad
+ ; CHECK: invoke-nonzero-program-addrspace.ll:[[@LINE-1]]:22: error: '%fnptr200' defined with type 'i8 (i32) addrspace(200)*' but expected 'i8 (i32)*'
ok:
ret i8 0
lpad:
@@ -16,3 +19,12 @@ lpad:
}
declare i32 @__gxx_personality_v0(...)
+
+
+; PROGAS200: target datalayout = "P200"
+; PROGAS200: define i8 @test_invoke(i8 (i32)* %fnptr0, i8 (i32) addrspace(200)* %fnptr200) addrspace(200) personality i32 (...) addrspace(200)* @__gxx_personality_v0 {
+; PROGAS200: %explicit_as_0 = invoke addrspace(0) i8 %fnptr0(i32 0)
+; PROGAS200: %explicit_as_42 = invoke addrspace(200) i8 %fnptr200(i32 0)
+; PROGAS200: %no_as = invoke addrspace(200) i8 %fnptr200(i32 0)
+; PROGAS200: ret i8 0
+; PROGAS200: }
OpenPOWER on IntegriCloud