Hi
I am trying to fix a bug in MachineCSE and have one question about following code:
*********************************************
// Go through implicit defs of CSMI and MI, if a def is not dead at MI,
// we should make sure it is not dead at CSMI.
if (MO.isImplicit() && !MO.isDead() && CSMI->getOperand(i).isDead())
ImplicitDefsToUpdate.push_back(i);
// Keep track of implicit defs of CSMI and MI, to clear possibly
// made-redundant kill flags.
if (MO.isImplicit() && !MO.isDead() && OldReg == NewReg)
ImplicitDefs.push_back(OldReg);
if (OldReg == NewReg) {
--NumDefs;
continue;
}
**********************************************
From Above source code, it seems that CSE does not handle instruction which
have one operand that is ‘implicit+isDead+isDef’.
Base on my understanding, implicit dead register is mean clobbered, so it is not safe to
do CSE. Is this right?
Best wishes
Michael
_______________________________________________
LLVM Developers mailing list
llvm...@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
On Oct 21, 2018, at 2:48 PM, mbraun via llvm-dev <llvm...@lists.llvm.org> wrote:As far as I understand it (though I didn’t write the code so I may be missing something) this is about making sure liveness flags (kill, dead) are updated correctly when merging instruction. The situations to consider are probably:1)OP_X …, implicit-def %XwithOP_X …, implicit-def dead %XThe merged instruction probably should not have a dead flag set. The 2nd if appears to be about this situation:2)OP_X …, implicit-def dead %XUse killed %X…OP_X …, implicit-def %X ; this gets merged with the previous OP_XUse %X
Hi mbraun
Thanks for your information.
What about following situation:
3)
OP_X …, implicit-def dead %X
with
OP_X …, implicit-def dead %X
Between two instructions, there may be another instruction(not OP_X) which also def %X,
Is it correct to do CSE in this situation?
Best wishes
Michael
As far as I know, dead register is not only means none would read it , it may means register is clobbered.
http://lists.llvm.org/pipermail/llvm-dev/2018-February/120994.html
On Oct 22, 2018, at 11:29 PM, Yuchao (Michael) via llvm-dev <llvm...@lists.llvm.org> wrote:As far as I know, dead register is not only means none would read it , it may means register is clobbered.