]> git.ipfire.org Git - thirdparty/gcc.git/commit
rs6000: Rework vector float comparison in rs6000_emit_vector_compare - p2
authorKewen Lin <linkw@linux.ibm.com>
Fri, 15 Nov 2024 03:46:32 +0000 (03:46 +0000)
committerKewen Lin <linkw@gcc.gnu.org>
Fri, 15 Nov 2024 03:46:32 +0000 (03:46 +0000)
commit5210565ec17728eab289104aedd09d50731da8ec
treeeef250387c1d056228f1a4b96716c214e1724e83
parenta2da2fca004fd3002d45ba298f6203c7972f9eb6
rs6000: Rework vector float comparison in rs6000_emit_vector_compare - p2

All kinds of vector float comparison operators have been
supported in a rtl comparison pattern as vector.md, we can
just emit an rtx comparison insn with the given comparison
operator in function rs6000_emit_vector_compare instead of
checking and handling the reverse condition cases.

This is part 2, it further checks for comparison opeators
NE/UNLE/UNLT.  In rs6000_emit_vector_compare, they are
handled with reversed code which is queried from function
reverse_condition_maybe_unordered and inverting with
one_cmpl_optab.  It's the same as what we have in vector.md:

; ne(a,b)   = ~eq(a,b)
; unle(a,b) = ~gt(a,b)
; unlt(a,b) = ~ge(a,b)

The operators on the right side have been supported in part 1.
This patch should not have any functionality change too.

gcc/ChangeLog:

* config/rs6000/rs6000.cc (rs6000_emit_vector_compare): Emit rtx
comparison for operators NE/UNLE/UNLT of MODE_VECTOR_FLOAT directly.
gcc/config/rs6000/rs6000.cc