41 lines · cpp
1//===- SPIRVTargetTransformInfo.cpp - SPIR-V specific TTI -------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "SPIRVTargetTransformInfo.h"10#include "llvm/IR/IntrinsicsSPIRV.h"11 12using namespace llvm;13 14bool llvm::SPIRVTTIImpl::collectFlatAddressOperands(15 SmallVectorImpl<int> &OpIndexes, Intrinsic::ID IID) const {16 switch (IID) {17 case Intrinsic::spv_generic_cast_to_ptr_explicit:18 OpIndexes.push_back(0);19 return true;20 default:21 return false;22 }23}24 25Value *llvm::SPIRVTTIImpl::rewriteIntrinsicWithAddressSpace(IntrinsicInst *II,26 Value *OldV,27 Value *NewV) const {28 auto IntrID = II->getIntrinsicID();29 switch (IntrID) {30 case Intrinsic::spv_generic_cast_to_ptr_explicit: {31 unsigned NewAS = NewV->getType()->getPointerAddressSpace();32 unsigned DstAS = II->getType()->getPointerAddressSpace();33 return NewAS == DstAS ? NewV34 : ConstantPointerNull::get(35 PointerType::get(NewV->getContext(), DstAS));36 }37 default:38 return nullptr;39 }40}41