xref: /llvm-project/llvm/test/Analysis/ValueTracking/deref-abstract-gc.ll (revision b769758056793472f8638152f30d840856e75b56)
1*b7697580SFlorian Hahn; RUN: opt -passes=print-memderefs -S < %s -disable-output  -use-dereferenceable-at-point-semantics 2>&1 | FileCheck %s --check-prefixes=CHECK
269fae504SPhilip Reames
369fae504SPhilip Reamestarget datalayout = "e-i32:32:64"
469fae504SPhilip Reames
569fae504SPhilip Reames; For the abstract machine model (before RS4GC), gc managed objects
669fae504SPhilip Reames; conceptually live forever.  But there may be non-managed objects which are
769fae504SPhilip Reames; freed.
869fae504SPhilip Reames; CHECK-LABEL: 'abstract_model'
94054b832SPhilip Reames; CHECK: %gc_ptr
1069fae504SPhilip Reames; CHECK-NOT: %other_ptr
1169fae504SPhilip Reames; FIXME: Can infer the gc pointer case
127fbbbfd6SNikita Popovdefine void @abstract_model(ptr addrspace(1) dereferenceable(8) %gc_ptr,
137fbbbfd6SNikita Popov                            ptr dereferenceable(8) %other_ptr)
1469fae504SPhilip Reames    gc "statepoint-example" {
1569fae504SPhilip Reamesentry:
1669fae504SPhilip Reames  call void @mayfree()
177fbbbfd6SNikita Popov  load i32, ptr addrspace(1) %gc_ptr
187fbbbfd6SNikita Popov  load i32, ptr %other_ptr
1969fae504SPhilip Reames  ret void
2069fae504SPhilip Reames}
2169fae504SPhilip Reames
2269fae504SPhilip Reames; Can free any object accessible in memory
2369fae504SPhilip Reamesdeclare void @mayfree()
24