Commit Graph

43 Commits

Author SHA1 Message Date
Ivan Krysak 75d0ba700c ToRFT: work on a single argument at a time 2024-01-29 11:57:54 +02:00
Ivan Krysak a2ef041cb2 Move TypeBucket to the model 2024-01-29 11:57:54 +02:00
Ivan Krysak 77b1acaf00 Prefer uint64_t to size_t wherever relevant 2024-01-29 11:57:54 +02:00
Ivan Krysak b25a32de2a Stop using std:: prefix for std::size_t 2024-01-29 11:57:54 +02:00
Ivan Krysak 15be26f9fa Minor Improvements 2024-01-29 11:57:54 +02:00
Giacomo Vercesi 8504a96020 RawFunctionType: use NamedTypedRegister for return
Use the `NamedTypedRegister` type for return values in
`RawFunctionType`. This allows return values to be renamed at the user's
discretion.
2023-12-11 12:03:45 +01:00
Pietro Fezzardi 1285c6e7af Make RawFunctionType::StackArgumentsType a TTR
This is homogeneous with all other nullable references to types in the
model, such as the StackFrameType in model::Function, and others.
2023-12-05 16:19:38 +01:00
Ivan Krysak 8964dc815c Layout: fix a bug with missing SPTAR arguments
Because of a mistake with the last refactoring iteration, this extra
argument was lost when converting to RFTs (it was still present in
layouts). This commit reintroduces it.
2023-11-02 17:10:04 +01:00
Ivan Krysak cfe28d8e56 Stop using std:: prefix for u?int\d+_t types 2023-11-02 17:10:03 +01:00
Alessandro Di Federico f51af94e8f TupleTreeReference::isValid is for assertions only 2023-08-23 16:14:05 +02:00
Alessandro Di Federico 247879f7fc model::Type::ID: switch to progressive IDs
This commit switches `model::Type::ID` from being a GUID to be a
progressive number, in order to make things easier for humans.

On top of this, this commit introduces the following changes:

* TypeCopier: import all the necessary PrimitiveTypes and improve
  handling of CustomName.
* Move Kind as the last field of the key of each TupleTree type used in
  an `UpcastablePointer`.
* Update the ground truth of tests to ignore the `CustomName` in favor
  of focusing on `OriginalName`.
* Increase adoption of `model::Binary::makeType`, equivalent to
  `Binary.recordNewType(makeType<model::*Type>())`.
2023-08-23 16:14:04 +02:00
Alessandro Di Federico b8b483d052 Minor changes 2023-08-23 16:14:04 +02:00
Ivan Krysak 19138353f7 abi::FunctionType: preserve return value comments 2023-07-21 17:25:24 +02:00
Ivan Krysak 7d235f4fd0 Enforce licence header consistency
Also do some basic cleanup: capitalize first letters, add `.`
at the end of the sentences, and so on.
2023-07-03 15:23:10 +00:00
Alessandro Di Federico 55d433e020 Layout::verify: be stricter on return values
We now ensure that, if we have multiple return values, each one of them
covers at most one register.
2023-06-21 10:56:27 +02:00
Alessandro Di Federico 0af9b34a0a Layout: make ReturnValues empty in case of void 2023-06-21 10:55:50 +02:00
Ivan Krysak 02978910b0 STLExtras: introduce zip_pairs skip flavour
I found that it leads to better looking code when the check of whether
the range in question even has enough elements to skip is inside
the helper.

As such a separate type of skip entry point was introduced: one that
allows to iterate over the container pairwise

Now, instead of asserting, the loop just does nothing in cases like
```cpp
for (const auto &Element : zip_pairs(make_empty_range())
  do_stuff();
```
2023-05-25 06:25:07 +00:00
Massimo Fioravanti 254dc99fcb TupleTreeGenerator: emit tracking machinery 2023-04-21 17:50:16 +02:00
Alessandro Di Federico 52521f8cac Adopt more standard library's features 2023-04-08 08:42:23 +02:00
Ivan Krysak 19e292f097 abi::FunctionType: standardize std integer usage
This reevaluates the places where `std::size_t` should be replaced by
`std::uint64_t` in the conversions, it also appends `std::` prefixes to
them where it's possible in preparation to the eventual `import std`
transition.
2023-03-15 10:19:03 +01:00
Ivan Krysak 1f27e938bf ABI: rework non-position based distribution
The original non-position based distribution (`considerRegisters`)
algorithm had a whole lot of problems preventing effective padding
support because it was written with only registers in mind.

