[llvm-commits] CVS: llvm/lib/Target/ARM/ARMInstrInfo.cpp ARMInstrInfo.h

Evan Cheng evan.cheng at apple.com
Sun Jun 17 17:17:38 PDT 2007


Geeze. I was sure I would've been yelled at had I made it into a  
targetinstrinfo bit. :-)

Really didn't want to go with either approach. But I don't see a  
better alternative.

Evan

On Jun 15, 2007, at 2:37 PM, Chris Lattner wrote:

> On Jun 15, 2007, at 2:15 PM, Evan Cheng wrote:
>> Instructions with unique labels or embedded jumptables cannot be
>> duplicated during ifcvt.
>
> Please turn this into a targetinstrinfo bit.  Virtual methods should
> only be used for properties whose behavior is a property of the
> *operands* of the instruction in combination with the opcode.  This
> property seems to only depend on the opcode.
>
> -Chris
>
>> ---
>> Diffs of the changes:  (+31 -0)
>>
>>  ARMInstrInfo.cpp |   29 +++++++++++++++++++++++++++++
>>  ARMInstrInfo.h   |    2 ++
>>  2 files changed, 31 insertions(+)
>>
>>
>> Index: llvm/lib/Target/ARM/ARMInstrInfo.cpp
>> diff -u llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.36 llvm/lib/Target/
>> ARM/ARMInstrInfo.cpp:1.37
>> --- llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.36	Wed Jun 13 12:59:52  
>> 2007
>> +++ llvm/lib/Target/ARM/ARMInstrInfo.cpp	Fri Jun 15 16:15:00 2007
>> @@ -446,6 +446,35 @@
>>    return PIdx != -1 && MI->getOperand(PIdx).getImmedValue() !=
>> ARMCC::AL;
>>  }
>>
>> +bool ARMInstrInfo::CanBeDuplicated(const MachineInstr *MI) const {
>> +  switch (MI->getOpcode()) {
>> +  default: return true;
>> +  // These have unique labels.
>> +  case ARM::PICADD:
>> +  case ARM::PICLD:
>> +  case ARM::PICLDZH:
>> +  case ARM::PICLDZB:
>> +  case ARM::PICLDH:
>> +  case ARM::PICLDB:
>> +  case ARM::PICLDSH:
>> +  case ARM::PICLDSB:
>> +  case ARM::PICSTR:
>> +  case ARM::PICSTRH:
>> +  case ARM::PICSTRB:
>> +  case ARM::LEApcrel:
>> +  case ARM::LEApcrelJT:
>> +  case ARM::tPICADD:
>> +  case ARM::tLEApcrel:
>> +  case ARM::tLEApcrelJT:
>> +  case ARM::CONSTPOOL_ENTRY:
>> +  // These embed jumptables.
>> +  case ARM::BR_JTr:
>> +  case ARM::BR_JTm:
>> +  case ARM::BR_JTadd:
>> +    return false;
>> +  }
>> +}
>> +
>>  bool ARMInstrInfo::PredicateInstruction(MachineInstr *MI,
>>                                  const std::vector<MachineOperand>
>> &Pred) const {
>>    unsigned Opc = MI->getOpcode();
>>
>>
>> Index: llvm/lib/Target/ARM/ARMInstrInfo.h
>> diff -u llvm/lib/Target/ARM/ARMInstrInfo.h:1.13 llvm/lib/Target/ARM/
>> ARMInstrInfo.h:1.14
>> --- llvm/lib/Target/ARM/ARMInstrInfo.h:1.13	Tue May 29 13:42:18 2007
>> +++ llvm/lib/Target/ARM/ARMInstrInfo.h	Fri Jun 15 16:15:00 2007
>> @@ -106,6 +106,8 @@
>>    // Predication support.
>>    virtual bool isPredicated(const MachineInstr *MI) const;
>>
>> +  virtual bool CanBeDuplicated(const MachineInstr *MI) const;
>> +
>>    virtual
>>    bool PredicateInstruction(MachineInstr *MI,
>>                              const std::vector<MachineOperand>
>> &Pred) const;
>>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
> _______________________________________________
> 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