brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.1 KiB · 4b7230f Raw
51 lines · plain
1; RUN: llc -mtriple=x86_64 < %s2 3declare ptr @llvm_gc_allocate(i32)4declare void @llvm_gc_initialize(i32)5 6declare void @llvm.gcroot(ptr, ptr)7declare void @llvm.gcwrite(ptr, ptr, ptr)8 9define i32 @main() gc "shadow-stack" {10entry:11	%A = alloca ptr12	%B = alloca ptr13 14	call void @llvm_gc_initialize(i32 1048576)  ; Start with 1MB heap15 16        ;; ptr A;17	call void @llvm.gcroot(ptr %A, ptr null)18 19        ;; A = gcalloc(10);20	%Aptr = call ptr @llvm_gc_allocate(i32 10)21	store ptr %Aptr, ptr %A22 23        ;; ptr B;24	call void @llvm.gcroot(ptr %B, ptr null)25 26	;; B = gcalloc(4);27	%B.upgrd.1 = call ptr @llvm_gc_allocate(i32 8)28	store ptr %B.upgrd.1, ptr %B29 30	;; *B = A;31	%B.1 = load ptr, ptr %B32	%A.1 = load ptr, ptr %A33	call void @llvm.gcwrite(ptr %A.1, ptr %B.upgrd.1, ptr %B.1)34	35	br label %AllocLoop36 37AllocLoop:38	%i = phi i32 [ 0, %entry ], [ %indvar.next, %AllocLoop ]39        ;; Allocated mem: allocated memory is immediately dead.40	call ptr @llvm_gc_allocate(i32 100)41	42	%indvar.next = add i32 %i, 143	%exitcond = icmp eq i32 %indvar.next, 1000000044	br i1 %exitcond, label %Exit, label %AllocLoop45 46Exit:47	ret i32 048}49 50declare void @__main()51