74 lines · cpp
1//===- DirectXTargetTransformInfo.cpp - DirectX TTI ---------------*- C++2//-*-===//3//4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5// See https://llvm.org/LICENSE.txt for license information.6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7//8//===----------------------------------------------------------------------===//9///10//===----------------------------------------------------------------------===//11 12#include "DirectXTargetTransformInfo.h"13#include "llvm/IR/Intrinsics.h"14#include "llvm/IR/IntrinsicsDirectX.h"15 16using namespace llvm;17 18bool DirectXTTIImpl::isTargetIntrinsicWithScalarOpAtArg(19 Intrinsic::ID ID, unsigned ScalarOpdIdx) const {20 switch (ID) {21 case Intrinsic::dx_wave_readlane:22 return ScalarOpdIdx == 1;23 default:24 return false;25 }26}27 28bool DirectXTTIImpl::isTargetIntrinsicWithOverloadTypeAtArg(Intrinsic::ID ID,29 int OpdIdx) const {30 switch (ID) {31 case Intrinsic::dx_asdouble:32 case Intrinsic::dx_firstbitlow:33 case Intrinsic::dx_firstbitshigh:34 case Intrinsic::dx_firstbituhigh:35 case Intrinsic::dx_isinf:36 case Intrinsic::dx_isnan:37 case Intrinsic::dx_legacyf16tof32:38 return OpdIdx == 0;39 default:40 return OpdIdx == -1;41 }42}43 44bool DirectXTTIImpl::isTargetIntrinsicTriviallyScalarizable(45 Intrinsic::ID ID) const {46 switch (ID) {47 case Intrinsic::dx_asdouble:48 case Intrinsic::dx_firstbitlow:49 case Intrinsic::dx_firstbitshigh:50 case Intrinsic::dx_firstbituhigh:51 case Intrinsic::dx_frac:52 case Intrinsic::dx_isinf:53 case Intrinsic::dx_isnan:54 case Intrinsic::dx_legacyf16tof32:55 case Intrinsic::dx_rsqrt:56 case Intrinsic::dx_saturate:57 case Intrinsic::dx_splitdouble:58 case Intrinsic::dx_wave_readlane:59 case Intrinsic::dx_wave_reduce_max:60 case Intrinsic::dx_wave_reduce_min:61 case Intrinsic::dx_wave_reduce_sum:62 case Intrinsic::dx_wave_reduce_umax:63 case Intrinsic::dx_wave_reduce_umin:64 case Intrinsic::dx_wave_reduce_usum:65 case Intrinsic::dx_imad:66 case Intrinsic::dx_umad:67 case Intrinsic::dx_ddx_coarse:68 case Intrinsic::dx_ddy_coarse:69 return true;70 default:71 return false;72 }73}74