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

LLVM and SPIRV-LLVM-Translator pulldown (WW07 2024) #12731

Merged
merged 713 commits into from
Feb 16, 2024
Merged

Conversation

sys-ce-bb
Copy link
Contributor

MaskRay and others added 30 commits February 12, 2024 18:29
Similar to d39b4ce
Using "eabi" or "gnueabi" for aarch64 targets is a common mistake and
warned by Clang Driver. We want to avoid them elsewhere as well. Just
use the common "aarch64" without other triple components.
This patch improves `computeKnownFPClass` by using context-sensitive
information from `DomConditionCache`.
Currently, the kernel verifier unsupported callx insn used the 32-bit
imm field to store the target register. On the other hand, gcc used the
dst_reg field to store the target register. The gcc encoding is better.
This patch adjusted the coding to be the same as gcc.

Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
This PR adds a new op to the OpenMP dialect: `PrivateClauseOp`. This op
will be later used to model `[first]private` clauses for differnt OpenMP
directives.

This is part of productizing the "delayed privatization" PoC which can
be found in #79862.
Changes the option to BreakAfterReturnType option, with a more relevant
name, deprecating and replacing AlwaysBreakAfterReturnType.
Following up on #78010.
…36)"

With a fix for build bot failure. I was accessing the type of a deleted
Instruction.

Original message:

The reassociation this is trying to repair can happen for integer types
too.

