Adjusting verification of "llvm.gc*" intrinsic prototypes to match

LangRef.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45349 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Gordon Henriksen
2007-12-25 02:02:10 +00:00
parent f1519e8361
commit 27acd3a999
5 changed files with 82 additions and 27 deletions

View File

@@ -0,0 +1,13 @@
; RUN: not llvm-as < %s
%list = type { i32, %list* }
; This usage is invalid now; instead, objects must be bitcast to i8* for input
; to the gc intrinsics.
declare %list* @llvm.gcread(%list*, %list**)
define %list* @tl(%list* %l) gc "example" {
%hd.ptr = getelementptr %list* %l, i32 0, i32 0
%hd = call %list* @llvm.gcread(%list* %l, %list** %hd.ptr)
ret i32 %tmp
}

View File

@@ -0,0 +1,13 @@
; RUN: not llvm-as < %s
%list = type { i32, %list* }
%meta = type opaque
; This usage is invalid now; instead, objects must be bitcast to i8* for input
; to the gc intrinsics.
declare void @llvm.gcroot(%list*, %meta*)
define void @root() gc "example" {
%x.var = alloca i8*
call void @llvm.gcroot(i8** %x.var, %meta* null)
}

View File

@@ -0,0 +1,22 @@
; RUN: not llvm-as < %s
%list = type { i32, %list* }
; This usage is invalid now; instead, objects must be bitcast to i8* for input
; to the gc intrinsics.
declare void @llvm.gcwrite(%list*, %list*, %list**)
define %list* @cons(i32 %hd, %list* %tl) gc "example" {
%tmp = call i8* @gcalloc(i32 bitcast(%list* getelementptr(%list* null, i32 1) to i32))
%cell = bitcast i8* %tmp to %list*
%hd.ptr = getelementptr %list* %cell, i32 0, i32 0
store i32 %hd, i32* %hd.ptr
%tl.ptr = getelementptr %list* %cell, i32 0, i32 0
call void @llvm.gcwrite(%list* %tl, %list* %cell, %list** %tl.ptr)
ret %cell.2
}
declare i8* @gcalloc(i32)

View File

@@ -1,6 +1,6 @@
; RUN: llvm-as < %s | llc
%Env = type opaque*
%Env = type i8*
define void @.main(%Env) {
%Root = alloca %Env