xref: /llvm-project/llvm/lib/Target/DirectX/DirectXTargetTransformInfo.cpp (revision aab25f20f6c06bab7aac6fb83d54705ec4cdfadd)
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