History log of /llvm-project/llvm/lib/Target/Hexagon/HexagonPatterns.td (Results 1 – 25 of 141)
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
Revision tags: llvmorg-21-init, llvmorg-19.1.7
# 9d7df23f 10-Jan-2025 Santanu Das <quic_santdas@quicinc.com>

[Hexagon] Add missing pattern for v8i1 type (#120703)

HexagonISD::PFALSE and PTRUE patterns do not form independently in
general as they are treated like operands of all 0s or all 1s. Eg: i32 =
tr

[Hexagon] Add missing pattern for v8i1 type (#120703)

HexagonISD::PFALSE and PTRUE patterns do not form independently in
general as they are treated like operands of all 0s or all 1s. Eg: i32 =
transfer HEXAGONISD::PFALSE.
In this case, v8i1 = HEXAGONISD::PFALSE is formed independently without
accompanying opcode.

This patch adds a pattern to transfer all 0s or all 1s to a scalar
register and then use that register and this PFALSE/PTRUE opcode to
transfer to a predicate register like v8i1.

show more ...


Revision tags: llvmorg-19.1.6
# 7748492c 04-Dec-2024 Brian Cain <bcain@quicinc.com>

[hexagon] Add support for llvm.debugtrap (#117049)

Also: set `hasSideEffects` on `Y2_break` instruction.


Revision tags: llvmorg-19.1.5
# 4851dbb8 02-Dec-2024 Nikita Popov <npopov@redhat.com>

[Hexagon] Use getSignedConstant for RoundTo8 XForm

To handle negative offset addrmodes correctly.

Fixes https://github.com/llvm/llvm-project/pull/117558#issuecomment-2510208764.


# 22fdc571 22-Nov-2024 Nikita Popov <npopov@redhat.com>

[Hexagon] Avoid implicit truncation in getConstant()

Use getSignedConstant() or change variable type as appropriate.
This will avoid assertion failures when implicit truncation is
disabled.


Revision tags: 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
# f2f18459 21-Jun-2024 Nikita Popov <npopov@redhat.com>

Revert "Intrinsic: introduce minimumnum and maximumnum (#93841)"

As far as I can tell, this pull request was not approved, and
did not go through an RFC on discourse.

This reverts commit 8988148003

Revert "Intrinsic: introduce minimumnum and maximumnum (#93841)"

As far as I can tell, this pull request was not approved, and
did not go through an RFC on discourse.

This reverts commit 89881480030f48f83af668175b70a9798edca2fb.
This reverts commit 225d8fc8eb24fb797154c1ef6dcbe5ba033142da.

show more ...


# 89881480 21-Jun-2024 YunQiang Su <syq@debian.org>

Intrinsic: introduce minimumnum and maximumnum (#93841)

Currently, on different platform, the behaivor of llvm.minnum is
different if one operand is sNaN:

When we compare sNaN vs NUM:

ARM/AAr

Intrinsic: introduce minimumnum and maximumnum (#93841)

Currently, on different platform, the behaivor of llvm.minnum is
different if one operand is sNaN:

When we compare sNaN vs NUM:

ARM/AArch64/PowerPC: follow the IEEE754-2008's minNUM: return qNaN.
RISC-V/Hexagon follow the IEEE754-2019's minimumNumber: return NUM. X86:
Returns NUM but not same with IEEE754-2019's minimumNumber as
+0.0 is not always greater than -0.0.
MIPS/LoongArch/Generic: return NUM.
LIBCALL: returns qNaN.

So, let's introduce llvm.minmumnum/llvm.maximumnum, which always follow
IEEE754-2019's minimumNumber/maximumNumber.

Half-fix: #93033

show more ...


Revision tags: llvmorg-18.1.8, llvmorg-18.1.7
# c6ce9372 26-May-2024 Brian Cain <bcain@quicinc.com>

[Hexagon] Implement @llvm.readsteadycounter() (#93247)

This commit was inspired by @kparzysz's ab57c2bad3dc ([Hexagon]
Implement @llvm.readcyclecounter(), 2017-02-22)


Revision tags: 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
# de16a05a 14-Feb-2024 sgundapa <sgundapa@quicinc.com>

[Hexagon] Fix zero extension of bit predicates with vtrunehb (#81772)

vector extension from v4i1 to v4i8 generates an incorrect word. This
patch uses a vtrunehb for truncation to fix the bug.


Revision tags: 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, working, 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
# ad9d13d5 04-Apr-2022 Matt Arsenault <Matthew.Arsenault@amd.com>

SelectionDAG: Swap operands of atomic_store

Irritatingly, atomic_store had operands in the opposite order from
regular store. This made it difficult to share patterns between
regular and atomic stor

SelectionDAG: Swap operands of atomic_store

Irritatingly, atomic_store had operands in the opposite order from
regular store. This made it difficult to share patterns between
regular and atomic stores.

There was a previous incomplete attempt to move atomic_store into the
regular StoreSDNode which would be better.

I think it was a mistake for all atomicrmw to swap the operand order,
so maybe it's better to take this one step further.

https://reviews.llvm.org/D123143

show more ...


# 5ad9adb9 18-Jun-2023 Krzysztof Parzyszek <kparzysz@quicinc.com>

[Hexagon] Add missing patterns for boolean [v]selects

Fixes https://github.com/llvm/llvm-project/issues/59663


# 833438ee 17-Jun-2023 Krzysztof Parzyszek <kparzysz@quicinc.com>

[Hexagon] Handle all compares of i1 and vNi1

Fixes https://github.com/llvm/llvm-project/issues/63363


# d1c3ec61 17-Jun-2023 Krzysztof Parzyszek <kparzysz@quicinc.com>

[Hexagon] Add missing patterns for truncate to vNi1


# 77e4c48e 16-Jun-2023 Krzysztof Parzyszek <kparzysz@quicinc.com>

[Hexagon] Generate correct instruction for store i1, ($Rs<<$u2 + $Rt)

Fixes https://github.com/llvm/llvm-project/issues/63359


# c7b291a6 03-May-2023 Krzysztof Parzyszek <kparzysz@quicinc.com>

[Hexagon] Add patterns for bspap/bitreverse for scalar vectors

Fixes https://github.com/llvm/llvm-project/issues/62474


# 219ff07f 03-Apr-2023 Craig Topper <craig.topper@sifive.com>

[Targets] Rename Flag->Glue. NFC

Long long ago Glue was called Flag, and it was never completely
renamed.


# 4bb6e220 22-Nov-2022 Ikhlas Ajbar <iajbar@quicinc.com>

[Hexagon] Add missing patterns for select

Fixes https://github.com/llvm/llvm-project/issues/59077.


# ea6693d4 18-Nov-2022 Krzysztof Parzyszek <kparzysz@quicinc.com>

[Hexagon] Add missing patterns for mulhs/mulhu


# 2ec380b2 12-Oct-2022 Krzysztof Parzyszek <kparzysz@quicinc.com>

[Hexagon] Improve handling of 32-bit mulh/mul_lohi on HVX

Handle MULH[US] by normalizing them into newly invented nodes
HexagonISD::(S|U|US)MUL_LOHI. On HVX v60, if only the high part of
SMUL_LOHI i

[Hexagon] Improve handling of 32-bit mulh/mul_lohi on HVX

Handle MULH[US] by normalizing them into newly invented nodes
HexagonISD::(S|U|US)MUL_LOHI. On HVX v60, if only the high part of
SMUL_LOHI is used, use the original MULHS expansion. In all other
cases, expand the full product.
On HVX v62, always expand the full product.

Introduce Hexagon-specific LLVM IR intrinsics for 32x32 multiplication
returning low/high parts.

show more ...


# 705e77ab 10-Oct-2022 Krzysztof Parzyszek <kparzysz@quicinc.com>

[Hexagon] Lower funnel shifts for HVX

HVX v62+ has bidirectional shifts, which do not mask the shift amount to
the bit width. Instead, the shift amount is sign-extended from the log(BW)
bit value, a

[Hexagon] Lower funnel shifts for HVX

HVX v62+ has bidirectional shifts, which do not mask the shift amount to
the bit width. Instead, the shift amount is sign-extended from the log(BW)
bit value, and a negative value causes a shift in the other direction.
For the shift amount being -log(BW), this reversed shift will shift all
bits out, inserting 0s or sign bits depending on the type and direction.

show more ...


# dfaf7a28 26-Sep-2022 Krzysztof Parzyszek <kparzysz@quicinc.com>

[Hexagon] Avoid some unnecessary sign-extend instructions

Simplify (sext_inreg (extractu ...)) -> (extract ...) where appropriate.


# 94a71361 02-Sep-2022 Krzysztof Parzyszek <kparzysz@quicinc.com>

[Hexagon] Implement [SU]INT_TO_FP and FP_TO_[SU]INT for HVX


# 65a2f6ad 24-Mar-2022 Jyotsna Verma <jverma@quicinc.com>

[Hexagon] Create an intrinsic to profile using a custom handler

The intrinsic is lowered into a hexagon pseudo instruction which
after register allocation is expanded into A2_tfrsi and J2_call.


Revision tags: llvmorg-14.0.0, llvmorg-14.0.0-rc4, 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, llvmorg-13.0.0, llvmorg-13.0.0-rc4, llvmorg-13.0.0-rc3, llvmorg-13.0.0-rc2, llvmorg-13.0.0-rc1, llvmorg-14-init, llvmorg-12.0.1, llvmorg-12.0.1-rc4, llvmorg-12.0.1-rc3, llvmorg-12.0.1-rc2, llvmorg-12.0.1-rc1, llvmorg-12.0.0, llvmorg-12.0.0-rc5, llvmorg-12.0.0-rc4, llvmorg-12.0.0-rc3
# f6309db7 04-Mar-2021 Krzysztof Parzyszek <kparzysz@quicinc.com>

[Hexagon] Handle L2_loadb[sz]w[24]_io in HII::isValidOffset


# 78f5014f 04-Jan-2022 Krzysztof Parzyszek <kparzysz@quicinc.com>

[Hexagon] Conversions to/from FP types, HVX and scalar

Co-authored-by: Anirudh Sundar Subramaniam <quic_sanirudh@quicinc.com>
Co-authored-by: Sumanth Gundapaneni <sgundapa@quicinc.com>


# 2ce586bc 29-Dec-2021 Krzysztof Parzyszek <kparzysz@quicinc.com>

[Hexagon] Handle floating point splats

Co-authored-by: Anirudh Sundar Subramaniam <quic_sanirudh@quicinc.com>


123456