[X86][CodeGen] Support lowering for CCMP/CTEST (#91747)
DAG combine for `CCMP` and `CTESTrr`: ``` and/or(setcc(cc0, flag0), setcc(cc1, sub (X, Y))) -> setcc(cc1, ccmp(X, Y, ~cflags/cflags, cc0/~cc0, flag0)) and/or(setcc(cc0, flag0), setcc(cc1, cmp (X, 0))) -> setcc(cc1, ctest(X, X, ~cflags/cflags, cc0/~cc0, flag0)) ``` where `cflags` is determined by `cc1`. Generic DAG combine: ``` cmp(setcc(cc, X), 0) brcond ne -> X brcond cc sub(setcc(cc, X), 1) brcond ne -> X brcond ~cc ``` Post DAG transform: `ANDrr/rm + CTESTrr -> CTESTrr/CTESTmr` Pattern match for `CTESTri`: ``` X= and A, B ctest(X, X, cflags, cc0/, flag0) -> ctest(A, B, cflags, cc0/, flag0) ``` `CTESTmi` is already handled by the memory folding mechanism in MIR.