Re: r263191 - Preserve ExtParameterInfos into CGFunctionInfo.

2016-04-04 Thread Nico Weber via cfe-commits
Thanks, r265324 fixed the assert.

On Fri, Apr 1, 2016 at 8:25 PM, John McCall  wrote:

> On Apr 1, 2016, at 3:50 PM, Nico Weber  wrote:
> On Thu, Mar 10, 2016 at 8:30 PM, John McCall via cfe-commits <
> cfe-commits@lists.llvm.org> wrote:
>
>> Author: rjmccall
>> Date: Thu Mar 10 22:30:31 2016
>> New Revision: 263191
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=263191=rev
>> Log:
>> Preserve ExtParameterInfos into CGFunctionInfo.
>>
>> As part of this, make the function-arrangement interfaces
>> a little simpler and more semantic.
>>
>> NFC.
>>
>> Modified:
>> cfe/trunk/include/clang/AST/CanonicalType.h
>> cfe/trunk/include/clang/CodeGen/CGFunctionInfo.h
>> cfe/trunk/lib/CodeGen/CGAtomic.cpp
>> cfe/trunk/lib/CodeGen/CGBlocks.cpp
>> cfe/trunk/lib/CodeGen/CGBuiltin.cpp
>> cfe/trunk/lib/CodeGen/CGCall.cpp
>> cfe/trunk/lib/CodeGen/CGDeclCXX.cpp
>> cfe/trunk/lib/CodeGen/CGException.cpp
>> cfe/trunk/lib/CodeGen/CGExpr.cpp
>> cfe/trunk/lib/CodeGen/CGObjC.cpp
>> cfe/trunk/lib/CodeGen/CGObjCMac.cpp
>> cfe/trunk/lib/CodeGen/CGObjCRuntime.cpp
>> cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp
>> cfe/trunk/lib/CodeGen/CGStmt.cpp
>> cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp
>> cfe/trunk/lib/CodeGen/CodeGenABITypes.cpp
>> cfe/trunk/lib/CodeGen/CodeGenTypes.h
>> cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp
>>
>> Modified: cfe/trunk/include/clang/AST/CanonicalType.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/CanonicalType.h?rev=263191=263190=263191=diff
>>
>> ==
>> --- cfe/trunk/include/clang/AST/CanonicalType.h (original)
>> +++ cfe/trunk/include/clang/AST/CanonicalType.h Thu Mar 10 22:30:31 2016
>> @@ -484,6 +484,9 @@ struct CanProxyAdaptor>LLVM_CLANG_CANPROXY_TYPE_ACCESSOR(getReturnType)
>>LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(FunctionType::ExtInfo, getExtInfo)
>>LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(unsigned, getNumParams)
>> +  LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(bool, hasExtParameterInfos)
>> +  LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(
>> +ArrayRef,
>> getExtParameterInfos)
>>CanQualType getParamType(unsigned i) const {
>>  return
>> CanQualType::CreateUnsafe(this->getTypePtr()->getParamType(i));
>>}
>>
>> Modified: cfe/trunk/include/clang/CodeGen/CGFunctionInfo.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/CodeGen/CGFunctionInfo.h?rev=263191=263190=263191=diff
>>
>> ==
>> --- cfe/trunk/include/clang/CodeGen/CGFunctionInfo.h (original)
>> +++ cfe/trunk/include/clang/CodeGen/CGFunctionInfo.h Thu Mar 10 22:30:31
>> 2016
>> @@ -343,8 +343,10 @@ struct CGFunctionInfoArgInfo {
>>  /// function definition.
>>  class CGFunctionInfo final
>>  : public llvm::FoldingSetNode,
>> -  private llvm::TrailingObjects> CGFunctionInfoArgInfo> {
>> +  private llvm::TrailingObjects> CGFunctionInfoArgInfo,
>> +FunctionProtoType::ExtParameterInfo>
>> {
>>typedef CGFunctionInfoArgInfo ArgInfo;
>> +  typedef FunctionProtoType::ExtParameterInfo ExtParameterInfo;
>>
>>/// The LLVM::CallingConv to use for this function (as specified by the
>>/// user).
>> @@ -378,7 +380,8 @@ class CGFunctionInfo final
>>/// The struct representing all arguments passed in memory.  Only used
>> when
>>/// passing non-trivial types with inalloca.  Not part of the profile.
>>llvm::StructType *ArgStruct;
>> -  unsigned ArgStructAlign;
>> +  unsigned ArgStructAlign : 31;
>> +  unsigned HasExtParameterInfos : 1;
>>
>>unsigned NumArgs;
>>
>> @@ -389,7 +392,19 @@ class CGFunctionInfo final
>>  return getTrailingObjects();
>>}
>>
>> -  size_t numTrailingObjects(OverloadToken) { return NumArgs +
>> 1; }
>> +  ExtParameterInfo *getExtParameterInfosBuffer() {
>> +return getTrailingObjects();
>> +  }
>> +  const ExtParameterInfo *getExtParameterInfosBuffer() const{
>> +return getTrailingObjects();
>> +  }
>> +
>> +  size_t numTrailingObjects(OverloadToken) const {
>> +return NumArgs + 1;
>> +  }
>> +  size_t numTrailingObjects(OverloadToken) const {
>> +return (HasExtParameterInfos ? NumArgs : 0);
>> +  }
>>friend class TrailingObjects;
>>
>>CGFunctionInfo() : Required(RequiredArgs::All) {}
>> @@ -399,6 +414,7 @@ public:
>>  bool instanceMethod,
>>  bool chainCall,
>>  const FunctionType::ExtInfo ,
>> +ArrayRef paramInfos,
>>  CanQualType resultType,
>>  ArrayRef argTypes,
>>  RequiredArgs required);
>> @@ -472,6 +488,16 @@ public:
>>ABIArgInfo () { return 

Re: r263191 - Preserve ExtParameterInfos into CGFunctionInfo.

2016-04-01 Thread John McCall via cfe-commits
> On Apr 1, 2016, at 3:50 PM, Nico Weber  wrote:
> On Thu, Mar 10, 2016 at 8:30 PM, John McCall via cfe-commits 
> > wrote:
> Author: rjmccall
> Date: Thu Mar 10 22:30:31 2016
> New Revision: 263191
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=263191=rev 
> 
> Log:
> Preserve ExtParameterInfos into CGFunctionInfo.
> 
> As part of this, make the function-arrangement interfaces
> a little simpler and more semantic.
> 
> NFC.
> 
> Modified:
> cfe/trunk/include/clang/AST/CanonicalType.h
> cfe/trunk/include/clang/CodeGen/CGFunctionInfo.h
> cfe/trunk/lib/CodeGen/CGAtomic.cpp
> cfe/trunk/lib/CodeGen/CGBlocks.cpp
> cfe/trunk/lib/CodeGen/CGBuiltin.cpp
> cfe/trunk/lib/CodeGen/CGCall.cpp
> cfe/trunk/lib/CodeGen/CGDeclCXX.cpp
> cfe/trunk/lib/CodeGen/CGException.cpp
> cfe/trunk/lib/CodeGen/CGExpr.cpp
> cfe/trunk/lib/CodeGen/CGObjC.cpp
> cfe/trunk/lib/CodeGen/CGObjCMac.cpp
> cfe/trunk/lib/CodeGen/CGObjCRuntime.cpp
> cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp
> cfe/trunk/lib/CodeGen/CGStmt.cpp
> cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp
> cfe/trunk/lib/CodeGen/CodeGenABITypes.cpp
> cfe/trunk/lib/CodeGen/CodeGenTypes.h
> cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp
> 
> Modified: cfe/trunk/include/clang/AST/CanonicalType.h
> URL: 
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/CanonicalType.h?rev=263191=263190=263191=diff
>  
> 
> ==
> --- cfe/trunk/include/clang/AST/CanonicalType.h (original)
> +++ cfe/trunk/include/clang/AST/CanonicalType.h Thu Mar 10 22:30:31 2016
> @@ -484,6 +484,9 @@ struct CanProxyAdaptorLLVM_CLANG_CANPROXY_TYPE_ACCESSOR(getReturnType)
>LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(FunctionType::ExtInfo, getExtInfo)
>LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(unsigned, getNumParams)
> +  LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(bool, hasExtParameterInfos)
> +  LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(
> +ArrayRef, 
> getExtParameterInfos)
>CanQualType getParamType(unsigned i) const {
>  return CanQualType::CreateUnsafe(this->getTypePtr()->getParamType(i));
>}
> 
> Modified: cfe/trunk/include/clang/CodeGen/CGFunctionInfo.h
> URL: 
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/CodeGen/CGFunctionInfo.h?rev=263191=263190=263191=diff
>  
> 
> ==
> --- cfe/trunk/include/clang/CodeGen/CGFunctionInfo.h (original)
> +++ cfe/trunk/include/clang/CodeGen/CGFunctionInfo.h Thu Mar 10 22:30:31 2016
> @@ -343,8 +343,10 @@ struct CGFunctionInfoArgInfo {
>  /// function definition.
>  class CGFunctionInfo final
>  : public llvm::FoldingSetNode,
> -  private llvm::TrailingObjects {
> +  private llvm::TrailingObjects +FunctionProtoType::ExtParameterInfo> {
>typedef CGFunctionInfoArgInfo ArgInfo;
> +  typedef FunctionProtoType::ExtParameterInfo ExtParameterInfo;
> 
>/// The LLVM::CallingConv to use for this function (as specified by the
>/// user).
> @@ -378,7 +380,8 @@ class CGFunctionInfo final
>/// The struct representing all arguments passed in memory.  Only used when
>/// passing non-trivial types with inalloca.  Not part of the profile.
>llvm::StructType *ArgStruct;
> -  unsigned ArgStructAlign;
> +  unsigned ArgStructAlign : 31;
> +  unsigned HasExtParameterInfos : 1;
> 
>unsigned NumArgs;
> 
> @@ -389,7 +392,19 @@ class CGFunctionInfo final
>  return getTrailingObjects();
>}
> 
> -  size_t numTrailingObjects(OverloadToken) { return NumArgs + 1; }
> +  ExtParameterInfo *getExtParameterInfosBuffer() {
> +return getTrailingObjects();
> +  }
> +  const ExtParameterInfo *getExtParameterInfosBuffer() const{
> +return getTrailingObjects();
> +  }
> +
> +  size_t numTrailingObjects(OverloadToken) const {
> +return NumArgs + 1;
> +  }
> +  size_t numTrailingObjects(OverloadToken) const {
> +return (HasExtParameterInfos ? NumArgs : 0);
> +  }
>friend class TrailingObjects;
> 
>CGFunctionInfo() : Required(RequiredArgs::All) {}
> @@ -399,6 +414,7 @@ public:
>  bool instanceMethod,
>  bool chainCall,
>  const FunctionType::ExtInfo ,
> +ArrayRef paramInfos,
>  CanQualType resultType,
>  ArrayRef argTypes,
>

r263191 - Preserve ExtParameterInfos into CGFunctionInfo.

2016-03-10 Thread John McCall via cfe-commits
Author: rjmccall
Date: Thu Mar 10 22:30:31 2016
New Revision: 263191

URL: http://llvm.org/viewvc/llvm-project?rev=263191=rev
Log:
Preserve ExtParameterInfos into CGFunctionInfo.

As part of this, make the function-arrangement interfaces
a little simpler and more semantic.

NFC.

Modified:
cfe/trunk/include/clang/AST/CanonicalType.h
cfe/trunk/include/clang/CodeGen/CGFunctionInfo.h
cfe/trunk/lib/CodeGen/CGAtomic.cpp
cfe/trunk/lib/CodeGen/CGBlocks.cpp
cfe/trunk/lib/CodeGen/CGBuiltin.cpp
cfe/trunk/lib/CodeGen/CGCall.cpp
cfe/trunk/lib/CodeGen/CGDeclCXX.cpp
cfe/trunk/lib/CodeGen/CGException.cpp
cfe/trunk/lib/CodeGen/CGExpr.cpp
cfe/trunk/lib/CodeGen/CGObjC.cpp
cfe/trunk/lib/CodeGen/CGObjCMac.cpp
cfe/trunk/lib/CodeGen/CGObjCRuntime.cpp
cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp
cfe/trunk/lib/CodeGen/CGStmt.cpp
cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp
cfe/trunk/lib/CodeGen/CodeGenABITypes.cpp
cfe/trunk/lib/CodeGen/CodeGenTypes.h
cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp

Modified: cfe/trunk/include/clang/AST/CanonicalType.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/CanonicalType.h?rev=263191=263190=263191=diff
==
--- cfe/trunk/include/clang/AST/CanonicalType.h (original)
+++ cfe/trunk/include/clang/AST/CanonicalType.h Thu Mar 10 22:30:31 2016
@@ -484,6 +484,9 @@ struct CanProxyAdaptor, 
getExtParameterInfos)
   CanQualType getParamType(unsigned i) const {
 return CanQualType::CreateUnsafe(this->getTypePtr()->getParamType(i));
   }

Modified: cfe/trunk/include/clang/CodeGen/CGFunctionInfo.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/CodeGen/CGFunctionInfo.h?rev=263191=263190=263191=diff
==
--- cfe/trunk/include/clang/CodeGen/CGFunctionInfo.h (original)
+++ cfe/trunk/include/clang/CodeGen/CGFunctionInfo.h Thu Mar 10 22:30:31 2016
@@ -343,8 +343,10 @@ struct CGFunctionInfoArgInfo {
 /// function definition.
 class CGFunctionInfo final
 : public llvm::FoldingSetNode,
-  private llvm::TrailingObjects {
+  private llvm::TrailingObjects {
   typedef CGFunctionInfoArgInfo ArgInfo;
+  typedef FunctionProtoType::ExtParameterInfo ExtParameterInfo;
 
   /// The LLVM::CallingConv to use for this function (as specified by the
   /// user).
@@ -378,7 +380,8 @@ class CGFunctionInfo final
   /// The struct representing all arguments passed in memory.  Only used when
   /// passing non-trivial types with inalloca.  Not part of the profile.
   llvm::StructType *ArgStruct;
-  unsigned ArgStructAlign;
+  unsigned ArgStructAlign : 31;
+  unsigned HasExtParameterInfos : 1;
 
   unsigned NumArgs;
 
@@ -389,7 +392,19 @@ class CGFunctionInfo final
 return getTrailingObjects();
   }
 
-  size_t numTrailingObjects(OverloadToken) { return NumArgs + 1; }
+  ExtParameterInfo *getExtParameterInfosBuffer() {
+return getTrailingObjects();
+  }
+  const ExtParameterInfo *getExtParameterInfosBuffer() const{
+return getTrailingObjects();
+  }
+
+  size_t numTrailingObjects(OverloadToken) const {
+return NumArgs + 1;
+  }
+  size_t numTrailingObjects(OverloadToken) const {
+return (HasExtParameterInfos ? NumArgs : 0);
+  }
   friend class TrailingObjects;
 
   CGFunctionInfo() : Required(RequiredArgs::All) {}
@@ -399,6 +414,7 @@ public:
 bool instanceMethod,
 bool chainCall,
 const FunctionType::ExtInfo ,
+ArrayRef paramInfos,
 CanQualType resultType,
 ArrayRef argTypes,
 RequiredArgs required);
@@ -472,6 +488,16 @@ public:
   ABIArgInfo () { return getArgsBuffer()[0].info; }
   const ABIArgInfo () const { return getArgsBuffer()[0].info; }
 
+  ArrayRef getExtParameterInfos() const {
+if (!HasExtParameterInfos) return {};
+return llvm::makeArrayRef(getExtParameterInfosBuffer(), NumArgs);
+  }
+  ExtParameterInfo getExtParameterInfo(unsigned argIndex) const {
+assert(argIndex <= NumArgs);
+if (!HasExtParameterInfos) return ExtParameterInfo();
+return getExtParameterInfos()[argIndex];
+  }
+
   /// \brief Return true if this function uses inalloca arguments.
   bool usesInAlloca() const { return ArgStruct; }
 
@@ -494,6 +520,11 @@ public:
 ID.AddBoolean(HasRegParm);
 ID.AddInteger(RegParm);
 ID.AddInteger(Required.getOpaqueData());
+ID.AddBoolean(HasExtParameterInfos);
+if (HasExtParameterInfos) {
+  for (auto paramInfo : getExtParameterInfos())
+ID.AddInteger(paramInfo.getOpaqueValue());
+}
 getReturnType().Profile(ID);