//===- SPIRVTargetTransformInfo.cpp - SPIR-V specific TTI -------*- 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 // //===----------------------------------------------------------------------===// #include "SPIRVTargetTransformInfo.h" #include "llvm/IR/IntrinsicsSPIRV.h" using namespace llvm; bool llvm::SPIRVTTIImpl::collectFlatAddressOperands( SmallVectorImpl &OpIndexes, Intrinsic::ID IID) const { switch (IID) { case Intrinsic::spv_generic_cast_to_ptr_explicit: OpIndexes.push_back(0); return true; default: return false; } } Value *llvm::SPIRVTTIImpl::rewriteIntrinsicWithAddressSpace(IntrinsicInst *II, Value *OldV, Value *NewV) const { auto IntrID = II->getIntrinsicID(); switch (IntrID) { case Intrinsic::spv_generic_cast_to_ptr_explicit: { unsigned NewAS = NewV->getType()->getPointerAddressSpace(); unsigned DstAS = II->getType()->getPointerAddressSpace(); return NewAS == DstAS ? NewV : ConstantPointerNull::get( PointerType::get(NewV->getContext(), DstAS)); } default: return nullptr; } }