Lines Matching +full:n +full:- +full:factor
1 //===-------- MIRSampleProfile.cpp: MIRSampleFDO (For FSAFDO) -------------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
12 //===----------------------------------------------------------------------===//
42 #define DEBUG_TYPE "fs-profile-loader"
45 "show-fs-branchprob", cl::Hidden, cl::init(false),
48 "fs-profile-debug-prob-diff-threshold", cl::init(10),
53 "fs-profile-debug-bw-threshold", cl::init(10000),
57 static cl::opt<bool> ViewBFIBefore("fs-viewbfi-before", cl::Hidden,
60 static cl::opt<bool> ViewBFIAfter("fs-viewbfi-after", cl::Hidden,
93 // -view-block-layout-with-bfi={none | fraction | integer | count}
97 // Defined in Analysis/BlockFrequencyInfo.cpp: -view-bfi-func-name=
106 Probe.Factor = 1; in extractProbe()
108 Probe.Discriminator = DebugLoc ? DebugLoc->getDiscriminator() : 0; in extractProbe()
136 return BB->predecessors(); in getPredecessors()
139 return BB->successors(); in getSuccessors()
183 // 0-based. Base discrimnator use bit 0 to bit 11.
186 // is 0-based.
204 LLVM_DEBUG(dbgs() << "\nPropagation complete. Setting branch probs\n"); in setBranchProbs()
207 if (BB->succ_size() < 2) in setBranchProbs()
212 for (MachineBasicBlock *Succ : BB->successors()) { in setBranchProbs()
220 << "\n"); in setBranchProbs()
224 LLVM_DEBUG(dbgs() << "SKIPPED. All branch weights are zero.\n"); in setBranchProbs()
232 uint32_t Factor = 1; in setBranchProbs() local
234 Factor = BBWeight / MaxWeight + 1; in setBranchProbs()
235 BBWeight /= Factor; in setBranchProbs()
236 LLVM_DEBUG(dbgs() << "Scaling weights by " << Factor << "\n"); in setBranchProbs()
239 for (MachineBasicBlock::succ_iterator SI = BB->succ_begin(), in setBranchProbs()
240 SE = BB->succ_end(); in setBranchProbs()
245 EdgeWeight /= Factor; in setBranchProbs()
248 "BBweight is larger than EdgeWeight -- should not happen.\n"); in setBranchProbs()
250 BranchProbability OldProb = BFI->getMBPI()->getEdgeProbability(BB, SI); in setBranchProbs()
254 BB->setSuccProbability(SI, NewProb); in setBranchProbs()
261 Diff = OldProb - NewProb; in setBranchProbs()
263 Diff = NewProb - OldProb; in setBranchProbs()
267 auto DIL = BB->findBranchDebugLoc(); in setBranchProbs()
268 auto SuccDIL = Succ->findBranchDebugLoc(); in setBranchProbs()
270 dbgs() << "Set branch fs prob: MBB (" << BB->getNumber() << " -> " in setBranchProbs()
271 << Succ->getNumber() << "): "; in setBranchProbs()
273 dbgs() << DIL->getFilename() << ":" << DIL->getLine() << ":" in setBranchProbs()
274 << DIL->getColumn(); in setBranchProbs()
276 dbgs() << "-->" << SuccDIL->getFilename() << ":" << SuccDIL->getLine() in setBranchProbs()
277 << ":" << SuccDIL->getColumn(); in setBranchProbs()
278 dbgs() << " W=" << BBWeightOrig << " " << OldProb << " --> " << NewProb in setBranchProbs()
279 << "\n"; in setBranchProbs()
298 Reader->setModule(&M); in doInitialization()
299 ProfileIsValid = (Reader->read() == sampleprof_error::success); in doInitialization()
301 // Load pseudo probe descriptors for probe-based function samples. in doInitialization()
302 if (Reader->profileIsProbeBased()) { in doInitialization()
304 if (!ProbeManager->moduleIsProbed(M)) { in doInitialization()
313 // Do not load non-FS profiles. A line or probe can get a zero-valued in runOnFunction()
315 // the corresponding base counter in the non-FS profile, while a non-zero in runOnFunction()
318 // probe distribution factor work for pseudo probes. in runOnFunction()
319 if (!Reader->profileIsFS()) in runOnFunction()
324 Samples = Reader->getSamplesFor(Func); in runOnFunction()
325 if (!Samples || Samples->empty()) in runOnFunction()
329 if (!ProbeManager->profileIsValid(MF.getFunction(), *Samples)) in runOnFunction()
361 if (!MIRSampleLoader->isValid()) in runOnMachineFunction()
365 << MF.getFunction().getName() << "\n"); in runOnMachineFunction()
367 MIRSampleLoader->setInitVals( in runOnMachineFunction()
377 MBFI->view("MIR_Prof_loader_b." + MF.getName(), false); in runOnMachineFunction()
380 bool Changed = MIRSampleLoader->runOnFunction(MF); in runOnMachineFunction()
382 MBFI->calculate(MF, *MBFI->getMBPI(), in runOnMachineFunction()
388 MBFI->view("MIR_prof_loader_a." + MF.getName(), false); in runOnMachineFunction()
396 << "\n"); in doInitialization()
398 MIRSampleLoader->setFSPass(P); in doInitialization()
399 return MIRSampleLoader->doInitialization(M); in doInitialization()