Imported Upstream version 5.18.0.207

Former-commit-id: 3b152f462918d427ce18620a2cbe4f8b79650449
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2018-11-17 08:23:10 +00:00
parent 8e12397d70
commit eb85e2fc17
28480 changed files with 72 additions and 3866936 deletions

View File

@@ -1,54 +0,0 @@
; RUN: llc < %s
; REQUIRES: default_triple
declare i8* @llvm_gc_allocate(i32)
declare void @llvm_gc_initialize(i32)
declare void @llvm.gcroot(i8**, i8*)
declare void @llvm.gcwrite(i8*, i8*, i8**)
define i32 @main() gc "shadow-stack" {
entry:
%A = alloca i8*
%B = alloca i8**
call void @llvm_gc_initialize(i32 1048576) ; Start with 1MB heap
;; void *A;
call void @llvm.gcroot(i8** %A, i8* null)
;; A = gcalloc(10);
%Aptr = call i8* @llvm_gc_allocate(i32 10)
store i8* %Aptr, i8** %A
;; void **B;
%tmp.1 = bitcast i8*** %B to i8**
call void @llvm.gcroot(i8** %tmp.1, i8* null)
;; B = gcalloc(4);
%B.upgrd.1 = call i8* @llvm_gc_allocate(i32 8)
%tmp.2 = bitcast i8* %B.upgrd.1 to i8**
store i8** %tmp.2, i8*** %B
;; *B = A;
%B.1 = load i8**, i8*** %B
%A.1 = load i8*, i8** %A
call void @llvm.gcwrite(i8* %A.1, i8* %B.upgrd.1, i8** %B.1)
br label %AllocLoop
AllocLoop:
%i = phi i32 [ 0, %entry ], [ %indvar.next, %AllocLoop ]
;; Allocated mem: allocated memory is immediately dead.
call i8* @llvm_gc_allocate(i32 100)
%indvar.next = add i32 %i, 1
%exitcond = icmp eq i32 %indvar.next, 10000000
br i1 %exitcond, label %Exit, label %AllocLoop
Exit:
ret i32 0
}
declare void @__main()

View File

@@ -1,19 +0,0 @@
; RUN: opt < %s -argpromotion
declare void @llvm.gcroot(i8**, i8*)
define i32 @g() {
entry:
%var = alloca i32
store i32 1, i32* %var
%x = call i32 @f(i32* %var)
ret i32 %x
}
define internal i32 @f(i32* %xp) gc "example" {
entry:
%var = alloca i8*
call void @llvm.gcroot(i8** %var, i8* null)
%x = load i32, i32* %xp
ret i32 %x
}

View File

@@ -1,13 +0,0 @@
; RUN: not llvm-as < %s > /dev/null 2>&1
%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, %list* %l, i32 0, i32 0
%hd = call %list* @llvm.gcread(%list* %l, %list** %hd.ptr)
ret i32 %tmp
}

View File

@@ -1,13 +0,0 @@
; RUN: not llvm-as < %s > /dev/null 2>&1
%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

@@ -1,22 +0,0 @@
; RUN: not llvm-as < %s > /dev/null 2>&1
%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, %list* null, i32 1) to i32))
%cell = bitcast i8* %tmp to %list*
%hd.ptr = getelementptr %list, %list* %cell, i32 0, i32 0
store i32 %hd, i32* %hd.ptr
%tl.ptr = getelementptr %list, %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,18 +0,0 @@
; RUN: llc < %s -O0
; REQUIRES: default_triple
define i32 @main() {
entry:
call void @f()
ret i32 0
}
define void @f() gc "ocaml" {
entry:
%ptr.stackref = alloca i8*
%gcroot = bitcast i8** %ptr.stackref to i8**
call void @llvm.gcroot(i8** %gcroot, i8* null)
ret void
}
declare void @llvm.gcroot(i8**, i8*) nounwind

View File

