[LLVMdev] Artificial deps and stores

Andrew Trick atrick at apple.com
Fri Jan 17 16:03:46 PST 2014

On Jan 17, 2014, at 3:54 PM, Hal Finkel <hfinkel at anl.gov> wrote:

> Andy, et al.,
> In ScheduleDAGInstrs::buildSchedGraph, the code for handling stores has this:
>      if (!ExitSU.isPred(SU))
>        // Push store's up a bit to avoid them getting in between cmp
>        // and branches.
>        ExitSU.addPred(SDep(SU, SDep::Artificial));
> This code does not seem to be in any way specific to compares; and in any case, at least on the PPC A2, scheduling stores in between the compare and the branch would not be a bad thing (because the core is in order, and the compare has a 2-cycle latency, so if there is nothing else to do, a store would not be a bad thing to put there).
> Can you explain the motivation for this (why or for what it is bad), and what else it might do (aside from the commented cmp/branch pairing)? I'm wondering if we should make this target dependent.

I don’t agree with the existing comment. It’s possible that somewhere, maybe in target specific code, we make use of the extra store->exit edge, but I can’t remember any reason for it now. You could

(a) Just nuke it and verify PPC and x86 benchmarks. If all looks good, then I’ll confirm by running arm.

(b) Make it target specific and add a FIXME to remove after performance analysis


> Thanks again,
> Hal
> -- 
> Hal Finkel
> Assistant Computational Scientist
> Leadership Computing Facility
> Argonne National Laboratory

More information about the llvm-dev mailing list