Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/merge upstream 20231106 #289

Merged
merged 1,831 commits into from
Jan 24, 2024
Merged

Feature/merge upstream 20231106 #289

merged 1,831 commits into from
Jan 24, 2024

Conversation

kaz7
Copy link
Collaborator

@kaz7 kaz7 commented Jan 24, 2024

Merge main up to 2023/11/3.

arsenm and others added 30 commits November 3, 2023 08:34
Adding sched_barrier, sched_group_barrier, and iglp_opt.
…#71118)

RegisterBank no longer has a default constructor so there's no way to
create an invalid register bank.

Remove InvalidID and the isValid method.

Replace the one use of isValid outside of RegBank with a check that the
ID matches so there's still some check of sanity.
This doesn't change upstream behaviour, but for downstream users it makes
sure these tests work even if the ABI compat version is modified.
Previously the kill flags of the source register were unconditionally
cleared when a `str` pair was merged, which results in suboptimal
register allocation and inhibits some renaming opportunities which may
allow further merging `str`.
Previously, after the algorithm fixpointed, the state was manually
patched by emitting BDVs for EE instructions earlier, while marking some
(but not all) vector and vector<->scalar instructions as conflict. This
causes issues as not all instructions that required BDVs had them
emitted and due to after-fixpoint patching, the extra BDVs did not
propagate to their users.

This change fixes both by rewriting the logic for BDV insertion &
patching. Instead of inserting the BDV for EE earlier, it merely marks
every EE instruction as a conflict. The two phase insertion algorithm
(first insert empty instructions and patch the BDVState, then actually
connect the BDV instructions to their input bases) then ensures correct
propagation to all its users. Furthermore the shufflevector instruction
as well as all instances of IE instruction are conservatively marked as
conflicts as well, fixing the second problem.

This change does not fix the handling of constant values and vectors in
the BDV. 

---------

