Lines Matching +full:inter +full:- +full:ic
1 //===-- NVPTXTargetTransformInfo.cpp - NVPTX specific TTI -----------------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
26 switch (II->getIntrinsicID()) { in readsThreadIndex()
36 return II->getIntrinsicID() == Intrinsic::nvvm_read_ptx_sreg_laneid; in readsLaneId()
41 switch (II->getIntrinsicID()) { in isNVVMAtomic()
73 // Without inter-procedural analysis, we conservatively assume that arguments in isSourceOfDivergence()
76 return !isKernelFunction(*Arg->getParent()); in isSourceOfDivergence()
82 unsigned AS = LI->getPointerAddressSpace(); in isSourceOfDivergence()
94 if (I->isAtomic()) in isSourceOfDivergence()
107 // inter-procedural analysis. in isSourceOfDivergence()
115 // Convert NVVM intrinsics to target-generic LLVM code where possible.
116 static Instruction *simplifyNvvmIntrinsic(IntrinsicInst *II, InstCombiner &IC) { in simplifyNvvmIntrinsic() argument
122 // * ad-hoc LLVM IR for the particular operation. in simplifyNvvmIntrinsic()
125 // flush-denormals-to-zero (ftz) setting is true/false, whereas other in simplifyNvvmIntrinsic()
132 // Classes of NVVM intrinsics that can't be replaced one-to-one with a in simplifyNvvmIntrinsic()
133 // target-generic intrinsic, cast op, or binary op but that we can nonetheless in simplifyNvvmIntrinsic()
139 // SimplifyAction is a poor-man's variant (plus an additional flag) that in simplifyNvvmIntrinsic()
140 // represents how to replace an NVVM intrinsic with target-generic LLVM IR. in simplifyNvvmIntrinsic()
150 // type (denormal-fp-math vs denormal-fp-math-f32), take note of halfs. in simplifyNvvmIntrinsic()
171 // IntrinsicInstr with target-generic LLVM IR. in simplifyNvvmIntrinsic()
172 const SimplifyAction Action = [II]() -> SimplifyAction { in simplifyNvvmIntrinsic()
173 switch (II->getIntrinsicID()) { in simplifyNvvmIntrinsic()
267 // ftz version, and foo_f is the non-ftz version. But nvvm_sqrt_f adopts in simplifyNvvmIntrinsic()
268 // the ftz-ness of the surrounding code. sqrt_rn_f and sqrt_rn_ftz_f are in simplifyNvvmIntrinsic()
269 // the versions with explicit ftz-ness. in simplifyNvvmIntrinsic()
280 // Note that llvm's target-generic conversion operators correspond to the rz in simplifyNvvmIntrinsic()
319 // - nvvm_cos_approx_{f,ftz_f} in simplifyNvvmIntrinsic()
320 // - nvvm_ex2_approx_{d,f,ftz_f} in simplifyNvvmIntrinsic()
321 // - nvvm_lg2_approx_{d,f,ftz_f} in simplifyNvvmIntrinsic()
322 // - nvvm_sin_approx_{f,ftz_f} in simplifyNvvmIntrinsic()
323 // - nvvm_sqrt_approx_{f,ftz_f} in simplifyNvvmIntrinsic()
324 // - nvvm_rsqrt_approx_{d,f,ftz_f} in simplifyNvvmIntrinsic()
325 // - nvvm_div_approx_{ftz_d,ftz_f,f} in simplifyNvvmIntrinsic()
326 // - nvvm_rcp_approx_ftz_d in simplifyNvvmIntrinsic()
347 DenormalMode Mode = II->getFunction()->getDenormalMode( in simplifyNvvmIntrinsic()
355 // Simplify to target-generic intrinsic. in simplifyNvvmIntrinsic()
357 SmallVector<Value *, 4> Args(II->args()); in simplifyNvvmIntrinsic()
358 // All the target-generic intrinsics currently of interest to us have one in simplifyNvvmIntrinsic()
360 Type *Tys[] = {II->getArgOperand(0)->getType()}; in simplifyNvvmIntrinsic()
362 Intrinsic::getDeclaration(II->getModule(), *Action.IID, Tys), Args); in simplifyNvvmIntrinsic()
365 // Simplify to target-generic binary op. in simplifyNvvmIntrinsic()
367 return BinaryOperator::Create(*Action.BinaryOp, II->getArgOperand(0), in simplifyNvvmIntrinsic()
368 II->getArgOperand(1), II->getName()); in simplifyNvvmIntrinsic()
370 // Simplify to target-generic cast op. in simplifyNvvmIntrinsic()
372 return CastInst::Create(*Action.CastOp, II->getArgOperand(0), II->getType(), in simplifyNvvmIntrinsic()
373 II->getName()); in simplifyNvvmIntrinsic()
383 Instruction::FDiv, ConstantFP::get(II->getArgOperand(0)->getType(), 1), in simplifyNvvmIntrinsic()
384 II->getArgOperand(0), II->getName()); in simplifyNvvmIntrinsic()
390 NVPTXTTIImpl::instCombineIntrinsic(InstCombiner &IC, IntrinsicInst &II) const { in instCombineIntrinsic() argument
391 if (Instruction *I = simplifyNvvmIntrinsic(&II, IC)) { in instCombineIntrinsic()
405 int ISD = TLI->InstructionOpcodeToISD(Opcode); in getArithmeticInstrCost()