From 64e879745f2eca36bccb528e663189aee929e873 Mon Sep 17 00:00:00 2001 From: Alex Bradbury Date: Tue, 14 Nov 2017 19:16:08 +0000 Subject: [PATCH] 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 --- llvm/include/llvm/CodeGen/MachineInstr.h | 7 ++++++- 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 88a697055e83..65e4c243183e 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 27c8f4099894..302ca34e07d8 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 {