forked from OSchip/llvm-project
AMDGPU: Add operand target flags serialization
llvm-svn: 306995
This commit is contained in:
parent
f05c5ef441
commit
3f031e75aa
|
@ -4320,6 +4320,24 @@ SIInstrInfo::CreateTargetPostRAHazardRecognizer(const MachineFunction &MF) const
|
|||
return new GCNHazardRecognizer(MF);
|
||||
}
|
||||
|
||||
std::pair<unsigned, unsigned>
|
||||
SIInstrInfo::decomposeMachineOperandsTargetFlags(unsigned TF) const {
|
||||
return std::make_pair(TF & MO_MASK, TF & ~MO_MASK);
|
||||
}
|
||||
|
||||
ArrayRef<std::pair<unsigned, const char *>>
|
||||
SIInstrInfo::getSerializableDirectMachineOperandTargetFlags() const {
|
||||
static const std::pair<unsigned, const char *> TargetFlags[] = {
|
||||
{ MO_GOTPCREL, "amdgpu-gotprel" },
|
||||
{ MO_GOTPCREL32_LO, "amdgpu-gotprel32-lo" },
|
||||
{ MO_GOTPCREL32_HI, "amdgpu-gotprel32-hi" },
|
||||
{ MO_REL32_LO, "amdgpu-rel32-lo" },
|
||||
{ MO_REL32_HI, "amdgpu-rel32-hi" }
|
||||
};
|
||||
|
||||
return makeArrayRef(TargetFlags);
|
||||
}
|
||||
|
||||
bool SIInstrInfo::isBasicBlockPrologue(const MachineInstr &MI) const {
|
||||
return !MI.isTerminator() && MI.getOpcode() != AMDGPU::COPY &&
|
||||
MI.modifiesRegister(AMDGPU::EXEC, &RI);
|
||||
|
|
|
@ -100,6 +100,8 @@ protected:
|
|||
public:
|
||||
|
||||
enum TargetOperandFlags {
|
||||
MO_MASK = 0x7,
|
||||
|
||||
MO_NONE = 0,
|
||||
// MO_GOTPCREL -> symbol@GOTPCREL -> R_AMDGPU_GOTPCREL.
|
||||
MO_GOTPCREL = 1,
|
||||
|
@ -781,9 +783,15 @@ public:
|
|||
void convertNonUniformLoopRegion(MachineBasicBlock *LoopEntry,
|
||||
MachineBasicBlock *LoopEnd) const;
|
||||
|
||||
std::pair<unsigned, unsigned>
|
||||
decomposeMachineOperandsTargetFlags(unsigned TF) const override;
|
||||
|
||||
ArrayRef<std::pair<int, const char *>>
|
||||
getSerializableTargetIndices() const override;
|
||||
|
||||
ArrayRef<std::pair<unsigned, const char *>>
|
||||
getSerializableDirectMachineOperandTargetFlags() const override;
|
||||
|
||||
ScheduleHazardRecognizer *
|
||||
CreateTargetPostRAHazardRecognizer(const InstrItineraryData *II,
|
||||
const ScheduleDAG *DAG) const override;
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
# RUN: llc -march=amdgcn -run-pass none -o - %s | FileCheck %s
|
||||
--- |
|
||||
define amdgpu_kernel void @flags() {
|
||||
ret void
|
||||
}
|
||||
|
||||
declare void @foo()
|
||||
...
|
||||
---
|
||||
|
||||
# CHECK: SI_PC_ADD_REL_OFFSET target-flags(amdgpu-rel32-lo) @foo + 4, target-flags(amdgpu-rel32-hi) @foo + 4, implicit-def dead %scc
|
||||
# CHECK: %1 = S_MOV_B64 target-flags(amdgpu-gotprel) @foo
|
||||
|
||||
name: flags
|
||||
liveins:
|
||||
- { reg: '%sgpr0_sgpr1' }
|
||||
frameInfo:
|
||||
maxAlignment: 8
|
||||
registers:
|
||||
- { id: 0, class: sreg_64, preferred-register: '' }
|
||||
- { id: 1, class: sreg_64, preferred-register: '' }
|
||||
body: |
|
||||
bb.0:
|
||||
liveins: %sgpr0_sgpr1
|
||||
%0 = SI_PC_ADD_REL_OFFSET target-flags(amdgpu-rel32-lo) @foo + 4, target-flags(amdgpu-rel32-hi) @foo + 4, implicit-def dead %scc
|
||||
%1 = S_MOV_B64 target-flags(amdgpu-gotprel) @foo
|
||||
|
||||
S_ENDPGM
|
||||
...
|
Loading…
Reference in New Issue