Skip to content

Commit f151767

Browse files
committed
examples, wips
1 parent 6923b3c commit f151767

12 files changed

+50
-1
lines changed

llvm_util/llvm2alive.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -734,7 +734,8 @@ class llvm2alive_ : public llvm::InstVisitor<llvm2alive_, unique_ptr<Instr>> {
734734
// 2: unknown
735735
unsigned lifetime_type(llvm::IntrinsicInst &i) {
736736
llvm::SmallVector<const llvm::Value *> Objs;
737-
// TODO: should check offset
737+
// WIP: should check offset
738+
// WIP: should check double lifetime.start
738739
llvm::getUnderlyingObjects(i.getOperand(1), Objs);
739740
auto is_local = llvm::all_of(Objs, [](const llvm::Value *V) {
740741
return llvm::isa<llvm::AllocaInst>(V);
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
define i8 @src() {
2+
entry:
3+
%p = alloca i8
4+
call void @llvm.lifetime.start.p0i8(i64 1, i8* %p)
5+
store i8 1, i8* %p
6+
call void @llvm.lifetime.start.p0i8(i64 1, i8* %p)
7+
%v = load i8, i8* %p
8+
call void @llvm.lifetime.end.p0i8(i64 1, i8* %p)
9+
ret i8 %v
10+
}
11+
12+
define i8 @tgt() {
13+
%p = alloca i8, align 1
14+
call void @llvm.lifetime.start.p0i8(i64 1, i8* %p)
15+
store i8 1, i8* %p, align 1
16+
call void @llvm.lifetime.start.p0i8(i64 1, i8* %p)
17+
call void @llvm.lifetime.end.p0i8(i64 1, i8* %p)
18+
ret i8 undef
19+
}
20+
21+
declare void @llvm.lifetime.start.p0i8(i64, i8*)
22+
declare void @llvm.lifetime.end.p0i8(i64, i8*)
23+
24+
; WIP: deal with the second lifetime.start
25+
; ERROR: Target's return value is more undefined
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
define i8 @src(i8* %p) {
2+
entry:
3+
call void @llvm.lifetime.start.p0i8(i64 1, i8* %p)
4+
store i8 1, i8* %p
5+
call void @llvm.lifetime.start.p0i8(i64 1, i8* %p)
6+
%v = load i8, i8* %p
7+
call void @llvm.lifetime.end.p0i8(i64 1, i8* %p)
8+
ret i8 %v
9+
}
10+
11+
define i8 @tgt(i8* %p) {
12+
call void @llvm.lifetime.start.p0i8(i64 1, i8* %p)
13+
store i8 1, i8* %p, align 1
14+
call void @llvm.lifetime.start.p0i8(i64 1, i8* %p)
15+
call void @llvm.lifetime.end.p0i8(i64 1, i8* %p)
16+
ret i8 undef
17+
}
18+
19+
declare void @llvm.lifetime.start.p0i8(i64, i8*)
20+
declare void @llvm.lifetime.end.p0i8(i64, i8*)
21+
22+
; WIP: deal with the second lifetime.start
23+
; ERROR: Target's return value is more undefined

0 commit comments

Comments
 (0)