Add BAT testing framework
This patch refactors BAT to be testable as a library, so we can have open-source tests on it. This further fixes an issue with basic blocks that lack a valid input offset, making BAT omit those when writing translation tables. Test Plan: new testcases added, new testing tool added (llvm-bat-dump) Differential Revision: https://reviews.llvm.org/D129382
This commit is contained in:
@@ -699,7 +699,7 @@ bool DataAggregator::doSample(BinaryFunction &Func, uint64_t Address,
|
||||
|
||||
Address -= Func.getAddress();
|
||||
if (BAT)
|
||||
Address = BAT->translate(Func, Address, /*IsBranchSrc=*/false);
|
||||
Address = BAT->translate(Func.getAddress(), Address, /*IsBranchSrc=*/false);
|
||||
|
||||
I->second.bumpCount(Address, Count);
|
||||
return true;
|
||||
@@ -722,8 +722,8 @@ bool DataAggregator::doIntraBranch(BinaryFunction &Func, uint64_t From,
|
||||
<< Func.getPrintName() << " @ " << Twine::utohexstr(To)
|
||||
<< '\n');
|
||||
if (BAT) {
|
||||
From = BAT->translate(Func, From, /*IsBranchSrc=*/true);
|
||||
To = BAT->translate(Func, To, /*IsBranchSrc=*/false);
|
||||
From = BAT->translate(Func.getAddress(), From, /*IsBranchSrc=*/true);
|
||||
To = BAT->translate(Func.getAddress(), To, /*IsBranchSrc=*/false);
|
||||
LLVM_DEBUG(dbgs() << "BOLT-DEBUG: BAT translation on bumpBranchCount: "
|
||||
<< Func.getPrintName() << " @ " << Twine::utohexstr(From)
|
||||
<< " -> " << Func.getPrintName() << " @ "
|
||||
@@ -752,7 +752,7 @@ bool DataAggregator::doInterBranch(BinaryFunction *FromFunc,
|
||||
}
|
||||
From -= FromFunc->getAddress();
|
||||
if (BAT)
|
||||
From = BAT->translate(*FromFunc, From, /*IsBranchSrc=*/true);
|
||||
From = BAT->translate(FromFunc->getAddress(), From, /*IsBranchSrc=*/true);
|
||||
|
||||
recordExit(*FromFunc, From, Mispreds, Count);
|
||||
}
|
||||
@@ -766,7 +766,7 @@ bool DataAggregator::doInterBranch(BinaryFunction *FromFunc,
|
||||
}
|
||||
To -= ToFunc->getAddress();
|
||||
if (BAT)
|
||||
To = BAT->translate(*ToFunc, To, /*IsBranchSrc=*/false);
|
||||
To = BAT->translate(ToFunc->getAddress(), To, /*IsBranchSrc=*/false);
|
||||
|
||||
recordEntry(*ToFunc, To, Mispreds, Count);
|
||||
}
|
||||
@@ -822,7 +822,8 @@ bool DataAggregator::doTrace(const LBREntry &First, const LBREntry &Second,
|
||||
}
|
||||
|
||||
Optional<BoltAddressTranslation::FallthroughListTy> FTs =
|
||||
BAT ? BAT->getFallthroughsInTrace(*FromFunc, First.To, Second.From)
|
||||
BAT ? BAT->getFallthroughsInTrace(FromFunc->getAddress(), First.To,
|
||||
Second.From)
|
||||
: getFallthroughsInTrace(*FromFunc, First, Second, Count);
|
||||
if (!FTs) {
|
||||
LLVM_DEBUG(
|
||||
|
||||
Reference in New Issue
Block a user