mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-06 05:33:28 +00:00
Added isLegalAddressExpression(). Only allows X +/- C for now.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35122 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
14245a9d62
commit
2770747216
@ -22,6 +22,7 @@
|
|||||||
#include "ARMTargetMachine.h"
|
#include "ARMTargetMachine.h"
|
||||||
#include "llvm/CallingConv.h"
|
#include "llvm/CallingConv.h"
|
||||||
#include "llvm/Constants.h"
|
#include "llvm/Constants.h"
|
||||||
|
#include "llvm/Instruction.h"
|
||||||
#include "llvm/CodeGen/MachineBasicBlock.h"
|
#include "llvm/CodeGen/MachineBasicBlock.h"
|
||||||
#include "llvm/CodeGen/MachineFrameInfo.h"
|
#include "llvm/CodeGen/MachineFrameInfo.h"
|
||||||
#include "llvm/CodeGen/MachineFunction.h"
|
#include "llvm/CodeGen/MachineFunction.h"
|
||||||
@ -1269,6 +1270,20 @@ ARMTargetLowering::InsertAtEndOfBasicBlock(MachineInstr *MI,
|
|||||||
// ARM Optimization Hooks
|
// ARM Optimization Hooks
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
/// isLegalAddressExpression - Return true if the binary expression made up of
|
||||||
|
/// specified opcode, operands, and type can be folded into target addressing
|
||||||
|
/// mode for load / store of the given type.
|
||||||
|
bool ARMTargetLowering::isLegalAddressExpression(unsigned Opc, Value *Op0,
|
||||||
|
Value *Op1, const Type *Ty) const {
|
||||||
|
if (ConstantInt *Op1C = dyn_cast<ConstantInt>(Op1)) {
|
||||||
|
if (Opc == Instruction::Add)
|
||||||
|
return isLegalAddressImmediate(Op1C->getSExtValue(), Ty);
|
||||||
|
if (Opc == Instruction::Sub)
|
||||||
|
return isLegalAddressImmediate(-Op1C->getSExtValue(), Ty);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/// isLegalAddressImmediate - Return true if the integer value can be used
|
/// isLegalAddressImmediate - Return true if the integer value can be used
|
||||||
/// as the offset of the target addressing mode for load / store of the
|
/// as the offset of the target addressing mode for load / store of the
|
||||||
/// given type.
|
/// given type.
|
||||||
|
@ -80,6 +80,12 @@ namespace llvm {
|
|||||||
virtual MachineBasicBlock *InsertAtEndOfBasicBlock(MachineInstr *MI,
|
virtual MachineBasicBlock *InsertAtEndOfBasicBlock(MachineInstr *MI,
|
||||||
MachineBasicBlock *MBB);
|
MachineBasicBlock *MBB);
|
||||||
|
|
||||||
|
/// isLegalAddressExpression - Return true if the binary expression made up
|
||||||
|
/// of specified opcode, operands, and type can be folded into target
|
||||||
|
/// addressing mode for load / store of the given type.
|
||||||
|
virtual bool isLegalAddressExpression(unsigned Opc, Value *Op0, Value *Op1,
|
||||||
|
const Type *Ty) const;
|
||||||
|
|
||||||
/// isLegalAddressImmediate - Return true if the integer value can be used
|
/// isLegalAddressImmediate - Return true if the integer value can be used
|
||||||
/// as the offset of the target addressing mode for load / store of the
|
/// as the offset of the target addressing mode for load / store of the
|
||||||
/// given type.
|
/// given type.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user