diff options
| author | Alex Bradbury <asb@lowrisc.org> | 2017-11-14 19:16:08 +0000 |
|---|---|---|
| committer | Alex Bradbury <asb@lowrisc.org> | 2017-11-14 19:16:08 +0000 |
| commit | 64e879745f2eca36bccb528e663189aee929e873 (patch) | |
| tree | f052e55ffa02858169865dd46c46dd0288a3a195 /llvm | |
| parent | 55dcf5e586a470d13350fcf3b0b85993c73ce024 (diff) | |
| download | bcm5719-llvm-64e879745f2eca36bccb528e663189aee929e873.tar.gz bcm5719-llvm-64e879745f2eca36bccb528e663189aee929e873.zip | |
Set hasSideEffects=0 for TargetOpcode::{CFI_INSTRUCTION,EH_LABEL,GC_LABEL,ANNOTATION_LABEL}
D37065 (committed as rL317674) explicitly set hasSideEffects for all
TargetOpcode::* instructions where it was inferred previously. This is a
follow-up to that patch, setting hasSideEffects=0 for CFI_INSTRUCTION,
EH_LABEL, GC_LABEL and ANNOTATION_LABEL. All LLVM tests pass after this
change.
This patch also modifies MachineInstr::isLabel returns true for a
TargetOpcode::ANNOTATION_LABEL, which ensures that an annotation label won't
be incorrectly considered safe to move.
Differential Revision: https://reviews.llvm.org/D39941
llvm-svn: 318174
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/CodeGen/MachineInstr.h | 7 | ||||
| -rw-r--r-- | llvm/include/llvm/Target/Target.td | 8 |
2 files changed, 10 insertions, 5 deletions
diff --git a/llvm/include/llvm/CodeGen/MachineInstr.h b/llvm/include/llvm/CodeGen/MachineInstr.h index 88a697055e8..65e4c243183 100644 --- a/llvm/include/llvm/CodeGen/MachineInstr.h +++ b/llvm/include/llvm/CodeGen/MachineInstr.h @@ -797,9 +797,14 @@ public: bool isEHLabel() const { return getOpcode() == TargetOpcode::EH_LABEL; } bool isGCLabel() const { return getOpcode() == TargetOpcode::GC_LABEL; } + bool isAnnotationLabel() const { + return getOpcode() == TargetOpcode::ANNOTATION_LABEL; + } /// Returns true if the MachineInstr represents a label. - bool isLabel() const { return isEHLabel() || isGCLabel(); } + bool isLabel() const { + return isEHLabel() || isGCLabel() || isAnnotationLabel(); + } bool isCFIInstruction() const { return getOpcode() == TargetOpcode::CFI_INSTRUCTION; diff --git a/llvm/include/llvm/Target/Target.td b/llvm/include/llvm/Target/Target.td index 27c8f409989..302ca34e07d 100644 --- a/llvm/include/llvm/Target/Target.td +++ b/llvm/include/llvm/Target/Target.td @@ -906,7 +906,7 @@ def CFI_INSTRUCTION : Instruction { let InOperandList = (ins i32imm:$id); let AsmString = ""; let hasCtrlDep = 1; - let hasSideEffects = 1; + let hasSideEffects = 0; let isNotDuplicable = 1; } def EH_LABEL : Instruction { @@ -914,7 +914,7 @@ def EH_LABEL : Instruction { let InOperandList = (ins i32imm:$id); let AsmString = ""; let hasCtrlDep = 1; - let hasSideEffects = 1; + let hasSideEffects = 0; let isNotDuplicable = 1; } def GC_LABEL : Instruction { @@ -922,7 +922,7 @@ def GC_LABEL : Instruction { let InOperandList = (ins i32imm:$id); let AsmString = ""; let hasCtrlDep = 1; - let hasSideEffects = 1; + let hasSideEffects = 0; let isNotDuplicable = 1; } def ANNOTATION_LABEL : Instruction { @@ -930,7 +930,7 @@ def ANNOTATION_LABEL : Instruction { let InOperandList = (ins i32imm:$id); let AsmString = ""; let hasCtrlDep = 1; - let hasSideEffects = 1; + let hasSideEffects = 0; let isNotDuplicable = 1; } def KILL : Instruction { |

