Please use GitHub pull requests for new patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
llvm/lib/Target/ARM/ARMSubtarget.h
Show All 12 Lines | |||||
#ifndef LLVM_LIB_TARGET_ARM_ARMSUBTARGET_H | #ifndef LLVM_LIB_TARGET_ARM_ARMSUBTARGET_H | ||||
#define LLVM_LIB_TARGET_ARM_ARMSUBTARGET_H | #define LLVM_LIB_TARGET_ARM_ARMSUBTARGET_H | ||||
#include "ARMBaseInstrInfo.h" | #include "ARMBaseInstrInfo.h" | ||||
#include "ARMBaseRegisterInfo.h" | #include "ARMBaseRegisterInfo.h" | ||||
#include "ARMConstantPoolValue.h" | #include "ARMConstantPoolValue.h" | ||||
#include "ARMFrameLowering.h" | #include "ARMFrameLowering.h" | ||||
#include "ARMISelLowering.h" | #include "ARMISelLowering.h" | ||||
#include "ARMMachineFunctionInfo.h" | |||||
#include "ARMSelectionDAGInfo.h" | #include "ARMSelectionDAGInfo.h" | ||||
#include "llvm/ADT/Triple.h" | #include "llvm/ADT/Triple.h" | ||||
#include "llvm/Analysis/TargetTransformInfo.h" | #include "llvm/Analysis/TargetTransformInfo.h" | ||||
#include "llvm/CodeGen/GlobalISel/CallLowering.h" | #include "llvm/CodeGen/GlobalISel/CallLowering.h" | ||||
#include "llvm/CodeGen/GlobalISel/InstructionSelector.h" | #include "llvm/CodeGen/GlobalISel/InstructionSelector.h" | ||||
#include "llvm/CodeGen/GlobalISel/LegalizerInfo.h" | #include "llvm/CodeGen/GlobalISel/LegalizerInfo.h" | ||||
#include "llvm/CodeGen/GlobalISel/RegisterBankInfo.h" | #include "llvm/CodeGen/GlobalISel/RegisterBankInfo.h" | ||||
#include "llvm/CodeGen/MachineFunction.h" | #include "llvm/CodeGen/MachineFunction.h" | ||||
▲ Show 20 Lines • Show All 810 Lines • ▼ Show 20 Lines | MCPhysReg getFramePointerReg() const { | ||||
return ARM::R11; | return ARM::R11; | ||||
} | } | ||||
/// Returns true if the frame setup is split into two separate pushes (first | /// Returns true if the frame setup is split into two separate pushes (first | ||||
/// r0-r7,lr then r8-r11), principally so that the frame pointer is adjacent | /// r0-r7,lr then r8-r11), principally so that the frame pointer is adjacent | ||||
/// to lr. This is always required on Thumb1-only targets, as the push and | /// to lr. This is always required on Thumb1-only targets, as the push and | ||||
/// pop instructions can't access the high registers. | /// pop instructions can't access the high registers. | ||||
bool splitFramePushPop(const MachineFunction &MF) const { | bool splitFramePushPop(const MachineFunction &MF) const { | ||||
if (MF.getInfo<ARMFunctionInfo>()->shouldSignReturnAddress()) | |||||
return true; | |||||
return (getFramePointerReg() == ARM::R7 && | return (getFramePointerReg() == ARM::R7 && | ||||
MF.getTarget().Options.DisableFramePointerElim(MF)) || | MF.getTarget().Options.DisableFramePointerElim(MF)) || | ||||
isThumb1Only(); | isThumb1Only(); | ||||
} | } | ||||
bool useStride4VFPs() const; | bool useStride4VFPs() const; | ||||
bool useMovt() const; | bool useMovt() const; | ||||
▲ Show 20 Lines • Show All 107 Lines • Show Last 20 Lines |