forked from OSchip/llvm-project
[NFCI] Ensure TargetOpcode::* are compatible with guessInstructionProperties=0
rL162640 introduced CodeGenTarget::guessInstructionProperties. If a target sets guessInstructionProperties=0 in its FooInstrInfo, tablegen will error if it has to guess properties from patterns. Unfortunately, guessInstructionProperties=0 can't be used with current upstream LLVM as instructions in the TargetOpcode namespace are always included and sometimes have inferred properties for mayLoad, mayStore, and hasSideEffects. This patch provides the simplest possible fix to this problem, setting default values for these fields in the TargetOpcode scope. There is no intended functional change, as the explicitly set properties should match what was previously inferred. A number of the instructions had hasSideEffects=1 inferred unintentionally. This patch makes it explicit, while future patches (such as D37097) correct the property. Differential Revision: https://reviews.llvm.org/D37065 llvm-svn: 317674
This commit is contained in:
parent
28ef7d662f
commit
cc988415fe
|
@ -884,12 +884,16 @@ class InstrInfo {
|
|||
// Standard Pseudo Instructions.
|
||||
// This list must match TargetOpcodes.h and CodeGenTarget.cpp.
|
||||
// Only these instructions are allowed in the TargetOpcode namespace.
|
||||
let isCodeGenOnly = 1, isPseudo = 1, hasNoSchedulingInfo = 1,
|
||||
Namespace = "TargetOpcode" in {
|
||||
// Ensure mayLoad and mayStore have a default value, so as not to break
|
||||
// targets that set guessInstructionProperties=0. Any local definition of
|
||||
// mayLoad/mayStore takes precedence over these default values.
|
||||
let mayLoad = 0, mayStore = 0, isCodeGenOnly = 1, isPseudo = 1,
|
||||
hasNoSchedulingInfo = 1, Namespace = "TargetOpcode" in {
|
||||
def PHI : Instruction {
|
||||
let OutOperandList = (outs unknown:$dst);
|
||||
let InOperandList = (ins variable_ops);
|
||||
let AsmString = "PHINODE";
|
||||
let hasSideEffects = 1;
|
||||
}
|
||||
def INLINEASM : Instruction {
|
||||
let OutOperandList = (outs);
|
||||
|
@ -902,6 +906,7 @@ def CFI_INSTRUCTION : Instruction {
|
|||
let InOperandList = (ins i32imm:$id);
|
||||
let AsmString = "";
|
||||
let hasCtrlDep = 1;
|
||||
let hasSideEffects = 1;
|
||||
let isNotDuplicable = 0;
|
||||
}
|
||||
def EH_LABEL : Instruction {
|
||||
|
@ -909,6 +914,7 @@ def EH_LABEL : Instruction {
|
|||
let InOperandList = (ins i32imm:$id);
|
||||
let AsmString = "";
|
||||
let hasCtrlDep = 1;
|
||||
let hasSideEffects = 1;
|
||||
let isNotDuplicable = 1;
|
||||
}
|
||||
def GC_LABEL : Instruction {
|
||||
|
@ -916,6 +922,7 @@ def GC_LABEL : Instruction {
|
|||
let InOperandList = (ins i32imm:$id);
|
||||
let AsmString = "";
|
||||
let hasCtrlDep = 1;
|
||||
let hasSideEffects = 1;
|
||||
let isNotDuplicable = 1;
|
||||
}
|
||||
def ANNOTATION_LABEL : Instruction {
|
||||
|
@ -923,6 +930,7 @@ def ANNOTATION_LABEL : Instruction {
|
|||
let InOperandList = (ins i32imm:$id);
|
||||
let AsmString = "";
|
||||
let hasCtrlDep = 1;
|
||||
let hasSideEffects = 1;
|
||||
let isNotDuplicable = 1;
|
||||
}
|
||||
def KILL : Instruction {
|
||||
|
@ -990,6 +998,7 @@ def BUNDLE : Instruction {
|
|||
let OutOperandList = (outs);
|
||||
let InOperandList = (ins variable_ops);
|
||||
let AsmString = "BUNDLE";
|
||||
let hasSideEffects = 1;
|
||||
}
|
||||
def LIFETIME_START : Instruction {
|
||||
let OutOperandList = (outs);
|
||||
|
@ -1006,6 +1015,7 @@ def LIFETIME_END : Instruction {
|
|||
def STACKMAP : Instruction {
|
||||
let OutOperandList = (outs);
|
||||
let InOperandList = (ins i64imm:$id, i32imm:$nbytes, variable_ops);
|
||||
let hasSideEffects = 1;
|
||||
let isCall = 1;
|
||||
let mayLoad = 1;
|
||||
let usesCustomInserter = 1;
|
||||
|
@ -1014,6 +1024,7 @@ def PATCHPOINT : Instruction {
|
|||
let OutOperandList = (outs unknown:$dst);
|
||||
let InOperandList = (ins i64imm:$id, i32imm:$nbytes, unknown:$callee,
|
||||
i32imm:$nargs, i32imm:$cc, variable_ops);
|
||||
let hasSideEffects = 1;
|
||||
let isCall = 1;
|
||||
let mayLoad = 1;
|
||||
let usesCustomInserter = 1;
|
||||
|
@ -1048,6 +1059,7 @@ def FAULTING_OP : Instruction {
|
|||
let OutOperandList = (outs unknown:$dst);
|
||||
let InOperandList = (ins variable_ops);
|
||||
let usesCustomInserter = 1;
|
||||
let hasSideEffects = 1;
|
||||
let mayLoad = 1;
|
||||
let mayStore = 1;
|
||||
let isTerminator = 1;
|
||||
|
|
|
@ -40,9 +40,7 @@ def : ProcessorModel<"generic-rv64", NoSchedModel, [Feature64Bit]>;
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
def RISCVInstrInfo : InstrInfo {
|
||||
// TODO: disable guessInstructionProperties when
|
||||
// https://reviews.llvm.org/D37065 lands.
|
||||
let guessInstructionProperties = 1;
|
||||
let guessInstructionProperties = 0;
|
||||
}
|
||||
|
||||
def RISCVAsmParser : AsmParser {
|
||||
|
|
Loading…
Reference in New Issue