@@ -1,16 +0,0 @@
; RUN: opt < %s -deadargelim
declare void @llvm.gcroot(i8**, i8*)
define void @g() {
entry:
call void @f(i32 0)
ret void
}
define internal void @f(i32 %unused) gc "example" {
entry:
%var = alloca i8*
call void @llvm.gcroot(i8** %var, i8* null)
ret void
}

View File

@@ -1,28 +0,0 @@
; RUN: llc < %s | FileCheck %s
target datalayout = "e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"
declare void @use(<4 x i8*>*)
; Test that a frame which requires dynamic relocation produces a stack map
; with a size of UINT64_MAX.
define void @test(i8* %ptr) gc "erlang" {
; 32 byte alignment (for the alloca) is larger than the default
; 16 byte alignment
%slot = alloca <4 x i8*>
call void @use(<4 x i8*>* %slot);
ret void
}
; CHECK: .note.gc
; CHECK-NEXT: .p2align 3
; safe point count
; CHECK: .short 1
; CHECK: .long .Ltmp0
; stack frame size (in words)
; CHECK: .short -1
; stack arity (arguments on the stack)
; CHECK: .short 0
; live root count
; CHECK: .short 0

View File

@@ -1,25 +0,0 @@
; RUN: llc -mtriple=x86_64-linux-gnu < %s | FileCheck %s --check-prefix=CHECK64
; RUN: llc -mtriple=i686-linux-gnu < %s | FileCheck %s --check-prefix=CHECK32
define i32 @main(i32 %x) nounwind gc "erlang" {
%puts = tail call i32 @foo(i32 %x)
ret i32 0
; CHECK64: .section .note.gc,"",@progbits
; CHECK64-NEXT: .p2align 3
; CHECK64-NEXT: .short 1 # safe point count
; CHECK64-NEXT: .long .Ltmp0 # safe point address
; CHECK64-NEXT: .short 1 # stack frame size (in words)
; CHECK64-NEXT: .short 0 # stack arity
; CHECK64-NEXT: .short 0 # live root count
; CHECK32: .section .note.gc,"",@progbits
; CHECK32-NEXT: .p2align 2
; CHECK32-NEXT: .short 1 # safe point count
; CHECK32-NEXT: .long .Ltmp0 # safe point address
; CHECK32-NEXT: .short 3 # stack frame size (in words)
; CHECK32-NEXT: .short 0 # stack arity
; CHECK32-NEXT: .short 0 # live root count
}
declare i32 @foo(i32)

View File