As such, it was easier to rewrite the whole logic from scratch over
trying to fix it incrementally.
2023-03-15 10:19:03 +01:00
Ivan Krysak 3d05439001 ABI: improve multi-aligned stack argument support 2023-03-15 10:19:03 +01:00
Ivan Krysak 3edfaa827f ABI: preserve big scalar return values if possible 2023-03-15 10:19:03 +01:00
Ivan Krysak a936990c77 ABI: abstract stack alignment verification away 2023-03-15 10:19:03 +01:00
Ivan Krysak 806d4053a0 ABI: reintroduce conversion logs 2023-03-15 10:19:03 +01:00
Ivan Krysak 09f1d5b5e7 ABI: rework stack argument conversion 2023-03-15 10:19:03 +01:00
Ivan Krysak a0adafeab0 ABI: take advantage of register state deductions
This makes the conversions more robust, since everything can rely on
the same tools for filling in missing registers and ordering them based
on the ABI requirements.
2023-03-15 10:19:03 +01:00
Ivan Krysak 0c82ff91b1 ABI: move the conversion ouside the helper class
This will allow reusing the helper class as the type manager.
2023-03-15 10:19:03 +01:00
Ivan Krysak 3422a9bf0f ABI: reintoduce conversion logs 2023-03-15 10:19:03 +01:00
Ivan Krysak b966637373 Layout: improve shadow return value handling
This brings the layout-side handling of these closer to the way they are
handled when converting the function.

The biggest change is the fact that now the return value location can
also be passed as the first stack argument.
2023-03-15 10:19:03 +01:00
Ivan Krysak a093d166b1 ABI: revamp basic floating point argument handling
This was a necessary change because without at least basic shortcuts
introduced here, we get a whole lot of failures downstream due to
layouts of such functions and the layout production is by design not
allowed to fail.
2023-03-15 10:19:03 +01:00
Ivan Krysak 9f7427c776 ABI: fix desynchronization of argument indices
When a shadow return value location argument is distributed, it is
shifting all the other argument indices by one. This was not taken into
the account previously. This commit fixes the indices.

It also makes it so the arguments `SizeOnStack` does not account for
padding. This is useful for some layout users.
2023-03-15 10:19:03 +01:00
Ivan Krysak f7be81737b ToRawConverter: don't attempt to recover types 2023-03-15 10:19:03 +01:00
Ivan Krysak 5bf13ac420 ABI: restructure ToRaw conversion root
This reorders the algorithms, so that the return values are handled
before the arguments. It also improves the wordind and extends
the comments annotating the function.

Moreover, it takes advantage of the `TypeBucket` to decouple type
management from the "raw" binary.
2023-03-15 10:19:02 +01:00
Ivan Krysak 4ecb88ab9d ABI: move ToCABIConverter onto the runtime trait 2023-03-15 10:19:02 +01:00
Ivan Krysak 51beb8fc1b ABI: move ToRawConverter onto the runtime trait 2023-03-15 10:19:02 +01:00
Ivan Krysak 87bded80d3 ABI: rename RegisterList into RegisterVector 2023-03-15 10:19:02 +01:00
Ivan Krysak 3d3348b84a ABI: rename Converter into ToCABIConverter
This also moves members definitions outside the class boundaries
2023-03-15 10:19:02 +01:00
Ivan Krysak b1b9453585 ABI: rename Converter into ToRawConverter
This also moves members definitions outside the class boundaries
2023-03-15 10:19:02 +01:00
Ivan Krysak 0e8aee95e9 ABI: rename ArgumentContainer into ArgumentSet 2023-03-15 10:19:02 +01:00
Ivan Krysak 395191cdf1 ABI: use replaceReferencesIf when updating types 2023-03-15 10:19:02 +01:00
Ivan Krysak 01a05e2037 ABI: separate convertions based on the direction 2023-03-15 10:19:02 +01:00
Ivan Krysak 2f3128cb43 ABI: separate reused helpers into Support.h 2023-03-15 10:19:02 +01:00