Re: [llvm] a34d63c - [๐๐ฝ๐ฟ] changes introduced through rebase
Jon Roelofs via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 4 13:05:55 PST 2023
> On Dec 4, 2023, at 12:53โฏPM, Jon Roelofs <jonathan_roelofs at apple.com> wrote:
>
>
>
>> On Dec 4, 2023, at 12:49โฏPM, Tom Stellard <tstellar at redhat.com> wrote:
>>
>> On 12/4/23 11:01, Jon Roelofs wrote:
>>> +Tom, Medhi
>>> Should we disable personal branches until this gets fixed? This issue isnโt limited to use of the tool.
>>
>> Are people using user branches other than with spr?
>
> These two look like they might not be SPR branches:
>
> remotes/origin/users/boomanaiden154/exegesis-orcjit1
https://lists.llvm.org/pipermail/llvm-branch-commits/2023-November/022154.html
> remotes/origin/users/paschalis-mpeis/replace-with-veclip-scalable-vec
https://lists.llvm.org/pipermail/llvm-branch-commits/2023-November/022319.html
>
>
> Jon
>
>>
>> -Tom
>>
>>> Jon
>>>> On Dec 4, 2023, at 10:55โฏAM, David Blaikie <dblaikie at gmail.com> wrote:
>>>>
>>>> Ah, thanks for the link to the bug, might be good to hold off on further use of the tool until it's fixed (except where needed for testing) as it's unfortunate noise to add to the already rather noisy llvm-commits fire hose.
>>>>
>>>> Glad to see there's progress being made on a dependent patch review process though, awesome!
>>>>
>>>> On Mon, Dec 4, 2023 at 10:54โฏAM Jon Roelofs <jonathan_roelofs at apple.com <mailto:jonathan_roelofs at apple.com>> wrote:
>>>>
>>>> re-sending, since this email account wasnโt subscribed to the list, and the list rejected it.
>>>>
>>>>> On Dec 4, 2023, at 10:50โฏAM, Jon Roelofs <jonathan_roelofs at apple.com <mailto:jonathan_roelofs at apple.com>> wrote:
>>>>>
>>>>> The tool is [1]. Thread about it here: [2].
>>>>>
>>>>> These arenโt actually commits on the `main` branch. Rather, the infrastructure code has a bug [3] that causes email to be sent to the list when commits are added to personal branches in the users/<username> branch namespace. I have a patch up to fix that, but it needs review [4] and deployment.
>>>>>
>>>>> When this stacked set of PRs eventually lands on `main`, the `[spr]`-titled commits and the branch theyโre on will go away.
>>>>>
>>>>>
>>>>> 1: https://github.com/getcord/spr <https://github.com/getcord/spr>
>>>>> 2: https://discourse.llvm.org/t/update-on-github-pull-requests/71540/146?u=jroelofs <https://discourse.llvm.org/t/update-on-github-pull-requests/71540/146?u=jroelofs>
>>>>> 3: https://github.com/llvm/llvm-project/issues/71185 <https://github.com/llvm/llvm-project/issues/71185>
>>>>> 4: https://github.com/llvm/llvm-admin/pull/7 <https://github.com/llvm/llvm-admin/pull/7>
>>>>>
>>>>>
>>>>> Cheers,
>>>>>
>>>>> Jon
>>>>>
>>>>>> On Dec 4, 2023, at 10:38โฏAM, David Blaikie <dblaikie at gmail.com <mailto:dblaikie at gmail.com>> wrote:
>>>>>>
>>>>>> There's a lot of these "[๐๐ฝ๐ฟ] changes introduced through rebase" patches you've committed, presumably through some tooling - what are they? I assume they're some accident of tooling, and probably aren't intentional, or otherwise shouldn't be made/maybe are meant to be squashed into the actual commits you're trying to make?
>>>>>>
>>>>>> On Tue, Nov 28, 2023 at 2:25โฏPM Jon Roelofs via llvm-commits <llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>> wrote:
>>>>>>
>>>>>>
>>>>>> Author: Jon Roelofs
>>>>>> Date: 2023-11-28T14:25:01-08:00
>>>>>> New Revision: a34d63cab61b3d7bd327b6a90ee4b9e3ed568e85
>>>>>>
>>>>>> URL: https://github.com/llvm/llvm-project/commit/a34d63cab61b3d7bd327b6a90ee4b9e3ed568e85 <https://github.com/llvm/llvm-project/commit/a34d63cab61b3d7bd327b6a90ee4b9e3ed568e85>
>>>>>> DIFF: https://github.com/llvm/llvm-project/commit/a34d63cab61b3d7bd327b6a90ee4b9e3ed568e85.diff <https://github.com/llvm/llvm-project/commit/a34d63cab61b3d7bd327b6a90ee4b9e3ed568e85.diff>
>>>>>>
>>>>>> LOG: [๐๐ฝ๐ฟ] changes introduced through rebase
>>>>>>
>>>>>> Created using spr 1.3.4
>>>>>>
>>>>>> [skip ci]
>>>>>>
>>>>>> Added:
>>>>>>
>>>>>>
>>>>>> Modified:
>>>>>> llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
>>>>>> llvm/lib/CodeGen/GlobalISel/CallLowering.cpp
>>>>>> llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
>>>>>> llvm/test/CodeGen/AArch64/addrsig-macho.ll
>>>>>> llvm/test/CodeGen/AArch64/ifunc-asm.ll
>>>>>>
>>>>>> Removed:
>>>>>> llvm/test/Verifier/ifunc-macho.ll
>>>>>>
>>>>>>
>>>>>> ################################################################################
>>>>>> diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
>>>>>> index 15ff39883680369..b4ac0a70e7fde9c 100644
>>>>>> --- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
>>>>>> +++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
>>>>>> @@ -2300,6 +2300,32 @@ bool AsmPrinter::doFinalization(Module &M) {
>>>>>> // through user plugins.
>>>>>> emitStackMaps();
>>>>>>
>>>>>> + // Print aliases in topological order, that is, for each alias a = b,
>>>>>> + // b must be printed before a.
>>>>>> + // This is because on some targets (e.g. PowerPC) linker expects aliases in
>>>>>> + // such an order to generate correct TOC information.
>>>>>> + SmallVector<const GlobalAlias *, 16> AliasStack;
>>>>>> + SmallPtrSet<const GlobalAlias *, 16> AliasVisited;
>>>>>> + for (const auto &Alias : M.aliases()) {
>>>>>> + if (Alias.hasAvailableExternallyLinkage())
>>>>>> + continue;
>>>>>> + for (const GlobalAlias *Cur = &Alias; Cur;
>>>>>> + Cur = dyn_cast<GlobalAlias>(Cur->getAliasee())) {
>>>>>> + if (!AliasVisited.insert(Cur).second)
>>>>>> + break;
>>>>>> + AliasStack.push_back(Cur);
>>>>>> + }
>>>>>> + for (const GlobalAlias *AncestorAlias : llvm::reverse(AliasStack))
>>>>>> + emitGlobalAlias(M, *AncestorAlias);
>>>>>> + AliasStack.clear();
>>>>>> + }
>>>>>> +
>>>>>> + // IFuncs must come before deubginfo in case the backend decides to emit them
>>>>>> + // as actual functions, since on MachO targets, we cannot create regular
>>>>>> + // sections after DWARF.
>>>>>> + for (const auto &IFunc : M.ifuncs())
>>>>>> + emitGlobalIFunc(M, IFunc);
>>>>>> +
>>>>>> // Finalize debug and EH information.
>>>>>> for (const HandlerInfo &HI : Handlers) {
>>>>>> NamedRegionTimer T(HI.TimerName, HI.TimerDescription, HI.TimerGroupName,
>>>>>> @@ -2339,28 +2365,6 @@ bool AsmPrinter::doFinalization(Module &M) {
>>>>>> }
>>>>>> }
>>>>>>
>>>>>> - // Print aliases in topological order, that is, for each alias a = b,
>>>>>> - // b must be printed before a.
>>>>>> - // This is because on some targets (e.g. PowerPC) linker expects aliases in
>>>>>> - // such an order to generate correct TOC information.
>>>>>> - SmallVector<const GlobalAlias *, 16> AliasStack;
>>>>>> - SmallPtrSet<const GlobalAlias *, 16> AliasVisited;
>>>>>> - for (const auto &Alias : M.aliases()) {
>>>>>> - if (Alias.hasAvailableExternallyLinkage())
>>>>>> - continue;
>>>>>> - for (const GlobalAlias *Cur = &Alias; Cur;
>>>>>> - Cur = dyn_cast<GlobalAlias>(Cur->getAliasee())) {
>>>>>> - if (!AliasVisited.insert(Cur).second)
>>>>>> - break;
>>>>>> - AliasStack.push_back(Cur);
>>>>>> - }
>>>>>> - for (const GlobalAlias *AncestorAlias : llvm::reverse(AliasStack))
>>>>>> - emitGlobalAlias(M, *AncestorAlias);
>>>>>> - AliasStack.clear();
>>>>>> - }
>>>>>> - for (const auto &IFunc : M.ifuncs())
>>>>>> - emitGlobalIFunc(M, IFunc);
>>>>>> -
>>>>>> GCModuleInfo *MI = getAnalysisIfAvailable<GCModuleInfo>();
>>>>>> assert(MI && "AsmPrinter didn't require GCModuleInfo?");
>>>>>> for (GCModuleInfo::iterator I = MI->end(), E = MI->begin(); I != E; )
>>>>>>
>>>>>> diff --git a/llvm/lib/CodeGen/GlobalISel/CallLowering.cpp b/llvm/lib/CodeGen/GlobalISel/CallLowering.cpp
>>>>>> index e0080b145d4f995..ce736178afc8b5a 100644
>>>>>> --- a/llvm/lib/CodeGen/GlobalISel/CallLowering.cpp
>>>>>> +++ b/llvm/lib/CodeGen/GlobalISel/CallLowering.cpp
>>>>>> @@ -147,7 +147,7 @@ bool CallLowering::lowerCall(MachineIRBuilder &MIRBuilder, const CallBase &CB,
>>>>>> if (const GlobalIFunc *IF = dyn_cast<GlobalIFunc>(CalleeV);
>>>>>> IF && MF.getTarget().getTargetTriple().isOSBinFormatMachO()) {
>>>>>> // ld64 requires that .symbol_resolvers to be called via a stub, so these
>>>>>> - // must always be a diret call.
>>>>>> + // must always be a direct call.
>>>>>> Info.Callee = MachineOperand::CreateGA(IF, 0);
>>>>>> } else if (const Function *F = dyn_cast<Function>(CalleeV))
>>>>>> Info.Callee = MachineOperand::CreateGA(F, 0);
>>>>>>
>>>>>> diff --git a/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp b/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
>>>>>> index f4128332008fb83..26b3a14e22b2ad9 100644
>>>>>> --- a/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
>>>>>> +++ b/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
>>>>>> @@ -1965,65 +1965,71 @@ void AArch64AsmPrinter::emitManualSymbolResolver(Module &M,
>>>>>> OutStreamer->emitLabel(StubHelper);
>>>>>> emitVisibility(StubHelper, GI.getVisibility());
>>>>>>
>>>>>> - // stp fp, lr, [sp, #-16]!
>>>>>> - // mov fp, sp
>>>>>> - // stp x1, x0, [sp, #-16]!
>>>>>> - // stp x3, x2, [sp, #-16]!
>>>>>> - // stp x5, x4, [sp, #-16]!
>>>>>> - // stp x7, x6, [sp, #-16]!
>>>>>> - // stp d1, d0, [sp, #-16]!
>>>>>> - // stp d3, d2, [sp, #-16]!
>>>>>> - // stp d5, d4, [sp, #-16]!
>>>>>> - // stp d7, d6, [sp, #-16]!
>>>>>> + // stp fp, lr, [sp, #-16]
>>>>>> + // sub fp, sp, 16
>>>>>> + // stp x1, x0, [sp, #-32]
>>>>>> + // stp x3, x2, [sp, #-48]
>>>>>> + // stp x5, x4, [sp, #-64]
>>>>>> + // stp x7, x6, [sp, #-80]
>>>>>> + // stp d1, d0, [sp, #-96]
>>>>>> + // stp d3, d2, [sp, #-112]
>>>>>> + // stp d5, d4, [sp, #-128]
>>>>>> + // stp d7, d6, [sp, #-144]
>>>>>> + // sub sp, sp, 144
>>>>>> // bl _resolver
>>>>>> // adrp x16, lazy_pointer at GOTPAGE
>>>>>> // ldr x16, [x16, lazy_pointer at GOTPAGEOFF]
>>>>>> // str x0, [x16]
>>>>>> // mov x16, x0
>>>>>> - // ldp d7, d6, [sp], #16
>>>>>> - // ldp d5, d4, [sp], #16
>>>>>> - // ldp d3, d2, [sp], #16
>>>>>> - // ldp d1, d0, [sp], #16
>>>>>> - // ldp x7, x6, [sp], #16
>>>>>> - // ldp x5, x4, [sp], #16
>>>>>> - // ldp x3, x2, [sp], #16
>>>>>> - // ldp x1, x0, [sp], #16
>>>>>> - // ldp fp, lr, [sp], #16
>>>>>> + // add sp, sp, 144
>>>>>> + // ldp d7, d6, [sp, #-144]
>>>>>> + // ldp d5, d4, [sp, #-128]
>>>>>> + // ldp d3, d2, [sp, #-112]
>>>>>> + // ldp d1, d0, [sp, #-96]
>>>>>> + // ldp x7, x6, [sp, #-80]
>>>>>> + // ldp x5, x4, [sp, #-64]
>>>>>> + // ldp x3, x2, [sp, #-48]
>>>>>> + // ldp x1, x0, [sp, #-32]
>>>>>> + // ldp fp, lr, [sp, #-16]
>>>>>> // br x16
>>>>>>
>>>>>> - OutStreamer->emitInstruction(MCInstBuilder(AArch64::STPXpre)
>>>>>> - .addReg(AArch64::SP)
>>>>>> + OutStreamer->emitInstruction(MCInstBuilder(AArch64::STPXi)
>>>>>> .addReg(AArch64::FP)
>>>>>> .addReg(AArch64::LR)
>>>>>> .addReg(AArch64::SP)
>>>>>> .addImm(-2),
>>>>>> *STI);
>>>>>>
>>>>>> - OutStreamer->emitInstruction(MCInstBuilder(AArch64::ADDXri)
>>>>>> + OutStreamer->emitInstruction(MCInstBuilder(AArch64::SUBXri)
>>>>>> .addReg(AArch64::FP)
>>>>>> .addReg(AArch64::SP)
>>>>>> - .addImm(0)
>>>>>> + .addImm(16)
>>>>>> .addImm(0),
>>>>>> *STI);
>>>>>>
>>>>>> - for (int I = 0; I != 4; ++I)
>>>>>> - OutStreamer->emitInstruction(MCInstBuilder(AArch64::STPXpre)
>>>>>> - .addReg(AArch64::SP)
>>>>>> - .addReg(AArch64::X1 + 2 * I)
>>>>>> - .addReg(AArch64::X0 + 2 * I)
>>>>>> + for (int I = 0; I != 8; I += 2)
>>>>>> + OutStreamer->emitInstruction(MCInstBuilder(AArch64::STPXi)
>>>>>> + .addReg(AArch64::X1 + I)
>>>>>> + .addReg(AArch64::X0 + I)
>>>>>> .addReg(AArch64::SP)
>>>>>> - .addImm(-2),
>>>>>> + .addImm(-4 - I),
>>>>>> *STI);
>>>>>>
>>>>>> - for (int I = 0; I != 4; ++I)
>>>>>> - OutStreamer->emitInstruction(MCInstBuilder(AArch64::STPDpre)
>>>>>> + for (int I = 0; I != 8; I += 2)
>>>>>> + OutStreamer->emitInstruction(MCInstBuilder(AArch64::STPDi)
>>>>>> + .addReg(AArch64::D1 + I)
>>>>>> + .addReg(AArch64::D0 + I)
>>>>>> .addReg(AArch64::SP)
>>>>>> - .addReg(AArch64::D1 + 2 * I)
>>>>>> - .addReg(AArch64::D0 + 2 * I)
>>>>>> - .addReg(AArch64::SP)
>>>>>> - .addImm(-2),
>>>>>> + .addImm(-12 - I),
>>>>>> *STI);
>>>>>>
>>>>>> + OutStreamer->emitInstruction(MCInstBuilder(AArch64::SUBXri)
>>>>>> + .addReg(AArch64::SP)
>>>>>> + .addReg(AArch64::SP)
>>>>>> + .addImm(144)
>>>>>> + .addImm(0),
>>>>>> + *STI);
>>>>>> +
>>>>>> OutStreamer->emitInstruction(
>>>>>> MCInstBuilder(AArch64::BL)
>>>>>> .addOperand(MCOperand::createExpr(lowerConstant(GI.getResolver()))),
>>>>>> @@ -2070,30 +2076,34 @@ void AArch64AsmPrinter::emitManualSymbolResolver(Module &M,
>>>>>> .addImm(0),
>>>>>> *STI);
>>>>>>
>>>>>> - for (int I = 3; I != -1; --I)
>>>>>> - OutStreamer->emitInstruction(MCInstBuilder(AArch64::LDPDpost)
>>>>>> - .addReg(AArch64::SP)
>>>>>> - .addReg(AArch64::D1 + 2 * I)
>>>>>> - .addReg(AArch64::D0 + 2 * I)
>>>>>> + OutStreamer->emitInstruction(MCInstBuilder(AArch64::ADDXri)
>>>>>> + .addReg(AArch64::SP)
>>>>>> + .addReg(AArch64::SP)
>>>>>> + .addImm(144)
>>>>>> + .addImm(0),
>>>>>> + *STI);
>>>>>> +
>>>>>> + for (int I = 6; I != -2; I -= 2)
>>>>>> + OutStreamer->emitInstruction(MCInstBuilder(AArch64::LDPDi)
>>>>>> + .addReg(AArch64::D1 + I)
>>>>>> + .addReg(AArch64::D0 + I)
>>>>>> .addReg(AArch64::SP)
>>>>>> - .addImm(2),
>>>>>> + .addImm(-12 - I),
>>>>>> *STI);
>>>>>>
>>>>>> - for (int I = 3; I != -1; --I)
>>>>>> - OutStreamer->emitInstruction(MCInstBuilder(AArch64::LDPXpost)
>>>>>> - .addReg(AArch64::SP)
>>>>>> - .addReg(AArch64::X1 + 2 * I)
>>>>>> - .addReg(AArch64::X0 + 2 * I)
>>>>>> + for (int I = 6; I != -2; I -= 2)
>>>>>> + OutStreamer->emitInstruction(MCInstBuilder(AArch64::LDPXi)
>>>>>> + .addReg(AArch64::X1 + I)
>>>>>> + .addReg(AArch64::X0 + I)
>>>>>> .addReg(AArch64::SP)
>>>>>> - .addImm(2),
>>>>>> + .addImm(-4 - I),
>>>>>> *STI);
>>>>>>
>>>>>> - OutStreamer->emitInstruction(MCInstBuilder(AArch64::LDPXpost)
>>>>>> - .addReg(AArch64::SP)
>>>>>> + OutStreamer->emitInstruction(MCInstBuilder(AArch64::LDPXi)
>>>>>> .addReg(AArch64::FP)
>>>>>> .addReg(AArch64::LR)
>>>>>> .addReg(AArch64::SP)
>>>>>> - .addImm(2),
>>>>>> + .addImm(-2),
>>>>>> *STI);
>>>>>>
>>>>>> OutStreamer->emitInstruction(MCInstBuilder(TM.getTargetTriple().isArm64e()
>>>>>>
>>>>>> diff --git a/llvm/test/CodeGen/AArch64/addrsig-macho.ll b/llvm/test/CodeGen/AArch64/addrsig-macho.ll
>>>>>> index 980b0e7bc446695..62bc764e0251b33 100644
>>>>>> --- a/llvm/test/CodeGen/AArch64/addrsig-macho.ll
>>>>>> +++ b/llvm/test/CodeGen/AArch64/addrsig-macho.ll
>>>>>> @@ -3,6 +3,19 @@
>>>>>> ; RUN: llvm-objdump --macho --section-headers %t | FileCheck %s --check-prefix=SECTIONS
>>>>>> ; RUN: llvm-objdump --macho --reloc %t | FileCheck %s --check-prefix=RELOCS
>>>>>>
>>>>>> +; CHECK: .section __DATA,__data
>>>>>> +; CHECK: _i1.lazy_pointer:
>>>>>> +; CHECK: .section __TEXT,__text,regular,pure_instructions
>>>>>> +; CHECK: _i1:
>>>>>> +; CHECK: _i1.stub_helper:
>>>>>> +; CHECK: .section __DATA,__data
>>>>>> +; CHECK: _i2.lazy_pointer:
>>>>>> +; CHECK: .section __TEXT,__text,regular,pure_instructions
>>>>>> +; CHECK: _i2:
>>>>>> +; CHECK: _i2.stub_helper:
>>>>>> +
>>>>>> +; CHECK: .section __DWARF
>>>>>> +
>>>>>> ; CHECK: .addrsig{{$}}
>>>>>> ; CHECK-NEXT: .addrsig_sym _func03_takeaddr
>>>>>> ; CHECK-NEXT: .addrsig_sym _f1
>>>>>> @@ -118,8 +131,8 @@ declare void @f3() unnamed_addr
>>>>>> @a1 = alias i32, i32* @g1
>>>>>> @a2 = internal local_unnamed_addr alias i32, i32* @g2
>>>>>>
>>>>>> - at i1 = external ifunc void(), void()* ()* @f1
>>>>>> - at i2 = external local_unnamed_addr ifunc void(), void()* ()* @f2
>>>>>> + at i1 = ifunc void(), void()* ()* @f1
>>>>>> + at i2 = internal local_unnamed_addr ifunc void(), void()* ()* @f2
>>>>>>
>>>>>> declare void @llvm.dbg.value(metadata, metadata, metadata)
>>>>>>
>>>>>>
>>>>>> diff --git a/llvm/test/CodeGen/AArch64/ifunc-asm.ll b/llvm/test/CodeGen/AArch64/ifunc-asm.ll
>>>>>> index fbc0f74cee46baa..ede669aa52703f7 100644
>>>>>> --- a/llvm/test/CodeGen/AArch64/ifunc-asm.ll
>>>>>> +++ b/llvm/test/CodeGen/AArch64/ifunc-asm.ll
>>>>>> @@ -3,79 +3,82 @@
>>>>>> ; RUN: llc -mtriple=arm64-apple-darwin %s -filetype=asm -o - -arm64-darwin-ifunc-symbol_resolver=if_supported | FileCheck %s --check-prefixes=MACHO,MACHO-DEFAULT
>>>>>> ; RUN: llc -mtriple=arm64-apple-darwin %s -filetype=asm -o - -arm64-darwin-ifunc-symbol_resolver=never | FileCheck %s --check-prefixes=MACHO,MACHO-MANUAL
>>>>>> ; RUN: llc -mtriple=arm64-apple-darwin %s -filetype=asm -o - | FileCheck %s --check-prefixes=MACHO,MACHO-MANUAL
>>>>>> +; RUN: llc -mtriple=arm64-apple-darwin %s -filetype=asm -o - -global-isel | FileCheck %s --check-prefixes=MACHO,MACHO-MANUAL
>>>>>>
>>>>>> -define internal ptr @foo_resolver() {
>>>>>> +define internal ptr @the_resolver() {
>>>>>> entry:
>>>>>> ret ptr null
>>>>>> }
>>>>>> -; ELF: .type foo_resolver, at function
>>>>>> -; ELF-NEXT: foo_resolver:
>>>>>> +; ELF: .type the_resolver, at function
>>>>>> +; ELF-NEXT: the_resolver:
>>>>>>
>>>>>> ; MACHO: .p2align 2
>>>>>> -; MACHO-NEXT: _foo_resolver
>>>>>> +; MACHO-NEXT: _the_resolver
>>>>>>
>>>>>>
>>>>>> - at foo_ifunc = ifunc i32 (i32), ptr @foo_resolver
>>>>>> -; ELF: .globl foo_ifunc
>>>>>> -; ELF-NEXT: .type foo_ifunc, at gnu_indirect_function
>>>>>> -; ELF-NEXT: .set foo_ifunc, foo_resolver
>>>>>> + at global_ifunc = ifunc i32 (i32), ptr @the_resolver
>>>>>> +; ELF: .globl global_ifunc
>>>>>> +; ELF-NEXT: .type global_ifunc, at gnu_indirect_function
>>>>>> +; ELF-NEXT: .set global_ifunc, the_resolver
>>>>>>
>>>>>> -; MACHO-LINKER: .globl _foo_ifunc
>>>>>> +; MACHO-LINKER: .globl _global_ifunc
>>>>>> ; MACHO-LINKER-NEXT: .p2align 2
>>>>>> -; MACHO-LINKER-NEXT: _foo_ifunc:
>>>>>> -; MACHO-LINKER-NEXT: .symbol_resolver _foo_ifunc
>>>>>> -; MACHO-LINKER-NEXT: b _foo_resolver
>>>>>> +; MACHO-LINKER-NEXT: _global_ifunc:
>>>>>> +; MACHO-LINKER-NEXT: .symbol_resolver _global_ifunc
>>>>>> +; MACHO-LINKER-NEXT: b _the_resolver
>>>>>>
>>>>>> -; MACHO-DEFAULT: .globl _foo_ifunc
>>>>>> +; MACHO-DEFAULT: .globl _global_ifunc
>>>>>> ; MACHO-DEFAULT-NEXT: .p2align 2
>>>>>> -; MACHO-DEFAULT-NEXT: _foo_ifunc:
>>>>>> -; MACHO-DEFAULT-NEXT: .symbol_resolver _foo_ifunc
>>>>>> -; MACHO-DEFAULT-NEXT: b _foo_resolver
>>>>>> +; MACHO-DEFAULT-NEXT: _global_ifunc:
>>>>>> +; MACHO-DEFAULT-NEXT: .symbol_resolver _global_ifunc
>>>>>> +; MACHO-DEFAULT-NEXT: b _the_resolver
>>>>>>
>>>>>> ; MACHO-MANUAL: .section __DATA,__data
>>>>>> -; MACHO-MANUAL-NEXT: .globl _foo_ifunc.lazy_pointer
>>>>>> -; MACHO-MANUAL-NEXT: _foo_ifunc.lazy_pointer:
>>>>>> -; MACHO-MANUAL-NEXT: .quad _foo_ifunc.stub_helper
>>>>>> +; MACHO-MANUAL-NEXT: .globl _global_ifunc.lazy_pointer
>>>>>> +; MACHO-MANUAL-NEXT: _global_ifunc.lazy_pointer:
>>>>>> +; MACHO-MANUAL-NEXT: .quad _global_ifunc.stub_helper
>>>>>>
>>>>>> ; MACHO-MANUAL: .section __TEXT,__text,regular,pure_instructions
>>>>>> -; MACHO-MANUAL-NEXT: .globl _foo_ifunc
>>>>>> +; MACHO-MANUAL-NEXT: .globl _global_ifunc
>>>>>> ; MACHO-MANUAL-NEXT: .p2align 2
>>>>>> -; MACHO-MANUAL-NEXT: _foo_ifunc:
>>>>>> -; MACHO-MANUAL-NEXT: adrp x16, _foo_ifunc.lazy_pointer at GOTPAGE
>>>>>> -; MACHO-MANUAL-NEXT: ldr x16, [x16, _foo_ifunc.lazy_pointer at GOTPAGEOFF]
>>>>>> +; MACHO-MANUAL-NEXT: _global_ifunc:
>>>>>> +; MACHO-MANUAL-NEXT: adrp x16, _global_ifunc.lazy_pointer at GOTPAGE
>>>>>> +; MACHO-MANUAL-NEXT: ldr x16, [x16, _global_ifunc.lazy_pointer at GOTPAGEOFF]
>>>>>> ; MACHO-MANUAL-NEXT: ldr x16, [x16]
>>>>>> ; MACHO-MANUAL-NEXT: br x16
>>>>>> -; MACHO-MANUAL-NEXT: .globl _foo_ifunc.stub_helper
>>>>>> +; MACHO-MANUAL-NEXT: .globl _global_ifunc.stub_helper
>>>>>> ; MACHO-MANUAL-NEXT: .p2align 2
>>>>>> -; MACHO-MANUAL-NEXT: _foo_ifunc.stub_helper:
>>>>>> -; MACHO-MANUAL-NEXT: stp x29, x30, [sp, #-16]!
>>>>>> -; MACHO-MANUAL-NEXT: mov x29, sp
>>>>>> -; MACHO-MANUAL-NEXT: stp x1, x0, [sp, #-16]!
>>>>>> -; MACHO-MANUAL-NEXT: stp x3, x2, [sp, #-16]!
>>>>>> -; MACHO-MANUAL-NEXT: stp x5, x4, [sp, #-16]!
>>>>>> -; MACHO-MANUAL-NEXT: stp x7, x6, [sp, #-16]!
>>>>>> -; MACHO-MANUAL-NEXT: stp d1, d0, [sp, #-16]!
>>>>>> -; MACHO-MANUAL-NEXT: stp d3, d2, [sp, #-16]!
>>>>>> -; MACHO-MANUAL-NEXT: stp d5, d4, [sp, #-16]!
>>>>>> -; MACHO-MANUAL-NEXT: stp d7, d6, [sp, #-16]!
>>>>>> -; MACHO-MANUAL-NEXT: bl _foo_resolver
>>>>>> -; MACHO-MANUAL-NEXT: adrp x16, _foo_ifunc.lazy_pointer at GOTPAGE
>>>>>> -; MACHO-MANUAL-NEXT: ldr x16, [x16, _foo_ifunc.lazy_pointer at GOTPAGEOFF]
>>>>>> +; MACHO-MANUAL-NEXT: _global_ifunc.stub_helper:
>>>>>> +; MACHO-MANUAL-NEXT: stp x29, x30, [sp, #-16]
>>>>>> +; MACHO-MANUAL-NEXT: sub x29, sp, #16
>>>>>> +; MACHO-MANUAL-NEXT: stp x1, x0, [sp, #-32]
>>>>>> +; MACHO-MANUAL-NEXT: stp x3, x2, [sp, #-48]
>>>>>> +; MACHO-MANUAL-NEXT: stp x5, x4, [sp, #-64]
>>>>>> +; MACHO-MANUAL-NEXT: stp x7, x6, [sp, #-80]
>>>>>> +; MACHO-MANUAL-NEXT: stp d1, d0, [sp, #-96]
>>>>>> +; MACHO-MANUAL-NEXT: stp d3, d2, [sp, #-112]
>>>>>> +; MACHO-MANUAL-NEXT: stp d5, d4, [sp, #-128]
>>>>>> +; MACHO-MANUAL-NEXT: stp d7, d6, [sp, #-144]
>>>>>> +; MACHO-MANUAL-NEXT: sub sp, sp, #144
>>>>>> +; MACHO-MANUAL-NEXT: bl _the_resolver
>>>>>> +; MACHO-MANUAL-NEXT: adrp x16, _global_ifunc.lazy_pointer at GOTPAGE
>>>>>> +; MACHO-MANUAL-NEXT: ldr x16, [x16, _global_ifunc.lazy_pointer at GOTPAGEOFF]
>>>>>> ; MACHO-MANUAL-NEXT: str x0, [x16]
>>>>>> ; MACHO-MANUAL-NEXT: add x16, x0, #0
>>>>>> -; MACHO-MANUAL-NEXT: ldp d7, d6, [sp], #16
>>>>>> -; MACHO-MANUAL-NEXT: ldp d5, d4, [sp], #16
>>>>>> -; MACHO-MANUAL-NEXT: ldp d3, d2, [sp], #16
>>>>>> -; MACHO-MANUAL-NEXT: ldp d1, d0, [sp], #16
>>>>>> -; MACHO-MANUAL-NEXT: ldp x7, x6, [sp], #16
>>>>>> -; MACHO-MANUAL-NEXT: ldp x5, x4, [sp], #16
>>>>>> -; MACHO-MANUAL-NEXT: ldp x3, x2, [sp], #16
>>>>>> -; MACHO-MANUAL-NEXT: ldp x1, x0, [sp], #16
>>>>>> -; MACHO-MANUAL-NEXT: ldp x29, x30, [sp], #16
>>>>>> +; MACHO-MANUAL-NEXT: add sp, sp, #144
>>>>>> +; MACHO-MANUAL-NEXT: ldp d7, d6, [sp, #-144]
>>>>>> +; MACHO-MANUAL-NEXT: ldp d5, d4, [sp, #-128]
>>>>>> +; MACHO-MANUAL-NEXT: ldp d3, d2, [sp, #-112]
>>>>>> +; MACHO-MANUAL-NEXT: ldp d1, d0, [sp, #-96]
>>>>>> +; MACHO-MANUAL-NEXT: ldp x7, x6, [sp, #-80]
>>>>>> +; MACHO-MANUAL-NEXT: ldp x5, x4, [sp, #-64]
>>>>>> +; MACHO-MANUAL-NEXT: ldp x3, x2, [sp, #-48]
>>>>>> +; MACHO-MANUAL-NEXT: ldp x1, x0, [sp, #-32]
>>>>>> +; MACHO-MANUAL-NEXT: ldp x29, x30, [sp, #-16]
>>>>>> ; MACHO-MANUAL-NEXT: br x16
>>>>>>
>>>>>>
>>>>>> - at weak_ifunc = weak ifunc i32 (i32), ptr @foo_resolver
>>>>>> + at weak_ifunc = weak ifunc i32 (i32), ptr @the_resolver
>>>>>> ; ELF: .type weak_ifunc, at gnu_indirect_function
>>>>>> ; MACHO-LINKER: .symbol_resolver _weak_ifunc
>>>>>> ; MACHO-MANUAL: _weak_ifunc.stub_helper:
>>>>>>
>>>>>> diff --git a/llvm/test/Verifier/ifunc-macho.ll b/llvm/test/Verifier/ifunc-macho.ll
>>>>>> deleted file mode 100644
>>>>>> index 2e2166645983ac3..000000000000000
>>>>>> --- a/llvm/test/Verifier/ifunc-macho.ll
>>>>>> +++ /dev/null
>>>>>> @@ -1,42 +0,0 @@
>>>>>> -; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s
>>>>>> -
>>>>>> -target triple = "arm64-apple-ios"
>>>>>> -
>>>>>> -define ptr @resolver() {
>>>>>> - ret ptr null
>>>>>> -}
>>>>>> -
>>>>>> - at g = external global i32
>>>>>> - at inval_objtype = ifunc void (), ptr @g
>>>>>> -; CHECK: IFunc must have a Function resolver
>>>>>> -
>>>>>> -declare ptr @resolver_decl()
>>>>>> - at inval_resolver_decl = ifunc void (), ptr @resolver_decl
>>>>>> -; CHECK: IFunc resolver must be a definition
>>>>>> -; CHECK-NEXT: @inval_resolver_decl
>>>>>> -
>>>>>> -define available_externally ptr @resolver_linker_decl() {
>>>>>> - ret ptr null
>>>>>> -}
>>>>>> - at inval_resolver_decl2 = ifunc void (), ptr @resolver_linker_decl
>>>>>> -; CHECK: IFunc resolver must be a definition
>>>>>> -; CHECK-NEXT: @inval_resolver_decl2
>>>>>> -
>>>>>> - at ifunc_nonpointer_return_type = ifunc i32 (), ptr @resolver_returns_nonpointer
>>>>>> -; CHECK: IFunc resolver must return a pointer
>>>>>> -; CHECK-NEXT: ptr @ifunc_nonpointer_return_type
>>>>>> -
>>>>>> -define i32 @resolver_returns_nonpointer() {
>>>>>> - ret i32 0
>>>>>> -}
>>>>>> -
>>>>>> - at valid_external = ifunc void (), ptr @resolver
>>>>>> -; CHECK-NOT: valid_external
>>>>>> -
>>>>>> - at inval_linkonce = linkonce ifunc void (), ptr @resolver
>>>>>> -
>>>>>> - at inval_weak = weak ifunc void (), ptr @resolver
>>>>>> -
>>>>>> - at inval_weak_extern = extern_weak ifunc void (), ptr @resolver
>>>>>> -
>>>>>> - at inval_private = private ifunc void (), ptr @resolver
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> llvm-commits mailing list
>>>>>> llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>
>>>>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits <https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits>
>>>>>>
>>>>>
>>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20231204/6db2844b/attachment-0001.html>
More information about the llvm-commits
mailing list