diff options
author | Sander de Smalen <sander.desmalen@arm.com> | 2021-01-06 09:37:57 +0000 |
---|---|---|
committer | Sander de Smalen <sander.desmalen@arm.com> | 2021-01-06 09:40:53 +0000 |
commit | a7e3339f3b0eb71e43d44e6f59cc8db6a7b110bf (patch) | |
tree | b48bea50c894f33d0c39f1ee2676b30a42374c28 /llvm/lib/CodeGen/PrologEpilogInserter.cpp | |
parent | a9f5e4375b36e5316b8d6f9731be6bfa5a70e276 (diff) | |
download | llvm-a7e3339f3b0eb71e43d44e6f59cc8db6a7b110bf.zip llvm-a7e3339f3b0eb71e43d44e6f59cc8db6a7b110bf.tar.gz llvm-a7e3339f3b0eb71e43d44e6f59cc8db6a7b110bf.tar.bz2 |
[AArch64][SVE] Emit DWARF location expression for SVE stack objects.
Extend PEI to emit a DWARF expression for StackOffsets that have
a fixed and scalable component. This means the expression that needs
to be added is either:
<base> + offset
or:
<base> + offset + scalable_offset * scalereg
where for SVE, the scale reg is the Vector Granule Dwarf register, which
encodes the number of 64bit 'granules' in an SVE vector and which
the debugger can evaluate at runtime.
Reviewed By: jmorse
Differential Revision: https://reviews.llvm.org/D90020
Diffstat (limited to 'llvm/lib/CodeGen/PrologEpilogInserter.cpp')
-rw-r--r-- | llvm/lib/CodeGen/PrologEpilogInserter.cpp | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/PrologEpilogInserter.cpp b/llvm/lib/CodeGen/PrologEpilogInserter.cpp index 7c38b19..65b2165 100644 --- a/llvm/lib/CodeGen/PrologEpilogInserter.cpp +++ b/llvm/lib/CodeGen/PrologEpilogInserter.cpp @@ -1211,8 +1211,6 @@ void PEI::replaceFrameIndices(MachineBasicBlock *BB, MachineFunction &MF, StackOffset Offset = TFI->getFrameIndexReference(MF, FrameIdx, Reg); - assert(!Offset.getScalable() && - "Frame offsets with a scalable component are not supported"); MI.getOperand(0).ChangeToRegister(Reg, false /*isDef*/); MI.getOperand(0).setIsDebug(); @@ -1238,7 +1236,8 @@ void PEI::replaceFrameIndices(MachineBasicBlock *BB, MachineFunction &MF, // Make the DBG_VALUE direct. MI.getDebugOffset().ChangeToRegister(0, false); } - DIExpr = DIExpression::prepend(DIExpr, PrependFlags, Offset.getFixed()); + + DIExpr = TRI.prependOffsetExpression(DIExpr, PrependFlags, Offset); MI.getDebugExpressionOp().setMetadata(DIExpr); continue; } |