diff --git a/llvm/include/llvm/CodeGen/MachineFrameInfo.h b/llvm/include/llvm/CodeGen/MachineFrameInfo.h
index f0fb765..c5e57e6 100644
--- a/llvm/include/llvm/CodeGen/MachineFrameInfo.h
+++ b/llvm/include/llvm/CodeGen/MachineFrameInfo.h
@@ -460,8 +460,6 @@
     Objects[ObjectIdx+NumFixedObjects].Size = Size;
   }
 
-  /// Return the alignment of the specified stack object.
-  /// FIXME: Remove this function once transition to Align is over.
   LLVM_ATTRIBUTE_DEPRECATED(inline unsigned getObjectAlignment(int ObjectIdx)
                                 const,
                             "Use getObjectAlign instead") {
@@ -486,8 +484,6 @@
       ensureMaxAlignment(Alignment);
   }
 
-  /// setObjectAlignment - Change the alignment of the specified stack object.
-  /// FIXME: Remove this function once transition to Align is over.
   LLVM_ATTRIBUTE_DEPRECATED(inline void setObjectAlignment(int ObjectIdx,
                                                            unsigned Align),
                             "Use the version that takes Align instead") {
@@ -589,7 +585,7 @@
 
   /// Make sure the function is at least Align bytes aligned.
   void ensureMaxAlignment(Align Alignment);
-  /// FIXME: Remove this once transition to Align is over.
+
   LLVM_ATTRIBUTE_DEPRECATED(inline void ensureMaxAlignment(unsigned Align),
                             "Use the version that uses Align instead") {
     ensureMaxAlignment(assumeAligned(Align));
diff --git a/llvm/include/llvm/CodeGen/MachineFunction.h b/llvm/include/llvm/CodeGen/MachineFunction.h
index a1626fe..b4a7e99 100644
--- a/llvm/include/llvm/CodeGen/MachineFunction.h
+++ b/llvm/include/llvm/CodeGen/MachineFunction.h
@@ -818,7 +818,6 @@
       AtomicOrdering Ordering = AtomicOrdering::NotAtomic,
       AtomicOrdering FailureOrdering = AtomicOrdering::NotAtomic);
 
-  /// FIXME: Remove once transition to Align is over.
   LLVM_ATTRIBUTE_DEPRECATED(
       inline MachineMemOperand *getMachineMemOperand(
           MachinePointerInfo PtrInfo, MachineMemOperand::Flags f, uint64_t s,
diff --git a/llvm/include/llvm/CodeGen/MachineMemOperand.h b/llvm/include/llvm/CodeGen/MachineMemOperand.h
index 650d50b..4f0c4ae 100644
--- a/llvm/include/llvm/CodeGen/MachineMemOperand.h
+++ b/llvm/include/llvm/CodeGen/MachineMemOperand.h
@@ -222,9 +222,6 @@
   /// Return the size in bits of the memory reference.
   uint64_t getSizeInBits() const { return Size * 8; }
 
-  /// Return the minimum known alignment in bytes of the actual memory
-  /// reference.
-  /// FIXME: Remove once transition to Align is over.
   LLVM_ATTRIBUTE_DEPRECATED(uint64_t getAlignment() const,
                             "Use getAlign instead");
 
@@ -232,9 +229,6 @@
   /// reference.
   Align getAlign() const;
 
-  /// Return the minimum known alignment in bytes of the base address, without
-  /// the offset.
-  /// FIXME: Remove once transition to Align is over.
   LLVM_ATTRIBUTE_DEPRECATED(uint64_t getBaseAlignment() const,
                             "Use getBaseAlign instead") {
     return BaseAlign.value();
diff --git a/llvm/include/llvm/IR/GlobalObject.h b/llvm/include/llvm/IR/GlobalObject.h
index faa9e29..cd0b2dc 100644
--- a/llvm/include/llvm/IR/GlobalObject.h
+++ b/llvm/include/llvm/IR/GlobalObject.h
@@ -82,7 +82,6 @@
     return decodeMaybeAlign(AlignmentData);
   }
 
-  /// FIXME: Remove this setter once the migration to MaybeAlign is over.
   LLVM_ATTRIBUTE_DEPRECATED(void setAlignment(unsigned Align),
                             "Please use `void setAlignment(MaybeAlign Align)`");
   void setAlignment(MaybeAlign Align);
diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h
index d4449e1..92c282a 100644
--- a/llvm/include/llvm/IR/IRBuilder.h
+++ b/llvm/include/llvm/IR/IRBuilder.h
@@ -520,8 +520,6 @@
   /// If the pointer isn't an i8*, it will be converted. If a TBAA tag is
   /// specified, it will be added to the instruction. Likewise with alias.scope
   /// and noalias tags.
-  /// FIXME: Remove this function once transition to Align is over.
-  /// Use the version that takes Align instead of this one.
   LLVM_ATTRIBUTE_DEPRECATED(
       CallInst *CreateElementUnorderedAtomicMemSet(
           Value *Ptr, Value *Val, uint64_t Size, unsigned Alignment,
@@ -544,8 +542,6 @@
                                               TBAATag, ScopeTag, NoAliasTag);
   }
 
-  /// FIXME: Remove this function once transition to Align is over.
-  /// Use the version that takes Align instead of this one.
   LLVM_ATTRIBUTE_DEPRECATED(
       CallInst *CreateElementUnorderedAtomicMemSet(
           Value *Ptr, Value *Val, Value *Size, unsigned Alignment,
@@ -569,8 +565,6 @@
   /// If the pointers aren't i8*, they will be converted.  If a TBAA tag is
   /// specified, it will be added to the instruction. Likewise with alias.scope
   /// and noalias tags.
-  /// FIXME: Remove this function once transition to Align is over.
-  /// Use the version that takes MaybeAlign instead of this one.
   LLVM_ATTRIBUTE_DEPRECATED(
       CallInst *CreateMemCpy(Value *Dst, unsigned DstAlign, Value *Src,
                              unsigned SrcAlign, uint64_t Size,
@@ -595,8 +589,6 @@
                         NoAliasTag);
   }
 
-  /// FIXME: Remove this function once transition to Align is over.
-  /// Use the version that takes MaybeAlign instead of this one.
   LLVM_ATTRIBUTE_DEPRECATED(
       CallInst *CreateMemCpy(Value *Dst, unsigned DstAlign, Value *Src,
                              unsigned SrcAlign, Value *Size,
@@ -629,8 +621,6 @@
       MDNode *TBAAStructTag = nullptr, MDNode *ScopeTag = nullptr,
       MDNode *NoAliasTag = nullptr);
 
-  /// FIXME: Remove this function once transition to Align is over.
-  /// Use the version that takes Align instead of this one.
   LLVM_ATTRIBUTE_DEPRECATED(CallInst *CreateElementUnorderedAtomicMemCpy(
                                 Value *Dst, unsigned DstAlign, Value *Src,
                                 unsigned SrcAlign, uint64_t Size,
@@ -644,8 +634,6 @@
         TBAATag, TBAAStructTag, ScopeTag, NoAliasTag);
   }
 
-  /// FIXME: Remove this function once transition to Align is over.
-  /// Use the version that takes Align instead of this one.
   LLVM_ATTRIBUTE_DEPRECATED(CallInst *CreateElementUnorderedAtomicMemCpy(
                                 Value *Dst, unsigned DstAlign, Value *Src,
                                 unsigned SrcAlign, Value *Size,
@@ -659,14 +647,6 @@
         TBAAStructTag, ScopeTag, NoAliasTag);
   }
 
-  /// Create and insert a memmove between the specified
-  /// pointers.
-  ///
-  /// If the pointers aren't i8*, they will be converted.  If a TBAA tag is
-  /// specified, it will be added to the instruction. Likewise with alias.scope
-  /// and noalias tags.
-  /// FIXME: Remove this function once transition to Align is over.
-  /// Use the version that takes MaybeAlign instead of this one.
   LLVM_ATTRIBUTE_DEPRECATED(
       CallInst *CreateMemMove(
           Value *Dst, unsigned DstAlign, Value *Src, unsigned SrcAlign,
@@ -685,8 +665,7 @@
     return CreateMemMove(Dst, DstAlign, Src, SrcAlign, getInt64(Size),
                          isVolatile, TBAATag, ScopeTag, NoAliasTag);
   }
-  /// FIXME: Remove this function once transition to Align is over.
-  /// Use the version that takes MaybeAlign instead of this one.
+
   LLVM_ATTRIBUTE_DEPRECATED(
       CallInst *CreateMemMove(
           Value *Dst, unsigned DstAlign, Value *Src, unsigned SrcAlign,
@@ -717,8 +696,6 @@
       MDNode *TBAAStructTag = nullptr, MDNode *ScopeTag = nullptr,
       MDNode *NoAliasTag = nullptr);
 
-  /// FIXME: Remove this function once transition to Align is over.
-  /// Use the version that takes Align instead of this one.
   LLVM_ATTRIBUTE_DEPRECATED(CallInst *CreateElementUnorderedAtomicMemMove(
                                 Value *Dst, unsigned DstAlign, Value *Src,
                                 unsigned SrcAlign, uint64_t Size,
@@ -732,8 +709,6 @@
         TBAATag, TBAAStructTag, ScopeTag, NoAliasTag);
   }
 
-  /// FIXME: Remove this function once transition to Align is over.
-  /// Use the version that takes Align instead of this one.
   LLVM_ATTRIBUTE_DEPRECATED(CallInst *CreateElementUnorderedAtomicMemMove(
                                 Value *Dst, unsigned DstAlign, Value *Src,
                                 unsigned SrcAlign, Value *Size,
@@ -1747,11 +1722,6 @@
     return Insert(new StoreInst(Val, Ptr, isVolatile));
   }
 
-  /// Provided to resolve 'CreateAlignedLoad(Ptr, Align, "...")'
-  /// correctly, instead of converting the string to 'bool' for the isVolatile
-  /// parameter.
-  /// FIXME: Remove this function once transition to Align is over.
-  /// Use the version that takes MaybeAlign instead of this one.
   LLVM_ATTRIBUTE_DEPRECATED(LoadInst *CreateAlignedLoad(Type *Ty, Value *Ptr,
                                                         unsigned Align,
                                                         const char *Name),
@@ -1764,8 +1734,7 @@
     LI->setAlignment(Align);
     return LI;
   }
-  /// FIXME: Remove this function once transition to Align is over.
-  /// Use the version that takes MaybeAlign instead of this one.
+
   LLVM_ATTRIBUTE_DEPRECATED(LoadInst *CreateAlignedLoad(Type *Ty, Value *Ptr,
                                                         unsigned Align,
                                                         const Twine &Name = ""),
@@ -1778,8 +1747,7 @@
     LI->setAlignment(Align);
     return LI;
   }
-  /// FIXME: Remove this function once transition to Align is over.
-  /// Use the version that takes MaybeAlign instead of this one.
+
   LLVM_ATTRIBUTE_DEPRECATED(LoadInst *CreateAlignedLoad(Type *Ty, Value *Ptr,
                                                         unsigned Align,
                                                         bool isVolatile,
@@ -1837,8 +1805,6 @@
                              Align, isVolatile, Name);
   }
 
-  /// FIXME: Remove this function once transition to Align is over.
-  /// Use the version that takes MaybeAlign instead of this one.
   LLVM_ATTRIBUTE_DEPRECATED(
       StoreInst *CreateAlignedStore(Value *Val, Value *Ptr, unsigned Align,
                                     bool isVolatile = false),
diff --git a/llvm/include/llvm/IR/InstrTypes.h b/llvm/include/llvm/IR/InstrTypes.h
index c8a00f6..d28b330 100644
--- a/llvm/include/llvm/IR/InstrTypes.h
+++ b/llvm/include/llvm/IR/InstrTypes.h
@@ -1588,8 +1588,6 @@
   MaybeAlign getRetAlign() const { return Attrs.getRetAlignment(); }
 
   /// Extract the alignment for a call or parameter (0=unknown).
-  /// FIXME: Remove this function once transition to Align is over.
-  /// Use getParamAlign() instead.
   LLVM_ATTRIBUTE_DEPRECATED(unsigned getParamAlignment(unsigned ArgNo) const,
                             "Use getParamAlign() instead") {
     if (const auto MA = Attrs.getParamAlignment(ArgNo))