This patch adds support for integer mul/add to hoistFPAssociation. The
function has been renamed to hoistMulAddAssociation. I've used separate
statistics and limits for integer to allow tuning flexibility.
…ial orderings (#81449)

This fixes a regression since
llvm/llvm-project@340eac0,
from which we compared function parameter types with cv-qualifiers taken
into account. However, as per [dcl.fct]/p5:

> After producing the list of parameter types, any top-level
cv-qualifiers modifying
> a parameter type are deleted when forming the function type.

Thus, I think we should use `hasSameUnqualifiedType` for type
comparison.

This fixes llvm/llvm-project#75404.
…T_SUBVECTOR (#79949)

This is a revival of #65392. When we lower an extract_subvector, we
extract the
subregister that the subvector is contained in first and then do a
vslidedown
with LMUL=1. We can currently only do this for scalable vectors though
because
the index is scaled by vscale and thus we will know what subregister the
subvector lies in.

For fixed length vectors, the index isn't scaled by vscale and so the
subvector
could lie in any arbitrary subregister, so we have to do a vslidedown
with the
full LMUL.

The exception to this is when we know the exact VLEN: in which case, we
can
still work out the exact subregister and do the LMUL=1 vslidedown on it.

This patch handles this case by scaling the index by 1/vscale before
computing
the subregister, and extending the LMUL=1 path to handle fixed length
vectors.
Add a trap instruction to the beginning of the kernel prologue to handle
cases where preloading is attempted on HW loaded with incompatible
firmware.
… types, instead of checking bit width. (#68189)

In D151116 it was suggested to have a set of classes to cover every
possible case. This does it for bitcast first.

closes #79578
This PR moves lowering of math dialect later in the pipeline. Because
math dialect is lowered correctly by createConvertGpuOpsToNVVMOps for
GPU target, and it needs to run it first.

Reland #78556
…options (#81475)

These were implemented in the COFF linker in
3923e61 and
d12b99a.

This matches the corresponding options in the ELF linker.
This special case is wrong, we need to handle pointer types here
just like anything else.
The standard declares the copy constructors and copy assign operators as
deleted.

References:
- https://eel.is/c++draft/string.streams
Asserts that the shift amount is in range and update ExpandShiftByConstant to use getShiftAmountConstant (and legal shift amount types).
…#81499)

Allow TMA's last dimension to be non-128B when swizzling mode is not
set.

Test `tma_load_64x8_8x128_noswizzle.mlir` is failing due to the
verifier. This PR will fix that
This patch covers CWG issues
[201](https://cplusplus.github.io/CWG/issues/201.html),
[210](https://cplusplus.github.io/CWG/issues/210.html),
[292](https://cplusplus.github.io/CWG/issues/292.html).

[CWG208](https://cplusplus.github.io/CWG/issues/208.html) is not
covered, as it actually requires a libcxxabi test.

Resolution of CWG292 has been superseded by
[P0145R3](https://wg21.link/p0145r3) "Refining Expression Evaluation
Order for Idiomatic C++"
(see changes to paragraph 5.3.4/18).
Fix discrepancy from when this was forked from the SkylakeServer model

This also fixes VRANGEPS/VRANGEPD instructions which typically match FADD characteristics

Confirmed with Agner + uops.info

Fixes #81504
If we have something like G_TRUNC from v2s32 to v2s16, then lowering
this to a concat of two G_TRUNC s32 to s16 followed by G_TRUNC from
v2s16 to v2s8 does not bring us any closer to legality. In fact, the
first part of that is a G_BUILD_VECTOR whose legalization will produce a
new G_TRUNC from v2s32 to v2s16, and both G_TRUNCs will then get
combined to the original, causing a legalization cycle.

Make the lowering condition more precise, by requiring that the original
vector is >128 bits, which is I believe the only case where this
specific splitting approach is useful.

Note that this doesn't actually produce a legal result (the alwaysLegal
is a lie, as before), but it will cause a proper globalisel abort
instead of an infinite legalization loop.

Fixes llvm/llvm-project#81244.
This is one option for attempting to move genMinMaxlocReductionLoop to a
better location. It moves it into Transforms and makes HLFIRTranforms
depend upon FIRTransforms.

It passes a build locally, both with and without -DBUILD_SHARED_LIBS,
and does OK on the windows CI.
They can be also used in `clang`.
Introduce the lightweight header instead of `CoverageMapping.h`.

This includes for now:
* `mcdc::ConditionID`
* `mcdc::Parameters`
iclsrc and others added 11 commits February 14, 2024 14:35
1> Add code in CodeGenAction.cpp
  Basic change add new field "const FileManager &FileMgr"
  Add new function ReloadModules
  Code change in function LinkInModules.

2> revert "[DebugInfo][RemoveDIs] Turn on non-instrinsic debug-info by
   default.

  CONFLICT (modify/delete): clang/lib/CodeGen/BackendConsumer.h deleted in HEAD and modified in 6d4ffbd.  Version 6d4ffbd of clang/lib/CodeGen/BackendConsumer.h left in tree.
  CONFLICT (content): Merge conflict in clang/lib/CodeGen/CodeGenAction.cpp
  CONFLICT (modify/delete): clang/lib/CodeGen/LinkInModulesPass.cpp deleted in HEAD and modified in 6d4ffbd.  Version 6d4ffbd of clang/lib/CodeGen/LinkInModulesPass.cpp left in tree.
OpenCL and NonSemantic DebugInfo specifications are flexible in terms of allowing any debug information be replaced with DebugInfoNone, so various of SPIR-V producers follow that and generate it for base types of several debug instructions, leaving SPIR-V consumers to handle this. By default the translator replaces missing debug info with tag: null, which is in most cases correct. Yet, there are situations, where it's not allowed by both LLVM and DWARF, for example for DW_TAG_array_type DWARF spec sets, that DW_AT_type attribute is mandatory. For such cases new transNonNullDebugType wrapper function was added to the translator, generating "DIBasicType(tag: DW_TAG_unspecified_type, name: "SPIRV unknown type")" where DebugInfoNone was used as the type. This function doesn't replace all calls to transDebugInst<DIType> as there are cases, where we can generate null type, for example DWARF doesn't require it for DW_TAG_typedef, hence I'm not changing translation flow in this case. Additionally to this, while DWARF requires type attribute for DW_TAG_pointer_type, LLVM does not, hence I'm not changing translation flow in this case as well.

Signed-off-by: Sidorov, Dmitry <dmitry.sidorov@intel.com>

Original commit:
KhronosGroup/SPIRV-LLVM-Translator@ec023805a0ce26f
It should have tested DebugInfoNone base type

Signed-off-by: Sidorov, Dmitry <dmitry.sidorov@intel.com>

Original commit:
KhronosGroup/SPIRV-LLVM-Translator@e0aef72fee42e0a
Small fix but yields around 30% speedup for translation
SPIR-V to IR.

Original commit:
KhronosGroup/SPIRV-LLVM-Translator@513b9578d310282
There was an assumption, that ptr.annotation encoding buffer_location
should be used by load or store instructions. But there is no such
restriction in the specification.

Signed-off-by: Sidorov, Dmitry <dmitry.sidorov@intel.com>

Original commit:
KhronosGroup/SPIRV-LLVM-Translator@7a37ea920f730e0
For now just convert BB with convertFromNewDbgValues, will
figure out something smarter a bit later.

I've updated several tests with dbg.declare intrinsic
adding --experimental-debuginfo-iterators=1 to check if it works.

Signed-off-by: Sidorov, Dmitry <dmitry.sidorov@intel.com>

Original commit:
KhronosGroup/SPIRV-LLVM-Translator@0e87aefecf7c500
The SPIR-V Specification allows `OpConstantNull` types to be scalar or
vector booleans, integers, or floats.  Update an assert for this and
add a SPIR-V -> LLVM IR test.

Original commit:
KhronosGroup/SPIRV-LLVM-Translator@9ec969c1c379bde
Signed-off-by: Sidorov, Dmitry <dmitry.sidorov@intel.com>

Original commit:
KhronosGroup/SPIRV-LLVM-Translator@262395da9234fe4
@sys-ce-bb sys-ce-bb added the disable-lint Skip linter check step and proceed with build jobs label Feb 15, 2024
@jsji jsji changed the title LLVM and SPIRV-LLVM-Translator pulldown (WW202407) LLVM and SPIRV-LLVM-Translator pulldown (2024 WW07) Feb 15, 2024
@jsji jsji changed the title LLVM and SPIRV-LLVM-Translator pulldown (2024 WW07) LLVM and SPIRV-LLVM-Translator pulldown (WW07 2024) Feb 15, 2024
@jsji jsji marked this pull request as ready for review February 16, 2024 01:53
@jsji jsji requested review from a team and bader as code owners February 16, 2024 01:53
@jsji jsji self-assigned this Feb 16, 2024
@jsji
Copy link
Contributor

jsji commented Feb 16, 2024

@bader @intel/llvm-gatekeepers This is ready for merge. Thanks.

@bader
Copy link
Contributor

bader commented Feb 16, 2024

/merge

@bb-sycl
Copy link
Contributor

bb-sycl commented Feb 16, 2024

Fri 16 Feb 2024 01:55:07 AM UTC --- Start to merge the commit into sycl branch. It will take several minutes.

@bb-sycl
Copy link
Contributor

bb-sycl commented Feb 16, 2024

Fri 16 Feb 2024 01:59:38 AM UTC --- Merge the branch in this PR to base automatically. Will close the PR later.

@bb-sycl bb-sycl merged commit 0c74e16 into sycl Feb 16, 2024
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
disable-lint Skip linter check step and proceed with build jobs
Projects
None yet
Development

Successfully merging this pull request may close these issues.