<div dir="ltr">FYI, the immediate problem has been fixed in r364611.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jun 28, 2019 at 10:29 AM Diana Picus <<a href="mailto:diana.picus@linaro.org">diana.picus@linaro.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Thanks, I'll investigate!<br>
<br>
On Thu, 27 Jun 2019 at 18:48, Alexander Kornienko <<a href="mailto:alexfh@google.com" target="_blank">alexfh@google.com</a>> wrote:<br>
><br>
> This revision seems to be causing a test failure (llvm/test/CodeGen/AArch64/GlobalISel/swifterror.ll) under ASAN. It may also be one of the related patches you checked in today, but this one looks most suspicious to me. Please fix or revert. Thanks!<br>
><br>
> ASAN logs:<br>
> =================================================================<br>
> ==7505==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7f2d86b01d20 at pc 0x55a3523bfeba bp 0x7ffc4b0153c0 sp 0x7ffc4b014b88<br>
> READ of size 4 at 0x7f2d86b01d20 thread T0<br>
>     #0 0x55a3523bfeb9 in __asan_memcpy llvm/projects/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cc:22:3<br>
>     #1 0x55a3527f785c in void llvm::SmallVectorTemplateBase<llvm::Register, true>::uninitialized_copy<llvm::Register const, llvm::Register>(llvm::Register const*, llvm::Register const*, llvm::Register*, std::__g::enable_if<std::is_same<std::__g::remove_const<llvm::Register const>::type, llvm::Register>::value, void>::type*) llvm/include/llvm/ADT/SmallVector.h:294:7<br>
>     #2 0x55a3527f76bb in void llvm::SmallVectorImpl<llvm::Register>::append<llvm::Register const*, void>(llvm::Register const*, llvm::Register const*) llvm/include/llvm/ADT/SmallVector.h:392:5<br>
>     #3 0x55a3527f660b in llvm::CallLowering::ArgInfo::ArgInfo(llvm::ArrayRef<llvm::Register>, llvm::Type*, llvm::ISD::ArgFlagsTy, bool) llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:53:11<br>
>     #4 0x55a35400ebcb in llvm::CallLowering::lowerCall(llvm::MachineIRBuilder&, llvm::ImmutableCallSite, llvm::ArrayRef<llvm::Register>, llvm::ArrayRef<llvm::ArrayRef<llvm::Register> >, llvm::Register, std::__g::function<unsigned int ()>) const llvm/lib/CodeGen/GlobalISel/CallLowering.cpp:44:13<br>
>     #5 0x55a354032f07 in llvm::IRTranslator::translateCall(llvm::User const&, llvm::MachineIRBuilder&) llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp:1580:14<br>
>     #6 0x55a35403932a in llvm::IRTranslator::translate(llvm::Instruction const&) llvm/include/llvm/IR/Instruction.def:209:1<br>
>     #7 0x55a35403abd9 in llvm::IRTranslator::runOnMachineFunction(llvm::MachineFunction&) llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp:2298:13<br>
>     #8 0x55a3543bd8d8 in llvm::MachineFunctionPass::runOnFunction(llvm::Function&) llvm/lib/CodeGen/MachineFunctionPass.cpp:73:13<br>
>     #9 0x55a35685c158 in llvm::FPPassManager::runOnFunction(llvm::Function&) llvm/lib/IR/LegacyPassManager.cpp:1648:27<br>
>     #10 0x55a35685c5f2 in llvm::FPPassManager::runOnModule(llvm::Module&) llvm/lib/IR/LegacyPassManager.cpp:1685:16<br>
>     #11 0x55a35685cf68 in (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) llvm/lib/IR/LegacyPassManager.cpp:1752:27<br>
>     #12 0x55a35685c915 in llvm::legacy::PassManagerImpl::run(llvm::Module&) llvm/lib/IR/LegacyPassManager.cpp:1865:44<br>
>     #13 0x55a3523dbfa9 in compileModule(char**, llvm::LLVMContext&) llvm/tools/llc/llc.cpp:601:8<br>
>     #14 0x55a3523d9e4f in main llvm/tools/llc/llc.cpp:355:22<br>
> ...<br>
><br>
> Address 0x7f2d86b01d20 is located in stack of thread T0 at offset 288 in frame<br>
>     #0 0x55a3540321cf in llvm::IRTranslator::translateCall(llvm::User const&, llvm::MachineIRBuilder&) llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp:1540<br>
><br>
>   This frame has 19 object(s):<br>
>     [32, 176) 'Args' (line 1562)<br>
>     [240, 244) 'SwiftErrorVReg' (line 1563)<br>
>     [256, 272) 'ref.tmp' (line 1564)<br>
>     [288, 292) 'InVReg' (line 1567) <== Memory access at offset 288 is inside this variable<br>
>     [304, 320) 'agg.tmp43'<br>
>     [336, 352) 'ref.tmp47' (line 1568)<br>
>     [368, 392) 'ref.tmp50' (line 1568)<br>
>     [432, 448) 'ref.tmp58' (line 1570)<br>
>     [464, 480) 'ref.tmp66' (line 1575)<br>
>     [496, 504) 'agg.tmp76'<br>
>     [528, 544) 'agg.tmp78'<br>
>     [560, 592) 'agg.tmp80'<br>
>     [624, 640) 'ResultRegs' (line 1591)<br>
>     [656, 672) 'MIB' (line 1597)<br>
>     [688, 704) 'ref.tmp112' (line 1602)<br>
>     [720, 736) 'VRegs' (line 1606)<br>
>     [752, 800) 'Info' (line 1614)<br>
>     [832, 856) 'agg.tmp167'<br>
>     [896, 920) 'ref.tmp174' (line 1622)<br>
><br>
> On Thu, Jun 27, 2019 at 11:18 AM Diana Picus via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br>
>><br>
>> Author: rovka<br>
>> Date: Thu Jun 27 02:18:03 2019<br>
>> New Revision: 364512<br>
>><br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=364512&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=364512&view=rev</a><br>
>> Log:<br>
>> [GlobalISel] Accept multiple vregs for lowerCall's args<br>
>><br>
>> Change the interface of CallLowering::lowerCall to accept several<br>
>> virtual registers for each argument, instead of just one.  This is a<br>
>> follow-up to D46018.<br>
>><br>
>> CallLowering::lowerReturn was similarly refactored in D49660 and<br>
>> lowerFormalArguments in D63549.<br>
>><br>
>> With this change, we no longer pack the virtual registers generated for<br>
>> aggregates into one big lump before delegating to the target. Therefore,<br>
>> the target can decide itself whether it wants to handle them as separate<br>
>> pieces or use one big register.<br>
>><br>
>> ARM and AArch64 have been updated to use the passed in virtual registers<br>
>> directly, which means we no longer need to generate so many<br>
>> merge/extract instructions.<br>
>><br>
>> NFCI for AMDGPU, Mips and X86.<br>
>><br>
>> Differential Revision: <a href="https://reviews.llvm.org/D63551" rel="noreferrer" target="_blank">https://reviews.llvm.org/D63551</a><br>
>><br>
>> Modified:<br>
>>     llvm/trunk/include/llvm/CodeGen/GlobalISel/CallLowering.h<br>
>>     llvm/trunk/lib/CodeGen/GlobalISel/CallLowering.cpp<br>
>>     llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp<br>
>>     llvm/trunk/lib/Target/AArch64/AArch64CallLowering.cpp<br>
>>     llvm/trunk/lib/Target/ARM/ARMCallLowering.cpp<br>
>>     llvm/trunk/lib/Target/X86/X86CallLowering.cpp<br>
>>     llvm/trunk/test/CodeGen/AArch64/GlobalISel/call-translator-cse.ll<br>
>>     llvm/trunk/test/CodeGen/AArch64/GlobalISel/call-translator-ios.ll<br>
>>     llvm/trunk/test/CodeGen/AArch64/GlobalISel/call-translator.ll<br>
>>     llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-param-lowering.ll<br>
>><br>
>> Modified: llvm/trunk/include/llvm/CodeGen/GlobalISel/CallLowering.h<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/GlobalISel/CallLowering.h?rev=364512&r1=364511&r2=364512&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/GlobalISel/CallLowering.h?rev=364512&r1=364511&r2=364512&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/include/llvm/CodeGen/GlobalISel/CallLowering.h (original)<br>
>> +++ llvm/trunk/include/llvm/CodeGen/GlobalISel/CallLowering.h Thu Jun 27 02:18:03 2019<br>
>> @@ -262,8 +262,10 @@ public:<br>
>>    /// stored (or 0 if there is no return value). There will be one register for<br>
>>    /// each non-aggregate type, as returned by \c computeValueLLTs.<br>
>>    ///<br>
>> -  /// \p ArgRegs is a list of virtual registers containing each argument that<br>
>> -  /// needs to be passed.<br>
>> +  /// \p ArgRegs is a list of lists of virtual registers containing each<br>
>> +  /// argument that needs to be passed (argument \c i should be placed in \c<br>
>> +  /// ArgRegs[i]). For each argument, there will be one register for each<br>
>> +  /// non-aggregate type, as returned by \c computeValueLLTs.<br>
>>    ///<br>
>>    /// \p SwiftErrorVReg is non-zero if the call has a swifterror inout<br>
>>    /// parameter, and contains the vreg that the swifterror should be copied into<br>
>> @@ -276,8 +278,8 @@ public:<br>
>>    ///<br>
>>    /// \return true if the lowering succeeded, false otherwise.<br>
>>    bool lowerCall(MachineIRBuilder &MIRBuilder, ImmutableCallSite CS,<br>
>> -                 ArrayRef<Register> ResRegs, ArrayRef<Register> ArgRegs,<br>
>> -                 Register SwiftErrorVReg,<br>
>> +                 ArrayRef<Register> ResRegs,<br>
>> +                 ArrayRef<ArrayRef<Register>> ArgRegs, Register SwiftErrorVReg,<br>
>>                   std::function<unsigned()> GetCalleeReg) const;<br>
>>  };<br>
>><br>
>><br>
>> Modified: llvm/trunk/lib/CodeGen/GlobalISel/CallLowering.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalISel/CallLowering.cpp?rev=364512&r1=364511&r2=364512&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalISel/CallLowering.cpp?rev=364512&r1=364511&r2=364512&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/CodeGen/GlobalISel/CallLowering.cpp (original)<br>
>> +++ llvm/trunk/lib/CodeGen/GlobalISel/CallLowering.cpp Thu Jun 27 02:18:03 2019<br>
>> @@ -29,7 +29,7 @@ void CallLowering::anchor() {}<br>
>><br>
>>  bool CallLowering::lowerCall(MachineIRBuilder &MIRBuilder, ImmutableCallSite CS,<br>
>>                               ArrayRef<Register> ResRegs,<br>
>> -                             ArrayRef<Register> ArgRegs,<br>
>> +                             ArrayRef<ArrayRef<Register>> ArgRegs,<br>
>>                               Register SwiftErrorVReg,<br>
>>                               std::function<unsigned()> GetCalleeReg) const {<br>
>>    auto &DL = CS.getParent()->getParent()->getParent()->getDataLayout();<br>
>><br>
>> Modified: llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp?rev=364512&r1=364511&r2=364512&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp?rev=364512&r1=364511&r2=364512&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp (original)<br>
>> +++ llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp Thu Jun 27 02:18:03 2019<br>
>> @@ -1587,8 +1587,8 @@ bool IRTranslator::translateCall(const U<br>
>>    if (!F || !F->isIntrinsic() || ID == Intrinsic::not_intrinsic) {<br>
>>      ArrayRef<Register> Res = getOrCreateVRegs(CI);<br>
>><br>
>> -    SmallVector<Register, 8> Args;<br>
>> -    Register SwiftErrorVReg;<br>
>> +    SmallVector<ArrayRef<Register>, 8> Args;<br>
>> +    Register SwiftErrorVReg = 0;<br>
>>      for (auto &Arg: CI.arg_operands()) {<br>
>>        if (CLI->supportSwiftError() && isSwiftError(Arg)) {<br>
>>          LLT Ty = getLLTForType(*Arg->getType(), *DL);<br>
>> @@ -1600,7 +1600,7 @@ bool IRTranslator::translateCall(const U<br>
>>              SwiftError.getOrCreateVRegDefAt(&CI, &MIRBuilder.getMBB(), Arg);<br>
>>          continue;<br>
>>        }<br>
>> -      Args.push_back(packRegs(*Arg, MIRBuilder));<br>
>> +      Args.push_back(getOrCreateVRegs(*Arg));<br>
>>      }<br>
>><br>
>>      MF->getFrameInfo().setHasCalls(true);<br>
>> @@ -1684,7 +1684,7 @@ bool IRTranslator::translateInvoke(const<br>
>>    ArrayRef<Register> Res;<br>
>>    if (!I.getType()->isVoidTy())<br>
>>      Res = getOrCreateVRegs(I);<br>
>> -  SmallVector<Register, 8> Args;<br>
>> +  SmallVector<ArrayRef<Register>, 8> Args;<br>
>>    Register SwiftErrorVReg = 0;<br>
>>    for (auto &Arg : I.arg_operands()) {<br>
>>      if (CLI->supportSwiftError() && isSwiftError(Arg)) {<br>
>> @@ -1698,7 +1698,7 @@ bool IRTranslator::translateInvoke(const<br>
>>        continue;<br>
>>      }<br>
>><br>
>> -    Args.push_back(packRegs(*Arg, MIRBuilder));<br>
>> +    Args.push_back(getOrCreateVRegs(*Arg));<br>
>>    }<br>
>><br>
>>    if (!CLI->lowerCall(MIRBuilder, &I, Res, Args, SwiftErrorVReg,<br>
>><br>
>> Modified: llvm/trunk/lib/Target/AArch64/AArch64CallLowering.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64CallLowering.cpp?rev=364512&r1=364511&r2=364512&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64CallLowering.cpp?rev=364512&r1=364511&r2=364512&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Target/AArch64/AArch64CallLowering.cpp (original)<br>
>> +++ llvm/trunk/lib/Target/AArch64/AArch64CallLowering.cpp Thu Jun 27 02:18:03 2019<br>
>> @@ -441,10 +441,9 @@ bool AArch64CallLowering::lowerCall(Mach<br>
>><br>
>>    SmallVector<ArgInfo, 8> SplitArgs;<br>
>>    for (auto &OrigArg : OrigArgs) {<br>
>> -    assert(OrigArg.Regs.size() == 1 && "Can't handle multple regs yet");<br>
>>      splitToValueTypes(OrigArg, SplitArgs, DL, MRI, CallConv,<br>
>>                        [&](Register Reg, uint64_t Offset) {<br>
>> -                        MIRBuilder.buildExtract(Reg, OrigArg.Regs[0], Offset);<br>
>> +                        llvm_unreachable("Call params should already be split");<br>
>>                        });<br>
>>      // AAPCS requires that we zero-extend i1 to 8 bits by the caller.<br>
>>      if (OrigArg.Ty->isIntegerTy(1))<br>
>><br>
>> Modified: llvm/trunk/lib/Target/ARM/ARMCallLowering.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMCallLowering.cpp?rev=364512&r1=364511&r2=364512&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMCallLowering.cpp?rev=364512&r1=364511&r2=364512&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Target/ARM/ARMCallLowering.cpp (original)<br>
>> +++ llvm/trunk/lib/Target/ARM/ARMCallLowering.cpp Thu Jun 27 02:18:03 2019<br>
>> @@ -596,14 +596,9 @@ bool ARMCallLowering::lowerCall(MachineI<br>
>>      if (Arg.Flags.isByVal())<br>
>>        return false;<br>
>><br>
>> -    assert(Arg.Regs.size() == 1 && "Can't handle multple regs yet");<br>
>> -<br>
>> -    SmallVector<Register, 8> Regs;<br>
>> -    splitToValueTypes(Arg, ArgInfos, MF,<br>
>> -                      [&](unsigned Reg) { Regs.push_back(Reg); });<br>
>> -<br>
>> -    if (Regs.size() > 1)<br>
>> -      MIRBuilder.buildUnmerge(Regs, Arg.Regs[0]);<br>
>> +    splitToValueTypes(Arg, ArgInfos, MF, [&](Register Reg) {<br>
>> +      llvm_unreachable("Function args should already be split");<br>
>> +    });<br>
>>    }<br>
>><br>
>>    auto ArgAssignFn = TLI.CCAssignFnForCall(CallConv, IsVarArg);<br>
>><br>
>> Modified: llvm/trunk/lib/Target/X86/X86CallLowering.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86CallLowering.cpp?rev=364512&r1=364511&r2=364512&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86CallLowering.cpp?rev=364512&r1=364511&r2=364512&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Target/X86/X86CallLowering.cpp (original)<br>
>> +++ llvm/trunk/lib/Target/X86/X86CallLowering.cpp Thu Jun 27 02:18:03 2019<br>
>> @@ -409,7 +409,9 @@ bool X86CallLowering::lowerCall(MachineI<br>
>>      if (OrigArg.Flags.isByVal())<br>
>>        return false;<br>
>><br>
>> -    assert(OrigArg.Regs.size() == 1 && "Can't handle multple regs yet");<br>
>> +    if (OrigArg.Regs.size() > 1)<br>
>> +      return false;<br>
>> +<br>
>>      if (!splitToValueTypes(OrigArg, SplitArgs, DL, MRI,<br>
>>                             [&](ArrayRef<Register> Regs) {<br>
>>                               MIRBuilder.buildUnmerge(Regs, OrigArg.Regs[0]);<br>
>><br>
>> Modified: llvm/trunk/test/CodeGen/AArch64/GlobalISel/call-translator-cse.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/GlobalISel/call-translator-cse.ll?rev=364512&r1=364511&r2=364512&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/GlobalISel/call-translator-cse.ll?rev=364512&r1=364511&r2=364512&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/CodeGen/AArch64/GlobalISel/call-translator-cse.ll (original)<br>
>> +++ llvm/trunk/test/CodeGen/AArch64/GlobalISel/call-translator-cse.ll Thu Jun 27 02:18:03 2019<br>
>> @@ -7,20 +7,14 @@<br>
>>  ; CHECK: [[GEP:%[0-9]+]]:_(p0) = G_GEP [[ADDR]], [[CST]](s64)<br>
>>  ; CHECK: [[HI:%[0-9]+]]:_(s64) = G_LOAD [[GEP]](p0) :: (load 8 from %ir.ptr + 8)<br>
>><br>
>> -; CHECK: [[IMPDEF:%[0-9]+]]:_(s128) = G_IMPLICIT_DEF<br>
>> -; CHECK: [[INS1:%[0-9]+]]:_(s128) = G_INSERT [[IMPDEF]], [[LO]](s64), 0<br>
>> -; CHECK: [[INS2:%[0-9]+]]:_(s128) = G_INSERT [[INS1]], [[HI]](s64), 64<br>
>> -; CHECK: [[EXTLO:%[0-9]+]]:_(s64) = G_EXTRACT [[INS2]](s128), 0<br>
>> -; CHECK: [[EXTHI:%[0-9]+]]:_(s64) = G_EXTRACT [[INS2]](s128), 64<br>
>> -<br>
>>  ; CHECK: [[SP:%[0-9]+]]:_(p0) = COPY $sp<br>
>>  ; CHECK: [[CST2:%[0-9]+]]:_(s64) = G_CONSTANT i64 0<br>
>>  ; CHECK: [[GEP2:%[0-9]+]]:_(p0) = G_GEP [[SP]], [[CST2]](s64)<br>
>> -; CHECK: G_STORE [[EXTLO]](s64), [[GEP2]](p0) :: (store 8 into stack, align 1)<br>
>> +; CHECK: G_STORE [[LO]](s64), [[GEP2]](p0) :: (store 8 into stack, align 1)<br>
>>  ; CHECK: [[SP:%[0-9]+]]:_(p0) = COPY $sp<br>
>>  ; CHECK: [[CST3:%[0-9]+]]:_(s64) = COPY [[CST]]<br>
>>  ; CHECK: [[GEP3:%[0-9]+]]:_(p0) = G_GEP [[SP]], [[CST3]](s64)<br>
>> -; CHECK: G_STORE [[EXTHI]](s64), [[GEP3]](p0) :: (store 8 into stack + 8, align 1)<br>
>> +; CHECK: G_STORE [[HI]](s64), [[GEP3]](p0) :: (store 8 into stack + 8, align 1)<br>
>>  define void @test_split_struct([2 x i64]* %ptr) {<br>
>>    %struct = load [2 x i64], [2 x i64]* %ptr<br>
>>    call void @take_split_struct([2 x i64]* null, i64 1, i64 2, i64 3,<br>
>><br>
>> Modified: llvm/trunk/test/CodeGen/AArch64/GlobalISel/call-translator-ios.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/GlobalISel/call-translator-ios.ll?rev=364512&r1=364511&r2=364512&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/GlobalISel/call-translator-ios.ll?rev=364512&r1=364511&r2=364512&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/CodeGen/AArch64/GlobalISel/call-translator-ios.ll (original)<br>
>> +++ llvm/trunk/test/CodeGen/AArch64/GlobalISel/call-translator-ios.ll Thu Jun 27 02:18:03 2019<br>
>> @@ -59,21 +59,16 @@ define void @take_128bit_struct([2 x i64<br>
>>  ; CHECK: [[CST:%[0-9]+]]:_(s64) = G_CONSTANT i64 8<br>
>>  ; CHECK: [[GEP:%[0-9]+]]:_(p0) = G_GEP %0, [[CST]](s64)<br>
>>  ; CHECK: [[LD2:%[0-9]+]]:_(s64) = G_LOAD %3(p0) :: (load 8 from %ir.ptr + 8)<br>
>> -; CHECK: [[IMPDEF:%[0-9]+]]:_(s128) = G_IMPLICIT_DEF<br>
>> -; CHECK: [[INS1:%[0-9]+]]:_(s128) = G_INSERT [[IMPDEF]], [[LD1]](s64), 0<br>
>> -; CHECK: [[INS2:%[0-9]+]]:_(s128) = G_INSERT [[INS1]], [[LD2]](s64), 64<br>
>> -; CHECK:  [[EXT1:%[0-9]+]]:_(s64) = G_EXTRACT [[INS2]](s128), 0<br>
>> -; CHECK: [[EXT2:%[0-9]+]]:_(s64) = G_EXTRACT [[INS2]](s128), 64<br>
>><br>
>>  ; CHECK: [[SP:%[0-9]+]]:_(p0) = COPY $sp<br>
>>  ; CHECK: [[OFF:%[0-9]+]]:_(s64) = G_CONSTANT i64 0<br>
>>  ; CHECK: [[ADDR:%[0-9]+]]:_(p0) = G_GEP [[SP]], [[OFF]](s64)<br>
>> -; CHECK: G_STORE [[EXT1]](s64), [[ADDR]](p0) :: (store 8 into stack, align 1)<br>
>> +; CHECK: G_STORE [[LD1]](s64), [[ADDR]](p0) :: (store 8 into stack, align 1)<br>
>><br>
>>  ; CHECK: [[SP:%[0-9]+]]:_(p0) = COPY $sp<br>
>>  ; CHECK: [[OFF:%[0-9]+]]:_(s64) = COPY [[CST]]<br>
>>  ; CHECK: [[ADDR:%[0-9]+]]:_(p0) = G_GEP [[SP]], [[OFF]]<br>
>> -; CHECK: G_STORE [[EXT2]](s64), [[ADDR]](p0) :: (store 8 into stack + 8, align 1)<br>
>> +; CHECK: G_STORE [[LD2]](s64), [[ADDR]](p0) :: (store 8 into stack + 8, align 1)<br>
>>  define void @test_split_struct([2 x i64]* %ptr) {<br>
>>    %struct = load [2 x i64], [2 x i64]* %ptr<br>
>>    call void @take_split_struct([2 x i64]* null, i64 1, i64 2, i64 3,<br>
>><br>
>> Modified: llvm/trunk/test/CodeGen/AArch64/GlobalISel/call-translator.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/GlobalISel/call-translator.ll?rev=364512&r1=364511&r2=364512&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/GlobalISel/call-translator.ll?rev=364512&r1=364511&r2=364512&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/CodeGen/AArch64/GlobalISel/call-translator.ll (original)<br>
>> +++ llvm/trunk/test/CodeGen/AArch64/GlobalISel/call-translator.ll Thu Jun 27 02:18:03 2019<br>
>> @@ -112,20 +112,11 @@ define {double, i64, i32} @test_struct_r<br>
>>  ; CHECK: [[CST3:%[0-9]+]]:_(s64) = G_CONSTANT i64 24<br>
>>  ; CHECK: [[GEP3:%[0-9]+]]:_(p0) = G_GEP %0, [[CST3]](s64)<br>
>>  ; CHECK: [[LD4:%[0-9]+]]:_(s64) = G_LOAD [[GEP3]](p0) :: (load 8 from %ir.addr + 24)<br>
>> -; CHECK: [[IMPDEF:%[0-9]+]]:_(s256) = G_IMPLICIT_DEF<br>
>> -; CHECK: [[INS1:%[0-9]+]]:_(s256) = G_INSERT [[IMPDEF]], [[LD1]](s64), 0<br>
>> -; CHECK: [[INS2:%[0-9]+]]:_(s256) = G_INSERT [[INS1]], [[LD2]](s64), 64<br>
>> -; CHECK: [[INS3:%[0-9]+]]:_(s256) = G_INSERT [[INS2]], [[LD3]](s64), 128<br>
>> -; CHECK: [[ARG:%[0-9]+]]:_(s256) = G_INSERT [[INS3]], [[LD4]](s64), 192<br>
>> -; CHECK: [[E0:%[0-9]+]]:_(s64) = G_EXTRACT [[ARG]](s256), 0<br>
>> -; CHECK: [[E1:%[0-9]+]]:_(s64) = G_EXTRACT [[ARG]](s256), 64<br>
>> -; CHECK: [[E2:%[0-9]+]]:_(s64) = G_EXTRACT [[ARG]](s256), 128<br>
>> -; CHECK: [[E3:%[0-9]+]]:_(s64) = G_EXTRACT [[ARG]](s256), 192<br>
>> -<br>
>> -; CHECK: $x0 = COPY [[E0]](s64)<br>
>> -; CHECK: $x1 = COPY [[E1]](s64)<br>
>> -; CHECK: $x2 = COPY [[E2]](s64)<br>
>> -; CHECK: $x3 = COPY [[E3]](s64)<br>
>> +<br>
>> +; CHECK: $x0 = COPY [[LD1]](s64)<br>
>> +; CHECK: $x1 = COPY [[LD2]](s64)<br>
>> +; CHECK: $x2 = COPY [[LD3]](s64)<br>
>> +; CHECK: $x3 = COPY [[LD4]](s64)<br>
>>  ; CHECK: BL @arr_callee, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x0, implicit $x1, implicit $x2, implicit $x3, implicit-def $x0, implicit-def $x1, implicit-def $x2, implicit-def $x3<br>
>>  ; CHECK: [[E0:%[0-9]+]]:_(s64) = COPY $x0<br>
>>  ; CHECK: [[E1:%[0-9]+]]:_(s64) = COPY $x1<br>
>> @@ -262,20 +253,14 @@ define void @take_128bit_struct([2 x i64<br>
>>  ; CHECK: [[GEP:%[0-9]+]]:_(p0) = G_GEP [[ADDR]], [[CST]](s64)<br>
>>  ; CHECK: [[HI:%[0-9]+]]:_(s64) = G_LOAD [[GEP]](p0) :: (load 8 from %ir.ptr + 8)<br>
>><br>
>> -; CHECK: [[IMPDEF:%[0-9]+]]:_(s128) = G_IMPLICIT_DEF<br>
>> -; CHECK: [[INS1:%[0-9]+]]:_(s128) = G_INSERT [[IMPDEF]], [[LO]](s64), 0<br>
>> -; CHECK: [[INS2:%[0-9]+]]:_(s128) = G_INSERT [[INS1]], [[HI]](s64), 64<br>
>> -; CHECK: [[EXTLO:%[0-9]+]]:_(s64) = G_EXTRACT [[INS2]](s128), 0<br>
>> -; CHECK: [[EXTHI:%[0-9]+]]:_(s64) = G_EXTRACT [[INS2]](s128), 64<br>
>> -<br>
>>  ; CHECK: [[SP:%[0-9]+]]:_(p0) = COPY $sp<br>
>>  ; CHECK: [[CST2:%[0-9]+]]:_(s64) = G_CONSTANT i64 0<br>
>>  ; CHECK: [[GEP2:%[0-9]+]]:_(p0) = G_GEP [[SP]], [[CST2]](s64)<br>
>> -; CHECK: G_STORE [[EXTLO]](s64), [[GEP2]](p0) :: (store 8 into stack, align 1)<br>
>> +; CHECK: G_STORE [[LO]](s64), [[GEP2]](p0) :: (store 8 into stack, align 1)<br>
>>  ; CHECK: [[SP:%[0-9]+]]:_(p0) = COPY $sp<br>
>>  ; CHECK: [[CST3:%[0-9]+]]:_(s64) = COPY [[CST]]<br>
>>  ; CHECK: [[GEP3:%[0-9]+]]:_(p0) = G_GEP [[SP]], [[CST3]](s64)<br>
>> -; CHECK: G_STORE [[EXTHI]](s64), [[GEP3]](p0) :: (store 8 into stack + 8, align 1)<br>
>> +; CHECK: G_STORE [[HI]](s64), [[GEP3]](p0) :: (store 8 into stack + 8, align 1)<br>
>>  define void @test_split_struct([2 x i64]* %ptr) {<br>
>>    %struct = load [2 x i64], [2 x i64]* %ptr<br>
>>    call void @take_split_struct([2 x i64]* null, i64 1, i64 2, i64 3,<br>
>><br>
>> Modified: llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-param-lowering.ll<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-param-lowering.ll?rev=364512&r1=364511&r2=364512&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-param-lowering.ll?rev=364512&r1=364511&r2=364512&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-param-lowering.ll (original)<br>
>> +++ llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-param-lowering.ll Thu Jun 27 02:18:03 2019<br>
>> @@ -202,11 +202,7 @@ define arm_aapcscc [3 x i32] @test_tiny_<br>
>>  ; CHECK: liveins: $r0, $r1<br>
>>  ; CHECK: [[R0:%[0-9]+]]:_(s32) = COPY $r0<br>
>>  ; CHECK: [[R1:%[0-9]+]]:_(s32) = COPY $r1<br>
>> -; CHECK: [[IMPDEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF<br>
>> -; CHECK: [[INS1:%[0-9]+]]:_(s64) = G_INSERT [[IMPDEF]], [[R0]](s32), 0<br>
>> -; CHECK: [[INS2:%[0-9]+]]:_(s64) = G_INSERT [[INS1]], [[R1]](s32), 32<br>
>>  ; CHECK: ADJCALLSTACKDOWN 0, 0, 14, $noreg, implicit-def $sp, implicit $sp<br>
>> -; CHECK: [[R0:%[0-9]+]]:_(s32), [[R1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[INS2]](s64)<br>
>>  ; CHECK: $r0 = COPY [[R0]]<br>
>>  ; CHECK: $r1 = COPY [[R1]]<br>
>>  ; ARM: BL @tiny_int_arrays_target, csr_aapcs, implicit-def $lr, implicit $sp, implicit $r0, implicit $r1, implicit-def $r0, implicit-def $r1<br>
>> @@ -237,15 +233,7 @@ define arm_aapcscc void @test_multiple_i<br>
>>  ; CHECK: [[R1:%[0-9]+]]:_(s32) = COPY $r1<br>
>>  ; CHECK: [[R2:%[0-9]+]]:_(s32) = COPY $r2<br>
>>  ; CHECK: [[R3:%[0-9]+]]:_(s32) = COPY $r3<br>
>> -; CHECK: [[IMPDEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF<br>
>> -; CHECK: [[INS1:%[0-9]+]]:_(s64) = G_INSERT [[IMPDEF]], [[R0]](s32), 0<br>
>> -; CHECK: [[INS2:%[0-9]+]]:_(s64) = G_INSERT [[INS1]], [[R1]](s32), 32<br>
>> -; CHECK: [[IMPDEF2:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF<br>
>> -; CHECK: [[INS3:%[0-9]+]]:_(s64) = G_INSERT [[IMPDEF2]], [[R2]](s32), 0<br>
>> -; CHECK: [[INS4:%[0-9]+]]:_(s64) = G_INSERT [[INS3]], [[R3]](s32), 32<br>
>>  ; CHECK: ADJCALLSTACKDOWN 0, 0, 14, $noreg, implicit-def $sp, implicit $sp<br>
>> -; CHECK: [[R0:%[0-9]+]]:_(s32), [[R1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[INS2]](s64)<br>
>> -; CHECK: [[R2:%[0-9]+]]:_(s32), [[R3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[INS4]](s64)<br>
>>  ; CHECK: $r0 = COPY [[R0]]<br>
>>  ; CHECK: $r1 = COPY [[R1]]<br>
>>  ; CHECK: $r2 = COPY [[R2]]<br>
>> @@ -278,11 +266,7 @@ define arm_aapcscc void @test_large_int_<br>
>>  ; CHECK: [[FIRST_STACK_ELEMENT:%[0-9]+]]:_(s32) = G_LOAD [[FIRST_STACK_ELEMENT_FI]]{{.*}}load 4 from %fixed-stack.[[FIRST_STACK_ID]]<br>
>>  ; CHECK: [[LAST_STACK_ELEMENT_FI:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.[[LAST_STACK_ID]]<br>
>>  ; CHECK: [[LAST_STACK_ELEMENT:%[0-9]+]]:_(s32) = G_LOAD [[LAST_STACK_ELEMENT_FI]]{{.*}}load 4 from %fixed-stack.[[LAST_STACK_ID]]<br>
>> -; CHECK: [[IMPDEF:%[0-9]+]]:_(s640) = G_IMPLICIT_DEF<br>
>> -; CHECK: [[INS1:%[0-9]+]]:_(s640) = G_INSERT [[IMPDEF]], [[R0]](s32), 0<br>
>> -; CHECK: [[INS:%[0-9]+]]:_(s640) = G_INSERT {{.*}}, [[LAST_STACK_ELEMENT]](s32), 608<br>
>>  ; CHECK: ADJCALLSTACKDOWN 64, 0, 14, $noreg, implicit-def $sp, implicit $sp<br>
>> -; CHECK: [[R0:%[0-9]+]]:_(s32), [[R1:%[0-9]+]]:_(s32), [[R2:%[0-9]+]]:_(s32), [[R3:%[0-9]+]]:_(s32), [[FIRST_STACK_ELEMENT:%[0-9]+]]:_(s32), {{.*}}, [[LAST_STACK_ELEMENT:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[INS]](s640)<br>
>>  ; CHECK: $r0 = COPY [[R0]]<br>
>>  ; CHECK: $r1 = COPY [[R1]]<br>
>>  ; CHECK: $r2 = COPY [[R2]]<br>
>> @@ -324,12 +308,7 @@ define arm_aapcscc [2 x float] @test_fp_<br>
>>  ; BIG: [[ARR1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[ARR1_1]](s32), [[ARR1_0]](s32)<br>
>>  ; CHECK: [[ARR2_FI:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.[[ARR2_ID]]<br>
>>  ; CHECK: [[ARR2:%[0-9]+]]:_(s64) = G_LOAD [[ARR2_FI]]{{.*}}load 8 from %fixed-stack.[[ARR2_ID]]<br>
>> -; CHECK: [[IMPDEF:%[0-9]+]]:_(s192) = G_IMPLICIT_DEF<br>
>> -; CHECK: [[INS1:%[0-9]+]]:_(s192) = G_INSERT [[IMPDEF]], [[ARR0]](s64), 0<br>
>> -; CHECK: [[INS2:%[0-9]+]]:_(s192) = G_INSERT [[INS1]], [[ARR1]](s64), 64<br>
>> -; CHECK: [[INS3:%[0-9]+]]:_(s192) = G_INSERT [[INS2]], [[ARR2]](s64), 128<br>
>>  ; CHECK: ADJCALLSTACKDOWN 8, 0, 14, $noreg, implicit-def $sp, implicit $sp<br>
>> -; CHECK: [[ARR0:%[0-9]+]]:_(s64), [[ARR1:%[0-9]+]]:_(s64), [[ARR2:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[INS3]](s192)<br>
>>  ; CHECK: [[ARR0_0:%[0-9]+]]:_(s32), [[ARR0_1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ARR0]](s64)<br>
>>  ; LITTLE: $r0 = COPY [[ARR0_0]](s32)<br>
>>  ; LITTLE: $r1 = COPY [[ARR0_1]](s32)<br>
>> @@ -382,23 +361,7 @@ define arm_aapcs_vfpcc [4 x float] @test<br>
>>  ; CHECK: [[Z2:%[0-9]+]]:_(s64) = G_LOAD [[Z2_FI]]{{.*}}load 8<br>
>>  ; CHECK: [[Z3_FI:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.[[Z3_ID]]<br>
>>  ; CHECK: [[Z3:%[0-9]+]]:_(s64) = G_LOAD [[Z3_FI]]{{.*}}load 8<br>
>> -; CHECK: [[IMPDEF:%[0-9]+]]:_(s192) = G_IMPLICIT_DEF<br>
>> -; CHECK: [[INS1:%[0-9]+]]:_(s192) = G_INSERT [[IMPDEF]], [[X0]](s64), 0<br>
>> -; CHECK: [[INS2:%[0-9]+]]:_(s192) = G_INSERT [[INS1]], [[X1]](s64), 64<br>
>> -; CHECK: [[INS3:%[0-9]+]]:_(s192) = G_INSERT [[INS2]], [[X2]](s64), 128<br>
>> -; CHECK: [[IMPDEF2:%[0-9]+]]:_(s96) = G_IMPLICIT_DEF<br>
>> -; CHECK: [[INS4:%[0-9]+]]:_(s96) = G_INSERT [[IMPDEF2]], [[Y0]](s32), 0<br>
>> -; CHECK: [[INS5:%[0-9]+]]:_(s96) = G_INSERT [[INS4]], [[Y1]](s32), 32<br>
>> -; CHECK: [[INS6:%[0-9]+]]:_(s96) = G_INSERT [[INS5]], [[Y2]](s32), 64<br>
>> -; CHECK: [[IMPDEF3:%[0-9]+]]:_(s256) = G_IMPLICIT_DEF<br>
>> -; CHECK: [[INS7:%[0-9]+]]:_(s256) = G_INSERT [[IMPDEF3]], [[Z0]](s64), 0<br>
>> -; CHECK: [[INS8:%[0-9]+]]:_(s256) = G_INSERT [[INS7]], [[Z1]](s64), 64<br>
>> -; CHECK: [[INS9:%[0-9]+]]:_(s256) = G_INSERT [[INS8]], [[Z2]](s64), 128<br>
>> -; CHECK: [[INS10:%[0-9]+]]:_(s256) = G_INSERT [[INS9]], [[Z3]](s64), 192<br>
>>  ; CHECK: ADJCALLSTACKDOWN 32, 0, 14, $noreg, implicit-def $sp, implicit $sp<br>
>> -; CHECK: [[X0:%[0-9]+]]:_(s64), [[X1:%[0-9]+]]:_(s64), [[X2:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[INS3]](s192)<br>
>> -; CHECK: [[Y0:%[0-9]+]]:_(s32), [[Y1:%[0-9]+]]:_(s32), [[Y2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[INS6]](s96)<br>
>> -; CHECK: [[Z0:%[0-9]+]]:_(s64), [[Z1:%[0-9]+]]:_(s64), [[Z2:%[0-9]+]]:_(s64), [[Z3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[INS10]](s256)<br>
>>  ; CHECK: $d0 = COPY [[X0]](s64)<br>
>>  ; CHECK: $d1 = COPY [[X1]](s64)<br>
>>  ; CHECK: $d2 = COPY [[X2]](s64)<br>
>> @@ -457,9 +420,7 @@ define arm_aapcscc [2 x i32*] @test_toug<br>
>>  ; CHECK: [[FIRST_STACK_ELEMENT:%[0-9]+]]:_(s32) = G_LOAD [[FIRST_STACK_ELEMENT_FI]]{{.*}}load 4 from %fixed-stack.[[FIRST_STACK_ID]]<br>
>>  ; CHECK: [[LAST_STACK_ELEMENT_FI:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.[[LAST_STACK_ID]]<br>
>>  ; CHECK: [[LAST_STACK_ELEMENT:%[0-9]+]]:_(s32) = G_LOAD [[LAST_STACK_ELEMENT_FI]]{{.*}}load 4 from %fixed-stack.[[LAST_STACK_ID]]<br>
>> -; CHECK: [[INS:%[0-9]+]]:_(s768) = G_INSERT {{.*}}, [[LAST_STACK_ELEMENT]](s32), 736<br>
>>  ; CHECK: ADJCALLSTACKDOWN 80, 0, 14, $noreg, implicit-def $sp, implicit $sp<br>
>> -; CHECK: [[R0:%[0-9]+]]:_(s32), [[R1:%[0-9]+]]:_(s32), [[R2:%[0-9]+]]:_(s32), [[R3:%[0-9]+]]:_(s32), [[FIRST_STACK_ELEMENT:%[0-9]+]]:_(s32), {{.*}}, [[LAST_STACK_ELEMENT:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[INS]](s768)<br>
>>  ; CHECK: $r0 = COPY [[R0]]<br>
>>  ; CHECK: $r1 = COPY [[R1]]<br>
>>  ; CHECK: $r2 = COPY [[R2]]<br>
>> @@ -495,11 +456,7 @@ define arm_aapcscc {i32, i32} @test_stru<br>
>>  ; CHECK: liveins: $r0, $r1<br>
>>  ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY $r0<br>
>>  ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY $r1<br>
>> -; CHECK: [[IMPDEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF<br>
>> -; CHECK: [[INS1:%[0-9]+]]:_(s64) = G_INSERT [[IMPDEF]], [[X0]](s32), 0<br>
>> -; CHECK: [[INS2:%[0-9]+]]:_(s64) = G_INSERT [[INS1]], [[X1]](s32), 32<br>
>>  ; CHECK: ADJCALLSTACKDOWN 0, 0, 14, $noreg, implicit-def $sp, implicit $sp<br>
>> -; CHECK: [[X0:%[0-9]+]]:_(s32), [[X1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[INS2]](s64)<br>
>>  ; CHECK-DAG: $r0 = COPY [[X0]](s32)<br>
>>  ; CHECK-DAG: $r1 = COPY [[X1]](s32)<br>
>>  ; ARM: BL @structs_target, csr_aapcs, implicit-def $lr, implicit $sp, implicit $r0, implicit $r1, implicit-def $r0, implicit-def $r1<br>
>><br>
>><br>
>> _______________________________________________<br>
>> llvm-commits mailing list<br>
>> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
>> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>