//===- DetectDeadLanes.h - SubRegister Lane Usage Analysis --*- C++ -*-----===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // /// \file /// Analysis that tracks defined/used subregister lanes across COPY instructions /// and instructions that get lowered to a COPY (PHI, REG_SEQUENCE, /// INSERT_SUBREG, EXTRACT_SUBREG). /// The information is used to detect dead definitions and the usage of /// (completely) undefined values and mark the operands as such. /// This pass is necessary because the dead/undef status is not obvious anymore /// when subregisters are involved. /// /// Example: /// %0 = some definition /// %1 = IMPLICIT_DEF /// %2 = REG_SEQUENCE %0, sub0, %1, sub1 /// %3 = EXTRACT_SUBREG %2, sub1 /// = use %3 /// The %0 definition is dead and %3 contains an undefined value. // //===----------------------------------------------------------------------===// #ifndef LLVM_CODEGEN_DETECTDEADLANES_H #define LLVM_CODEGEN_DETECTDEADLANES_H #include "llvm/ADT/BitVector.h" #include "llvm/MC/LaneBitmask.h" #include <deque> namespace llvm { class MachineInstr; class MachineOperand; class MachineRegisterInfo; class TargetRegisterInfo; class DeadLaneDetector { … }; } // end namespace llvm #endif // LLVM_CODEGEN_DETECTDEADLANES_H