[X86] Fold xor(truncate(xor(x,c1)),c2) -> xor(truncate(x),xor(truncate(c1),c2))
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 3 Apr 2021 11:43:05 +0000 (12:43 +0100)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 3 Apr 2021 11:43:05 +0000 (12:43 +0100)
commit89afec348dbd3e5078f176e978971ee2d3b5dec8
treeedac4fc6cf7f804b08d7d8888dadd491625d5e82
parent34ec74907d2694818d6c35872b8221692ef22345
[X86] Fold xor(truncate(xor(x,c1)),c2) -> xor(truncate(x),xor(truncate(c1),c2))

Fixes PR47603

This should probably be transferable to DAGCombine - the main limitation with the existing trunc(logicop) DAG fold is we don't know if legalization has tried to promote truncated logicops already. We might be able to peek through extensions as well.
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/clz.ll