[llvm-dev] [GSoC 2016] Parameters of a target architecture

Tobias Grosser via llvm-dev llvm-dev at lists.llvm.org
Fri Jun 3 04:51:03 PDT 2016


On 06/03/2016 01:41 PM, Michael Kruse wrote:
> 2016-06-02 13:57 GMT+02:00 Roman Gareev via llvm-dev <llvm-dev at lists.llvm.org>:
>> 1. Size of double-precision floating-point number.
> 
> By IEEE 754, its always 8 bytes.
> 
> Generally, use DataLayout::getTypeAllocSize/getTypeStoreSize to get a
> type's size.
> 
> 
>> 2. Number of double-precision floating-point numbers that can be hold
>> by a vector register.
> 
> TargetTransformInfo::getRegisterBitWidth (divided by 8 if double)
> 
> 
>> 3. Throughput of vector instructions per clock cycle.
> 
> TargetTransformInfo::getArithmeticInstrCost
> 
> See LoopVectorizationCostModel::getInstructionCost for how to use it.
> 
> 
>> 4. Latency of instructions (i.e., the minimum number of cycles between
>> the issuance of two dependent consecutive instructions).
> 
> I think latency and throughput cannot be queried separately. They are
> combined as 'cost'.
> 
> 
>> 5. Paramaters of cache levels (size of cache lines,  associativity
>> degrees, sizes).
> 
> TargetTransformInfo::getCacheLineSize
> 
> That is, available for one level (probably L1 Data Cache) only. I
> think the X86 backend doesn't even define it (returns 0)
> 
> 
> For the information that is missing, I suggest to use command line
> options to get the information directly from the user. In the long
> term, we could add it TargetTransformInfo as well.

Perfect. That's what I would suggest as well.

Best,
Tobias


More information about the llvm-dev mailing list