[llvm] [SelectionDAG] Make `(a & x) | (~a & y) -> (a & (x ^ y)) ^ y` available for all targets (PR #137641)

Ulrich Weigand via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 29 01:04:04 PDT 2025


================
@@ -9,7 +9,9 @@ define i128 @f1(i128 %val1, i128 %val2) {
 ; CHECK:       # %bb.0:
 ; CHECK-NEXT:    vl %v0, 0(%r3), 3
 ; CHECK-NEXT:    vl %v1, 0(%r4), 3
-; CHECK-NEXT:    vmxq %v0, %v1, %v0
+; CHECK-NEXT:    vchq %v2, %v1, %v0
+; CHECK-NEXT:    vx %v1, %v1, %v0
+; CHECK-NEXT:    veval %v0, %v0, %v1, %v2, 30
----------------
uweigand wrote:

Ah, wait - I see there's already a `hasAndNot` check.  We actually do have "and-not" on all integer vector types (and depending on ISA level, also scalar integer types), but we don't currently define that callback.   Adding this would likely be the best fix for SystemZ.

https://github.com/llvm/llvm-project/pull/137641


More information about the llvm-commits mailing list