brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 95093d2 Raw
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