Skip to content

Commit

Permalink
[AttrBuilder] Remove ctor accepting AttributeList and Index
Browse files Browse the repository at this point in the history
Use the AttributeSet constructor instead. There's no good reason
why AttrBuilder itself should exact the AttributeSet from the
AttributeList. Moving this out of the AttrBuilder generally results
in cleaner code.
  • Loading branch information
nikic committed Jan 15, 2022
1 parent c84b8be commit c63a317
Show file tree
Hide file tree
Showing 9 changed files with 10 additions and 19 deletions.
2 changes: 1 addition & 1 deletion clang/lib/CodeGen/CodeGenModule.cpp
Expand Up @@ -3792,7 +3792,7 @@ llvm::Constant *CodeGenModule::GetOrCreateLLVMFunction(
if (D)
SetFunctionAttributes(GD, F, IsIncompleteFunction, IsThunk);
if (ExtraAttrs.hasFnAttrs()) {
llvm::AttrBuilder B(F->getContext(), ExtraAttrs, llvm::AttributeList::FunctionIndex);
llvm::AttrBuilder B(F->getContext(), ExtraAttrs.getFnAttrs());
F->addFnAttrs(B);
}

Expand Down
1 change: 0 additions & 1 deletion llvm/include/llvm/IR/Attributes.h
Expand Up @@ -1014,7 +1014,6 @@ class AttrBuilder {
addAttribute(A);
}

AttrBuilder(LLVMContext &Ctx, AttributeList AS, unsigned Idx);
AttrBuilder(LLVMContext &Ctx, AttributeSet AS);

void clear();
Expand Down
6 changes: 3 additions & 3 deletions llvm/lib/CodeGen/Analysis.cpp
Expand Up @@ -577,9 +577,9 @@ bool llvm::attributesPermitTailCall(const Function *F, const Instruction *I,
bool &ADS = AllowDifferingSizes ? *AllowDifferingSizes : DummyADS;
ADS = true;

AttrBuilder CallerAttrs(F->getContext(), F->getAttributes(), AttributeList::ReturnIndex);
AttrBuilder CalleeAttrs(F->getContext(), cast<CallInst>(I)->getAttributes(),
AttributeList::ReturnIndex);
AttrBuilder CallerAttrs(F->getContext(), F->getAttributes().getRetAttrs());
AttrBuilder CalleeAttrs(F->getContext(),
cast<CallInst>(I)->getAttributes().getRetAttrs());

// Following attributes are completely benign as far as calling convention
// goes, they shouldn't affect whether the call is a tail call.
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
Expand Up @@ -564,7 +564,7 @@ static bool isLibCallInTailPosition(MachineInstr &MI,
// the return. Ignore NoAlias and NonNull because they don't affect the
// call sequence.
AttributeList CallerAttrs = F.getAttributes();
if (AttrBuilder(F.getContext(), CallerAttrs, AttributeList::ReturnIndex)
if (AttrBuilder(F.getContext(), CallerAttrs.getRetAttrs())
.removeAttribute(Attribute::NoAlias)
.removeAttribute(Attribute::NonNull)
.hasAttributes())
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
Expand Up @@ -60,7 +60,7 @@ bool TargetLowering::isInTailCallPosition(SelectionDAG &DAG, SDNode *Node,
// Conservatively require the attributes of the call to match those of
// the return. Ignore following attributes because they don't affect the
// call sequence.
AttrBuilder CallerAttrs(F.getContext(), F.getAttributes(), AttributeList::ReturnIndex);
AttrBuilder CallerAttrs(F.getContext(), F.getAttributes().getRetAttrs());
for (const auto &Attr : {Attribute::Alignment, Attribute::Dereferenceable,
Attribute::DereferenceableOrNull, Attribute::NoAlias,
Attribute::NonNull})
Expand Down
8 changes: 0 additions & 8 deletions llvm/lib/IR/Attributes.cpp
Expand Up @@ -1548,14 +1548,6 @@ LLVM_DUMP_METHOD void AttributeList::dump() const { print(dbgs()); }
// AttrBuilder Method Implementations
//===----------------------------------------------------------------------===//

// FIXME: Remove this ctor, use AttributeSet.
AttrBuilder::AttrBuilder(LLVMContext &Ctx, AttributeList AL, unsigned Index)
: Ctx(Ctx) {
AttributeSet AS = AL.getAttributes(Index);
for (const auto &A : AS)
addAttribute(A);
}

AttrBuilder::AttrBuilder(LLVMContext &Ctx, AttributeSet AS) : Ctx(Ctx) {
for (const auto &A : AS)
addAttribute(A);
Expand Down
4 changes: 2 additions & 2 deletions llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
Expand Up @@ -2941,7 +2941,7 @@ bool InstCombinerImpl::transformConstExprCastCall(CallBase &Call) {
}

if (!CallerPAL.isEmpty() && !Caller->use_empty()) {
AttrBuilder RAttrs(FT->getContext(), CallerPAL, AttributeList::ReturnIndex);
AttrBuilder RAttrs(FT->getContext(), CallerPAL.getRetAttrs());
if (RAttrs.overlaps(AttributeFuncs::typeIncompatible(NewRetTy)))
return false; // Attribute not compatible with transformed value.
}
Expand Down Expand Up @@ -3052,7 +3052,7 @@ bool InstCombinerImpl::transformConstExprCastCall(CallBase &Call) {
ArgAttrs.reserve(NumActualArgs);

// Get any return attributes.
AttrBuilder RAttrs(FT->getContext(), CallerPAL, AttributeList::ReturnIndex);
AttrBuilder RAttrs(FT->getContext(), CallerPAL.getRetAttrs());

// If the return value is not being used, the type may not be compatible
// with the existing attributes. Wipe out any problematic attributes.
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Transforms/Utils/CallPromotionUtils.cpp
Expand Up @@ -518,7 +518,7 @@ CallBase &llvm::promoteCall(CallBase &CB, Function *Callee,
// If the return type of the call site doesn't match that of the callee, cast
// the returned value to the appropriate type.
// Remove any incompatible return value attribute.
AttrBuilder RAttrs(Ctx, CallerPAL, AttributeList::ReturnIndex);
AttrBuilder RAttrs(Ctx, CallerPAL.getRetAttrs());
if (!CallSiteRetTy->isVoidTy() && CallSiteRetTy != CalleeRetTy) {
createRetBitCast(CB, CallSiteRetTy, RetBitCast);
RAttrs.remove(AttributeFuncs::typeIncompatible(CalleeRetTy));
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Transforms/Utils/InlineFunction.cpp
Expand Up @@ -1185,7 +1185,7 @@ static bool MayContainThrowingOrExitingCall(Instruction *Begin,

static AttrBuilder IdentifyValidAttributes(CallBase &CB) {

AttrBuilder AB(CB.getContext(), CB.getAttributes(), AttributeList::ReturnIndex);
AttrBuilder AB(CB.getContext(), CB.getAttributes().getRetAttrs());
if (!AB.hasAttributes())
return AB;
AttrBuilder Valid(CB.getContext());
Expand Down

0 comments on commit c63a317

Please sign in to comment.