//===- SPIRVISelLowering.cpp - SPIR-V DAG Lowering Impl ---------*- C++ -*-===// // // 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 // //===----------------------------------------------------------------------===// // // This file implements the SPIRVTargetLowering class. // //===----------------------------------------------------------------------===// #include "SPIRVISelLowering.h" #include "SPIRV.h" #define DEBUG_TYPE "spirv-lower" using namespace llvm; unsigned SPIRVTargetLowering::getNumRegistersForCallingConv( LLVMContext &Context, CallingConv::ID CC, EVT VT) const { // This code avoids CallLowering fail inside getVectorTypeBreakdown // on v3i1 arguments. Maybe we need to return 1 for all types. // TODO: remove it once this case is supported by the default implementation. if (VT.isVector() && VT.getVectorNumElements() == 3 && (VT.getVectorElementType() == MVT::i1 || VT.getVectorElementType() == MVT::i8)) return 1; return getNumRegisters(Context, VT); } MVT SPIRVTargetLowering::getRegisterTypeForCallingConv(LLVMContext &Context, CallingConv::ID CC, EVT VT) const { // This code avoids CallLowering fail inside getVectorTypeBreakdown // on v3i1 arguments. Maybe we need to return i32 for all types. // TODO: remove it once this case is supported by the default implementation. if (VT.isVector() && VT.getVectorNumElements() == 3) { if (VT.getVectorElementType() == MVT::i1) return MVT::v4i1; else if (VT.getVectorElementType() == MVT::i8) return MVT::v4i8; } return getRegisterType(Context, VT); }