mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-09 22:04:10 +00:00
[arm] Implement Target Operand Flag MIR serialization.
Reviewers: efriedma, pcc Subscribers: aemerson, javed.absar, kristof.beyls, hiraditya, llvm-commits Differential Revision: https://reviews.llvm.org/D39975 llvm-svn: 322312
This commit is contained in:
parent
c5f9051b0c
commit
963f1bbe50
@ -135,3 +135,31 @@ void ARMInstrInfo::expandLoadStackGuard(MachineBasicBlock::iterator MI) const {
|
||||
.setMemRefs(MI->memoperands_begin(), MI->memoperands_end())
|
||||
.add(predOps(ARMCC::AL));
|
||||
}
|
||||
|
||||
std::pair<unsigned, unsigned>
|
||||
ARMInstrInfo::decomposeMachineOperandsTargetFlags(unsigned TF) const {
|
||||
const unsigned Mask = ARMII::MO_OPTION_MASK;
|
||||
return std::make_pair(TF & Mask, TF & ~Mask);
|
||||
}
|
||||
|
||||
ArrayRef<std::pair<unsigned, const char *>>
|
||||
ARMInstrInfo::getSerializableDirectMachineOperandTargetFlags() const {
|
||||
using namespace ARMII;
|
||||
|
||||
static const std::pair<unsigned, const char *> TargetFlags[] = {
|
||||
{MO_LO16, "arm-lo16"}, {MO_HI16, "arm-hi16"}};
|
||||
return makeArrayRef(TargetFlags);
|
||||
}
|
||||
|
||||
ArrayRef<std::pair<unsigned, const char *>>
|
||||
ARMInstrInfo::getSerializableBitmaskMachineOperandTargetFlags() const {
|
||||
using namespace ARMII;
|
||||
|
||||
static const std::pair<unsigned, const char *> TargetFlags[] = {
|
||||
{MO_GOT, "arm-got"},
|
||||
{MO_SBREL, "arm-sbrel"},
|
||||
{MO_DLLIMPORT, "arm-dllimport"},
|
||||
{MO_SECREL, "arm-secrel"},
|
||||
{MO_NONLAZY, "arm-nonlazy"}};
|
||||
return makeArrayRef(TargetFlags);
|
||||
}
|
||||
|
@ -38,6 +38,13 @@ public:
|
||||
///
|
||||
const ARMRegisterInfo &getRegisterInfo() const override { return RI; }
|
||||
|
||||
std::pair<unsigned, unsigned>
|
||||
decomposeMachineOperandsTargetFlags(unsigned TF) const override;
|
||||
ArrayRef<std::pair<unsigned, const char *>>
|
||||
getSerializableDirectMachineOperandTargetFlags() const override;
|
||||
ArrayRef<std::pair<unsigned, const char *>>
|
||||
getSerializableBitmaskMachineOperandTargetFlags() const override;
|
||||
|
||||
private:
|
||||
void expandLoadStackGuard(MachineBasicBlock::iterator MI) const override;
|
||||
};
|
||||
|
@ -56,7 +56,7 @@ body: |
|
||||
%0(p0) = G_GLOBAL_VALUE @external_global
|
||||
; DARWIN-MOVT: [[G:%[0-9]+]]:gpr = MOV_ga_pcrel_ldr {{.*}} @external_global :: (load 4 from got)
|
||||
; DARWIN-NOMOVT: [[G:%[0-9]+]]:gpr = LDRLIT_ga_pcrel_ldr {{.*}}@external_global :: (load 4 from got)
|
||||
; ELF: [[G:%[0-9]+]]:gpr = LDRLIT_ga_pcrel_ldr target-flags(<unknown>) @external_global :: (load 4 from got)
|
||||
; ELF: [[G:%[0-9]+]]:gpr = LDRLIT_ga_pcrel_ldr target-flags(arm-got) @external_global :: (load 4 from got)
|
||||
|
||||
%1(s32) = G_LOAD %0(p0) :: (load 4 from @external_global)
|
||||
; CHECK: [[V:%[0-9]+]]:gpr = LDRi12 [[G]], 0, 14, %noreg :: (load 4 from @external_global)
|
||||
@ -108,7 +108,7 @@ body: |
|
||||
%0(p0) = G_GLOBAL_VALUE @external_constant
|
||||
; DARWIN-MOVT: [[G:%[0-9]+]]:gpr = MOV_ga_pcrel_ldr {{.*}} @external_constant :: (load 4 from got)
|
||||
; DARWIN-NOMOVT: [[G:%[0-9]+]]:gpr = LDRLIT_ga_pcrel_ldr {{.*}}@external_constant :: (load 4 from got)
|
||||
; ELF: [[G:%[0-9]+]]:gpr = LDRLIT_ga_pcrel_ldr target-flags(<unknown>) @external_constant :: (load 4 from got)
|
||||
; ELF: [[G:%[0-9]+]]:gpr = LDRLIT_ga_pcrel_ldr target-flags(arm-got) @external_constant :: (load 4 from got)
|
||||
|
||||
%1(s32) = G_LOAD %0(p0) :: (load 4 from @external_constant)
|
||||
; CHECK: [[V:%[0-9]+]]:gpr = LDRi12 [[G]], 0, 14, %noreg :: (load 4 from @external_constant)
|
||||
|
Loading…
x
Reference in New Issue
Block a user