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-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "SPIRVTargetTransformInfo.h" 10 #include "llvm/IR/IntrinsicsSPIRV.h" 11 12 using namespace llvm; 13 collectFlatAddressOperands(SmallVectorImpl<int> & OpIndexes,Intrinsic::ID IID) const14bool 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 rewriteIntrinsicWithAddressSpace(IntrinsicInst * II,Value * OldV,Value * NewV) const25Value *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 ? NewV 34 : ConstantPointerNull::get( 35 PointerType::get(NewV->getContext(), DstAS)); 36 } 37 default: 38 return nullptr; 39 } 40 } 41