@@ -1,10 +0,0 @@
; RUN: not llvm-as < %s > /dev/null 2>&1
declare void @llvm.gcroot(i8**, i8*) nounwind
define void @f() gc "x" {
%st = alloca { i8*, i1 } ; <{ i8*, i1 }*> [#uses=1]
%st_ptr = bitcast { i8*, i1 }* %st to i8** ; <i8**> [#uses=1]
call void @llvm.gcroot(i8** %st_ptr, i8* null)
ret void
}

View File

@@ -1,23 +0,0 @@
; RUN: opt < %s -inline -S | grep example
%IntArray = type { i32, [0 x i32*] }
declare void @llvm.gcroot(i8**, i8*) nounwind
define i32 @f() {
%x = call i32 @g( ) ; <i32> [#uses=1]
ret i32 %x
}
define internal i32 @g() gc "example" {
%root = alloca i8* ; <i8**> [#uses=2]
call void @llvm.gcroot( i8** %root, i8* null )
%obj = call %IntArray* @h( ) ; <%IntArray*> [#uses=2]
%obj.2 = bitcast %IntArray* %obj to i8* ; <i8*> [#uses=1]
store i8* %obj.2, i8** %root
%Length.ptr = getelementptr %IntArray, %IntArray* %obj, i32 0, i32 0 ; <i32*> [#uses=1]
%Length = load i32, i32* %Length.ptr ; <i32> [#uses=1]
ret i32 %Length
}
declare %IntArray* @h()

View File

@@ -1,24 +0,0 @@
; RUN: opt < %s -inline -S | grep sample
; RUN: opt < %s -inline -S | grep example
%IntArray = type { i32, [0 x i32*] }
declare void @llvm.gcroot(i8**, i8*) nounwind
define i32 @f() gc "sample" {
%x = call i32 @g( ) ; <i32> [#uses=1]
ret i32 %x
}
define internal i32 @g() gc "example" {
%root = alloca i8* ; <i8**> [#uses=2]
call void @llvm.gcroot( i8** %root, i8* null )
%obj = call %IntArray* @h( ) ; <%IntArray*> [#uses=2]
%obj.2 = bitcast %IntArray* %obj to i8* ; <i8*> [#uses=1]
store i8* %obj.2, i8** %root
%Length.ptr = getelementptr %IntArray, %IntArray* %obj, i32 0, i32 0 ; <i32*> [#uses=1]
%Length = load i32, i32* %Length.ptr ; <i32> [#uses=1]
ret i32 %Length
}
declare %IntArray* @h()

View File

@@ -1,3 +0,0 @@
if not 'X86' in config.root.targets:
config.unsupported = True

View File

@@ -1,12 +0,0 @@
; RUN: llc < %s
; REQUIRES: default_triple
%Env = type i8*
define void @.main(%Env) gc "shadow-stack" {
%Root = alloca %Env
call void @llvm.gcroot( %Env* %Root, %Env null )
unreachable
}
declare void @llvm.gcroot(%Env*, %Env)

View File

@@ -1,21 +0,0 @@
; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck %s
; PR3168
; CHECK-LABEL: append
define i32* @append() gc "ocaml" {
entry:
switch i32 0, label %L2 [i32 0, label %L1]
L1:
%var8 = alloca i8*
call void @llvm.gcroot(i8** %var8,i8* null)
br label %L3
L2:
call ccc void @oread_runtime_casenotcovered()
unreachable
L3:
ret i32* null
}
declare ccc void @oread_runtime_casenotcovered()
declare void @llvm.gcroot(i8**,i8*)

View File

@@ -1,33 +0,0 @@
; RUN: llc < %s -mtriple=x86_64-linux-gnu | FileCheck %s
; CHECK: .text
; CHECK-NEXT: .file "<stdin>"
define i32 @main(i32 %x) nounwind gc "ocaml" {
; CHECK: .globl "caml<stdin>__code_begin"
; CHECK-NEXT: "caml<stdin>__code_begin":
; CHECK-NEXT: .data
; CHECK-NEXT: .globl "caml<stdin>__data_begin"
; CHECK-NEXT: "caml<stdin>__data_begin":
%puts = tail call i32 @foo(i32 %x)
ret i32 0
; CHECK: .globl "caml<stdin>__code_end"
; CHECK-NEXT: "caml<stdin>__code_end":
; CHECK-NEXT: .data
; CHECK-NEXT: .globl "caml<stdin>__data_end"
; CHECK-NEXT: "caml<stdin>__data_end":
; CHECK-NEXT: .quad 0
; CHECK-NEXT: .globl "caml<stdin>__frametable"
; CHECK-NEXT: "caml<stdin>__frametable":
; CHECK-NEXT: .short 1
; CHECK-NEXT: .p2align 3
; CHECK-NEXT: # live roots for main
; CHECK-NEXT: .quad .Ltmp0
; CHECK-NEXT: .short 8
; CHECK-NEXT: .short 0
; CHECK-NEXT: .p2align 3
}
declare i32 @foo(i32)

View File

@@ -1,10 +0,0 @@
; RUN: not llvm-as < %s > /dev/null 2>&1
declare void @llvm.gcroot(i8**, i8*)
define void @f(i8* %x) {
%root = alloca i8*
call void @llvm.gcroot(i8** %root, i8* null)
store i8* %x, i8** %root
ret void
}