[llvm] r327046 - [MemorySSA] Split PtrIntPair as this fails on win/arm.

Alina Sbirlea via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 8 11:15:00 PST 2018


Author: asbirlea
Date: Thu Mar  8 11:15:00 2018
New Revision: 327046

URL: http://llvm.org/viewvc/llvm-project?rev=327046&view=rev
Log:
[MemorySSA] Split PtrIntPair as this fails on win/arm.

Summary: Split PtrIntPair into Instruction and OptionalAlias<Result>. The latter needs 3 bits, which appear unavailable on certain archs.

Subscribers: sanjoy, jlebar, Prazek, llvm-commits, kristof.beyls

Differential Revision: https://reviews.llvm.org/D44268

Modified:
    llvm/trunk/include/llvm/Analysis/MemorySSA.h

Modified: llvm/trunk/include/llvm/Analysis/MemorySSA.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/MemorySSA.h?rev=327046&r1=327045&r2=327046&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Analysis/MemorySSA.h (original)
+++ llvm/trunk/include/llvm/Analysis/MemorySSA.h Thu Mar  8 11:15:00 2018
@@ -249,7 +249,7 @@ public:
   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(MemoryAccess);
 
   /// \brief Get the instruction that this MemoryUse represents.
-  Instruction *getMemoryInst() const { return MemoryAliasPair.getPointer(); }
+  Instruction *getMemoryInst() const { return MemoryInstruction; }
 
   /// \brief Get the access that produces the memory state used by this Use.
   MemoryAccess *getDefiningAccess() const { return getOperand(0); }
@@ -267,7 +267,7 @@ public:
   // Retrieve AliasResult type of the optimized access. Ideally this would be
   // returned by the caching walker and may go away in the future.
   Optional<AliasResult> getOptimizedAccessType() const {
-    return threeBitIntToOptionalAliasResult(MemoryAliasPair.getInt());
+    return OptimizedAccessAlias;
   }
 
   /// \brief Reset the ID of what this MemoryUse was optimized to, causing it to
@@ -281,8 +281,8 @@ protected:
 
   MemoryUseOrDef(LLVMContext &C, MemoryAccess *DMA, unsigned Vty,
                  DeleteValueTy DeleteValue, Instruction *MI, BasicBlock *BB)
-      : MemoryAccess(C, Vty, DeleteValue, BB, 1),
-        MemoryAliasPair(MI, optionalAliasResultToThreeBitInt(MayAlias)) {
+      : MemoryAccess(C, Vty, DeleteValue, BB, 1), MemoryInstruction(MI),
+        OptimizedAccessAlias(MayAlias) {
     setDefiningAccess(DMA);
   }
 
@@ -290,7 +290,7 @@ protected:
   ~MemoryUseOrDef() = default;
 
   void setOptimizedAccessType(Optional<AliasResult> AR) {
-    MemoryAliasPair.setInt(optionalAliasResultToThreeBitInt(AR));
+    OptimizedAccessAlias = AR;
   }
 
   void setDefiningAccess(MemoryAccess *DMA, bool Optimized = false,
@@ -304,22 +304,8 @@ protected:
   }
 
 private:
-  // Pair of memory instruction and Optional<AliasResult> with optimized access.
-  PointerIntPair<Instruction *, 3, int> MemoryAliasPair;
-
-  static int optionalAliasResultToThreeBitInt(Optional<AliasResult> OAR) {
-    if (OAR == None)
-      return 4;
-    return (int)OAR.getValue();
-  }
-
-  static Optional<AliasResult> threeBitIntToOptionalAliasResult(int I) {
-    assert((I <= 4 && I >= 0) &&
-           "Invalid value for converting to an Optional<AliasResult>");
-    if (I == 4)
-      return None;
-    return (AliasResult)I;
-  }
+  Instruction *MemoryInstruction;
+  Optional<AliasResult> OptimizedAccessAlias;
 };
 
 template <>




More information about the llvm-commits mailing list