Lines Matching full:aux
527 RelaxAux Aux;
528 Aux.Config.IsRV32 = G.getTargetTriple().isRISCV32();
530 Aux.Config.HasRVC = llvm::is_contained(Features, "+c") ||
537 auto BlockEmplaceResult = Aux.Blocks.try_emplace(B);
546 Aux.Blocks.erase(BlockEmplaceResult.first);
570 for (auto &BlockAuxIter : Aux.Blocks) {
576 return Aux;
593 static void relaxCall(const Block &B, BlockRelaxAux &Aux,
605 Aux.Writes.push_back(0xa001); // c.j
609 Aux.Writes.push_back(0x2001); // c.jal
613 Aux.Writes.push_back(0x6f | RD << 7); // jal
622 static bool relaxBlock(LinkGraph &G, Block &Block, BlockRelaxAux &Aux,
626 ArrayRef<SymbolAnchor> SA = ArrayRef(Aux.Anchors);
629 Aux.EdgeKinds.assign(Aux.EdgeKinds.size(), Edge::Invalid);
630 Aux.Writes.clear();
632 for (auto [I, E] : llvm::enumerate(Aux.RelaxEdges)) {
634 auto &Cur = Aux.RelocDeltas[I];
638 relaxAlign(Loc, *E, Remove, Aux.EdgeKinds[I]);
641 relaxCall(Block, Aux, Config, Loc, *E, Remove, Aux.EdgeKinds[I]);
674 static bool relaxOnce(LinkGraph &G, RelaxAux &Aux) {
677 for (auto &[B, BlockAux] : Aux.Blocks)
678 Changed |= relaxBlock(G, *B, BlockAux, Aux.Config);
683 static void finalizeBlockRelax(LinkGraph &G, Block &Block, BlockRelaxAux &Aux) {
686 auto NextWrite = Aux.Writes.begin();
692 for (auto [I, E] : llvm::enumerate(Aux.RelaxEdges)) {
693 uint32_t Remove = Aux.RelocDeltas[I] - Delta;
694 Delta = Aux.RelocDeltas[I];
695 if (Remove == 0 && Aux.EdgeKinds[I] == Edge::Invalid)
704 switch (Aux.EdgeKinds[I]) {
746 if (I < Aux.RelaxEdges.size() && Aux.RelaxEdges[I] == &E) {
747 if (Aux.EdgeKinds[I] != Edge::Invalid)
748 E.setKind(Aux.EdgeKinds[I]);
750 Delta = Aux.RelocDeltas[I];
766 static void finalizeRelax(LinkGraph &G, RelaxAux &Aux) {
767 for (auto &[B, BlockAux] : Aux.Blocks)
772 auto Aux = initRelaxAux(G);
773 while (relaxOnce(G, Aux)) {
775 finalizeRelax(G, Aux);