[llvm] r275451 - [CodeGen] Refactor MachineMemOperand::Flags's target-specific flags.

Kostya Serebryany via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 14 13:10:15 PDT 2016


Looks like it broke the windows build.

C:\b\slave\sanitizer-windows\llvm\lib\Target\AArch64\AArch64InstrInfo.cpp(32)
: error C2143: syntax error : missing ';' before
'llvm::MachineMemOperand::Flags'
C:\b\slave\sanitizer-windows\llvm\lib\Target\AArch64\AArch64InstrInfo.cpp(32)
: error C4430: missing type specifier - int assumed. Note: C++ does
not support default-int


On Thu, Jul 14, 2016 at 11:15 AM, Justin Lebar via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: jlebar
> Date: Thu Jul 14 13:15:20 2016
> New Revision: 275451
>
> URL: http://llvm.org/viewvc/llvm-project?rev=275451&view=rev
> Log:
> [CodeGen] Refactor MachineMemOperand::Flags's target-specific flags.
>
> Summary:
> Make the target-specific flags in MachineMemOperand::Flags real, bona
> fide enum values.  This simplifies users, prevents various constants
> from going out of sync, and avoids the false sense of security provided
> by declaring static members in classes and then forgetting to define
> them inside of cpp files.
>
> Reviewers: MatzeB
>
> Subscribers: llvm-commits
>
> Differential Revision: https://reviews.llvm.org/D22372
>
> Modified:
>     llvm/trunk/include/llvm/CodeGen/MachineMemOperand.h
>     llvm/trunk/lib/CodeGen/MachineInstr.cpp
>     llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.cpp
>     llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.h
>
> Modified: llvm/trunk/include/llvm/CodeGen/MachineMemOperand.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineMemOperand.h?rev=275451&r1=275450&r2=275451&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/MachineMemOperand.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/MachineMemOperand.h Thu Jul 14
> 13:15:20 2016
> @@ -89,32 +89,27 @@ struct MachinePointerInfo {
>  ///
>  class MachineMemOperand {
>  public:
> -  // This is the number of bits we need to represent flags.
> -  static LLVM_CONSTEXPR unsigned MOMaxBits = 8;
> -
> -  // Target hints allow target passes to annotate memory operations.
> -  static LLVM_CONSTEXPR unsigned MOTargetStartBit = 5;
> -  static LLVM_CONSTEXPR unsigned MOTargetNumBits = 3;
> -
>    /// Flags values. These may be or'd together.
>    enum Flags : uint16_t {
>      // No flags set.
>      MONone = 0,
>      /// The memory access reads data.
> -    MOLoad = 1,
> +    MOLoad = 1u << 0,
>      /// The memory access writes data.
> -    MOStore = 2,
> +    MOStore = 1u << 1,
>      /// The memory access is volatile.
> -    MOVolatile = 4,
> +    MOVolatile = 1u << 2,
>      /// The memory access is non-temporal.
> -    MONonTemporal = 8,
> +    MONonTemporal = 1u << 3,
>      /// The memory access is invariant.
> -    MOInvariant = 16,
> +    MOInvariant = 1u << 4,
>
> -    // Maximum MemOperandFlag value (inclusive).
> -    MOMaxFlag = (1 << MOMaxBits) - 1,
> +    // Reserved for use by target-specific passes.
> +    MOTargetFlag1 = 1u << 5,
> +    MOTargetFlag2 = 1u << 6,
> +    MOTargetFlag3 = 1u << 7,
>
> -    LLVM_MARK_AS_BITMASK_ENUM(MOMaxFlag)
> +    LLVM_MARK_AS_BITMASK_ENUM(/* LargestFlag = */ MOTargetFlag3)
>    };
>
>  private:
>
> Modified: llvm/trunk/lib/CodeGen/MachineInstr.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineInstr.cpp?rev=275451&r1=275450&r2=275451&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MachineInstr.cpp (original)
> +++ llvm/trunk/lib/CodeGen/MachineInstr.cpp Thu Jul 14 13:15:20 2016
> @@ -503,8 +503,6 @@ MachineMemOperand::MachineMemOperand(Mac
>                                       const MDNode *Ranges)
>      : PtrInfo(ptrinfo), Size(s), FlagVals(f), BaseAlignLog2(Log2_32(a) +
> 1),
>        AAInfo(AAInfo), Ranges(Ranges) {
> -  assert(MOMaxFlag == (1 << MOMaxBits) - 1 &&
> -         "MOMaxFlag and MOMaxBits have fallen out of sync.");
>    assert((PtrInfo.V.isNull() || PtrInfo.V.is<const PseudoSourceValue*>()
> ||
>            isa<PointerType>(PtrInfo.V.get<const Value*>()->getType())) &&
>           "invalid pointer value");
>
> Modified: llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.cpp?rev=275451&r1=275450&r2=275451&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.cpp (original)
> +++ llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.cpp Thu Jul 14 13:15:20
> 2016
> @@ -29,6 +29,9 @@ using namespace llvm;
>  #define GET_INSTRINFO_CTOR_DTOR
>  #include "AArch64GenInstrInfo.inc"
>
> +static constexpr MachineMemOperand::Flags MOSuppressPair =
> +    MachineMemOperand::MOTargetFlag1;
> +
>  AArch64InstrInfo::AArch64InstrInfo(const AArch64Subtarget &STI)
>      : AArch64GenInstrInfo(AArch64::ADJCALLSTACKDOWN,
> AArch64::ADJCALLSTACKUP),
>        RI(STI.getTargetTriple()), Subtarget(STI) {}
> @@ -1449,27 +1452,16 @@ bool AArch64InstrInfo::isScaledAddr(cons
>
>  /// Check all MachineMemOperands for a hint to suppress pairing.
>  bool AArch64InstrInfo::isLdStPairSuppressed(const MachineInstr &MI) const
> {
> -  static_assert(MOSuppressPair < (1 <<
> MachineMemOperand::MOTargetNumBits),
> -                "Too many target MO flags");
> -  for (auto *MM : MI.memoperands()) {
> -    if (MM->getFlags() &
> -        (MOSuppressPair << MachineMemOperand::MOTargetStartBit)) {
> -      return true;
> -    }
> -  }
> -  return false;
> +  return any_of(MI.memoperands(), [](MachineMemOperand *MMO) {
> +    return MMO->getFlags() & MOSuppressPair;
> +  });
>  }
>
>  /// Set a flag on the first MachineMemOperand to suppress pairing.
>  void AArch64InstrInfo::suppressLdStPair(MachineInstr &MI) const {
>    if (MI.memoperands_empty())
>      return;
> -
> -  static_assert(MOSuppressPair < (1 <<
> MachineMemOperand::MOTargetNumBits),
> -                "Too many target MO flags");
> -  (*MI.memoperands_begin())
> -      ->setFlags(static_cast<MachineMemOperand::Flags>(
> -          MOSuppressPair << MachineMemOperand::MOTargetStartBit));
> +  (*MI.memoperands_begin())->setFlags(MOSuppressPair);
>  }
>
>  bool AArch64InstrInfo::isUnscaledLdSt(unsigned Opc) const {
>
> Modified: llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.h?rev=275451&r1=275450&r2=275451&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.h (original)
> +++ llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.h Thu Jul 14 13:15:20
> 2016
> @@ -28,12 +28,6 @@ class AArch64Subtarget;
>  class AArch64TargetMachine;
>
>  class AArch64InstrInfo : public AArch64GenInstrInfo {
> -  // Reserve bits in the MachineMemOperand target hint flags, starting at
> 1.
> -  // They will be shifted into MOTargetHintStart when accessed.
> -  enum TargetMemOperandFlags {
> -    MOSuppressPair = 1
> -  };
> -
>    const AArch64RegisterInfo RI;
>    const AArch64Subtarget &Subtarget;
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160714/5870f0e0/attachment.html>


More information about the llvm-commits mailing list