[llvm-commits] Question on emitLoadStoreInstruction() of ARMCodeEmitter.cpp
Johnny Chen
johnny.chen at apple.com
Tue Nov 10 08:52:26 PST 2009
Hi Evan,
Thanks for the reply.
But from the emitLoadStoreInstruction() code inspection, it looks like it special-cases for
operand 0 to be base_wb and operand 1 to be dst, which is not the correct order.
It should have been operand 0 as dst and operand 1 as base_wb?
Johnny
On Nov 9, 2009, at 10:38 PM, Evan Cheng wrote:
>
> On Nov 9, 2009, at 5:46 PM, Johnny Chen wrote:
>
>>
>> Hi,
>>
>> I have a question wrt the following fragment of code:
>>
>> // Operand 0 of a pre- and post-indexed store is the address base
>> // writeback. Skip it.
>> bool Skipped = false;
>> if (IsPrePost && Form == ARMII::StFrm) {
>> ++OpIdx;
>> Skipped = true;
>> }
>>
>> // Set first operand
>> if (ImplicitRd)
>> // Special handling for implicit use (e.g. PC).
>> Binary |= (ARMRegisterInfo::getRegisterNumbering(ImplicitRd)
>> << ARMII::RegRdShift);
>> else
>> Binary |= getMachineOpValue(MI, OpIdx++) << ARMII::RegRdShift;
>>
>> and from the Record definition of LDRB_POST:
>>
>> def LDRB_POST { // Instruction InstARM I AI2ldbpo
>> field bits<32> Inst = { ?, ?, ?, ?, 0, 1, ?, 0, ?, 1, 0, 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? };
>> string Namespace = "ARM";
>> dag OutOperandList = (outs GPR:$dst, GPR:$base_wb);
>> dag InOperandList = (ins GPR:$base, am2offset:$offset, pred:$p);
>> string AsmString = "ldrb${p} $dst, [$base], $offset";
>>
>> it looks like the processing of "address base writeback" should happen after the processing of RegRd,
>> if the ordering of OutOperandList followed by InOperandList is to be observed. Is my understanding of
>> the ordering of the MachineOperands correct?
>
> Right. Defs comes first followed by uses.
>
>>
>> If this is the case, then there could be some bug in the codegen which compensates for the incorrect
>> ordering/processing of base_writeback/dst?
>
> No. It's fine. The second operand is base_wb, base will be skipped.
>
> Evan
>
>>
>> Thanks.
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list