//===-- 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.