Fix float division-by-zero in R600 scheduler.
This bug was reported by UBSan. llvm-svn: 217967
This commit is contained in:
parent
fb3e14375a
commit
cce5701cdb
|
@ -75,6 +75,9 @@ SUnit* R600SchedStrategy::pickNode(bool &IsTopNode) {
|
|||
float ALUFetchRationEstimate =
|
||||
(AluInstCount + AvailablesAluCount() + Pending[IDAlu].size()) /
|
||||
(FetchInstCount + Available[IDFetch].size());
|
||||
if (ALUFetchRationEstimate == 0) {
|
||||
AllowSwitchFromAlu = true;
|
||||
} else {
|
||||
unsigned NeededWF = 62.5f / ALUFetchRationEstimate;
|
||||
DEBUG( dbgs() << NeededWF << " approx. Wavefronts Required\n" );
|
||||
// We assume the local GPR requirements to be "dominated" by the requirement
|
||||
|
@ -91,6 +94,7 @@ SUnit* R600SchedStrategy::pickNode(bool &IsTopNode) {
|
|||
if (NeededWF > getWFCountLimitedByGPR(NearRegisterRequirement))
|
||||
AllowSwitchFromAlu = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!SU && ((AllowSwitchToAlu && CurInstKind != IDAlu) ||
|
||||
(!AllowSwitchFromAlu && CurInstKind == IDAlu))) {
|
||||
|
|
Loading…
Reference in New Issue