[llvm-commits] [llvm] r158800 - in /llvm/trunk: include/llvm/ADT/STLExtras.h include/llvm/Analysis/Dominators.h include/llvm/Analysis/LoopInfo.h include/llvm/Bitcode/ReaderWriter.h include/llvm/CodeGen/MachineInstrBundle.h include/llvm/Instructions.h include/llvm/Object/ObjectFile.h include/llvm/Support/AlignOf.h include/llvm/Support/Endian.h include/llvm/Support/MathExtras.h lib/Target/X86/MCTargetDesc/X86BaseInfo.h

Chris Lattner clattner at apple.com
Wed Jun 20 22:00:23 PDT 2012


On Jun 20, 2012, at 1:39 AM, Chandler Carruth wrote:

> Author: chandlerc
> Date: Wed Jun 20 03:39:33 2012
> New Revision: 158800
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=158800&view=rev
> Log:
> Remove 'static' from inline functions defined in header files.
> 
> There is a pretty staggering amount of this in LLVM's header files, this
> is not all of the instances I'm afraid. These include all of the
> functions that (in my build) are used by a non-static inline (or
> external) function. Specifically, these issues were caught by the new
> '-Winternal-linkage-in-inline' warning.

Should this patch be reverted?  I thought it was decided that that flag was a bad idea for C++ code, since the whole concept is predicated on "inline" working like the C99 inline semantics, which are bone-headed...

-Chris

