[llvm-dev] Question about MachineCSE optimization (original) (raw)
Yuchao (Michael) via llvm-dev llvm-dev at lists.llvm.org
Mon Oct 22 04:59:39 PDT 2018
- Previous message: [llvm-dev] Question about MachineCSE optimization
- Next message: [llvm-dev] Question about MachineCSE optimization
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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
From: mbraun at apple.com [mailto:mbraun at apple.com] Sent: Monday, October 22, 2018 5:51 AM To: Matthias Braun <mbraun at apple.com> Cc: Yuchao (Michael) <michael.yuchao at huawei.com>; llvm-dev at lists.llvm.org; sunqiang (I) <sunqiang13 at huawei.com> Subject: Re: [llvm-dev] Question about MachineCSE optimization
On Oct 21, 2018, at 2:48 PM, mbraun via llvm-dev <llvm-dev at lists.llvm.org<mailto:llvm-dev at 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:
- OP_X …, implicit-def %X with OP_X …, implicit-def dead %X
The merged instruction probably should not have a dead flag set. The 2nd if appears to be about this situation:
- OP_X …, implicit-def dead %X Use killed %X … OP_X …, implicit-def %X ; this gets merged with the previous OP_X Use %X This example should of course read:
OP_X …, implicit-def %X Use killed %X … OP_X …, implicit-def %X ; this gets merged with the previous OP_X Use %X
Once we merge the 2nd OP_X with the first one, we have to drop the killed
flags on all users of %X between the first OP_X and the position where we had the 2nd OP_X before it was merged.
Once we merge the 2nd OP_X with the first one, we have to drop the killed
flags on the %X users.
Though admittedly I am at a loss right now why this is only performed for implicit operands and not for all operands…
- Matthias
On Oct 20, 2018, at 1:38 AM, Yuchao (Michael) via llvm-dev <llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org>> wrote:
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-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
LLVM Developers mailing list llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20181022/6771362f/attachment-0001.html>
- Previous message: [llvm-dev] Question about MachineCSE optimization
- Next message: [llvm-dev] Question about MachineCSE optimization
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]