forked from OSchip/llvm-project
AMDGPU: Fix incorrect selection of pseudo-branches
These should only be used if the machine structurizer is enabled. llvm-svn: 315357
This commit is contained in:
parent
e9d85fc8dd
commit
cc85223f87
|
@ -724,6 +724,8 @@ def HasIntClamp : Predicate<"Subtarget->hasIntClamp()">,
|
|||
def HasMadMix : Predicate<"Subtarget->hasMadMixInsts()">,
|
||||
AssemblerPredicate<"FeatureGFX9Insts">;
|
||||
|
||||
def EnableLateCFGStructurize : Predicate<
|
||||
"EnableLateStructurizeCFG">;
|
||||
|
||||
// Exists to help track down where SubtargetPredicate isn't set rather
|
||||
// than letting tablegen crash with an unhelpful error.
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "AMDGPUInstrInfo.h"
|
||||
#include "AMDGPURegisterInfo.h"
|
||||
#include "AMDGPUSubtarget.h"
|
||||
#include "AMDGPUTargetMachine.h"
|
||||
#include "SIDefines.h"
|
||||
#include "SIISelLowering.h"
|
||||
#include "SIInstrInfo.h"
|
||||
|
@ -69,12 +70,14 @@ class AMDGPUDAGToDAGISel : public SelectionDAGISel {
|
|||
// make the right decision when generating code for different targets.
|
||||
const AMDGPUSubtarget *Subtarget;
|
||||
AMDGPUAS AMDGPUASI;
|
||||
bool EnableLateStructurizeCFG;
|
||||
|
||||
public:
|
||||
explicit AMDGPUDAGToDAGISel(TargetMachine *TM = nullptr,
|
||||
CodeGenOpt::Level OptLevel = CodeGenOpt::Default)
|
||||
: SelectionDAGISel(*TM, OptLevel) {
|
||||
AMDGPUASI = AMDGPU::getAMDGPUAS(*TM);
|
||||
EnableLateStructurizeCFG = AMDGPUTargetMachine::EnableLateStructurizeCFG;
|
||||
}
|
||||
~AMDGPUDAGToDAGISel() override = default;
|
||||
|
||||
|
|
|
@ -117,10 +117,10 @@ static cl::opt<bool> EnableSIInsertWaitcntsPass(
|
|||
cl::init(true));
|
||||
|
||||
// Option to run late CFG structurizer
|
||||
static cl::opt<bool> LateCFGStructurize(
|
||||
static cl::opt<bool, true> LateCFGStructurize(
|
||||
"amdgpu-late-structurize",
|
||||
cl::desc("Enable late CFG structurization"),
|
||||
cl::init(false),
|
||||
cl::location(AMDGPUTargetMachine::EnableLateStructurizeCFG),
|
||||
cl::Hidden);
|
||||
|
||||
static cl::opt<bool> EnableAMDGPUFunctionCalls(
|
||||
|
@ -300,6 +300,8 @@ AMDGPUTargetMachine::AMDGPUTargetMachine(const Target &T, const Triple &TT,
|
|||
|
||||
AMDGPUTargetMachine::~AMDGPUTargetMachine() = default;
|
||||
|
||||
bool AMDGPUTargetMachine::EnableLateStructurizeCFG = false;
|
||||
|
||||
StringRef AMDGPUTargetMachine::getGPUName(const Function &F) const {
|
||||
Attribute GPUAttr = F.getFnAttribute("target-cpu");
|
||||
return GPUAttr.hasAttribute(Attribute::None) ?
|
||||
|
|
|
@ -41,6 +41,8 @@ protected:
|
|||
StringRef getFeatureString(const Function &F) const;
|
||||
|
||||
public:
|
||||
static bool EnableLateStructurizeCFG;
|
||||
|
||||
AMDGPUTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
|
||||
StringRef FS, TargetOptions Options,
|
||||
Optional<Reloc::Model> RM, Optional<CodeModel::Model> CM,
|
||||
|
|
|
@ -204,12 +204,14 @@ def SI_MASK_BRANCH : VPseudoInstSI <
|
|||
|
||||
let isTerminator = 1 in {
|
||||
|
||||
let OtherPredicates = [EnableLateCFGStructurize] in {
|
||||
def SI_NON_UNIFORM_BRCOND_PSEUDO : CFPseudoInstSI <
|
||||
(outs),
|
||||
(ins SReg_64:$vcc, brtarget:$target),
|
||||
[(brcond i1:$vcc, bb:$target)]> {
|
||||
let Size = 12;
|
||||
}
|
||||
}
|
||||
|
||||
def SI_IF: CFPseudoInstSI <
|
||||
(outs SReg_64:$dst), (ins SReg_64:$vcc, brtarget:$target),
|
||||
|
|
Loading…
Reference in New Issue