IR: add optional type to 'byval' function parameters

When we switch to opaque pointer types we will need some way to describe
how many bytes a 'byval' parameter should occupy on the stack. This adds
a (for now) optional extra type parameter.

If present, the type must match the pointee type of the argument.

Note to front-end maintainers: if this causes test failures, it's probably
because the "byval" attribute is printed after attributes without any parameter
after this change.

llvm-svn: 362012
This commit is contained in:
Tim Northover
2019-05-29 19:12:48 +00:00
parent ee37e28fd1
commit 6e07f16fae
40 changed files with 425 additions and 41 deletions

View File

@@ -949,9 +949,11 @@ void ValueEnumerator::incorporateFunction(const Function &F) {
incorporateFunctionMetadata(F);
// Adding function arguments to the value table.
for (const auto &I : F.args())
for (const auto &I : F.args()) {
EnumerateValue(&I);
if (I.hasAttribute(Attribute::ByVal) && I.getParamByValType())
EnumerateType(I.getParamByValType());
}
FirstFuncConstantID = Values.size();
// Add all function-level constants to the value table.