|
Revision tags: llvmorg-20.1.0, llvmorg-20.1.0-rc3, llvmorg-20.1.0-rc2, llvmorg-20.1.0-rc1, llvmorg-21-init, llvmorg-19.1.7, llvmorg-19.1.6, llvmorg-19.1.5, llvmorg-19.1.4, llvmorg-19.1.3, llvmorg-19.1.2, llvmorg-19.1.1, llvmorg-19.1.0, llvmorg-19.1.0-rc4, llvmorg-19.1.0-rc3, llvmorg-19.1.0-rc2, llvmorg-19.1.0-rc1, llvmorg-20-init, llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4, llvmorg-16.0.3, llvmorg-16.0.2, llvmorg-16.0.1, llvmorg-16.0.0, llvmorg-16.0.0-rc4, llvmorg-16.0.0-rc3, llvmorg-16.0.0-rc2, llvmorg-16.0.0-rc1, llvmorg-17-init, llvmorg-15.0.7, llvmorg-15.0.6, llvmorg-15.0.5, llvmorg-15.0.4, llvmorg-15.0.3, llvmorg-15.0.2, llvmorg-15.0.1, llvmorg-15.0.0, llvmorg-15.0.0-rc3, llvmorg-15.0.0-rc2, llvmorg-15.0.0-rc1, llvmorg-16-init, llvmorg-14.0.6, llvmorg-14.0.5, llvmorg-14.0.4, llvmorg-14.0.3, llvmorg-14.0.2, llvmorg-14.0.1 |
|
| #
1ee6ce9b |
| 09-Apr-2022 |
Matt Arsenault <[email protected]> |
GlobalISel: Allow forming atomic/volatile G_ZEXTLOAD
SelectionDAG has a target hook, getExtendForAtomicOps, which it uses in the computeKnownBits implementation for ATOMIC_LOAD. This is pretty ugly
GlobalISel: Allow forming atomic/volatile G_ZEXTLOAD
SelectionDAG has a target hook, getExtendForAtomicOps, which it uses in the computeKnownBits implementation for ATOMIC_LOAD. This is pretty ugly (as is having a separate load opcode for atomics), so instead allow making use of atomic zextload. Enable this for AArch64 since the DAG path defaults in to the zext behavior.
The tablegen changes are pretty ugly, but partially helps migrate SelectionDAG from using ISD::ATOMIC_LOAD to regular ISD::LOAD with atomic memory operands. For now the DAG emitter will emit matchers for patterns which the DAG will not produce.
I'm still a bit confused by the intent of the isLoad/isStore/isAtomic bits. The DAG implementation rejects trying to use any of these in combination. For now I've opted to make the isLoad checks also check isAtomic, although I think having isLoad and isAtomic set on these makes most sense.
show more ...
|
| #
1023ddaf |
| 06-Jul-2022 |
Shilei Tian <[email protected]> |
[LLVM] Add the support for fmax and fmin in atomicrmw instruction
This patch adds the support for `fmax` and `fmin` operations in `atomicrmw` instruction. For now (at least in this patch), the instr
[LLVM] Add the support for fmax and fmin in atomicrmw instruction
This patch adds the support for `fmax` and `fmin` operations in `atomicrmw` instruction. For now (at least in this patch), the instruction will be expanded to CAS loop. There are already a couple of targets supporting the feature. I'll create another patch(es) to enable them accordingly.
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D127041
show more ...
|
|
Revision tags: llvmorg-14.0.0, llvmorg-14.0.0-rc4 |
|
| #
bdd0093f |
| 11-Mar-2022 |
Serge Pavlov <[email protected]> |
[GlobalISel] Add G_IS_FPCLASS
Add a generic opcode to represent `llvm.is_fpclass` intrinsic.
Differential Revision: https://reviews.llvm.org/D121454
|
| #
38bb4652 |
| 28-Apr-2022 |
Nicolai Hähnle <[email protected]> |
GlobalISel: Trivial documentation and comment fixes
Differential Revision: https://reviews.llvm.org/D124808
|
|
Revision tags: llvmorg-14.0.0-rc3, llvmorg-14.0.0-rc2, llvmorg-14.0.0-rc1, llvmorg-15-init, llvmorg-13.0.1, llvmorg-13.0.1-rc3, llvmorg-13.0.1-rc2, llvmorg-13.0.1-rc1 |
|
| #
0c660256 |
| 15-Nov-2021 |
Shao-Ce SUN <[email protected]> |
[NFC] Trim trailing whitespace in *.rst
|
|
Revision tags: llvmorg-13.0.0, llvmorg-13.0.0-rc4, llvmorg-13.0.0-rc3 |
|
| #
3f1f08f0 |
| 02-Sep-2021 |
Roman Lebedev <[email protected]> |
Revert @llvm.isnan intrinsic patchset.
Please refer to https://lists.llvm.org/pipermail/llvm-dev/2021-September/152440.html (and that whole thread.)
TLDR: the original patch had no prior RFC, yet i
Revert @llvm.isnan intrinsic patchset.
Please refer to https://lists.llvm.org/pipermail/llvm-dev/2021-September/152440.html (and that whole thread.)
TLDR: the original patch had no prior RFC, yet it had some changes that really need a proper RFC discussion. It won't be productive to discuss such an RFC, once it's actually posted, while said patch is already committed, because that introduces bias towards already-committed stuff, and the tree is potentially in broken state meanwhile.
While the end result of discussion may lead back to the current design, it may also not lead to the current design.
Therefore i take it upon myself to revert the tree back to last known good state.
This reverts commit 4c4093e6e39fe6601f9c95a95a6bc242ef648cd5. This reverts commit 0a2b1ba33ae6dcaedb81417f7c4cc714f72a5968. This reverts commit d9873711cb03ac7aedcaadcba42f82c66e962e6e. This reverts commit 791006fb8c6fff4f33c33cb513a96b1d3f94c767. This reverts commit c22b64ef66f7518abb6f022fcdfd86d16c764caf. This reverts commit 72ebcd3198327da12804305bda13d9b7088772a8. This reverts commit 5fa6039a5fc1b6392a3c9a3326a76604e0cb1001. This reverts commit 9efda541bfbd145de90f7db38d935db6246dc45a. This reverts commit 94d3ff09cfa8d7aecf480e54da9a5334e262e76b.
show more ...
|
|
Revision tags: llvmorg-13.0.0-rc2 |
|
| #
843da6f4 |
| 05-Aug-2021 |
pooja2299 <[email protected]> |
[docs][GlobalISel]Adding info for G_JUMP_TABLE generic opcode
Added description of jump table and G_JUMP_TABLE opcode.
Differential Revision: https://reviews.llvm.org/D107630
|
| #
5294a0f7 |
| 28-Aug-2021 |
Kazu Hirata <[email protected]> |
[llvm] Fix typos in documentation (NFC)
|
| #
af8e09d4 |
| 20-Aug-2021 |
Jessica Paquette <[email protected]> |
[GlobalISel] Add G_LLROUND
Basically the same as G_LROUND. Handles the llvm.llround family of intrinsics.
Also add a helper function to the MachineVerifier for checking if all of the (virtual regis
[GlobalISel] Add G_LLROUND
Basically the same as G_LROUND. Handles the llvm.llround family of intrinsics.
Also add a helper function to the MachineVerifier for checking if all of the (virtual register) operands of an instruction are scalars. Seems like a useful thing to have.
Differential Revision: https://reviews.llvm.org/D108429
show more ...
|
| #
31189264 |
| 19-Aug-2021 |
Jessica Paquette <[email protected]> |
[GlobalISel] Add a G_LROUND instruction
Meant to represent the `@llvm.lround.*` family.
Add the opcode, docs, and verification.
Differential Revision: https://reviews.llvm.org/D108417
|
| #
0a2b1ba3 |
| 17-Aug-2021 |
Jessica Paquette <[email protected]> |
[GlobalISel] Add G_ISNAN
Add a generic opcode equivalent to the `llvm.isnan` intrinsic + MachineVerifier support for it.
We need an opcode here because we may want target-specific lowering later on
[GlobalISel] Add G_ISNAN
Add a generic opcode equivalent to the `llvm.isnan` intrinsic + MachineVerifier support for it.
We need an opcode here because we may want target-specific lowering later on.
Differential Revision: https://reviews.llvm.org/D108222
show more ...
|
|
Revision tags: llvmorg-13.0.0-rc1 |
|
| #
ad28ff71 |
| 31-Jul-2021 |
pooja2299 <[email protected]> |
Fixed syntax error that occured in the patch D104974
|
| #
460d2208 |
| 29-Jul-2021 |
pooja2299 <[email protected]> |
[doc]Added examples for generic opcodes
Added examples to G_BR, G_BRCOND, G_BRJT, G_BRINDIRECT
Differential Revision: https://reviews.llvm.org/D104974
|
|
Revision tags: llvmorg-14-init |
|
| #
a6428724 |
| 30-Jun-2021 |
Jon Roelofs <[email protected]> |
[GISel] Support llvm.memcpy.inline
Differential revision: https://reviews.llvm.org/D105072
|
|
Revision tags: llvmorg-12.0.1, llvmorg-12.0.1-rc4, llvmorg-12.0.1-rc3, llvmorg-12.0.1-rc2 |
|
| #
927b8097 |
| 14-Jun-2021 |
Brendon Cahoon <[email protected]> |
[GlobalISel] Describe undefined values for G_SBFX/G_UBFX operands
Differential Revision: https://reviews.llvm.org/D104245
|
|
Revision tags: llvmorg-12.0.1-rc1 |
|
| #
e4eec519 |
| 05-May-2021 |
Sushma Unnibhavi <[email protected]> |
[DOCS] Added example for G_EXTRACT and G_INSERT
Reviewed By: xgupta, gargaroff
Differential Revision: https://reviews.llvm.org/D101227
|
| #
002c6c11 |
| 11-Apr-2021 |
Sushma Unnibhavi <[email protected]> |
Typo fix
Reviewed By: dsanders
Differential Revision: https://reviews.llvm.org/D100254
|
|
Revision tags: llvmorg-12.0.0, llvmorg-12.0.0-rc5, llvmorg-12.0.0-rc4 |
|
| #
55533203 |
| 25-Mar-2021 |
Amara Emerson <[email protected]> |
[GlobalISel] Add G_ROTR and G_ROTL opcodes for rotates.
Differential Revision: https://reviews.llvm.org/D99383
|
| #
4773dd5b |
| 11-Mar-2021 |
Jessica Paquette <[email protected]> |
[GlobalISel] Add G_SBFX + G_UBFX (bitfield extraction opcodes)
There is a bunch of similar bitfield extraction code throughout *ISelDAGToDAG.
E.g, ARMISelDAGToDAG, AArch64ISelDAGToDAG, and AMDGPUIS
[GlobalISel] Add G_SBFX + G_UBFX (bitfield extraction opcodes)
There is a bunch of similar bitfield extraction code throughout *ISelDAGToDAG.
E.g, ARMISelDAGToDAG, AArch64ISelDAGToDAG, and AMDGPUISelDAGToDAG all contain code that matches a bitfield extract from an and + right shift.
Rather than duplicating code in the same way, this adds two opcodes:
- G_UBFX (unsigned bitfield extract) - G_SBFX (signed bitfield extract)
They work like this
``` %x = G_UBFX %y, %lsb, %width ```
Where `lsb` and `width` are
- The least-significant bit of the extraction - The width of the extraction
This will extract `width` bits from `%y`, starting at `lsb`. G_UBFX zero-extends the result, while G_SBFX sign-extends the result.
This should allow us to use the combiner to match the bitfield extraction patterns rather than duplicating pattern-matching code in each target.
Differential Revision: https://reviews.llvm.org/D98464
show more ...
|
| #
4c6ab48f |
| 10-Mar-2021 |
Christudasan Devadasan <[email protected]> |
GlobalISel: Try to combine G_[SU]DIV and G_[SU]REM
It is good to have a combined `divrem` instruction when the `div` and `rem` are computed from identical input operands. Some targets can lower them
GlobalISel: Try to combine G_[SU]DIV and G_[SU]REM
It is good to have a combined `divrem` instruction when the `div` and `rem` are computed from identical input operands. Some targets can lower them through a single expansion that computes both division and remainder. It effectively reduces the number of instructions than individually expanding them.
Reviewed By: arsenm, paquette
Differential Revision: https://reviews.llvm.org/D96013
show more ...
|
|
Revision tags: llvmorg-12.0.0-rc3, llvmorg-12.0.0-rc2 |
|
| #
0d829802 |
| 19-Feb-2021 |
Djordje Todorovic <[email protected]> |
[docs] Fix the GlobalISel/GenericOpcode.rst
This couses docs build to fail. Introduced with D96890.
|
| #
60aa6464 |
| 17-Feb-2021 |
Jessica Paquette <[email protected]> |
[GlobalISel] Add G_ASSERT_SEXT
This adds a G_ASSERT_SEXT opcode, similar to G_ASSERT_ZEXT. This instruction signifies that an operation was already sign extended from a smaller type.
This is useful
[GlobalISel] Add G_ASSERT_SEXT
This adds a G_ASSERT_SEXT opcode, similar to G_ASSERT_ZEXT. This instruction signifies that an operation was already sign extended from a smaller type.
This is useful for functions with sign-extended parameters.
E.g.
``` define void @foo(i16 signext %x) { ... } ```
This adds verifier, regbankselect, and instruction selection support for G_ASSERT_SEXT equivalent to G_ASSERT_ZEXT.
Differential Revision: https://reviews.llvm.org/D96890
show more ...
|
|
Revision tags: llvmorg-11.1.0, llvmorg-11.1.0-rc3, llvmorg-12.0.0-rc1 |
|
| #
24261729 |
| 27-Jan-2021 |
Jessica Paquette <[email protected]> |
[GlobalISel] Add G_ASSERT_ZEXT
This adds a generic opcode which communicates that a type has already been zero-extended from a narrower type.
This is intended to be similar to AssertZext in Selecti
[GlobalISel] Add G_ASSERT_ZEXT
This adds a generic opcode which communicates that a type has already been zero-extended from a narrower type.
This is intended to be similar to AssertZext in SelectionDAG.
For example,
``` %x_was_extended:_(s64) = G_ASSERT_ZEXT %x, 16 ```
Signifies that the top 48 bits of %x are known to be 0.
This is useful in cases like this:
``` define i1 @zeroext_param(i8 zeroext %x) { %cmp = icmp ult i8 %x, -20 ret i1 %cmp } ```
In AArch64, `%x` must use a 32-bit register, which is then truncated to a 8-bit value.
If we know that `%x` is already zero-ed out in the relevant high bits, we can avoid the truncate.
Currently, in GISel, this looks like this:
``` _zeroext_param: and w8, w0, #0xff ; We don't actually need this! cmp w8, #236 cset w0, lo ret ```
While SDAG does not produce the truncation, since it knows that it's unnecessary:
``` _zeroext_param: cmp w0, #236 cset w0, lo ret ```
This patch
- Adds G_ASSERT_ZEXT - Adds MIRBuilder support for it - Adds MachineVerifier support for it - Documents it
It also puts G_ASSERT_ZEXT into its own class of "hint instruction." (There should be a G_ASSERT_SEXT in the future, maybe a G_ASSERT_ALIGN as well.)
This allows us to skip over hints in the legalizer etc. These can then later be selected like COPY instructions or removed.
Differential Revision: https://reviews.llvm.org/D95564
show more ...
|
|
Revision tags: llvmorg-13-init, llvmorg-11.1.0-rc2, llvmorg-11.1.0-rc1, llvmorg-11.0.1, llvmorg-11.0.1-rc2, llvmorg-11.0.1-rc1, llvmorg-11.0.0, llvmorg-11.0.0-rc6 |
|
| #
283b4d6b |
| 02-Oct-2020 |
Amara Emerson <[email protected]> |
[GlobalISel] Add G_VECREDUCE_* opcodes for vector reductions.
These mirror the IR and SelectionDAG intrinsics & nodes.
Opcodes added: G_VECREDUCE_SEQ_FADD G_VECREDUCE_SEQ_FMUL G_VECREDUCE_FADD G_VE
[GlobalISel] Add G_VECREDUCE_* opcodes for vector reductions.
These mirror the IR and SelectionDAG intrinsics & nodes.
Opcodes added: G_VECREDUCE_SEQ_FADD G_VECREDUCE_SEQ_FMUL G_VECREDUCE_FADD G_VECREDUCE_FMUL G_VECREDUCE_FMAX G_VECREDUCE_FMIN G_VECREDUCE_ADD G_VECREDUCE_MUL G_VECREDUCE_AND G_VECREDUCE_OR G_VECREDUCE_XOR G_VECREDUCE_SMAX G_VECREDUCE_SMIN G_VECREDUCE_UMAX G_VECREDUCE_UMIN
Differential Revision: https://reviews.llvm.org/D88750
show more ...
|
|
Revision tags: llvmorg-11.0.0-rc5, llvmorg-11.0.0-rc4, llvmorg-11.0.0-rc3, llvmorg-11.0.0-rc2 |
|
| #
fa2b836e |
| 11-Aug-2020 |
Jay Foad <[email protected]> |
[GlobalISel] Add G_ABS
This is equivalent to the new llvm.abs intrinsic added by D84125 with is_int_min_poison=0.
Differential Revision: https://reviews.llvm.org/D85718
|