Lines Matching defs:Imag
148 : Operation(Op), Real(R), Imag(I) {}
159 Value *Imag;
197 OS << " Imag: ";
198 PrintValue(Imag);
311 CachedResult[{Node->Real, Node->Imag}] = Node;
326 NodePtr identifyPartialMul(Instruction *Real, Instruction *Imag);
342 NodePtr identifyAdd(Instruction *Real, Instruction *Imag);
343 NodePtr identifySymmetricOperation(Instruction *Real, Instruction *Imag);
369 /// Go through pairs of multiplication (one Real and one Imag) and find all
393 NodePtr identifyDeinterleave(Instruction *Real, Instruction *Imag);
399 NodePtr identifySplat(Value *Real, Value *Imag);
401 NodePtr identifyPHINode(Instruction *Real, Instruction *Imag);
405 NodePtr identifySelectNode(Instruction *Real, Instruction *Imag);
566 Instruction *Real, Instruction *Imag,
568 LLVM_DEBUG(dbgs() << "identifyNodeWithImplicitAdd " << *Real << " / " << *Imag
571 if (!Real->hasOneUse() || !Imag->hasOneUse()) {
578 (Imag->getOpcode() != Instruction::FMul &&
579 Imag->getOpcode() != Instruction::Mul)) {
587 Value *I0 = Imag->getOperand(0);
588 Value *I1 = Imag->getOperand(1);
660 ComplexDeinterleavingOperation::CMulPartial, Real, Imag);
669 Instruction *Imag) {
670 LLVM_DEBUG(dbgs() << "identifyPartialMul " << *Real << " / " << *Imag
680 if (IsAdd(Real->getOpcode()) && IsAdd(Imag->getOpcode()))
682 else if (IsSub(Real->getOpcode()) && IsAdd(Imag->getOpcode()))
684 else if (IsSub(Real->getOpcode()) && IsSub(Imag->getOpcode()))
686 else if (IsAdd(Real->getOpcode()) && IsSub(Imag->getOpcode()))
695 !Imag->getFastMathFlags().allowContract())) {
704 Value *CI = Imag->getOperand(0);
705 Instruction *ImagMulI = dyn_cast<Instruction>(Imag->getOperand(1));
777 ComplexDeinterleavingOperation::CMulPartial, Real, Imag);
786 ComplexDeinterleavingGraph::identifyAdd(Instruction *Real, Instruction *Imag) {
787 LLVM_DEBUG(dbgs() << "identifyAdd " << *Real << " / " << *Imag << "\n");
792 Imag->getOpcode() == Instruction::FAdd) ||
794 Imag->getOpcode() == Instruction::Add))
797 Imag->getOpcode() == Instruction::FSub) ||
799 Imag->getOpcode() == Instruction::Sub))
808 auto *AI = dyn_cast<Instruction>(Imag->getOperand(0));
809 auto *BR = dyn_cast<Instruction>(Imag->getOperand(1));
828 prepareCompositeNode(ComplexDeinterleavingOperation::CAdd, Real, Imag);
869 Instruction *Imag) {
870 if (Real->getOpcode() != Imag->getOpcode())
874 !isInstructionPotentiallySymmetric(Imag))
878 auto *I0 = Imag->getOperand(0);
887 auto *I1 = Imag->getOperand(1);
894 Real->getFastMathFlags() != Imag->getFastMathFlags())
898 Real, Imag);
1072 auto *Imag = dyn_cast<Instruction>(I);
1073 if (!Real || !Imag)
1076 if (NodePtr CN = identifyDeinterleave(Real, Imag))
1079 if (NodePtr CN = identifyPHINode(Real, Imag))
1082 if (NodePtr CN = identifySelectNode(Real, Imag))
1093 if (HasCMulSupport && isInstructionPairMul(Real, Imag)) {
1094 if (NodePtr CN = identifyPartialMul(Real, Imag))
1098 if (HasCAddSupport && isInstructionPairAdd(Real, Imag)) {
1099 if (NodePtr CN = identifyAdd(Real, Imag))
1104 if (NodePtr CN = identifyReassocNodes(Real, Imag))
1108 if (NodePtr CN = identifySymmetricOperation(Real, Imag))
1118 Instruction *Imag) {
1126 !IsOperationSupported(Imag->getOpcode()))
1131 if (Real->getFastMathFlags() != Imag->getFastMathFlags()) {
1234 !Collect(Imag, ImagMuls, ImagAddends))
1257 // Set the Real and Imag fields of the final node and submit it
1259 FinalNode->Imag = Imag;
1269 const Product &Imag) -> Value * {
1270 if (Real.Multiplicand == Imag.Multiplicand ||
1271 Real.Multiplicand == Imag.Multiplier)
1274 if (Real.Multiplier == Imag.Multiplicand ||
1275 Real.Multiplier == Imag.Multiplier)
1387 // Rotation | Real | Imag |
1425 dbgs().indent(4) << "Y: " << *NodeA->Imag << "\n";
1427 dbgs().indent(4) << "V: " << *NodeB->Imag << "\n";
1458 dbgs() << "Unprocessed products (Imag):\n";
1587 // CompositeNode we should choose only one either Real or Imag instruction to
1596 // Find out which part, Real or Imag, comes later, and only if we come to
1599 auto *I = RootNode->Imag ? cast<Instruction>(RootNode->Imag) : nullptr;
1698 auto *Imag = OperationInstruction[j];
1699 if (Real->getType() != Imag->getType())
1703 ImagPHI = ReductionInfo[Imag].first;
1705 auto Node = identifyNode(Real, Imag);
1707 std::swap(Real, Imag);
1709 Node = identifyNode(Real, Imag);
1717 << *Real << " / " << *Imag << "\n");
1721 ComplexDeinterleavingOperation::ReductionOperation, Real, Imag);
1724 RootToNode[Imag] = RootNode;
1855 auto *Imag = dyn_cast<Instruction>(Intrinsic->getOperand(1));
1856 if (!Real || !Imag)
1859 return identifyNode(Real, Imag);
1872 Instruction *Imag;
1873 if (!match(RootI, m_Shuffle(m_Instruction(Real), m_Instruction(Imag))))
1876 return identifyNode(Real, Imag);
1881 Instruction *Imag) {
1885 match(Imag, m_ExtractValue<1>(m_Specific(I))) &&
1889 llvm::ComplexDeinterleavingOperation::Deinterleave, Real, Imag);
1892 FinalInstructions.insert(Imag);
1897 auto *ImagShuffle = dyn_cast<ShuffleVectorInst>(Imag);
2024 auto *Imag = dyn_cast<Instruction>(I);
2025 if ((!Real && Imag) || (Real && !Imag))
2028 if (Real && Imag) {
2030 if (Real->getParent() != Imag->getParent())
2034 FinalInstructions.insert(Imag);
2043 Instruction *Imag) {
2044 if (Real != RealPHI || (ImagPHI && Imag != ImagPHI))
2049 ComplexDeinterleavingOperation::ReductionPHI, Real, Imag);
2055 Instruction *Imag) {
2057 auto *SelectImag = dyn_cast<SelectInst>(Imag);
2065 !match(Imag, m_Select(m_Instruction(MaskB), m_Instruction(AI),
2084 ComplexDeinterleavingOperation::ReductionSelect, Real, Imag);
2176 auto *I = dyn_cast<Instruction>(Node->Imag);
2182 NewTy, {Node->Real, Node->Imag});
2185 Intrinsic::vector_interleave2, NewTy, {Node->Real, Node->Imag});
2210 auto *MaskImag = cast<Instruction>(Node->Imag)->getOperand(0);
2263 auto *Imag = cast<Instruction>(Node->Imag);
2265 auto *OldPHIImag = ReductionInfo[Imag].first;
2285 auto *FinalReductionImag = ReductionInfo[Imag].second;
2298 FinalReductionImag->replaceUsesOfWith(Imag, NewImag);
2316 auto *RootImag = cast<Instruction>(RootNode->Imag);