[llvm-dev] Live Register Spilling
Matthias Braun via llvm-dev
llvm-dev at lists.llvm.org
Mon Sep 11 10:36:37 PDT 2017
> On Sep 10, 2017, at 7:01 PM, jin chuan see <jinchuansee at hotmail.com> wrote:
>
> Sorry about the previous message
>
> This message showed up:
> llc: /home/jc/Desktop/Project/For_Testing/llvm/lib/CodeGen/MachineRegisterInfo.cpp:366: llvm::MachineInstr* llvm::MachineRegisterInfo::getVRegDef(unsigned int) const: Assertion `(I.atEnd() || std::next(I) == def_instr_end()) && "getVRegDef assumes a single definition or no definition"' failed.
Earlier backend phases are in "Machine SSA" form (you can check MachineRegisterInfo::isSSA() for that), meaning virtual registers are only allowed to have a single definition.
- Matthias
>
> I am assuming that i messed up the virtual register allocation when i am using BuildMI().
>
> Also, i cannot invoke the clang as -O1 and so on as it will optimize my code and the generated .ll file will contain nothing other than the prologue and epilogue code.
> Is there any information i can provide you so that we can discuss the issue further?
>
> Chuan.
>
> From: jin chuan see <jinchuansee at hotmail.com>
> Sent: Monday, September 11, 2017 9:57 AM
> To: Matthias Braun
> Cc: llvm-dev at lists.llvm.org
> Subject: Re: [llvm-dev] Live Register Spilling
>
> Hi Matthias,
>
> Sorry for the late reply.
> Yes, you are correct, I do have optnone attribute on my function.
> I did pass -O0 to the tools.
>
> For your information, my invocations are as below:
>
> clang --target=mips-unknown-linux -mips32 test.c -emit-llvm -S
> llc -O0 -march=mips -mcpu=mips32 test.ll -o test.s
>
> Based on the generated .ll file, there is optnone attribute on the function, i am guessing this is due to the default optimization -O0 by clang if not specified.
> As for the llc, i tried to invoke it with -O1,-O2,-O3. All of them resulted in failure during the phase "PROCESS IMPLICIT DEFS"
> This message showed up:
>
>
> From: mbraun at apple.com <mbraun at apple.com> on behalf of Matthias Braun <mbraun at apple.com>
> Sent: Saturday, September 9, 2017 2:06 AM
> To: jin chuan see
> Cc: llvm-dev at lists.llvm.org
> Subject: Re: [llvm-dev] Live Register Spilling
>
> This would be a lot easier to discuss having a concrete example, llc invocations etc.
>
> It sounds like you are using RegAllocFast, have you tried using the optimized register allocators (= make sure you don't have the optnone attribute on your function and are not passing -O0 to the tools).
>
> - Matthias
>
>> On Sep 8, 2017, at 12:10 AM, jin chuan see via llvm-dev <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>>
>> Hi All,
>>
>> I faced some problems while using the BuildMI().
>> Currently, i am trying to replace specific MI with a series of new MI.
>> I wrote a routine under the processFunctionAfterISel() to detect the targeted MI and replace it accordingly.
>> After using BuildMI() to perform my replacement, i realize there are unnecessary spilling and reloading of registers in the assembly generated.
>> By checking the llc debug output, i am suspecting that the virtual register states have been completely messed up.
>> This is because the spilling and reloading codes are only inserted at the register allocation phase, especially during the state of "Spilling live registers at the end of block".
>> These spilling and reloading codes are messing up the assembly generated, and the behavior of the code generated is undetermined.
>> I would like to know is there anything i can do to fix the virtual register use-def relationship?
>> Or is there any standard procedure i should follow to handle the MachineOperands while using BuildMI()?
>> Any opinions or suggestion are welcomed.
>>
>> Regards,
>> JC
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170911/ba966b11/attachment.html>
More information about the llvm-dev
mailing list