Skip to content

Commit 3eb6f01

Browse files
andykaylorlanza
authored andcommitted
[CIR][NFC] Eliminate ArgInfo structure (llvm#1629)
A previous refactoring had reduced the ArgInfo structure to contain a single member, the argument type. This change eliminates the ArgInfo structure entirely, instead just storing the argument type directly in places where ArgInfo had previously been used.
1 parent 1c490ce commit 3eb6f01

File tree

3 files changed

+37
-35
lines changed

3 files changed

+37
-35
lines changed

clang/lib/CIR/CodeGen/CIRGenCall.cpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,9 @@ CIRGenFunctionInfo *CIRGenFunctionInfo::create(
4747
assert(!required.allowsOptionalArgs() ||
4848
required.getNumRequiredArgs() <= argTypes.size());
4949

50-
void *buffer = operator new(totalSizeToAlloc<ArgInfo, ExtParameterInfo>(
51-
argTypes.size() + 1, paramInfos.size()));
50+
void *buffer = operator new(
51+
totalSizeToAlloc<clang::CanQualType, ExtParameterInfo>(
52+
argTypes.size() + 1, paramInfos.size()));
5253

5354
CIRGenFunctionInfo *FI = new (buffer) CIRGenFunctionInfo();
5455
FI->CallingConvention = cirCC;
@@ -68,9 +69,9 @@ CIRGenFunctionInfo *CIRGenFunctionInfo::create(
6869
FI->ArgRecordAlign = 0;
6970
FI->NumArgs = argTypes.size();
7071
FI->HasExtParameterInfos = !paramInfos.empty();
71-
FI->getArgsBuffer()[0].type = resultType;
72+
FI->getArgTypes()[0] = resultType;
7273
for (unsigned i = 0; i < argTypes.size(); ++i)
73-
FI->getArgsBuffer()[i + 1].type = argTypes[i];
74+
FI->getArgTypes()[i + 1] = argTypes[i];
7475
for (unsigned i = 0; i < paramInfos.size(); ++i)
7576
FI->getExtParameterInfosBuffer()[i] = paramInfos[i];
7677

@@ -100,8 +101,8 @@ cir::FuncType CIRGenTypes::GetFunctionType(const CIRGenFunctionInfo &FI) {
100101
ArgTypes.reserve(FI.getNumRequiredArgs());
101102

102103
// Add in all of the required arguments.
103-
for (const CIRGenFunctionInfoArgInfo &argInfo : FI.requiredArguments())
104-
ArgTypes.push_back(convertType(argInfo.type));
104+
for (const clang::CanQualType &argType : FI.requiredArguments())
105+
ArgTypes.push_back(convertType(argType));
105106

106107
bool Erased = FunctionsBeingProcessed.erase(&FI);
107108
(void)Erased;
@@ -469,11 +470,11 @@ RValue CIRGenFunction::emitCall(const CIRGenFunctionInfo &CallInfo,
469470
CIRCallArgs.reserve(CallArgs.size());
470471

471472
unsigned ArgNo = 0;
472-
CIRGenFunctionInfo::const_arg_iterator info_it = CallInfo.arg_begin();
473+
CIRGenFunctionInfo::const_arg_iterator type_it = CallInfo.arg_begin();
473474
for (CallArgList::const_iterator I = CallArgs.begin(), E = CallArgs.end();
474-
I != E; ++I, ++info_it, ++ArgNo) {
475+
I != E; ++I, ++type_it, ++ArgNo) {
475476

476-
mlir::Type argType = convertType(info_it->type);
477+
mlir::Type argType = convertType(*type_it);
477478
if (!mlir::isa<cir::RecordType>(argType)) {
478479
mlir::Value V;
479480
assert(!I->isAggregate() && "Aggregate NYI");

clang/lib/CIR/CodeGen/CIRGenFunctionInfo.h

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,13 @@
1616
#define LLVM_CLANG_CIR_CIRGENFUNCTIONINFO_H
1717

1818
#include "clang/AST/CanonicalType.h"
19-
#include "clang/CIR/ABIArgInfo.h"
2019
#include "clang/CIR/Dialect/IR/CIRTypes.h"
2120

2221
#include "llvm/ADT/FoldingSet.h"
2322
#include "llvm/Support/TrailingObjects.h"
2423

2524
namespace clang::CIRGen {
2625

27-
struct CIRGenFunctionInfoArgInfo {
28-
clang::CanQualType type;
29-
};
30-
3126
/// A class for recording the number of arguments that a function signature
3227
/// requires.
3328
class RequiredArgs {
@@ -80,10 +75,9 @@ class RequiredArgs {
8075
class CIRGenFunctionInfo final
8176
: public llvm::FoldingSetNode,
8277
private llvm::TrailingObjects<
83-
CIRGenFunctionInfo, CIRGenFunctionInfoArgInfo,
78+
CIRGenFunctionInfo, clang::CanQualType,
8479
clang::FunctionProtoType::ExtParameterInfo> {
8580

86-
typedef CIRGenFunctionInfoArgInfo ArgInfo;
8781
typedef clang::FunctionProtoType::ExtParameterInfo ExtParameterInfo;
8882

8983
/// The cir::CallingConv to use for this function (as specified by the user).
@@ -134,9 +128,13 @@ class CIRGenFunctionInfo final
134128

135129
unsigned NumArgs;
136130

137-
ArgInfo *getArgsBuffer() { return getTrailingObjects<ArgInfo>(); }
131+
clang::CanQualType *getArgTypes() {
132+
return getTrailingObjects<clang::CanQualType>();
133+
}
138134

139-
const ArgInfo *getArgsBuffer() const { return getTrailingObjects<ArgInfo>(); }
135+
const clang::CanQualType *getArgTypes() const {
136+
return getTrailingObjects<clang::CanQualType>();
137+
}
140138

141139
ExtParameterInfo *getExtParameterInfosBuffer() {
142140
return getTrailingObjects<ExtParameterInfo>();
@@ -161,15 +159,15 @@ class CIRGenFunctionInfo final
161159
// Friending class TrailingObjects is apparantly not good enough for MSVC, so
162160
// these have to be public.
163161
friend class TrailingObjects;
164-
size_t numTrailingObjects(OverloadToken<ArgInfo>) const {
162+
size_t numTrailingObjects(OverloadToken<clang::CanQualType>) const {
165163
return NumArgs + 1;
166164
}
167165
size_t numTrailingObjects(OverloadToken<ExtParameterInfo>) const {
168166
return (HasExtParameterInfos ? NumArgs : 0);
169167
}
170168

171-
using const_arg_iterator = const ArgInfo *;
172-
using arg_iterator = ArgInfo *;
169+
using const_arg_iterator = const clang::CanQualType *;
170+
using arg_iterator = clang::CanQualType *;
173171

174172
static void Profile(llvm::FoldingSetNodeID &ID, bool InstanceMethod,
175173
bool ChainCall, const clang::FunctionType::ExtInfo &info,
@@ -220,27 +218,29 @@ class CIRGenFunctionInfo final
220218
}
221219
getReturnType().Profile(ID);
222220
for (const auto &I : arguments())
223-
I.type.Profile(ID);
221+
I.Profile(ID);
224222
}
225223

226-
llvm::MutableArrayRef<ArgInfo> arguments() {
227-
return llvm::MutableArrayRef<ArgInfo>(arg_begin(), NumArgs);
224+
llvm::MutableArrayRef<clang::CanQualType> arguments() {
225+
return llvm::MutableArrayRef<clang::CanQualType>(arg_begin(), NumArgs);
228226
}
229-
llvm::ArrayRef<ArgInfo> arguments() const {
230-
return llvm::ArrayRef<ArgInfo>(arg_begin(), NumArgs);
227+
llvm::ArrayRef<clang::CanQualType> arguments() const {
228+
return llvm::ArrayRef<clang::CanQualType>(arg_begin(), NumArgs);
231229
}
232230

233-
llvm::MutableArrayRef<ArgInfo> requiredArguments() {
234-
return llvm::MutableArrayRef<ArgInfo>(arg_begin(), getNumRequiredArgs());
231+
llvm::MutableArrayRef<clang::CanQualType> requiredArguments() {
232+
return llvm::MutableArrayRef<clang::CanQualType>(arg_begin(),
233+
getNumRequiredArgs());
235234
}
236-
llvm::ArrayRef<ArgInfo> requiredArguments() const {
237-
return llvm::ArrayRef<ArgInfo>(arg_begin(), getNumRequiredArgs());
235+
llvm::ArrayRef<clang::CanQualType> requiredArguments() const {
236+
return llvm::ArrayRef<clang::CanQualType>(arg_begin(),
237+
getNumRequiredArgs());
238238
}
239239

240-
const_arg_iterator arg_begin() const { return getArgsBuffer() + 1; }
241-
const_arg_iterator arg_end() const { return getArgsBuffer() + 1 + NumArgs; }
242-
arg_iterator arg_begin() { return getArgsBuffer() + 1; }
243-
arg_iterator arg_end() { return getArgsBuffer() + 1 + NumArgs; }
240+
const_arg_iterator arg_begin() const { return getArgTypes() + 1; }
241+
const_arg_iterator arg_end() const { return getArgTypes() + 1 + NumArgs; }
242+
arg_iterator arg_begin() { return getArgTypes() + 1; }
243+
arg_iterator arg_end() { return getArgTypes() + 1 + NumArgs; }
244244

245245
unsigned arg_size() const { return NumArgs; }
246246

@@ -266,7 +266,7 @@ class CIRGenFunctionInfo final
266266
return EffectiveCallingConvention;
267267
}
268268

269-
clang::CanQualType getReturnType() const { return getArgsBuffer()[0].type; }
269+
clang::CanQualType getReturnType() const { return getArgTypes()[0]; }
270270

271271
bool isChainCall() const { return ChainCall; }
272272

clang/lib/CIR/CodeGen/TargetInfo.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "CIRGenTypes.h"
77

88
#include "clang/Basic/TargetInfo.h"
9+
#include "clang/CIR/ABIArgInfo.h"
910
#include "clang/CIR/MissingFeatures.h"
1011
#include "clang/CIR/Target/x86.h"
1112

0 commit comments

Comments
 (0)