[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:
Alex Bradbury 2017-11-08 09:26:06 +00:00
parent 28ef7d662f
commit cc988415fe
2 changed files with 15 additions and 5 deletions

View File

@ -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;

View File

@ -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 {