Lines Matching refs:BitTracker
203 static bool isEqual(const BitTracker::RegisterCell &RC1, uint16_t B1,
204 const BitTracker::RegisterCell &RC2, uint16_t B2, uint16_t W);
205 static bool isZero(const BitTracker::RegisterCell &RC, uint16_t B,
207 static bool getConst(const BitTracker::RegisterCell &RC, uint16_t B,
211 static bool getSubregMask(const BitTracker::RegisterRef &RR,
218 BitTracker::RegisterRef &SL, BitTracker::RegisterRef &SH,
227 const BitTracker::RegisterRef &RR, MachineRegisterInfo &MRI);
228 static bool isTransparentCopy(const BitTracker::RegisterRef &RD,
229 const BitTracker::RegisterRef &RS, MachineRegisterInfo &MRI);
314 bool HexagonBitSimplify::isEqual(const BitTracker::RegisterCell &RC1, in isEqual()
315 uint16_t B1, const BitTracker::RegisterCell &RC2, uint16_t B2, in isEqual()
319 if (RC1[B1+i].Type == BitTracker::BitValue::Ref && RC1[B1+i].RefI.Reg == 0) in isEqual()
322 if (RC2[B2+i].Type == BitTracker::BitValue::Ref && RC2[B2+i].RefI.Reg == 0) in isEqual()
330 bool HexagonBitSimplify::isZero(const BitTracker::RegisterCell &RC, in isZero()
339 bool HexagonBitSimplify::getConst(const BitTracker::RegisterCell &RC, in getConst()
344 const BitTracker::BitValue &BV = RC[i-1]; in getConst()
407 bool HexagonBitSimplify::getSubregMask(const BitTracker::RegisterRef &RR, in getSubregMask()
435 BitTracker::RegisterRef &SL, BitTracker::RegisterRef &SH, in parseRegSequence()
898 const BitTracker::RegisterRef &RR, MachineRegisterInfo &MRI) { in getFinalVRegClass()
928 bool HexagonBitSimplify::isTransparentCopy(const BitTracker::RegisterRef &RD, in isTransparentCopy()
929 const BitTracker::RegisterRef &RS, MachineRegisterInfo &MRI) { in isTransparentCopy()
1053 RedundantInstrElimination(BitTracker &bt, const HexagonInstrInfo &hii, in RedundantInstrElimination()
1067 bool usedBitsEqual(BitTracker::RegisterRef RD, BitTracker::RegisterRef RS);
1072 BitTracker &BT;
1216 BitTracker::RegisterRef UR = *I; in computeUsedBits()
1261 BitTracker::RegisterRef RR = MI.getOperand(OpN); in computeUsedBits()
1278 bool RedundantInstrElimination::usedBitsEqual(BitTracker::RegisterRef RD, in usedBitsEqual()
1279 BitTracker::RegisterRef RS) { in usedBitsEqual()
1280 const BitTracker::RegisterCell &DC = BT.lookup(RD.Reg); in usedBitsEqual()
1281 const BitTracker::RegisterCell &SC = BT.lookup(RS.Reg); in usedBitsEqual()
1320 BitTracker::RegisterRef RD = MI->getOperand(0); in processBlock()
1323 const BitTracker::RegisterCell &DC = BT.lookup(RD.Reg); in processBlock()
1330 BitTracker::RegisterRef RS = Op; in processBlock()
1340 const BitTracker::RegisterCell &SC = BT.lookup(RS.Reg); in processBlock()
1376 ConstGeneration(BitTracker &bt, const HexagonInstrInfo &hii, in ConstGeneration()
1390 BitTracker &BT;
1484 const BitTracker::RegisterCell &DRC = BT.lookup(DR); in processBlock()
1507 CopyGeneration(BitTracker &bt, const HexagonInstrInfo &hii, in CopyGeneration()
1514 bool findMatch(const BitTracker::RegisterRef &Inp,
1515 BitTracker::RegisterRef &Out, const RegisterSet &AVs);
1520 BitTracker &BT;
1546 bool CopyGeneration::findMatch(const BitTracker::RegisterRef &Inp, in findMatch()
1547 BitTracker::RegisterRef &Out, const RegisterSet &AVs) { in findMatch()
1550 const BitTracker::RegisterCell &InpRC = BT.lookup(Inp.Reg); in findMatch()
1559 const BitTracker::RegisterCell &RC = BT.lookup(R); in findMatch()
1616 BitTracker::RegisterRef MR; in processBlock()
1623 BT.put(BitTracker::RegisterRef(NewR), BT.get(MR)); in processBlock()
1634 BitTracker::RegisterRef TL = { R, SubLo }; in processBlock()
1635 BitTracker::RegisterRef TH = { R, SubHi }; in processBlock()
1636 BitTracker::RegisterRef ML, MH; in processBlock()
1645 BT.put(BitTracker::RegisterRef(NewR), BT.get(R)); in processBlock()
1677 BitTracker::RegisterRef RD = MI.getOperand(0); in propagateRegCopy()
1684 BitTracker::RegisterRef RS = MI.getOperand(1); in propagateRegCopy()
1694 BitTracker::RegisterRef SL, SH; in propagateRegCopy()
1709 BitTracker::RegisterRef RH = MI.getOperand(1), RL = MI.getOperand(2); in propagateRegCopy()
1719 BitTracker::RegisterRef RS = MI.getOperand(SrcX); in propagateRegCopy()
1750 BitSimplification(BitTracker &bt, const MachineDominatorTree &mdt, in BitSimplification()
1759 struct RegHalf : public BitTracker::RegisterRef {
1763 bool matchHalf(unsigned SelfR, const BitTracker::RegisterCell &RC,
1765 bool validateReg(BitTracker::RegisterRef R, unsigned Opc, unsigned OpNum);
1767 bool matchPackhl(unsigned SelfR, const BitTracker::RegisterCell &RC,
1768 BitTracker::RegisterRef &Rs, BitTracker::RegisterRef &Rt);
1773 bool genPackhl(MachineInstr *MI, BitTracker::RegisterRef RD,
1774 const BitTracker::RegisterCell &RC);
1775 bool genExtractHalf(MachineInstr *MI, BitTracker::RegisterRef RD,
1776 const BitTracker::RegisterCell &RC);
1777 bool genCombineHalf(MachineInstr *MI, BitTracker::RegisterRef RD,
1778 const BitTracker::RegisterCell &RC);
1779 bool genExtractLow(MachineInstr *MI, BitTracker::RegisterRef RD,
1780 const BitTracker::RegisterCell &RC);
1781 bool genBitSplit(MachineInstr *MI, BitTracker::RegisterRef RD,
1782 const BitTracker::RegisterCell &RC, const RegisterSet &AVs);
1783 bool simplifyTstbit(MachineInstr *MI, BitTracker::RegisterRef RD,
1784 const BitTracker::RegisterCell &RC);
1785 bool simplifyExtractLow(MachineInstr *MI, BitTracker::RegisterRef RD,
1786 const BitTracker::RegisterCell &RC, const RegisterSet &AVs);
1787 bool simplifyRCmp0(MachineInstr *MI, BitTracker::RegisterRef RD);
1798 BitTracker &BT;
1807 const BitTracker::RegisterCell &RC, unsigned B, RegHalf &RH) { in matchHalf()
1835 const BitTracker::RegisterCell &SC = BT.lookup(Reg); in matchHalf()
1840 const BitTracker::BitValue &RV = RC[i+B]; in matchHalf()
1841 if (RV.Type == BitTracker::BitValue::Ref) { in matchHalf()
1884 bool BitSimplification::validateReg(BitTracker::RegisterRef R, unsigned Opc, in validateReg()
1894 const BitTracker::RegisterCell &RC, BitTracker::RegisterRef &Rs, in matchPackhl()
1895 BitTracker::RegisterRef &Rt) { in matchPackhl()
1930 BitTracker::RegisterRef RS = ValOp; in genStoreUpperHalf()
1933 const BitTracker::RegisterCell &RC = BT.lookup(RS.Reg); in genStoreUpperHalf()
1975 BitTracker::RegisterRef RS = MI->getOperand(2); in genStoreImmediate()
1978 const BitTracker::RegisterCell &RC = BT.lookup(RS.Reg); in genStoreImmediate()
2024 BitTracker::RegisterRef RD, const BitTracker::RegisterCell &RC) { in genPackhl()
2028 BitTracker::RegisterRef Rs, Rt; in genPackhl()
2044 BT.put(BitTracker::RegisterRef(NewR), RC); in genPackhl()
2051 BitTracker::RegisterRef RD, const BitTracker::RegisterCell &RC) { in genExtractHalf()
2083 BT.put(BitTracker::RegisterRef(NewR), RC); in genExtractHalf()
2090 BitTracker::RegisterRef RD, const BitTracker::RegisterCell &RC) { in genCombineHalf()
2115 BT.put(BitTracker::RegisterRef(NewR), RC); in genCombineHalf()
2122 BitTracker::RegisterRef RD, const BitTracker::RegisterCell &RC) { in genExtractLow()
2153 BitTracker::RegisterRef RS = Op; in genExtractLow()
2156 const BitTracker::RegisterCell &SC = BT.lookup(RS.Reg); in genExtractLow()
2175 BT.put(BitTracker::RegisterRef(NewR), RC); in genExtractLow()
2182 BitTracker::RegisterRef RD, const BitTracker::RegisterCell &RC, in genBitSplit()
2202 auto ctlz = [] (const BitTracker::RegisterCell &C) -> unsigned { in genBitSplit()
2216 const BitTracker::BitValue &B0 = RC[0]; in genBitSplit()
2217 if (B0.Type != BitTracker::BitValue::Ref) in genBitSplit()
2226 const BitTracker::BitValue &V = RC[i]; in genBitSplit()
2227 if (V.Type != BitTracker::BitValue::Ref) in genBitSplit()
2243 const BitTracker::RegisterCell &SC = BT.lookup(S); in genBitSplit()
2247 const BitTracker::BitValue &S0 = SC[0]; in genBitSplit()
2248 if (S0.Type != BitTracker::BitValue::Ref || S0.RefI.Reg != SrcR) in genBitSplit()
2262 const BitTracker::BitValue &V = SC[I]; in genBitSplit()
2263 if (V.Type != BitTracker::BitValue::Ref) in genBitSplit()
2335 BitTracker::RegisterRef RD, const BitTracker::RegisterCell &RC) { in simplifyTstbit()
2341 BitTracker::RegisterRef RS = MI->getOperand(1); in simplifyTstbit()
2350 const BitTracker::RegisterCell &SC = BT.lookup(RS.Reg); in simplifyTstbit()
2351 const BitTracker::BitValue &V = SC[F+BN]; in simplifyTstbit()
2352 if (V.Type == BitTracker::BitValue::Ref && V.RefI.Reg != RS.Reg) { in simplifyTstbit()
2358 BitTracker::RegisterRef RR(V.RefI.Reg, 0); in simplifyTstbit()
2395 BitTracker::RegisterRef RD, const BitTracker::RegisterCell &RC, in simplifyExtractLow()
2428 const BitTracker::BitValue &TopV = RC[W-1]; in simplifyExtractLow()
2435 const BitTracker::BitValue &V = RC[I]; in simplifyExtractLow()
2436 if (V.Type == BitTracker::BitValue::Ref && V.RefI.Reg == RD.Reg) in simplifyExtractLow()
2454 assert(TopV.Type == BitTracker::BitValue::Ref); in simplifyExtractLow()
2482 const BitTracker::RegisterCell &SC = BT.lookup(R); in simplifyExtractLow()
2578 BT.put(BitTracker::RegisterRef(NewR), RC); in simplifyExtractLow()
2587 BitTracker::RegisterRef RD) { in simplifyRCmp0()
2607 BitTracker::RegisterRef SR = MI->getOperand(1); in simplifyRCmp0()
2610 const BitTracker::RegisterCell &SC = BT.lookup(SR.Reg); in simplifyRCmp0()
2616 const BitTracker::BitValue &V = SC[I]; in simplifyRCmp0()
2628 BitTracker::RegisterCell NewRC(W); in simplifyRCmp0()
2630 NewRC[I] = BitTracker::BitValue(C & 1); in simplifyRCmp0()
2633 BT.put(BitTracker::RegisterRef(NewR), NewRC); in simplifyRCmp0()
2696 BitTracker::RegisterCell NewRC(W); in simplifyRCmp0()
2697 NewRC[0] = BitTracker::BitValue::self(); in simplifyRCmp0()
2698 NewRC.fill(1, W, BitTracker::BitValue::Zero); in simplifyRCmp0()
2699 BT.put(BitTracker::RegisterRef(NewR), NewRC); in simplifyRCmp0()
2736 BitTracker::RegisterRef RD = Op0; in processBlock()
2740 const BitTracker::RegisterCell &RC = BT.lookup(RD.Reg); in processBlock()
2784 BitTracker BT(HE, MF); in runOnMachineFunction()
2913 BitTracker *BTP = nullptr;
2923 BitTracker::RegisterRef Inp, Out;
2930 BitTracker::RegisterRef LR, PR; // Loop Register, Preheader Register
2980 const BitTracker::RegisterCell &RC = BTP->lookup(Reg); in isConst()
2982 const BitTracker::BitValue &V = RC[i]; in isConst()
3034 const BitTracker::RegisterCell &OutC = BTP->lookup(OutR); in isShuffleOf()
3036 const BitTracker::BitValue &V = OutC[i]; in isShuffleOf()
3037 if (V.Type != BitTracker::BitValue::Ref) in isShuffleOf()
3049 const BitTracker::RegisterCell &OutC1 = BTP->lookup(OutR1); in isSameShuffle()
3050 const BitTracker::RegisterCell &OutC2 = BTP->lookup(OutR2); in isSameShuffle()
3056 const BitTracker::BitValue &V1 = OutC1[i], &V2 = OutC2[i]; in isSameShuffle()
3057 if (V1.Type != V2.Type || V1.Type == BitTracker::BitValue::One) in isSameShuffle()
3059 if (V1.Type != BitTracker::BitValue::Ref) in isSameShuffle()
3329 BitTracker BT(HE, MF); in runOnMachineFunction()