Skip to content

Commit 1cc49e5

Browse files
vmaksimojsji
authored andcommitted
Adjust Lifetime intrinsics translation after llvm/llvm-project@c23b4fb (#3304)
`Size` argument was removed from the intrinsics as it can be implied from the alloca. Original commit: KhronosGroup/SPIRV-LLVM-Translator@8750bce43eeba2a
1 parent a53e6ce commit 1cc49e5

File tree

4 files changed

+30
-15
lines changed

4 files changed

+30
-15
lines changed

llvm-spirv/lib/SPIRV/SPIRVReader.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1877,17 +1877,27 @@ Value *SPIRVToLLVM::transValueWithoutDecoration(SPIRVValue *BV, Function *F,
18771877
SPIRVLifetimeStart *LTStart = static_cast<SPIRVLifetimeStart *>(BV);
18781878
IRBuilder<> Builder(BB);
18791879
auto *Var = transValue(LTStart->getObject(), F, BB);
1880+
<<<<<<< HEAD
1881+
=======
1882+
Var = Var->stripPointerCasts();
1883+
>>>>>>> Adjust Lifetime intrinsics translation after llvm/llvm-project@c23b4fb (#3304)
18801884
CallInst *Start = Builder.CreateLifetimeStart(Var);
18811885
return mapValue(BV, Start);
18821886
}
1883-
18841887
case OpLifetimeStop: {
18851888
SPIRVLifetimeStop *LTStop = static_cast<SPIRVLifetimeStop *>(BV);
18861889
IRBuilder<> Builder(BB);
18871890
auto *Var = transValue(LTStop->getObject(), F, BB);
1891+
<<<<<<< HEAD
18881892
for (const auto &I : Var->users())
18891893
if (auto *II = getLifetimeStartIntrinsic(dyn_cast<Instruction>(I)))
18901894
return mapValue(BV, Builder.CreateLifetimeEnd(II->getOperand(1)));
1895+
=======
1896+
Var = Var->stripPointerCasts();
1897+
for (const auto &I : Var->users())
1898+
if (auto *II = getLifetimeStartIntrinsic(dyn_cast<Instruction>(I)))
1899+
return mapValue(BV, Builder.CreateLifetimeEnd(II->getOperand(0)));
1900+
>>>>>>> Adjust Lifetime intrinsics translation after llvm/llvm-project@c23b4fb (#3304)
18911901
return mapValue(BV, Builder.CreateLifetimeEnd(Var));
18921902
}
18931903

llvm-spirv/lib/SPIRV/SPIRVWriter.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4847,7 +4847,12 @@ SPIRVValue *LLVMToSPIRVBase::transIntrinsicInst(IntrinsicInst *II,
48474847
Op OC = (II->getIntrinsicID() == Intrinsic::lifetime_start)
48484848
? OpLifetimeStart
48494849
: OpLifetimeStop;
4850+
int64_t Size = 0;
48504851
Value *LLVMPtrOp = II->getOperand(0);
4852+
auto *Alloca = cast<AllocaInst>(LLVMPtrOp);
4853+
if (Alloca->getAllocatedType()->isSized())
4854+
Size = M->getDataLayout().getTypeAllocSize(Alloca->getAllocatedType());
4855+
48514856
unsigned PtrAS = cast<PointerType>(LLVMPtrOp->getType())->getAddressSpace();
48524857
auto *PtrOp = transValue(LLVMPtrOp, BB);
48534858
if (PtrAS == SPIRAS_Private)

llvm-spirv/test/llvm-intrinsics/lifetime.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,20 +35,20 @@
3535

3636
; CHECK-LLVM-LABEL: lifetime_simple
3737
; CHECK-LLVM: %[[#Alloca:]] = alloca i32
38-
; CHECK-LLVM: call void @llvm.lifetime.start.p0(i64 -1, ptr %[[#Alloca]])
39-
; CHECK-LLVM: call void @llvm.lifetime.end.p0(i64 -1, ptr %[[#Alloca]])
38+
; CHECK-LLVM: call void @llvm.lifetime.start.p0(ptr %[[#Alloca]])
39+
; CHECK-LLVM: call void @llvm.lifetime.end.p0(ptr %[[#Alloca]])
4040

4141
; CHECK-LLVM-LABEL: lifetime_sized
4242
; CHECK-LLVM: %[[#Alloca:]] = alloca i8
43-
; CHECK-LLVM: call void @llvm.lifetime.start.p0(i64 1, ptr %[[#Alloca]])
44-
; CHECK-LLVM: call void @llvm.lifetime.end.p0(i64 1, ptr %[[#Alloca]])
43+
; CHECK-LLVM: call void @llvm.lifetime.start.p0(ptr %[[#Alloca]])
44+
; CHECK-LLVM: call void @llvm.lifetime.end.p0(ptr %[[#Alloca]])
4545

4646
; CHECK-LLVM-LABEL: lifetime_generic
4747
; CHECK-LLVM: %[[#Alloca:]] = alloca %class.anon
4848
; CHECK-LLVM: %[[#Cast1:]] = addrspacecast ptr %[[#Alloca]] to ptr addrspace(4)
49-
; CHECK-LLVM: call void @llvm.lifetime.start.p0(i64 -1, ptr %[[#Alloca]])
49+
; CHECK-LLVM: call void @llvm.lifetime.start.p0(ptr %[[#Alloca]])
5050
; CHECK-LLVM: call spir_func void @boo(ptr addrspace(4) %[[#Cast1]])
51-
; CHECK-LLVM: call void @llvm.lifetime.end.p0(i64 -1, ptr %[[#Alloca]])
51+
; CHECK-LLVM: call void @llvm.lifetime.end.p0(ptr %[[#Alloca]])
5252

5353
; ModuleID = 'main'
5454
target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"

llvm-spirv/test/llvm-intrinsics/memmove.ll

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,38 +83,38 @@
8383
; CHECK-LLVM: %[[local:.*]] = alloca [128 x i8]
8484
; CHECK-LLVM: %[[i8_in:.*]] = bitcast ptr addrspace(1) %in to ptr addrspace(1)
8585
; CHECK-LLVM: %[[i8_out:.*]] = bitcast ptr addrspace(1) %out to ptr addrspace(1)
86-
; CHECK-LLVM: call void @llvm.lifetime.start.p0({{.*}}, ptr %[[local]])
86+
; CHECK-LLVM: call void @llvm.lifetime.start.p0(ptr %[[local]])
8787
; CHECK-LLVM: call void @llvm.memcpy.p0.p1.i32(ptr align 64 %[[local]],
8888
; CHECK-LLVM-SAME: ptr addrspace(1) align 64 %[[i8_in]], i32 128, i1 false)
8989
; CHECK-LLVM: call void @llvm.memcpy.p1.p0.i32(ptr addrspace(1) align 64 %[[i8_out]],
9090
; CHECK-LLVM-SAME: ptr align 64 %[[local]], i32 128, i1 false)
91-
; CHECK-LLVM: call void @llvm.lifetime.end.p0({{.*}}, ptr %[[local]])
91+
; CHECK-LLVM: call void @llvm.lifetime.end.p0(ptr %[[local]])
9292

9393
; CHECK-LLVM-LABEL: @test_partial_move
9494
; CHECK-LLVM: %[[local:.*]] = alloca [68 x i8]
9595
; CHECK-LLVM: %[[i8_in:.*]] = bitcast ptr addrspace(1) %in to ptr addrspace(1)
9696
; CHECK-LLVM: %[[i8_out_generic:.*]] = bitcast ptr addrspace(4) %out to ptr addrspace(4)
9797
; CHECK-LLVM: %[[i8_out:.*]] = addrspacecast ptr addrspace(4) %[[i8_out_generic]] to ptr addrspace(1)
98-
; CHECK-LLVM: call void @llvm.lifetime.start.p0({{.*}}, ptr %[[local]])
98+
; CHECK-LLVM: call void @llvm.lifetime.start.p0(ptr %[[local]])
9999
; CHECK-LLVM: call void @llvm.memcpy.p0.p1.i32(ptr align 64 %[[local]],
100100
; CHECK-LLVM-SAME: ptr addrspace(1) align 64 %[[i8_in]], i32 68, i1 false)
101101
; CHECK-LLVM: call void @llvm.memcpy.p1.p0.i32(ptr addrspace(1) align 64 %[[i8_out]],
102102
; CHECK-LLVM-SAME: ptr align 64 %[[local]], i32 68, i1 false)
103-
; CHECK-LLVM: call void @llvm.lifetime.end.p0({{.*}}, ptr %[[local]])
103+
; CHECK-LLVM: call void @llvm.lifetime.end.p0(ptr %[[local]])
104104

105105
; CHECK-LLVM-LABEL: @test_array
106106
; CHECK-LLVM: %[[#ALLOCA:]] = alloca [72 x i8]
107-
; CHECK-LLVM: call void @llvm.lifetime.start.p0({{.*}}, ptr %[[#ALLOCA]])
107+
; CHECK-LLVM: call void @llvm.lifetime.start.p0(ptr %[[#ALLOCA]])
108108
; CHECK-LLVM: call void @llvm.memcpy.p0.p1.i32(ptr %[[#ALLOCA]], ptr addrspace(1) %in, i32 72, i1 false)
109109
; CHECK-LLVM: call void @llvm.memcpy.p1.p0.i32(ptr addrspace(1) %out, ptr %[[#ALLOCA]], i32 72, i1 false)
110-
; CHECK-LLVM: call void @llvm.lifetime.end.p0({{.*}}, ptr %[[#ALLOCA]])
110+
; CHECK-LLVM: call void @llvm.lifetime.end.p0(ptr %[[#ALLOCA]])
111111

112112
; CHECK-LLVM-LABEL: @test_phi
113113
; CHECK-LLVM: %[[#ALLOCA:]] = alloca [32 x i8]
114-
; CHECK-LLVM: call void @llvm.lifetime.start.p0({{.*}}, ptr %[[#ALLOCA]])
114+
; CHECK-LLVM: call void @llvm.lifetime.start.p0(ptr %[[#ALLOCA]])
115115
; CHECK-LLVM: call void @llvm.memcpy.p0.p4.i64(ptr align 8 %[[#ALLOCA]], ptr addrspace(4) align 8 %phi, i64 32, i1 false)
116116
; CHECK-LLVM: call void @llvm.memcpy.p4.p0.i64(ptr addrspace(4) align 8 %[[#]], ptr align 8 %[[#ALLOCA]], i64 32, i1 false)
117-
; CHECK-LLVM: call void @llvm.lifetime.end.p0({{.*}}, ptr %[[#ALLOCA]])
117+
; CHECK-LLVM: call void @llvm.lifetime.end.p0(ptr %[[#ALLOCA]])
118118

119119

120120
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64"

0 commit comments

Comments
 (0)