================ @@ -697,6 +738,34 @@ void WebAssemblyAsmPrinter::emitInstruction(const MachineInstr *MI) { WebAssemblyMCInstLower MCInstLowering(OutContext, *this); MCInst TmpInst; MCInstLowering.lower(MI, TmpInst); + if (Subtarget->hasBranchHinting() && + MI->getOpcode() == WebAssembly::BR_IF && MFI && + MFI->BranchProbabilities.contains(MI)) { + MCSymbol *BrIfSym = OutContext.createTempSymbol(); + OutStreamer->emitLabel(BrIfSym); + + constexpr uint8_t HintLikely = 0x01; + constexpr uint8_t HintUnlikely = 0x00; + const BranchProbability &Prob = MFI->BranchProbabilities[MI]; + uint8_t HintValue; + if (Prob > BranchProbability::getRaw(WasmHighBranchProb.getValue())) + HintValue = HintLikely; + else if (Prob <= BranchProbability::getRaw(WasmLowBranchProb.getValue())) + HintValue = HintUnlikely; + else + goto emit; // Don't emit branch hint between thresholds + + // we know that we only emit branch hints for internal functions, + // therefore we can directly cast and don't need getMCSymbolForFunction + MCSymbol *FuncSym = cast<MCSymbolWasm>(getSymbol(&MF->getFunction())); + uint32_t LocalFuncIdx = MF->getFunctionNumber(); + if (branchHints.size() <= LocalFuncIdx) { ---------------- Lukasdoe wrote:
Please check whether I understood correctly what you meant here. The resizing is now done once for each function. https://github.com/llvm/llvm-project/pull/146230 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits