[LLVMdev] Implementing llvm.atomic.cmp.swap.i32 on PowerPC
Gary Benson
gbenson at redhat.com
Tue Jul 8 08:24:51 PDT 2008
Hi Evan,
Evan Cheng wrote:
> The patch looks great. But I do have one comment:
>
> +let usesCustomDAGSchedInserter = 1 in {
> + let Uses = [CR0] in {
> + let Uses = [R0] in
> + def ATOMIC_LOAD_ADD_I32 : Pseudo<
>
> The "let Uses = [R0]" is not needed. The pseudo instruction will be
> expanded like this later:
>
> + BuildMI(BB, TII->get(is64bit ? PPC::LDARX : PPC::LWARX), dest)
> + .addReg(ptrA).addReg(ptrB);
> + BuildMI(BB, TII->get(is64bit ? PPC::ADD4 : PPC::ADD8), PPC::R0)
> + .addReg(incr).addReg(dest);
> + BuildMI(BB, TII->get(is64bit ? PPC::STDCX : PPC::STWCX))
> + .addReg(PPC::R0).addReg(ptrA).addReg(ptrB);
>
> The second instruction defines R0 and the 3rd reads R0 which is
> enough to tell the register allocator what to do.
>
> I do have a question, must it use R0? If it's not fixed, it's
> probably better to create a new virtual register and use that
> instead.
It's not fixed. How do I create a new virtual register? This is my
first real go at adding to LLVM, so I'm kind of figuring it out as I
go along :)
Cheers,
Gary
--
http://gbenson.net/
More information about the llvm-dev
mailing list