//===-- 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 { switch (K) { case TargetTransformInfo::RGK_Scalar: return TypeSize::getFixed(ST->is64Bit() ? 64 : 32); case TargetTransformInfo::RGK_FixedWidthVector: if (ST->hasExtLASX() && ST->hasExpAutoVec()) return TypeSize::getFixed(256); if (ST->hasExtLSX() && ST->hasExpAutoVec()) return TypeSize::getFixed(128); return TypeSize::getFixed(0); case TargetTransformInfo::RGK_ScalableVector: return TypeSize::getScalable(0); } llvm_unreachable("Unsupported register kind"); } // TODO: Implement more hooks to provide TTI machinery for LoongArch.