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