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