[RISCV] Fold (select_cc (xor X, Y), 0, eq/ne, trueV, falseV) -> (select_cc X, Y,...
authorCraig Topper <craig.topper@sifive.com>
Sun, 7 Mar 2021 17:29:54 +0000 (09:29 -0800)
committerCraig Topper <craig.topper@sifive.com>
Sun, 7 Mar 2021 17:29:55 +0000 (09:29 -0800)
commitfdbd5d32060c50313493fbdbbea74dc9ea73b591
tree5ac079eaffa80276d1a27472ebecf57821ea6853
parentd672c81126550a1b74ef77adfb7e7d1dd728a61e
[RISCV] Fold (select_cc (xor X, Y), 0, eq/ne, trueV, falseV) -> (select_cc X, Y, eq/ne, trueV, falseV)

This pattern occurs when lowering for overflow operations
introduce an xor after select_cc has already been formed.

I had to rework another combine that looked for select_cc of an xor
with 1. That xor will now get combined away so we just need to
look for the RHS of the select_cc being 1.

Reviewed By: luismarques

Differential Revision: https://reviews.llvm.org/D98130
llvm/lib/Target/RISCV/RISCVISelLowering.cpp
llvm/test/CodeGen/RISCV/sadd_sat.ll
llvm/test/CodeGen/RISCV/sadd_sat_plus.ll
llvm/test/CodeGen/RISCV/ssub_sat.ll
llvm/test/CodeGen/RISCV/ssub_sat_plus.ll
llvm/test/CodeGen/RISCV/xaluo.ll