1. [X86] Improve v2i64->v2f32 and v4i64->v4f32 uint_to_fp on avx and avx2 (details)
  2. [MC] Delete MCFragment::isDummy. NFC (details)
  3. [DAGCombine] Don't check the legality of type when combine the (details)
  4. [MC] Reorder MCFragment members to decrease padding (details)
Commit 95840866b7d86794490ed46278fa9a9d798ee5bf by craig.topper
[X86] Improve v2i64->v2f32 and v4i64->v4f32 uint_to_fp on avx and avx2
Summary: Based on Simon's D52965, but improved to handle strict fp and
improve some of the shuffling.
Rather than use v2i1/v4i1 and let type legalization continue, just
generate all the code with legal types and use an explicit shuffle.
I also added an explicit setcc to the v4i64 code to match the semantics
of vselect which doesn't just use the sign bit. I'm also using a
v4i64->v4i32 truncate instead of the shuffle in Simon's original code.
With the setcc this will become a pack.
Future work can look into using X86ISD::BLENDV and a different shuffle
that only moves the sign bit.
Reviewers: RKSimon, spatel
Reviewed By: RKSimon
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision:
The file was modifiedllvm/test/CodeGen/X86/vec-strict-inttofp-256.ll
The file was modifiedllvm/test/CodeGen/X86/vector-constrained-fp-intrinsics.ll
The file was modifiedllvm/test/CodeGen/X86/vec-strict-inttofp-128.ll
The file was modifiedllvm/lib/Target/X86/X86ISelLowering.cpp
The file was modifiedllvm/test/CodeGen/X86/vec_int_to_fp.ll
Commit 2c053109fa83dc260042552c9132f3f528eb894e by maskray
[MC] Delete MCFragment::isDummy. NFC
isa<...>, dyn_cast<...> and cast<...> are used by other fragments. Don't
make MCDummyFragment special.
The file was modifiedllvm/include/llvm/MC/MCFragment.h
The file was modifiedllvm/lib/MC/MCFragment.cpp
Commit b9780f4f80ba82c6271b6b87fbfe6ea32d154e49 by qshanz
[DAGCombine] Don't check the legality of type when combine the
This is the DAG node for SIGN_EXTEND_INREG :
t21: v4i32 = sign_extend_inreg t18, ValueType:ch:v4i16
It has two operands. The first one is the value it want to extend, and
the second one is the type to specify how to extend the value. For this
example, it means that, it is signed extend the t18(v4i32) from v4i16 to
v4i32. That is the semantics of c code:
vector int foo(vector int m) {
  return m << 16 >> 16;
And it could be any vector type that hardware support the operation,
though the type 'v4i16' is NOT legal for the target. When we are trying
to combine the srl + sra, what we did now is calling the
TLI.isOperationLegal(), which will also check the legality of the type.
That doesn't make sense.
Differential Revision:
The file was modifiedllvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
The file was modifiedllvm/test/CodeGen/PowerPC/sext-vector-inreg.ll
Commit 806a2b1f3d8850eb88f1f9338e86b6398841c961 by maskray
[MC] Reorder MCFragment members to decrease padding
sizeof(MCFragment) does not change, but some if its subclasses do, e.g.
on a 64-bit platform, sizeof(MCEncodedFragment) decreases from 64 to 56,
sizeof(MCDataFragment) decreases from 224 to 216.
The file was modifiedllvm/lib/MC/MCFragment.cpp
The file was modifiedllvm/include/llvm/MC/MCFragment.h