mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-01 21:04:04 -04:00
[SafeStack] Insert the deref before remaining elements
This is a follow up to D64971. While we need to insert the deref after the offset, it needs to come before the remaining elements in the original expression since the deref needs to happen before the LLVM fragment if present. Differential Revision: https://reviews.llvm.org/D65172 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366865 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1599,13 +1599,8 @@ static void replaceOneDbgValueForAlloca(DbgValueInst *DVI, Value *NewAddress,
|
||||
|
||||
// Insert the offset before the first deref.
|
||||
// We could just change the offset argument of dbg.value, but it's unsigned...
|
||||
if (Offset) {
|
||||
SmallVector<uint64_t, 4> Ops;
|
||||
DIExpression::appendOffset(Ops, Offset);
|
||||
Ops.append(DIExpr->elements_begin() + 1, DIExpr->elements_end());
|
||||
Ops.push_back(dwarf::DW_OP_deref);
|
||||
DIExpr = Builder.createExpression(Ops);
|
||||
}
|
||||
if (Offset)
|
||||
DIExpr = DIExpression::prepend(DIExpr, 0, Offset);
|
||||
|
||||
Builder.insertDbgValueIntrinsic(NewAddress, DIVar, DIExpr, Loc, DVI);
|
||||
DVI->eraseFromParent();
|
||||
|
||||
@@ -24,6 +24,10 @@ entry:
|
||||
; CHECK: call void @llvm.dbg.value(metadata ![[EMPTY]], metadata !{{.*}}, metadata !{{.*}})
|
||||
tail call void @llvm.dbg.value(metadata i32* %x1, metadata !10, metadata !24), !dbg !16
|
||||
|
||||
; Supported dbg.value: rewritted based on the [[USP]] value.
|
||||
; CHECK: call void @llvm.dbg.value(metadata i8* %[[USP]], metadata ![[X1:.*]], metadata !DIExpression(DW_OP_constu, 4, DW_OP_minus, DW_OP_deref, DW_OP_LLVM_fragment, 0, 4))
|
||||
tail call void @llvm.dbg.value(metadata i32* %x1, metadata !10, metadata !25), !dbg !16
|
||||
|
||||
; Supported dbg.value: rewritted based on the [[USP]] value.
|
||||
; CHECK: call void @llvm.dbg.value(metadata i8* %[[USP]], metadata ![[X1:.*]], metadata !DIExpression(DW_OP_constu, 4, DW_OP_minus, DW_OP_deref))
|
||||
tail call void @llvm.dbg.value(metadata i32* %x1, metadata !10, metadata !15), !dbg !16
|
||||
@@ -94,3 +98,4 @@ attributes #4 = { nounwind }
|
||||
!22 = !DILexicalBlockFile(scope: !6, file: !1, discriminator: 1)
|
||||
!23 = !DIExpression()
|
||||
!24 = !DIExpression(DW_OP_constu, 42, DW_OP_minus)
|
||||
!25 = !DIExpression(DW_OP_deref, DW_OP_LLVM_fragment, 0, 4)
|
||||
|
||||
Reference in New Issue
Block a user