44 lines
1.6 KiB
C++
44 lines
1.6 KiB
C++
|
//===-- LoongArchTargetTransformInfo.cpp - LoongArch specific TTI ---------===//
|
||
|
//
|
||
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||
|
// See https://llvm.org/LICENSE.txt for license information.
|
||
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||
|
//
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
/// \file
|
||
|
/// This file implements a TargetTransformInfo analysis pass specific to the
|
||
|
/// LoongArch target machine. It uses the target's detailed information to
|
||
|
/// provide more precise answers to certain TTI queries, while letting the
|
||
|
/// target independent and default TTI implementations handle the rest.
|
||
|
///
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
|
||
|
#include "LoongArchTargetTransformInfo.h"
|
||
|
|
||
|
using namespace llvm;
|
||
|
|
||
|
#define DEBUG_TYPE "loongarchtti"
|
||
|
|
||
|
TypeSize LoongArchTTIImpl::getRegisterBitWidth(
|
||
|
TargetTransformInfo::RegisterKind K) const {
|
||
|
TypeSize DefSize = TargetTransformInfoImplBase::getRegisterBitWidth(K);
|
||
|
switch (K) {
|
||
|
case TargetTransformInfo::RGK_Scalar:
|
||
|
return TypeSize::getFixed(ST->is64Bit() ? 64 : 32);
|
||
|
case TargetTransformInfo::RGK_FixedWidthVector:
|
||
|
if (!ST->hasExpAutoVec())
|
||
|
return DefSize;
|
||
|
if (ST->hasExtLASX())
|
||
|
return TypeSize::getFixed(256);
|
||
|
if (ST->hasExtLSX())
|
||
|
return TypeSize::getFixed(128);
|
||
|
[[fallthrough]];
|
||
|
case TargetTransformInfo::RGK_ScalableVector:
|
||
|
return DefSize;
|
||
|
}
|
||
|
|
||
|
llvm_unreachable("Unsupported register kind");
|
||
|
}
|
||
|
|
||
|
// TODO: Implement more hooks to provide TTI machinery for LoongArch.
|