Add a hasOperandBundlesOtherThan helper, and use it; NFC

llvm-svn: 264072
This commit is contained in:
Sanjoy Das 2016-03-22 17:51:25 +00:00
parent 4d51190936
commit 6b535630a1
2 changed files with 17 additions and 12 deletions

View File

@ -1478,6 +1478,17 @@ public:
Other.bundle_op_info_begin());
};
/// \brief Return true if this operand bundle user contains operand bundles
/// with tags other than those specified in \p IDs.
bool hasOperandBundlesOtherThan(ArrayRef<uint32_t> IDs) const {
for (unsigned i = 0, e = getNumOperandBundles(); i != e; ++i) {
uint32_t ID = getOperandBundleAt(i).getTagID();
if (std::find(IDs.begin(), IDs.end(), ID) == IDs.end())
return true;
}
return false;
}
protected:
/// \brief Is the function attribute S disallowed by some operand bundle on
/// this operand bundle user?

View File

@ -2127,14 +2127,11 @@ void SelectionDAGBuilder::visitInvoke(const InvokeInst &I) {
MachineBasicBlock *Return = FuncInfo.MBBMap[I.getSuccessor(0)];
const BasicBlock *EHPadBB = I.getSuccessor(1);
#ifndef NDEBUG
// Deopt bundles are lowered in LowerCallSiteWithDeoptBundle, and we don't
// have to do anything here to lower funclet bundles.
for (unsigned i = 0, e = I.getNumOperandBundles(); i != e; ++i)
assert((I.getOperandBundleAt(i).isDeoptOperandBundle() ||
I.getOperandBundleAt(i).isFuncletOperandBundle()) &&
"Cannot lower invokes with arbitrary operand bundles yet!");
#endif
assert(!I.hasOperandBundlesOtherThan(
{LLVMContext::OB_deopt, LLVMContext::OB_funclet}) &&
"Cannot lower invokes with arbitrary operand bundles yet!");
const Value *Callee(I.getCalledValue());
const Function *Fn = dyn_cast<Function>(Callee);
@ -6116,14 +6113,11 @@ void SelectionDAGBuilder::visitCall(const CallInst &I) {
RenameFn,
DAG.getTargetLoweringInfo().getPointerTy(DAG.getDataLayout()));
#ifndef NDEBUG
// Deopt bundles are lowered in LowerCallSiteWithDeoptBundle, and we don't
// have to do anything here to lower funclet bundles.
for (unsigned i = 0, e = I.getNumOperandBundles(); i != e; ++i)
assert((I.getOperandBundleAt(i).isDeoptOperandBundle() ||
I.getOperandBundleAt(i).isFuncletOperandBundle()) &&
"Cannot lower calls with arbitrary operand bundles!");
#endif
assert(!I.hasOperandBundlesOtherThan(
{LLVMContext::OB_deopt, LLVMContext::OB_funclet}) &&
"Cannot lower calls with arbitrary operand bundles!");
if (I.countOperandBundlesOfType(LLVMContext::OB_deopt))
LowerCallSiteWithDeoptBundle(&I, Callee, nullptr);