Lines Matching defs:Imag
142 : Operation(Op), Real(R), Imag(I) {}
152 Value *Imag;
186 OS << " Imag: ";
187 PrintValue(Imag);
297 if (Node->Real && Node->Imag)
298 CachedResult[{Node->Real, Node->Imag}] = Node;
313 NodePtr identifyPartialMul(Instruction *Real, Instruction *Imag);
329 NodePtr identifyAdd(Instruction *Real, Instruction *Imag);
330 NodePtr identifySymmetricOperation(Instruction *Real, Instruction *Imag);
354 /// Go through pairs of multiplication (one Real and one Imag) and find all
378 NodePtr identifyDeinterleave(Instruction *Real, Instruction *Imag);
384 NodePtr identifySplat(Value *Real, Value *Imag);
386 NodePtr identifyPHINode(Instruction *Real, Instruction *Imag);
390 NodePtr identifySelectNode(Instruction *Real, Instruction *Imag);
550 Instruction *Real, Instruction *Imag,
552 LLVM_DEBUG(dbgs() << "identifyNodeWithImplicitAdd " << *Real << " / " << *Imag
555 if (!Real->hasOneUse() || !Imag->hasOneUse()) {
562 (Imag->getOpcode() != Instruction::FMul &&
563 Imag->getOpcode() != Instruction::Mul)) {
571 Value *I0 = Imag->getOperand(0);
572 Value *I1 = Imag->getOperand(1);
644 ComplexDeinterleavingOperation::CMulPartial, Real, Imag);
653 Instruction *Imag) {
654 LLVM_DEBUG(dbgs() << "identifyPartialMul " << *Real << " / " << *Imag
664 if (IsAdd(Real->getOpcode()) && IsAdd(Imag->getOpcode()))
666 else if (IsSub(Real->getOpcode()) && IsAdd(Imag->getOpcode()))
668 else if (IsSub(Real->getOpcode()) && IsSub(Imag->getOpcode()))
670 else if (IsAdd(Real->getOpcode()) && IsSub(Imag->getOpcode()))
679 !Imag->getFastMathFlags().allowContract())) {
688 Value *CI = Imag->getOperand(0);
689 Instruction *ImagMulI = dyn_cast<Instruction>(Imag->getOperand(1));
761 ComplexDeinterleavingOperation::CMulPartial, Real, Imag);
770 ComplexDeinterleavingGraph::identifyAdd(Instruction *Real, Instruction *Imag) {
771 LLVM_DEBUG(dbgs() << "identifyAdd " << *Real << " / " << *Imag << "\n");
776 Imag->getOpcode() == Instruction::FAdd) ||
778 Imag->getOpcode() == Instruction::Add))
781 Imag->getOpcode() == Instruction::FSub) ||
783 Imag->getOpcode() == Instruction::Sub))
792 auto *AI = dyn_cast<Instruction>(Imag->getOperand(0));
793 auto *BR = dyn_cast<Instruction>(Imag->getOperand(1));
812 prepareCompositeNode(ComplexDeinterleavingOperation::CAdd, Real, Imag);
853 Instruction *Imag) {
854 if (Real->getOpcode() != Imag->getOpcode())
858 !isInstructionPotentiallySymmetric(Imag))
862 auto *I0 = Imag->getOperand(0);
871 auto *I1 = Imag->getOperand(1);
878 Real->getFastMathFlags() != Imag->getFastMathFlags())
882 Real, Imag);
910 auto *Imag = dyn_cast<Instruction>(I);
911 if (!Real || !Imag)
914 if (NodePtr CN = identifyDeinterleave(Real, Imag))
917 if (NodePtr CN = identifyPHINode(Real, Imag))
920 if (NodePtr CN = identifySelectNode(Real, Imag))
931 if (HasCMulSupport && isInstructionPairMul(Real, Imag)) {
932 if (NodePtr CN = identifyPartialMul(Real, Imag))
936 if (HasCAddSupport && isInstructionPairAdd(Real, Imag)) {
937 if (NodePtr CN = identifyAdd(Real, Imag))
942 if (NodePtr CN = identifyReassocNodes(Real, Imag))
946 if (NodePtr CN = identifySymmetricOperation(Real, Imag))
956 Instruction *Imag) {
964 !IsOperationSupported(Imag->getOpcode()))
969 if (Real->getFastMathFlags() != Imag->getFastMathFlags()) {
1072 !Collect(Imag, ImagMuls, ImagAddends))
1095 // Set the Real and Imag fields of the final node and submit it
1097 FinalNode->Imag = Imag;
1107 const Product &Imag) -> Value * {
1108 if (Real.Multiplicand == Imag.Multiplicand ||
1109 Real.Multiplicand == Imag.Multiplier)
1112 if (Real.Multiplier == Imag.Multiplicand ||
1113 Real.Multiplier == Imag.Multiplier)
1225 // Rotation | Real | Imag |
1263 dbgs().indent(4) << "Y: " << *NodeA->Imag << "\n";
1265 dbgs().indent(4) << "V: " << *NodeB->Imag << "\n";
1296 dbgs() << "Unprocessed products (Imag):\n";
1425 // CompositeNode we should choose only one either Real or Imag instruction to
1432 // Find out which part, Real or Imag, comes later, and only if we come to
1435 auto *I = cast<Instruction>(RootNode->Imag);
1529 auto *Imag = OperationInstruction[j];
1530 if (Real->getType() != Imag->getType())
1534 ImagPHI = ReductionInfo[Imag].first;
1536 auto Node = identifyNode(Real, Imag);
1538 std::swap(Real, Imag);
1540 Node = identifyNode(Real, Imag);
1548 << *Real << " / " << *Imag << "\n");
1552 ComplexDeinterleavingOperation::ReductionOperation, Real, Imag);
1555 RootToNode[Imag] = RootNode;
1646 auto *Imag = dyn_cast<Instruction>(Intrinsic->getOperand(1));
1647 if (!Real || !Imag)
1650 return identifyNode(Real, Imag);
1663 Instruction *Imag;
1664 if (!match(RootI, m_Shuffle(m_Instruction(Real), m_Instruction(Imag))))
1667 return identifyNode(Real, Imag);
1672 Instruction *Imag) {
1676 match(Imag, m_ExtractValue<1>(m_Specific(I))) &&
1680 llvm::ComplexDeinterleavingOperation::Deinterleave, Real, Imag);
1683 FinalInstructions.insert(Imag);
1688 auto *ImagShuffle = dyn_cast<ShuffleVectorInst>(Imag);
1815 auto *Imag = dyn_cast<Instruction>(I);
1816 if ((!Real && Imag) || (Real && !Imag))
1819 if (Real && Imag) {
1821 if (Real->getParent() != Imag->getParent())
1825 FinalInstructions.insert(Imag);
1834 Instruction *Imag) {
1835 if (Real != RealPHI || Imag != ImagPHI)
1840 ComplexDeinterleavingOperation::ReductionPHI, Real, Imag);
1846 Instruction *Imag) {
1848 auto *SelectImag = dyn_cast<SelectInst>(Imag);
1856 !match(Imag, m_Select(m_Instruction(MaskB), m_Instruction(AI),
1875 ComplexDeinterleavingOperation::ReductionSelect, Real, Imag);
1957 auto *I = dyn_cast<Instruction>(Node->Imag);
1963 NewTy, {Node->Real, Node->Imag});
1966 Intrinsic::vector_interleave2, NewTy, {Node->Real, Node->Imag});
1986 auto *MaskImag = cast<Instruction>(Node->Imag)->getOperand(0);
2007 auto *Imag = cast<Instruction>(Node->Imag);
2009 auto *OldPHIImag = ReductionInfo[Imag].first;
2029 auto *FinalReductionImag = ReductionInfo[Imag].second;
2042 FinalReductionImag->replaceUsesOfWith(Imag, NewImag);
2060 auto *RootImag = cast<Instruction>(RootNode->Imag);