10f97b482SFarzon Lotfi //===- DirectXTargetTransformInfo.cpp - DirectX TTI ---------------*- C++ 20f97b482SFarzon Lotfi //-*-===// 30f97b482SFarzon Lotfi // 40f97b482SFarzon Lotfi // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 50f97b482SFarzon Lotfi // See https://llvm.org/LICENSE.txt for license information. 60f97b482SFarzon Lotfi // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 70f97b482SFarzon Lotfi // 80f97b482SFarzon Lotfi //===----------------------------------------------------------------------===// 90f97b482SFarzon Lotfi /// 100f97b482SFarzon Lotfi //===----------------------------------------------------------------------===// 110f97b482SFarzon Lotfi 120f97b482SFarzon Lotfi #include "DirectXTargetTransformInfo.h" 130f97b482SFarzon Lotfi #include "llvm/IR/Intrinsics.h" 140f97b482SFarzon Lotfi #include "llvm/IR/IntrinsicsDirectX.h" 150f97b482SFarzon Lotfi 1663a0a81eSFarzon Lotfi using namespace llvm; 1763a0a81eSFarzon Lotfi 1863a0a81eSFarzon Lotfi bool DirectXTTIImpl::isTargetIntrinsicWithScalarOpAtArg(Intrinsic::ID ID, 1963a0a81eSFarzon Lotfi unsigned ScalarOpdIdx) { 2063a0a81eSFarzon Lotfi switch (ID) { 21835feaafSFinn Plummer case Intrinsic::dx_wave_readlane: 22835feaafSFinn Plummer return ScalarOpdIdx == 1; 2363a0a81eSFarzon Lotfi default: 2463a0a81eSFarzon Lotfi return false; 2563a0a81eSFarzon Lotfi } 2663a0a81eSFarzon Lotfi } 2763a0a81eSFarzon Lotfi 2845c01e8aSFinn Plummer bool DirectXTTIImpl::isTargetIntrinsicWithOverloadTypeAtArg(Intrinsic::ID ID, 2945c01e8aSFinn Plummer int OpdIdx) { 308663b877SFinn Plummer switch (ID) { 31a5f501e3SFinn Plummer case Intrinsic::dx_asdouble: 3245c01e8aSFinn Plummer return OpdIdx == 0; 338663b877SFinn Plummer default: 3445c01e8aSFinn Plummer return OpdIdx == -1; 358663b877SFinn Plummer } 368663b877SFinn Plummer } 378663b877SFinn Plummer 3863a0a81eSFarzon Lotfi bool DirectXTTIImpl::isTargetIntrinsicTriviallyScalarizable( 390f97b482SFarzon Lotfi Intrinsic::ID ID) const { 400f97b482SFarzon Lotfi switch (ID) { 410f97b482SFarzon Lotfi case Intrinsic::dx_frac: 420f97b482SFarzon Lotfi case Intrinsic::dx_rsqrt: 43*aab25f20SAdam Yang case Intrinsic::dx_wave_reduce_max: 44*aab25f20SAdam Yang case Intrinsic::dx_wave_reduce_umax: 454446a984SAdam Yang case Intrinsic::dx_wave_reduce_sum: 464446a984SAdam Yang case Intrinsic::dx_wave_reduce_usum: 47835feaafSFinn Plummer case Intrinsic::dx_wave_readlane: 48a5f501e3SFinn Plummer case Intrinsic::dx_asdouble: 49dcbf2c2cSFarzon Lotfi case Intrinsic::dx_splitdouble: 50fb90733eSSarah Spall case Intrinsic::dx_firstbituhigh: 51fb90733eSSarah Spall case Intrinsic::dx_firstbitshigh: 524f48abffSAshley Coleman case Intrinsic::dx_firstbitlow: 530f97b482SFarzon Lotfi return true; 540f97b482SFarzon Lotfi default: 550f97b482SFarzon Lotfi return false; 560f97b482SFarzon Lotfi } 570f97b482SFarzon Lotfi } 58