Skip to content

Commit 5223b5d

Browse files
committed
[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
1 parent efe6a84 commit 5223b5d

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
lines changed

llvm/lib/Target/ARM/ARMInstrInfo.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,3 +135,31 @@ void ARMInstrInfo::expandLoadStackGuard(MachineBasicBlock::iterator MI) const {
135135
.setMemRefs(MI->memoperands_begin(), MI->memoperands_end())
136136
.add(predOps(ARMCC::AL));
137137
}
138+
139+
std::pair<unsigned, unsigned>
140+
ARMInstrInfo::decomposeMachineOperandsTargetFlags(unsigned TF) const {
141+
const unsigned Mask = ARMII::MO_OPTION_MASK;
142+
return std::make_pair(TF & Mask, TF & ~Mask);
143+
}
144+
145+
ArrayRef<std::pair<unsigned, const char *>>
146+
ARMInstrInfo::getSerializableDirectMachineOperandTargetFlags() const {
147+
using namespace ARMII;
148+
149+
static const std::pair<unsigned, const char *> TargetFlags[] = {
150+
{MO_LO16, "arm-lo16"}, {MO_HI16, "arm-hi16"}};
151+
return makeArrayRef(TargetFlags);
152+
}
153+
154+
ArrayRef<std::pair<unsigned, const char *>>
155+
ARMInstrInfo::getSerializableBitmaskMachineOperandTargetFlags() const {
156+
using namespace ARMII;
157+
158+
static const std::pair<unsigned, const char *> TargetFlags[] = {
159+
{MO_GOT, "arm-got"},
160+
{MO_SBREL, "arm-sbrel"},
161+
{MO_DLLIMPORT, "arm-dllimport"},
162+
{MO_SECREL, "arm-secrel"},
163+
{MO_NONLAZY, "arm-nonlazy"}};
164+
return makeArrayRef(TargetFlags);
165+
}

llvm/lib/Target/ARM/ARMInstrInfo.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,13 @@ class ARMInstrInfo : public ARMBaseInstrInfo {
3838
///
3939
const ARMRegisterInfo &getRegisterInfo() const override { return RI; }
4040

41+
std::pair<unsigned, unsigned>
42+
decomposeMachineOperandsTargetFlags(unsigned TF) const override;
43+
ArrayRef<std::pair<unsigned, const char *>>
44+
getSerializableDirectMachineOperandTargetFlags() const override;
45+
ArrayRef<std::pair<unsigned, const char *>>
46+
getSerializableBitmaskMachineOperandTargetFlags() const override;
47+
4148
private:
4249
void expandLoadStackGuard(MachineBasicBlock::iterator MI) const override;
4350
};

llvm/test/CodeGen/ARM/GlobalISel/arm-select-globals-pic.mir

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ body: |
5656
%0(p0) = G_GLOBAL_VALUE @external_global
5757
; DARWIN-MOVT: [[G:%[0-9]+]]:gpr = MOV_ga_pcrel_ldr {{.*}} @external_global :: (load 4 from got)
5858
; DARWIN-NOMOVT: [[G:%[0-9]+]]:gpr = LDRLIT_ga_pcrel_ldr {{.*}}@external_global :: (load 4 from got)
59-
; ELF: [[G:%[0-9]+]]:gpr = LDRLIT_ga_pcrel_ldr target-flags(<unknown>) @external_global :: (load 4 from got)
59+
; ELF: [[G:%[0-9]+]]:gpr = LDRLIT_ga_pcrel_ldr target-flags(arm-got) @external_global :: (load 4 from got)
6060
6161
%1(s32) = G_LOAD %0(p0) :: (load 4 from @external_global)
6262
; CHECK: [[V:%[0-9]+]]:gpr = LDRi12 [[G]], 0, 14, %noreg :: (load 4 from @external_global)
@@ -108,7 +108,7 @@ body: |
108108
%0(p0) = G_GLOBAL_VALUE @external_constant
109109
; DARWIN-MOVT: [[G:%[0-9]+]]:gpr = MOV_ga_pcrel_ldr {{.*}} @external_constant :: (load 4 from got)
110110
; DARWIN-NOMOVT: [[G:%[0-9]+]]:gpr = LDRLIT_ga_pcrel_ldr {{.*}}@external_constant :: (load 4 from got)
111-
; ELF: [[G:%[0-9]+]]:gpr = LDRLIT_ga_pcrel_ldr target-flags(<unknown>) @external_constant :: (load 4 from got)
111+
; ELF: [[G:%[0-9]+]]:gpr = LDRLIT_ga_pcrel_ldr target-flags(arm-got) @external_constant :: (load 4 from got)
112112
113113
%1(s32) = G_LOAD %0(p0) :: (load 4 from @external_constant)
114114
; CHECK: [[V:%[0-9]+]]:gpr = LDRi12 [[G]], 0, 14, %noreg :: (load 4 from @external_constant)

0 commit comments

Comments
 (0)