Lines Matching refs:RxSBG
277 bool refineRxSBGMask(RxSBGOperands &RxSBG, uint64_t Mask) const;
281 bool expandRxSBG(RxSBGOperands &RxSBG) const;
777 bool SystemZDAGToDAGISel::refineRxSBGMask(RxSBGOperands &RxSBG, in refineRxSBGMask() argument
780 if (RxSBG.Rotate != 0) in refineRxSBGMask()
781 Mask = (Mask << RxSBG.Rotate) | (Mask >> (64 - RxSBG.Rotate)); in refineRxSBGMask()
782 Mask &= RxSBG.Mask; in refineRxSBGMask()
783 if (TII->isRxSBGMask(Mask, RxSBG.BitSize, RxSBG.Start, RxSBG.End)) { in refineRxSBGMask()
784 RxSBG.Mask = Mask; in refineRxSBGMask()
791 static bool maskMatters(RxSBGOperands &RxSBG, uint64_t Mask) { in maskMatters() argument
793 if (RxSBG.Rotate != 0) in maskMatters()
794 Mask = ((Mask << RxSBG.Rotate) | (Mask >> (64 - RxSBG.Rotate))); in maskMatters()
795 return (Mask & RxSBG.Mask) != 0; in maskMatters()
798 bool SystemZDAGToDAGISel::expandRxSBG(RxSBGOperands &RxSBG) const { in expandRxSBG()
799 SDValue N = RxSBG.Input; in expandRxSBG()
803 if (RxSBG.Opcode == SystemZ::RNSBG) in expandRxSBG()
809 if (!refineRxSBGMask(RxSBG, Mask)) in expandRxSBG()
811 RxSBG.Input = N.getOperand(0); in expandRxSBG()
815 if (RxSBG.Opcode == SystemZ::RNSBG) in expandRxSBG()
824 if (!refineRxSBGMask(RxSBG, Mask)) { in expandRxSBG()
830 if (!refineRxSBGMask(RxSBG, Mask)) in expandRxSBG()
833 RxSBG.Input = Input; in expandRxSBG()
838 if (RxSBG.Opcode != SystemZ::RNSBG) in expandRxSBG()
847 if (!refineRxSBGMask(RxSBG, Mask)) { in expandRxSBG()
853 if (!refineRxSBGMask(RxSBG, Mask)) in expandRxSBG()
856 RxSBG.Input = Input; in expandRxSBG()
862 if (RxSBG.BitSize != 64 || N.getValueType() != MVT::i64) in expandRxSBG()
868 RxSBG.Rotate = (RxSBG.Rotate + CountNode->getZExtValue()) & 63; in expandRxSBG()
869 RxSBG.Input = N.getOperand(0); in expandRxSBG()
875 RxSBG.Input = N.getOperand(0); in expandRxSBG()
879 if (RxSBG.Opcode != SystemZ::RNSBG) { in expandRxSBG()
882 if (!refineRxSBGMask(RxSBG, allOnes(InnerBitSize))) in expandRxSBG()
885 RxSBG.Input = N.getOperand(0); in expandRxSBG()
895 if (maskMatters(RxSBG, allOnes(BitSize) - allOnes(InnerBitSize))) { in expandRxSBG()
898 if (RxSBG.Mask == 1 && RxSBG.Rotate == 1) in expandRxSBG()
899 RxSBG.Rotate += (BitSize - InnerBitSize); in expandRxSBG()
904 RxSBG.Input = N.getOperand(0); in expandRxSBG()
918 if (RxSBG.Opcode == SystemZ::RNSBG) { in expandRxSBG()
921 if (maskMatters(RxSBG, allOnes(Count))) in expandRxSBG()
925 if (!refineRxSBGMask(RxSBG, allOnes(BitSize - Count) << Count)) in expandRxSBG()
929 RxSBG.Rotate = (RxSBG.Rotate + Count) & 63; in expandRxSBG()
930 RxSBG.Input = N.getOperand(0); in expandRxSBG()
945 if (RxSBG.Opcode == SystemZ::RNSBG || Opcode == ISD::SRA) { in expandRxSBG()
948 if (maskMatters(RxSBG, allOnes(Count) << (BitSize - Count))) in expandRxSBG()
953 if (!refineRxSBGMask(RxSBG, allOnes(BitSize - Count))) in expandRxSBG()
957 RxSBG.Rotate = (RxSBG.Rotate - Count) & 63; in expandRxSBG()
958 RxSBG.Input = N.getOperand(0); in expandRxSBG()
1089 RxSBGOperands RxSBG[] = { in tryRxSBG() local
1095 while (RxSBG[I].Input->hasOneUse() && expandRxSBG(RxSBG[I])) in tryRxSBG()
1102 if (RxSBG[I].Input.getOpcode() != ISD::ANY_EXTEND && in tryRxSBG()
1103 RxSBG[I].Input.getOpcode() != ISD::TRUNCATE) in tryRxSBG()
1115 if (Opcode == SystemZ::ROSBG && (RxSBG[I].Mask & 0xff) == 0) in tryRxSBG()
1122 if (Opcode == SystemZ::ROSBG && detectOrAndInsertion(Op0, RxSBG[I].Mask)) { in tryRxSBG()
1131 convertTo(DL, MVT::i64, RxSBG[I].Input), in tryRxSBG()
1132 CurDAG->getTargetConstant(RxSBG[I].Start, DL, MVT::i32), in tryRxSBG()
1133 CurDAG->getTargetConstant(RxSBG[I].End, DL, MVT::i32), in tryRxSBG()
1134 CurDAG->getTargetConstant(RxSBG[I].Rotate, DL, MVT::i32) in tryRxSBG()