TLI vs. TTI

Hi,

I noticed many functions in the TargetTransformInfo interface are duplicates of those already in TargetLowering (e.g. isTruncateFree). Is the expectation really that targets will reimplement the same functions twice? AArch64’s TTI uses some TLI calls in some of its implementations, but why doesn’t the base TargetTransformInfo call the TargetLowering versions by default?

- Matt

From: "Matt Arsenault" <arsenm2@gmail.com>
To: "LLVM Developers Mailing List" <llvmdev@cs.uiuc.edu>
Sent: Friday, July 18, 2014 1:15:14 PM
Subject: [LLVMdev] TLI vs. TTI

Hi,

I noticed many functions in the TargetTransformInfo interface are
duplicates of those already in TargetLowering (e.g. isTruncateFree).
Is the expectation really that targets will reimplement the same
functions twice? AArch64’s TTI uses some TLI calls in some of its
implementations, but why doesn’t the base TargetTransformInfo call
the TargetLowering versions by default?

Are the implementations different? The default TTI implementation does use the relevant TLI function:

bool BasicTTI::isTruncateFree(Type *Ty1, Type *Ty2) const {
  return getTLI()->isTruncateFree(Ty1, Ty2);
}

-Hal

Oh, I’ve been looking in TargetTransformInfo.cpp at what I thought were the default implementations, but these are apparently for “NoTTI”. The ones in BasicTTI make much more sense