forked from OSchip/llvm-project
				
			Check the case that the numerator and denominator are both zeros when getting edge probabilities in BPI and return 100% in this case.
This issue is triggered in PGO mode when bootstrapping LLVM. It seems that it is not guaranteed that edge weights are always greater than zero which are read from profile data. llvm-svn: 251317
This commit is contained in:
		
							parent
							
								
									57f8837ada
								
							
						
					
					
						commit
						fff8ccf579
					
				| 
						 | 
				
			
			@ -623,6 +623,11 @@ getEdgeProbability(const BasicBlock *Src, unsigned IndexInSuccessors) const {
 | 
			
		|||
  uint32_t N = getEdgeWeight(Src, IndexInSuccessors);
 | 
			
		||||
  uint32_t D = getSumForBlock(Src);
 | 
			
		||||
 | 
			
		||||
  // It is possible that the edge weight on the only successor edge of Src is
 | 
			
		||||
  // zero, in which case we return 100%.
 | 
			
		||||
  if (N == 0 && D == 0)
 | 
			
		||||
    return BranchProbability::getOne();
 | 
			
		||||
 | 
			
		||||
  return BranchProbability(N, D);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -634,6 +639,11 @@ getEdgeProbability(const BasicBlock *Src, const BasicBlock *Dst) const {
 | 
			
		|||
  uint32_t N = getEdgeWeight(Src, Dst);
 | 
			
		||||
  uint32_t D = getSumForBlock(Src);
 | 
			
		||||
 | 
			
		||||
  // It is possible that the edge weight on the only successor edge of Src is
 | 
			
		||||
  // zero, in which case we return 100%.
 | 
			
		||||
  if (N == 0 && D == 0)
 | 
			
		||||
    return BranchProbability::getOne();
 | 
			
		||||
 | 
			
		||||
  return BranchProbability(N, D);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue