<div>Hi everyone</div><div><br></div><div>I'm fairly new with LLVM and I've been searching around but couldn't find info on this subject. </div><div>I started working on a target for a new cpu and I realizing my initial simple understanding of instruction itineraries may be completely off.</div>

<div>I'm trying to model a CPU that has a latency of 2 cycles for multiplications fully pipelined (so it can start a new one after one cycle)</div><div>First of all, is there a document that describes the instruction itinerary model in some detail ?</div>

<div><br></div><div>For example looking at MBlaze target MBlaeSchedule.td I can see something like</div><div><br></div><div>MblazeSchedule.td</div><div>...</div><div><div>def IIImul             : InstrItinClass;</div></div>

<div>...</div><div>  InstrItinData<IIImul             , [InstrStage<17, [IMULDIV]>]>,</div><div><br></div><div><br></div><div>Does that mean Mul's are expected to have a latency of 17 clks ? Mips target has something similar. </div>

<div>In Mblaze case I can see the result being used the very next cycle </div><div><br></div><div><div>        mul       <b>r3</b>, r6, r5</div><div>        addik     r3,<b> r3</b>, 4</div></div><div><br></div><div>similarly for my target (instead of 17 I'm specifying 2 above) and for Mips I get the same result. Same for loads where I'm also specifying a larger latency</div>

<div><br></div><div>What would be the right way to specify a latency of 2 with 1 clk initiation interval for instance</div><div><br></div><div>Thanks</div><div>Miguel</div>