Page MenuHomePhabricator

[mips] Teach the delay slot filler to remove needless KILL instructions.
ClosedPublic

Authored by vkalintiris on Feb 18 2015, 7:59 AM.

Details

Summary

Previously, the presence of KILL instructions would block valid candidates
from filling a specific delay slot. With the elimination of the KILL
instructions, in the appropriate range, we are able to fill more slots and
keep the information from future def/use analysis consistent.

Diff Detail

Repository
rL LLVM

Event Timeline

vkalintiris retitled this revision from to [mips] Teach the delay slot filler to remove needless KILL instructions..
vkalintiris updated this object.
vkalintiris edited the test plan for this revision. (Show Details)
vkalintiris added a reviewer: dsanders.
vkalintiris added a subscriber: Unknown Object (MLST).

Why are you removing them instead of just ignoring them? Are they really useless, or are they marking subregister/superregister points of definition?

Hi Hal,

Why are you removing them instead of just ignoring them?

Can we simply ignore them and under what conditions?
I sent an email to the llvm-dev list the other day but it didn't receive much attention:

http://lists.cs.uiuc.edu/pipermail/llvmdev/2015-February/081716.html

Are they really useless, or are they marking subregister/superregister points of definition?

I'm not very sure what you are asking me here. AFAIK, the Mips target
doesn't use KILL instructions for anything special. The question is
whether they are used for anything else outside the Mips target.

Hi Hal,

Why are you removing them instead of just ignoring them?

Can we simply ignore them and under what conditions?
I sent an email to the llvm-dev list the other day but it didn't receive much attention:

I apologize for the delay in responding.

http://lists.cs.uiuc.edu/pipermail/llvmdev/2015-February/081716.html

Are they really useless, or are they marking subregister/superregister points of definition?

I'm not very sure what you are asking me here. AFAIK, the Mips target
doesn't use KILL instructions for anything special. The question is
whether they are used for anything else outside the Mips target.

I re-read the llvmdev thread, and I think the conclusion there is correct: Given that you're calling TRI.invalidateLiveness(), removing the KILL instructions makes sense. They're used by the RA, copy propagation, post-RA-scheduler's anti-dependency breakers, etc., but otherwise, they likely don't really matter. So, as Quentin said, removing them is fine.

I re-read the llvmdev thread, and I think the conclusion there is correct: Given that you're calling TRI.invalidateLiveness(), removing the KILL instructions makes sense. They're used by the RA, copy propagation, post-RA-scheduler's anti-dependency breakers, etc., but otherwise, they likely don't really matter. So, as Quentin said, removing them is fine.

Hi Hal, thank you for your comments. I'm glad that the changes are okay!

dsanders accepted this revision.Apr 17 2015, 3:55 AM
dsanders edited edge metadata.

Sorry, I didn't realize you were waiting for me.

LGTM

This revision is now accepted and ready to land.Apr 17 2015, 3:55 AM
This revision was automatically updated to reflect the committed changes.