[llvm] b817ea7 - [MachineFunction] Make comment for TracksLiveness more clearer
Guozhi Wei via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 30 12:12:44 PDT 2021
Author: Guozhi Wei
Date: 2021-04-30T12:10:36-07:00
New Revision: b817ea7b17b8ae68c2bd29834138ed84a8a7005d
URL: https://github.com/llvm/llvm-project/commit/b817ea7b17b8ae68c2bd29834138ed84a8a7005d
DIFF: https://github.com/llvm/llvm-project/commit/b817ea7b17b8ae68c2bd29834138ed84a8a7005d.diff
LOG: [MachineFunction] Make comment for TracksLiveness more clearer
As discussed in https://lists.llvm.org/pipermail/llvm-dev/2021-April/150225.html,
the current comments for TracksLiveness property and isKill flag are confusing.
This patch makes the comments more clearer.
Differential Revision: https://reviews.llvm.org/D101500
Added:
Modified:
llvm/include/llvm/CodeGen/MachineFunction.h
llvm/include/llvm/CodeGen/MachineOperand.h
Removed:
################################################################################
diff --git a/llvm/include/llvm/CodeGen/MachineFunction.h b/llvm/include/llvm/CodeGen/MachineFunction.h
index ce78feef2823..e14b337098af 100644
--- a/llvm/include/llvm/CodeGen/MachineFunction.h
+++ b/llvm/include/llvm/CodeGen/MachineFunction.h
@@ -124,11 +124,14 @@ class MachineFunctionProperties {
// NoPHIs: The machine function does not contain any PHI instruction.
// TracksLiveness: True when tracking register liveness accurately.
// While this property is set, register liveness information in basic block
- // live-in lists and machine instruction operands (e.g. kill flags, implicit
- // defs) is accurate. This means it can be used to change the code in ways
- // that affect the values in registers, for example by the register
- // scavenger.
- // When this property is clear, liveness is no longer reliable.
+ // live-in lists and machine instruction operands (e.g. implicit defs) is
+ // accurate, kill flags are conservatively accurate (kill flag correctly
+ // indicates the last use of a register, an operand without kill flag may or
+ // may not be the last use of a register). This means it can be used to
+ // change the code in ways that affect the values in registers, for example
+ // by the register scavenger.
+ // When this property is cleared at a very late time, liveness is no longer
+ // reliable.
// NoVRegs: The machine function does not use any virtual registers.
// Legalized: In GlobalISel: the MachineLegalizer ran and all pre-isel generic
// instructions have been legalized; i.e., all instructions are now one of:
diff --git a/llvm/include/llvm/CodeGen/MachineOperand.h b/llvm/include/llvm/CodeGen/MachineOperand.h
index b12351b8a702..f17904d54cdd 100644
--- a/llvm/include/llvm/CodeGen/MachineOperand.h
+++ b/llvm/include/llvm/CodeGen/MachineOperand.h
@@ -99,8 +99,11 @@ class MachineOperand {
unsigned IsImp : 1;
/// IsDeadOrKill
- /// For uses: IsKill - True if this instruction is the last use of the
- /// register on this path through the function.
+ /// For uses: IsKill - Conservatively indicates the last use of a register
+ /// on this path through the function. A register operand with true value of
+ /// this flag must be the last use of the register, a register operand with
+ /// false value may or may not be the last use of the register. After regalloc
+ /// we can use recomputeLivenessFlags to get precise kill flags.
/// For defs: IsDead - True if this register is never used by a subsequent
/// instruction.
/// This is only valid on register operands.
More information about the llvm-commits
mailing list