aboutsummaryrefslogtreecommitdiff
path: root/gcc/internal-fn.def
diff options
context:
space:
mode:
authorKewen Lin <linkw@linux.ibm.com>2024-07-08 00:14:59 -0500
committerKewen Lin <linkw@gcc.gnu.org>2024-07-08 00:14:59 -0500
commitf379596e0ba99df249d6e8b3f2e66edfcea916fe (patch)
tree6c0b6ed81566f0f0f0c9be59077e472357b732a1 /gcc/internal-fn.def
parentf90ca62566c1d20da585d95ced99f6a1903fc2cc (diff)
downloadgcc-f379596e0ba99df249d6e8b3f2e66edfcea916fe.zip
gcc-f379596e0ba99df249d6e8b3f2e66edfcea916fe.tar.gz
gcc-f379596e0ba99df249d6e8b3f2e66edfcea916fe.tar.bz2
isel: Fold more in gimple_expand_vec_cond_expr with andc and iorc [PR115659]
As PR115659 shows, assuming c = x CMP y, there are some folding chances for patterns r = c ? 0/z : z/-1: - for r = c ? 0 : z, it can be folded into r = ~c & z. - for r = c ? z : -1, it can be folded into r = ~c | z. But BIT_AND/BIT_IOR applied on one BIT_NOT operand is a compound operation, it's arguable to consider it beats vector selection. So this patch is to introduce new optabs andc, iorc and its corresponding internal functions BIT_{ANDC,IORC}, and if targets defines such optabs for vector modes, it means targets support these hardware insns and should be not worse than vector selection. PR tree-optimization/115659 gcc/ChangeLog: * doc/md.texi: Document andcm3 and iorcm3. * gimple-isel.cc (gimple_expand_vec_cond_expr): Add more foldings for patterns x CMP y ? 0 : z and x CMP y ? z : -1. * internal-fn.def (BIT_ANDC): New internal function. (BIT_IORC): Likewise. * optabs.def (andc, iorc): New optab.
Diffstat (limited to 'gcc/internal-fn.def')
-rw-r--r--gcc/internal-fn.def4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/internal-fn.def b/gcc/internal-fn.def
index 915d329..0b45f32 100644
--- a/gcc/internal-fn.def
+++ b/gcc/internal-fn.def
@@ -595,6 +595,10 @@ DEF_INTERNAL_FN (DIVMODBITINT, ECF_LEAF, ". O . O . R . R . ")
DEF_INTERNAL_FN (FLOATTOBITINT, ECF_LEAF | ECF_NOTHROW, ". O . . ")
DEF_INTERNAL_FN (BITINTTOFLOAT, ECF_PURE | ECF_LEAF, ". R . ")
+/* Bitwise functions. */
+DEF_INTERNAL_OPTAB_FN (BIT_ANDC, ECF_CONST, andc, binary)
+DEF_INTERNAL_OPTAB_FN (BIT_IORC, ECF_CONST, iorc, binary)
+
#undef DEF_INTERNAL_WIDENING_OPTAB_FN
#undef DEF_INTERNAL_SIGNED_COND_FN
#undef DEF_INTERNAL_COND_FN