[X86] Remove isel patterns for (X86VBroadcast (i16 (trunc (i32 (load))))). Replace...
authorCraig Topper <craig.topper@gmail.com>
Tue, 10 Mar 2020 07:00:26 +0000 (00:00 -0700)
committerCraig Topper <craig.topper@gmail.com>
Tue, 10 Mar 2020 07:07:07 +0000 (00:07 -0700)
commitef4f939d389e2abe6fdce45bd49cc71237429cb6
tree3ee206b560c06ece830739c323e3aa435ee3927d
parent4b8af31f63464e5433c8c8f3f9941ea5d38f4341
[X86] Remove isel patterns for (X86VBroadcast (i16 (trunc (i32 (load))))). Replace with a DAG combine to form VBROADCAST_LOAD.

isTypeDesirableForOp prevents loads from being shrunk to i16 by DAG
combine. Because of this we can't just match the broadcast and a
scalar load. So look for broadcast+truncate+load and form a
vbroadcast_load during DAG combine. This replaces what was
previously done as an isel pattern and I think fixes it so we
won't change the size of a volatile load. But my main motivation
is just to clean up our isel patterns.
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/lib/Target/X86/X86InstrAVX512.td
llvm/lib/Target/X86/X86InstrSSE.td