[PATCH] Adds Cortex-A53 and Cortex-A57 subtargets.

Andrew Trick atrick at apple.com
Tue Feb 25 14:29:35 PST 2014


On Feb 24, 2014, at 1:34 PM, Dave Estes <cestes at codeaurora.org> wrote:

>> Thanks for working on this. LGTM.
>> 
>> Tim and Jiangning, are you ok with this change?
> 
> Thanks a bunch for the feedback, Ana.
> 
> I would really appreciate some additional feedback from Andy, Tim, or anyone else with experience in the new Machine Model. Cortex-A53 is mostly in-order, so the model I developed is somewhat trivial. However, I feel like I need confirmation of my approach of this rudimentary first implementation before I start modeling any of the more sophisticated aspects of the processor: forwarding, issue-width restrictions, mid-pipe hazards in the Neon/FP Mult/Div/MAC/Sqrt pipeline, etc.

First off, in case it isn't clear, the machine model will only be used by the MachineScheduler. To enable the MachineScheduler pass your target must implement TargetSubtargetInfo::enableMachineScheduler.

I can't comment on these processors at all, so I'll just give some general advice.

The default is MicroOpBufferSize=0, which is suitable for in-order execution in that it prioritizes latency hiding. Setting it to 1 makes it less strict by allowing latency to be balanced with other heuristics:

def CortexA53Model {
...
  let MicroOpBufferSize = 1
}

To model in-order resource conflicts, if you care about that, you actually need to explicitly set BufferSize=0 in the processor resource def:

def A53UnitXX  : ProcResource<1> { let BufferSize = 0; }

That prevents multiple instructions sharing the same resource from being scheduled in the same cycle.

-Andy

> 
> -- 
> Employee of Qualcomm Innovation Center, Inc.
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation




More information about the llvm-commits mailing list