Co-authored-by: Petr Maj <[email protected]>
…es directly. NFC (#71105)

RegBanks are allocated as global variables. The use of BitVector causes
a static global constructor to be used. The BitVector is initialized
from a table of bits that is created by tablegen. We can keep a pointer
to that data and use it as the bit vector instead.

This does require a little bit of manual indexing and reimplementation
of BitVector::count.
Enables having attribute that has another from same file as member.
RegBanks are constructed as global objects. Making the constructor
constexpr helps the compiler construct it without a global
constructor.
    
clang's optimizer seems to figure this out on its own, but at
least gcc 8 does not.
…k operation (#70542)

Fix the compile crash when the default result has no result  for
llvm/llvm-project#65835

Fixes llvm/llvm-project#65120
Reviewed By: zmodem, nikic
This patch builds on the support for vectors by adding ability to parse
scalable vectors in MIR and updates error messages to reflect that ability.
Tested on `amd64-pc-solaris2.11`.
Pull request #65409 changed the brace kind heuristic to not treat a
preprocessor if directive as a in statement, however, this caused some
regressions.

If the contents of a brace don't immediately determine the brace kind,
the heuristic will look at the characters immediately before and after
the closing brace to determine the brace type.

Unfortunately, if the closing brace was preceded by a preprocessor
directive, for example `#endif`, the preceding token was `endif`, seen
as just an identifier, so the braces were understood as a braced list.

This patch fixes this behaviour by skipping all preprocessor directives
when calculating brace types. Comments were already being skipped, so
now preprocessor lines are skipped alongside comments.

Fixes llvm/llvm-project#68404
…141)

`'XSfvfnrclipxfqf' (FP32-to-int8 Ranged Clip Instructions)` ->
`'XSfvfnrclipxfqf' (SiFive FP32-to-int8 Ranged Clip Instructions)`
…ular identifier (#71134)

`ModuleDeclState` is incorrectly changed to `NamedModuleImplementation`
for `struct module {}; void foo(module a);`. This is mostly benign but
leads to a spurious warning after #69555.

A real world example is:
```
// pybind11.h
class module_ { ... };
using module = module_;

// tensorflow
void DefineMetricsModule(pybind11::module main_module);
// `module main_module);` incorrectly changes `ModuleDeclState` to `NamedModuleImplementation`

#include <algorithm> // spurious warning
```
DummySyntheticFrontEnd is implementing correctly CalculateNumChildren
but not MightHaveChildren, where instead of delegating its action, it
was returning true.
This fixes that simple bug.
This comment was not updated when we changed from xor back to sub.
This adds a new helper that can be called from application code to
ensure that no mutexes are held on specific code paths. This is useful
for multiple scenarios, including ensuring no locks are held:

- at thread exit
- in peformance-critical code
- when a coroutine is suspended (can cause deadlocks)

See this discourse thread for more discussion:

https://discourse.llvm.org/t/add-threadsanitizer-check-to-prevent-coroutine-suspending-while-holding-a-lock-potential-deadlock/74051
llvm/include/llvm/Support/VersionTuple.h doesn't need anything from
llvm/Support/Endian.h, but llvm/lib/DebugInfo/BTF/BTFParser.cpp relies
on a transitive inclusion of llvm/Support/Endian.h.
Similarly to commit 3935a29, forward spec file arguments to the driver
if they appear in the compile database. Spec files can affect the
include search path.

fixes clangd/clangd#1410
…ss (#71107)

This commit removes typed pointers from the Func to LLVM test pass.
Typed pointers have been deprecated for a while now and it's planned to
soon remove them from the LLVM dialect.

Related PSA:
https://discourse.llvm.org/t/psa-removal-of-typed-pointers-from-the-llvm-dialect/74502
… (#71073)

Following PR #70792 for issue #70464 
Adding test cases for issue #59493 and #54533
zoecarver and others added 27 commits November 5, 2023 17:59
This patch adds std::experimental::observer_ptr (n4282) and also
fixes LWG2516.

Co-Authored-By: Louis Dionne <[email protected]>
Differential Revision: https://reviews.llvm.org/D63230
Removes the `SPIRVAttributes.h` header from `GPU/Transforms/Passes.h`
- Do not emit variables-at-top for literals
- Do not emit an error for a missing name for literals used as call
operands.
…ustment from RISCVCallLowering::lowerCall.

Other targets don't do this and no tests are affected by removing it.
…ring::lowerCall.

This is needed to mark the stack usage for the call.

With this change, I'm now able to succesfully execute spec2006int
compiled with -O0. There are still many fallbacks that need to be
addressed.
This includes a couple of changes to pass behavior for OpenCL kernels.
Vulkan shaders are not impacted by the changes.

1. SPIR-V module is placed inside GPU module. This change is required for
gpu-module-to-binary to work correctly as it expects kernel function to
be inside the GPU module.
2. A dummy func.func with same kernel name as gpu.func is created. GPU
compilation pipeline defers lowering of gpu launch kernel op. Since
spirv.func is not directly tied to gpu launch kernel, a dummy func.func
is required to avoid legalization issues.
3. Use correct mapping when mapping MemRef memory space to SPIR-V
storage class for OpenCL kernels.
BF16 implementation based on @joshua-arch1's
https://reviews.llvm.org/D152498
Fixed the incorrect f16 type introduced in
llvm/llvm-project#68296

---------

Co-authored-by: Jun Sha (Joshua) <[email protected]>
This reverts commit e9a48f9 because it breaks
3 sollve 5.0 tests:

test_loop_reduction_and_device.c
test_loop_reduction_bitand_device.c
test_loop_reduction_multiply_device.c
…9432)

In non C++ mode, struct definitions does not create a scope for
declaration.
Fix target triple so address locations are host independent.
These files do not use anything from llvm/Support/Endian.h.
…ent (#70647)

llvm.experimental.vp.splice has different semantics from
llvm.experimental.splice (since it takes uses the EVL arguments in a way
other
than just masking the tail elements), so it shouldn't be expanded to the
unpredicated version.

Coincidentally there's no support for llvm.experimental.vp.splice in
ExpandVectorPredication, so it wasn't getting expanded, but we shouldn't
mark
it as functionally equivalent anyway since there's other users of the
property
now e.g. in VectorCombine.
7e42545 rejects unsupported mcmodel options, but small and large
should be a supported model for 32-bit AIX targets.
This is similar to vector.reverse, but only reverses the first EVL
elements.

I extracted this code from our downstream. Some of it may have come from
https://repo.hca.bsc.es/gitlab/rferrer/llvm-epi/ originally.
…(#71359)

Copy 85451f4 over to AVR, FreeBSD and
Fuchsia.
@kaz7
Copy link
Collaborator Author

kaz7 commented Jan 24, 2024

This patch has been passed the internal regression tests.

@kaz7 kaz7 merged commit 2487b3d into develop Jan 24, 2024
2 of 4 checks passed
@kaz7 kaz7 deleted the feature/merge-upstream-20231106 branch January 24, 2024 05:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.