Age | Commit message (Collapse) | Author | Files | Lines |
|
Upstream ParenExpr support for AggregateExpr
|
|
As a next step to generating pointer/array recipes, this patch generates
just the 'alloca' lines that are necessary. Copying pointers over to
restore the structure is held off to the next patch.
In the case of a pointer, we need to allocate the level 'below' it (if
we index into it), then copy the values into the pointers. In the case
of an array, we skip the alloca (since the array's alloca contains the
value).
After this, we'll need a patch that copies the pointers into place, and
finally one that does the initialization of these values.
|
|
(#161278)
|
|
This patch enables calling virtual functions of virtual base classes of
a derived class.
|
|
Upstream UnaryExtension for Scalar Expr
|
|
Implement UO real on the result from imag with type promotion
Issue: https://github.com/llvm/llvm-project/issues/141365
|
|
This adds basic operator delete handling in CIR. This does not yet
handle destroying delete or array delete, which will be added later. It
also does not insert non-null checks when not optimizing for size.
|
|
This sets the MLIR module name to the main filename (according to the
SourceManager), if one is available. The module name gets used when
creating global init functions, so we will need it to be set.
|
|
This change implements logical not for VectorType
|
|
Implement UO real on the result from real with type promotion
Issue: https://github.com/llvm/llvm-project/issues/141365
|
|
It was brought up on a previous review that the CIRGenOpenACCRecipe.h
file was getting too large. I noticed that the 'dependent on template
argument' parts were actually quite small, so I extract a base class in
this patch that allows me to implement it in the .cpp file, plus
minimize the amount of code that needs instantiating.
|
|
This change implements AtomicExpr for ComplexType
Issue: https://github.com/llvm/llvm-project/issues/141365
|
|
It was noticed on a previous patch that I could have emitted recipes in
lexical order instead of reverse order, which would improve the
readability of a lot of tests. This patch implements that, and changes
all of the required test.
|
|
This change implements Unary real & imag on scalar expr
Issue: https://github.com/llvm/llvm-project/issues/141365
|
|
After previous implementation, I discovered that we were both doing
arrays incorrectly for recipes, plus didn't get the pointer allocations
done correctly. This patch is the first of a few in a series that
attempts to make sure we get all pointers/arrays correct.
This patch is limited to just 'private' and destructors, which
simplifies the review significantly. Destructors are simply looped
through and called at each level.
The 'recipe-decl' is the 'least bounded' (that is, the type of the
expression, in the type of `int[5] i; #pragma acc parallel
private(i[1])`, the type of the `recipe-decl` is `int`. This allows
us to do init/destruction at the element level.
This patch also adds infrastructure for the rest of the series of
private (for the init section), as well as extensive testing for
'private', with a lot of 'TODO' locations.
Future patches will fill these in, but at the moment, there is an NYI
warning for bounds, so a number of tests are updated to handle that.
|
|
Upstream the support of Agg init with lvalue ComplexType
Issue: https://github.com/llvm/llvm-project/issues/141365
|
|
This change implements Complex real & imag for non-scalar GLValue
Issue: https://github.com/llvm/llvm-project/issues/141365
|
|
Upstream LValue Unary Inc & Dec for ComplexType
Issue: https://github.com/llvm/llvm-project/issues/141365
|
|
This adds support for handling static lambda invokers.
|
|
This change implements CXX new for ComplexType with init
Issue: https://github.com/llvm/llvm-project/issues/141365
|
|
Fix warning about copy-constructed APInt & APFloat values
|
|
This change implements UnaryExtension for ComplexType
Issue: https://github.com/llvm/llvm-project/issues/141365
|
|
This adds support for lambda operators and lambda calls. This does not
include support for static lambda invoke, which will be added in a later
change.
|
|
This change adds support for type promotion for VectorType
Issue https://github.com/llvm/llvm-project/issues/136487
|
|
This patch adds atomic exchange operation which covers the following
C/C++ intrinsic functions:
- `__c11_atomic_exchange`
- `__atomic_exchange`
- `__atomic_exchange_n`
|
|
Fix the Missing enum element `Decl::OMPGroupPrivate` warning
|
|
This patchs implements array constructors and destructors for
multidimensional arrays. This works by bitcasting the pointer to the
first element to a one-dimensional array type of the same extent before
lowering to a loop.
|
|
This change adds support for local AND op for VectorType
Issue https://github.com/llvm/llvm-project/issues/136487
|
|
(#159694)
|
|
This change adds support for local OR op for VectorType
Issue #136487
|
|
Support type promotion for Scalar unary plus & minus ops
|
|
This change adds support for type promotion in Scalar unary real & imag
ops
Issue: https://github.com/llvm/llvm-project/issues/141365
|
|
This change adds support for the OpaqueValueExpr for Complex in C
Issue: https://github.com/llvm/llvm-project/issues/141365
|
|
Upstream support for FPToFPBuiltin CosOp
|
|
This change adds support for the OpaqueValueExpr for Complex & Scalar
Issue: https://github.com/llvm/llvm-project/issues/141365
|
|
Upstream support for FPToFPBuiltin ATanOp
|
|
Upstream support for FPToFPBuiltin ASinOp
|
|
This adds basic support for eliding copy constructors. In order to make
this possible, it also adds support for returning structures. This
support does not include setting an NRVO flag when the class whose copy
is being elided has a non-trivial destructor.
|
|
A recent change introduced a new dtor kind, which caused a build warning
in the CIR code where this dtor kind wasn't handled in a switch. This
fixes the problem.
|
|
This patch adds support for the alloca builtin and extends AllocaOp with
a dynamic size argument.
|
|
This patch adds support for atomic compare-and-swap operations,
including the following C/C++ instrinsics:
- `__atomic_compare_exchange`
- `__atomic_compare_exchange_n`
- `__c11_atomic_compare_exchange_strong`
- `__c11_atomic_compare_exchange_weak`
|
|
We are checking the 'type' of 'pointer' before we are checking whether
it is null or not! This is clearly incorrect, so this patch reorders the
asserts.
|
|
Clang as a number of Cleanup types used in exception handling, these are
presumed to be POD types that can be memmoved as needed, however this is
not correct by default on platforms with pointer authentication that
make vtable pointers address discriminated.
This PR mitigates this problem by introducing a
LLVM_MOVABLE_POLYMORPHIC_TYPE macro that can be used to annotate
polymorphic types that are required to be movable, to override the use
of address discrimination of the vtable pointer.
|
|
Somewhere in the upstreaming process, we created a file
CIRGenCXXExpr.cpp that corresponded to the file CIRGenExprCXX.cpp in the
incubator. Later we created a CIRGenExprCXX.cpp file.
This change consolidates those files, keeping the name used in the
incubator.
|
|
This adds the code needed to handle default initialization for fields of
various types.
|
|
This adds support for handling delegating constructors with VTT
arguments.
|
|
The recipe generation was dependent on the clause kind, which meant we
had all of the recipe generation duplicated in each of clauses. This
patch copy/pastes all of them into their own type to do recipe
generation, which should reduce clang's size.
Additionally, we've moved it off into its own file, which should make
readability/organization improvements.
|
|
This change fixes emitting promotion type for div op
Issue: https://github.com/llvm/llvm-project/issues/141365
|
|
This patch adds basic support for constant record initializer list
expressions. There's a couple of limitations:
* No zero initialized padding bytes in C mode
* No bitfields
* No designated initializer lists
* Record alignments are not calculated, yet
* ILEs of derived records don't work, yet
* The constant attribute is not propagated to the backend, resulting in
non-constants being emitted in the LLVM IR
|
|
This adds support for zero-initialization during delegating constructor
processing.
Note, this also adds code to skip emitting constructors that are trivial
and default to match the classic codegen behavior. The incubator does
not skip these constructors, but I have found a case where this results
in a call to a default constructor that is never defined.
|