> 
> I'll try to just clean up the remainder of the clearly redundant "static
> inline" cases on functions (not methods!) defined within headers if
> I can do so in a reliable way.
> 
> There were even several cases of a missing 'inline' altogether, or my
> personal favorite "static bool inline". Go figure. ;]
> 
> Modified:
>    llvm/trunk/include/llvm/ADT/STLExtras.h
>    llvm/trunk/include/llvm/Analysis/Dominators.h
>    llvm/trunk/include/llvm/Analysis/LoopInfo.h
>    llvm/trunk/include/llvm/Bitcode/ReaderWriter.h
>    llvm/trunk/include/llvm/CodeGen/MachineInstrBundle.h
>    llvm/trunk/include/llvm/Instructions.h
>    llvm/trunk/include/llvm/Object/ObjectFile.h
>    llvm/trunk/include/llvm/Support/AlignOf.h
>    llvm/trunk/include/llvm/Support/Endian.h
>    llvm/trunk/include/llvm/Support/MathExtras.h
>    llvm/trunk/lib/Target/X86/MCTargetDesc/X86BaseInfo.h
> 
> Modified: llvm/trunk/include/llvm/ADT/STLExtras.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/STLExtras.h?rev=158800&r1=158799&r2=158800&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/ADT/STLExtras.h (original)
> +++ llvm/trunk/include/llvm/ADT/STLExtras.h Wed Jun 20 03:39:33 2012
> @@ -59,7 +59,7 @@
> //   for_each(V.begin(), B.end(), deleter<Interval>);
> //
> template <class T>
> -static inline void deleter(T *Ptr) {
> +inline void deleter(T *Ptr) {
>   delete Ptr;
> }
> 
> @@ -238,7 +238,7 @@
> /// array_pod_sort_comparator - This is helper function for array_pod_sort,
> /// which just uses operator< on T.
> template<typename T>
> -static inline int array_pod_sort_comparator(const void *P1, const void *P2) {
> +inline int array_pod_sort_comparator(const void *P1, const void *P2) {
>   if (*reinterpret_cast<const T*>(P1) < *reinterpret_cast<const T*>(P2))
>     return -1;
>   if (*reinterpret_cast<const T*>(P2) < *reinterpret_cast<const T*>(P1))
> @@ -249,7 +249,7 @@
> /// get_array_pad_sort_comparator - This is an internal helper function used to
> /// get type deduction of T right.
> template<typename T>
> -static int (*get_array_pad_sort_comparator(const T &))
> +inline int (*get_array_pad_sort_comparator(const T &))
>              (const void*, const void*) {
>   return array_pod_sort_comparator<T>;
> }
> @@ -270,7 +270,7 @@
> /// NOTE: If qsort_r were portable, we could allow a custom comparator and
> /// default to std::less.
> template<class IteratorTy>
> -static inline void array_pod_sort(IteratorTy Start, IteratorTy End) {
> +inline void array_pod_sort(IteratorTy Start, IteratorTy End) {
>   // Don't dereference start iterator of empty sequence.
>   if (Start == End) return;
>   qsort(&*Start, End-Start, sizeof(*Start),
> @@ -278,7 +278,7 @@
> }
> 
> template<class IteratorTy>
> -static inline void array_pod_sort(IteratorTy Start, IteratorTy End,
> +inline void array_pod_sort(IteratorTy Start, IteratorTy End,
>                                   int (*Compare)(const void*, const void*)) {
>   // Don't dereference start iterator of empty sequence.
>   if (Start == End) return;
> 
> Modified: llvm/trunk/include/llvm/Analysis/Dominators.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/Dominators.h?rev=158800&r1=158799&r2=158800&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/Dominators.h (original)
> +++ llvm/trunk/include/llvm/Analysis/Dominators.h Wed Jun 20 03:39:33 2012
> @@ -152,7 +152,7 @@
> EXTERN_TEMPLATE_INSTANTIATION(class DomTreeNodeBase<MachineBasicBlock>);
> 
> template<class NodeT>
> -static raw_ostream &operator<<(raw_ostream &o,
> +inline raw_ostream &operator<<(raw_ostream &o,
>                                const DomTreeNodeBase<NodeT> *Node) {
>   if (Node->getBlock())
>     WriteAsOperand(o, Node->getBlock(), false);
> @@ -165,7 +165,7 @@
> }
> 
> template<class NodeT>
> -static void PrintDomTree(const DomTreeNodeBase<NodeT> *N, raw_ostream &o,
> +inline void PrintDomTree(const DomTreeNodeBase<NodeT> *N, raw_ostream &o,
>                          unsigned Lev) {
>   o.indent(2*Lev) << "[" << Lev << "] " << N;
>   for (typename DomTreeNodeBase<NodeT>::const_iterator I = N->begin(),
> 
> Modified: llvm/trunk/include/llvm/Analysis/LoopInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LoopInfo.h?rev=158800&r1=158799&r2=158800&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/LoopInfo.h (original)
> +++ llvm/trunk/include/llvm/Analysis/LoopInfo.h Wed Jun 20 03:39:33 2012
> @@ -46,7 +46,7 @@
> namespace llvm {
> 
> template<typename T>
> -static void RemoveFromVector(std::vector<T*> &V, T *N) {
> +inline void RemoveFromVector(std::vector<T*> &V, T *N) {
>   typename std::vector<T*>::iterator I = std::find(V.begin(), V.end(), N);
>   assert(I != V.end() && "N is not in this list!");
>   V.erase(I);
> 
> Modified: llvm/trunk/include/llvm/Bitcode/ReaderWriter.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Bitcode/ReaderWriter.h?rev=158800&r1=158799&r2=158800&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Bitcode/ReaderWriter.h (original)
> +++ llvm/trunk/include/llvm/Bitcode/ReaderWriter.h Wed Jun 20 03:39:33 2012
> @@ -71,8 +71,8 @@
>   /// isBitcodeWrapper - Return true if the given bytes are the magic bytes
>   /// for an LLVM IR bitcode wrapper.
>   ///
> -  static inline bool isBitcodeWrapper(const unsigned char *BufPtr,
> -                                      const unsigned char *BufEnd) {
> +  inline bool isBitcodeWrapper(const unsigned char *BufPtr,
> +                               const unsigned char *BufEnd) {
>     // See if you can find the hidden message in the magic bytes :-).
>     // (Hint: it's a little-endian encoding.)
>     return BufPtr != BufEnd &&
> @@ -85,8 +85,8 @@
>   /// isRawBitcode - Return true if the given bytes are the magic bytes for
>   /// raw LLVM IR bitcode (without a wrapper).
>   ///
> -  static inline bool isRawBitcode(const unsigned char *BufPtr,
> -                                  const unsigned char *BufEnd) {
> +  inline bool isRawBitcode(const unsigned char *BufPtr,
> +                           const unsigned char *BufEnd) {
>     // These bytes sort of have a hidden message, but it's not in
>     // little-endian this time, and it's a little redundant.
>     return BufPtr != BufEnd &&
> @@ -99,8 +99,8 @@
>   /// isBitcode - Return true if the given bytes are the magic bytes for
>   /// LLVM IR bitcode, either with or without a wrapper.
>   ///
> -  static bool inline isBitcode(const unsigned char *BufPtr,
> -                               const unsigned char *BufEnd) {
> +  inline bool isBitcode(const unsigned char *BufPtr,
> +                        const unsigned char *BufEnd) {
>     return isBitcodeWrapper(BufPtr, BufEnd) ||
>            isRawBitcode(BufPtr, BufEnd);
>   }
> @@ -121,9 +121,9 @@
>   /// BC file.
>   /// If 'VerifyBufferSize' is true, check that the buffer is large enough to
>   /// contain the whole bitcode file.
> -  static inline bool SkipBitcodeWrapperHeader(const unsigned char *&BufPtr,
> -                                              const unsigned char *&BufEnd,
> -                                              bool VerifyBufferSize) {
> +  inline bool SkipBitcodeWrapperHeader(const unsigned char *&BufPtr,
> +                                       const unsigned char *&BufEnd,
> +                                       bool VerifyBufferSize) {
>     enum {
>       KnownHeaderSize = 4*4,  // Size of header we read.
>       OffsetField = 2*4,      // Offset in bytes to Offset field.
> 
> Modified: llvm/trunk/include/llvm/CodeGen/MachineInstrBundle.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineInstrBundle.h?rev=158800&r1=158799&r2=158800&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/MachineInstrBundle.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/MachineInstrBundle.h Wed Jun 20 03:39:33 2012
> @@ -43,14 +43,14 @@
> 
> /// getBundleStart - Returns the first instruction in the bundle containing MI.
> ///
> -static inline MachineInstr *getBundleStart(MachineInstr *MI) {
> +inline MachineInstr *getBundleStart(MachineInstr *MI) {
>   MachineBasicBlock::instr_iterator I = MI;
>   while (I->isInsideBundle())
>     --I;
>   return I;
> }
> 
> -static inline const MachineInstr *getBundleStart(const MachineInstr *MI) {
> +inline const MachineInstr *getBundleStart(const MachineInstr *MI) {
>   MachineBasicBlock::const_instr_iterator I = MI;
>   while (I->isInsideBundle())
>     --I;
> 
> Modified: llvm/trunk/include/llvm/Instructions.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Instructions.h?rev=158800&r1=158799&r2=158800&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Instructions.h (original)
> +++ llvm/trunk/include/llvm/Instructions.h Wed Jun 20 03:39:33 2012
> @@ -701,7 +701,7 @@
> // checkGEPType - Simple wrapper function to give a better assertion failure
> // message on bad indexes for a gep instruction.
> //
> -static inline Type *checkGEPType(Type *Ty) {
> +inline Type *checkGEPType(Type *Ty) {
>   assert(Ty && "Invalid GetElementPtrInst indices for type!");
>   return Ty;
> }
> 
> Modified: llvm/trunk/include/llvm/Object/ObjectFile.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ObjectFile.h?rev=158800&r1=158799&r2=158800&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Object/ObjectFile.h (original)
> +++ llvm/trunk/include/llvm/Object/ObjectFile.h Wed Jun 20 03:39:33 2012
> @@ -76,13 +76,13 @@
>   }
> };
> 
> -static bool operator ==(const DataRefImpl &a, const DataRefImpl &b) {
> +inline bool operator ==(const DataRefImpl &a, const DataRefImpl &b) {
>   // Check bitwise identical. This is the only legal way to compare a union w/o
>   // knowing which member is in use.
>   return std::memcmp(&a, &b, sizeof(DataRefImpl)) == 0;
> }
> 
> -static bool operator <(const DataRefImpl &a, const DataRefImpl &b) {
> +inline bool operator <(const DataRefImpl &a, const DataRefImpl &b) {
>   // Check bitwise identical. This is the only legal way to compare a union w/o
>   // knowing which member is in use.
>   return std::memcmp(&a, &b, sizeof(DataRefImpl)) < 0;
> 
> Modified: llvm/trunk/include/llvm/Support/AlignOf.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/AlignOf.h?rev=158800&r1=158799&r2=158800&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/AlignOf.h (original)
> +++ llvm/trunk/include/llvm/Support/AlignOf.h Wed Jun 20 03:39:33 2012
> @@ -57,7 +57,7 @@
> ///  class besides some cosmetic cleanliness.  Example usage:
> ///  alignOf<int>() returns the alignment of an int.
> template <typename T>
> -static inline unsigned alignOf() { return AlignOf<T>::Alignment; }
> +inline unsigned alignOf() { return AlignOf<T>::Alignment; }
> 
> 
> /// \brief Helper for building an aligned character array type.
> 
> Modified: llvm/trunk/include/llvm/Support/Endian.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Endian.h?rev=158800&r1=158799&r2=158800&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/Endian.h (original)
> +++ llvm/trunk/include/llvm/Support/Endian.h Wed Jun 20 03:39:33 2012
> @@ -49,7 +49,7 @@
> 
> namespace endian {
>   template<typename value_type, alignment align>
> -  static value_type read_le(const void *memory) {
> +  inline value_type read_le(const void *memory) {
>     value_type t =
>       reinterpret_cast<const detail::alignment_access_helper
>         <value_type, align> *>(memory)->val;
> @@ -59,7 +59,7 @@
>   }
> 
>   template<typename value_type, alignment align>
> -  static void write_le(void *memory, value_type value) {
> +  inline void write_le(void *memory, value_type value) {
>     if (sys::isBigEndianHost())
>       value = sys::SwapByteOrder(value);
>     reinterpret_cast<detail::alignment_access_helper<value_type, align> *>
> @@ -67,7 +67,7 @@
>   }
> 
>   template<typename value_type, alignment align>
> -  static value_type read_be(const void *memory) {
> +  inline value_type read_be(const void *memory) {
>     value_type t =
>       reinterpret_cast<const detail::alignment_access_helper
>         <value_type, align> *>(memory)->val;
> @@ -77,7 +77,7 @@
>   }
> 
>   template<typename value_type, alignment align>
> -  static void write_be(void *memory, value_type value) {
> +  inline void write_be(void *memory, value_type value) {
>     if (sys::isLittleEndianHost())
>       value = sys::SwapByteOrder(value);
>     reinterpret_cast<detail::alignment_access_helper<value_type, align> *>
> 
> Modified: llvm/trunk/include/llvm/Support/MathExtras.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/MathExtras.h?rev=158800&r1=158799&r2=158800&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/MathExtras.h (original)
> +++ llvm/trunk/include/llvm/Support/MathExtras.h Wed Jun 20 03:39:33 2012
> @@ -414,14 +414,14 @@
> 
> /// MinAlign - A and B are either alignments or offsets.  Return the minimum
> /// alignment that may be assumed after adding the two together.
> -static inline uint64_t MinAlign(uint64_t A, uint64_t B) {
> +inline uint64_t MinAlign(uint64_t A, uint64_t B) {
>   // The largest power of 2 that divides both A and B.
>   return (A | B) & -(A | B);
> }
> 
> /// NextPowerOf2 - Returns the next power of two (in 64-bits)
> /// that is strictly greater than A.  Returns zero on overflow.
> -static inline uint64_t NextPowerOf2(uint64_t A) {
> +inline uint64_t NextPowerOf2(uint64_t A) {
>   A |= (A >> 1);
>   A |= (A >> 2);
>   A |= (A >> 4);
> 
> Modified: llvm/trunk/lib/Target/X86/MCTargetDesc/X86BaseInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/MCTargetDesc/X86BaseInfo.h?rev=158800&r1=158799&r2=158800&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/MCTargetDesc/X86BaseInfo.h (original)
> +++ llvm/trunk/lib/Target/X86/MCTargetDesc/X86BaseInfo.h Wed Jun 20 03:39:33 2012
> @@ -481,17 +481,17 @@
>   // getBaseOpcodeFor - This function returns the "base" X86 opcode for the
>   // specified machine instruction.
>   //
> -  static inline unsigned char getBaseOpcodeFor(uint64_t TSFlags) {
> +  inline unsigned char getBaseOpcodeFor(uint64_t TSFlags) {
>     return TSFlags >> X86II::OpcodeShift;
>   }
> 
> -  static inline bool hasImm(uint64_t TSFlags) {
> +  inline bool hasImm(uint64_t TSFlags) {
>     return (TSFlags & X86II::ImmMask) != 0;
>   }
> 
>   /// getSizeOfImm - Decode the "size of immediate" field from the TSFlags field
>   /// of the specified instruction.
> -  static inline unsigned getSizeOfImm(uint64_t TSFlags) {
> +  inline unsigned getSizeOfImm(uint64_t TSFlags) {
>     switch (TSFlags & X86II::ImmMask) {
>     default: llvm_unreachable("Unknown immediate size");
>     case X86II::Imm8:
> @@ -506,7 +506,7 @@
> 
>   /// isImmPCRel - Return true if the immediate of the specified instruction's
>   /// TSFlags indicates that it is pc relative.
> -  static inline unsigned isImmPCRel(uint64_t TSFlags) {
> +  inline unsigned isImmPCRel(uint64_t TSFlags) {
>     switch (TSFlags & X86II::ImmMask) {
>     default: llvm_unreachable("Unknown immediate size");
>     case X86II::Imm8PCRel:
> @@ -529,7 +529,7 @@
>   /// is duplicated in the MCInst (e.g. "EAX = addl EAX, [mem]") it is only
>   /// counted as one operand.
>   ///
> -  static inline int getMemoryOperandNo(uint64_t TSFlags, unsigned Opcode) {
> +  inline int getMemoryOperandNo(uint64_t TSFlags, unsigned Opcode) {
>     switch (TSFlags & X86II::FormMask) {
>     case X86II::MRMInitReg:
>         // FIXME: Remove this form.
> @@ -591,7 +591,7 @@
> 
>   /// isX86_64ExtendedReg - Is the MachineOperand a x86-64 extended (r8 or
>   /// higher) register?  e.g. r8, xmm8, xmm13, etc.
> -  static inline bool isX86_64ExtendedReg(unsigned RegNo) {
> +  inline bool isX86_64ExtendedReg(unsigned RegNo) {
>     switch (RegNo) {
>     default: break;
>     case X86::R8:    case X86::R9:    case X86::R10:   case X86::R11:
> @@ -613,7 +613,7 @@
>     return false;
>   }
> 
> -  static inline bool isX86_64NonExtLowByteReg(unsigned reg) {
> +  inline bool isX86_64NonExtLowByteReg(unsigned reg) {
>     return (reg == X86::SPL || reg == X86::BPL ||
>             reg == X86::SIL || reg == X86::DIL);
>   }
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list