Skip to content

Commit 5a1bcbe

Browse files
committed
[LLVM 21] llvm::Attribute::NoCapture removed
1 parent fcc7320 commit 5a1bcbe

File tree

3 files changed

+77
-35
lines changed

3 files changed

+77
-35
lines changed

gen/abi/generic.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,11 @@ struct IndirectByvalRewrite : ABIRewrite {
260260
auto &attrs = arg.attrs;
261261
attrs.clear();
262262
attrs.addAttribute(LLAttribute::NoAlias);
263+
#if LDC_LLVM_VER >= 2100
264+
attrs.addCapturesAttr(llvm::CaptureInfo::none());
265+
#else
263266
attrs.addAttribute(LLAttribute::NoCapture);
267+
#endif
264268
if (auto alignment = DtoAlignment(arg.type))
265269
attrs.addAlignmentAttr(alignment);
266270
}

gen/passes/GarbageCollect2Stack.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -729,10 +729,19 @@ bool isSafeToStackAllocate(BasicBlock::iterator Alloc, Value *V,
729729
auto B = CB->arg_begin(), E = CB->arg_end();
730730
for (auto A = B; A != E; ++A) {
731731
if (A->get() == V) {
732+
#if LDC_LLVM_VER >= 2100
733+
if (CB->paramHasAttr(A - B, llvm::Attribute::AttrKind::Captures)) {
734+
return capturesNothing(
735+
CB->getParamAttr(A - B, llvm::Attribute::AttrKind::Captures)
736+
.getCaptureInfo());
737+
}
738+
739+
#else
732740
if (!CB->paramHasAttr(A - B, llvm::Attribute::AttrKind::NoCapture)) {
733741
// The parameter is not marked 'nocapture' - captured.
734742
return false;
735743
}
744+
#endif
736745

737746
if (auto call = dyn_cast<CallInst>(static_cast<Instruction *>(CB))) {
738747
if (call->isTailCall()) {

gen/runtime.cpp

Lines changed: 64 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -498,44 +498,73 @@ static void buildRuntimeModule() {
498498
//////////////////////////////////////////////////////////////////////////////
499499

500500
// Construct some attribute lists used below (possibly multiple times)
501-
AttrSet NoAttrs,
502-
Attr_NoUnwind(NoAttrs, LLAttributeList::FunctionIndex,
503-
llvm::Attribute::NoUnwind),
501+
AttrSet NoAttrs, Attr_NoUnwind, Attr_ReadOnly, Attr_ReadOnly_NoUnwind, Attr_Cold, Attr_Cold_NoReturn, Attr_Cold_NoReturn_NoUnwind,
502+
Attr_ReadOnly_1_NoCapture, Attr_ReadOnly_1_3_NoCapture, Attr_ReadOnly_NoUnwind_1_NoCapture,
503+
Attr_ReadOnly_NoUnwind_1_2_NoCapture, Attr_1_NoCapture, Attr_1_2_NoCapture, Attr_1_3_NoCapture,
504+
Attr_1_4_NoCapture;
505+
// `nounwind`
506+
{
507+
auto addNoUnwind = [&](AttrSet& a) {
508+
llvm::AttrBuilder ab(context);
509+
ab.addAttribute(llvm::Attribute::NoUnwind);
510+
a.addToFunction(ab);
511+
};
512+
addNoUnwind(Attr_NoUnwind);
513+
addNoUnwind(Attr_Cold_NoReturn_NoUnwind);
514+
addNoUnwind(Attr_ReadOnly_NoUnwind);
515+
addNoUnwind(Attr_ReadOnly_NoUnwind_1_NoCapture);
516+
addNoUnwind(Attr_ReadOnly_NoUnwind_1_2_NoCapture);
517+
}
518+
// `readonly`
519+
{
520+
auto addReadOnly = [&](AttrSet& a) {
504521
#if LDC_LLVM_VER >= 1600
505-
Attr_ReadOnly(llvm::AttributeList().addFnAttribute(
506-
context, llvm::Attribute::getWithMemoryEffects(
507-
context, llvm::MemoryEffects::readOnly()))),
522+
a = a.merge(AttrSet(llvm::AttributeList().addFnAttribute(
523+
context, llvm::Attribute::getWithMemoryEffects(
524+
context, llvm::MemoryEffects::readOnly()))));
525+
#else
526+
a = a.addToFunction(llvm::Attribute::ReadOnly);
527+
#endif
528+
};
529+
addReadOnly(Attr_ReadOnly);
530+
addReadOnly(Attr_ReadOnly_NoUnwind);
531+
addReadOnly(Attr_ReadOnly_1_NoCapture);
532+
addReadOnly(Attr_ReadOnly_1_3_NoCapture);
533+
addReadOnly(Attr_ReadOnly_NoUnwind_1_NoCapture);
534+
addReadOnly(Attr_ReadOnly_NoUnwind_1_2_NoCapture);
535+
}
536+
// `cold`
537+
{
538+
auto addCold = [&](AttrSet& a) {
539+
llvm::AttrBuilder ab(context);
540+
ab.addAttribute(llvm::Attribute::Cold);
541+
};
542+
addCold(Attr_Cold);
543+
addCold(Attr_Cold_NoReturn);
544+
addCold(Attr_Cold_NoReturn_NoUnwind);
545+
}
546+
// `nocapture`/ `captures(none)`
547+
{
548+
auto addCapturesNone = [&](int extra, AttrSet& a) {
549+
llvm::AttrBuilder ab(context);
550+
#if LDC_LLVM_VER >= 2100
551+
ab.addCapturesAttr(llvm::CaptureInfo::none());
508552
#else
509-
Attr_ReadOnly(NoAttrs, LLAttributeList::FunctionIndex,
510-
llvm::Attribute::ReadOnly),
553+
ab.addAttribute(llvm::Attribute::NoCapture);
511554
#endif
512-
Attr_Cold(NoAttrs, LLAttributeList::FunctionIndex, llvm::Attribute::Cold),
513-
Attr_Cold_NoReturn(Attr_Cold, LLAttributeList::FunctionIndex,
514-
llvm::Attribute::NoReturn),
515-
Attr_Cold_NoReturn_NoUnwind(Attr_Cold_NoReturn,
516-
LLAttributeList::FunctionIndex,
517-
llvm::Attribute::NoUnwind),
518-
Attr_ReadOnly_NoUnwind(Attr_ReadOnly, LLAttributeList::FunctionIndex,
519-
llvm::Attribute::NoUnwind),
520-
Attr_ReadOnly_1_NoCapture(Attr_ReadOnly, LLAttributeList::FirstArgIndex,
521-
llvm::Attribute::NoCapture),
522-
Attr_ReadOnly_1_3_NoCapture(Attr_ReadOnly_1_NoCapture,
523-
LLAttributeList::FirstArgIndex + 2,
524-
llvm::Attribute::NoCapture),
525-
Attr_ReadOnly_NoUnwind_1_NoCapture(Attr_ReadOnly_1_NoCapture,
526-
LLAttributeList::FunctionIndex,
527-
llvm::Attribute::NoUnwind),
528-
Attr_ReadOnly_NoUnwind_1_2_NoCapture(Attr_ReadOnly_NoUnwind_1_NoCapture,
529-
LLAttributeList::FirstArgIndex + 1,
530-
llvm::Attribute::NoCapture),
531-
Attr_1_NoCapture(NoAttrs, LLAttributeList::FirstArgIndex,
532-
llvm::Attribute::NoCapture),
533-
Attr_1_2_NoCapture(Attr_1_NoCapture, LLAttributeList::FirstArgIndex + 1,
534-
llvm::Attribute::NoCapture),
535-
Attr_1_3_NoCapture(Attr_1_NoCapture, LLAttributeList::FirstArgIndex + 2,
536-
llvm::Attribute::NoCapture),
537-
Attr_1_4_NoCapture(Attr_1_NoCapture, LLAttributeList::FirstArgIndex + 3,
538-
llvm::Attribute::NoCapture);
555+
a.addToParam(0, ab);
556+
if (extra)
557+
a.addToParam(extra-1, ab);
558+
};
559+
addCapturesNone(0, Attr_ReadOnly_1_NoCapture);
560+
addCapturesNone(3, Attr_ReadOnly_1_3_NoCapture);
561+
addCapturesNone(0, Attr_ReadOnly_NoUnwind_1_NoCapture);
562+
addCapturesNone(2, Attr_ReadOnly_NoUnwind_1_2_NoCapture);
563+
addCapturesNone(0, Attr_1_NoCapture);
564+
addCapturesNone(2, Attr_1_2_NoCapture);
565+
addCapturesNone(3, Attr_1_3_NoCapture);
566+
addCapturesNone(4, Attr_1_4_NoCapture);
567+
}
539568

540569
//////////////////////////////////////////////////////////////////////////////
541570
//////////////////////////////////////////////////////////////////////////////

0 commit comments

Comments
 (0)