diff options
| author | Nadav Rotem <nadav.rotem@intel.com> | 2012-04-24 18:09:59 +0000 |
|---|---|---|
| committer | Nadav Rotem <nadav.rotem@intel.com> | 2012-04-24 18:09:59 +0000 |
| commit | 810734b7f4403f16d8aabcd86b9868f5edf1ad7c (patch) | |
| tree | 58315f0a17ef6db1fc5b92a1d8723ac4b2b077f5 | |
| parent | 26bdff9b821f5a5ffa263c21048a6e72bff4e099 (diff) | |
| download | bcm5719-llvm-810734b7f4403f16d8aabcd86b9868f5edf1ad7c.tar.gz bcm5719-llvm-810734b7f4403f16d8aabcd86b9868f5edf1ad7c.zip | |
AVX: Add additional vbroadcast replacement sequences for integers.
Remove the v2f64 patterns because it does not match any vbroadcast
instruction.
llvm-svn: 155461
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrSSE.td | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/llvm/lib/Target/X86/X86InstrSSE.td b/llvm/lib/Target/X86/X86InstrSSE.td index 8cd00a9aa0e..aa3e08bd4dc 100644 --- a/llvm/lib/Target/X86/X86InstrSSE.td +++ b/llvm/lib/Target/X86/X86InstrSSE.td @@ -7736,6 +7736,16 @@ let Predicates = [HasAVX2] in { def : Pat<(v4f64 (X86VBroadcast FR64:$src)), (VBROADCASTSDrr (INSERT_SUBREG (v2f64 (IMPLICIT_DEF)), FR64:$src, sub_sd))>; + + def : Pat<(v4i32 (X86VBroadcast GR32:$src)), + (VBROADCASTSSrr + (INSERT_SUBREG (v4i32 (IMPLICIT_DEF)), GR32:$src, sub_ss))>; + def : Pat<(v8i32 (X86VBroadcast GR32:$src)), + (VBROADCASTSSYrr + (INSERT_SUBREG (v4i32 (IMPLICIT_DEF)), GR32:$src, sub_ss))>; + def : Pat<(v4i64 (X86VBroadcast GR64:$src)), + (VBROADCASTSDrr + (INSERT_SUBREG (v2i64 (IMPLICIT_DEF)), GR64:$src, sub_sd))>; } } @@ -7758,9 +7768,6 @@ def : Pat<(v4i32 (X86VBroadcast (loadi32 addr:$src))), // is used by additional users, which prevents the pattern selection. let AddedComplexity = 20 in { // 128bit broadcasts: - def : Pat<(v2f64 (X86VBroadcast FR64:$src)), - (VPSHUFDri - (INSERT_SUBREG (v2f64 (IMPLICIT_DEF)), FR64:$src, sub_sd), 0)>; def : Pat<(v4f32 (X86VBroadcast FR32:$src)), (VPSHUFDri (INSERT_SUBREG (v4f32 (IMPLICIT_DEF)), FR32:$src, sub_ss), 0)>; @@ -7780,6 +7787,26 @@ def : Pat<(v4i32 (X86VBroadcast (loadi32 addr:$src))), (VPSHUFDri (INSERT_SUBREG (v2f64 (IMPLICIT_DEF)), FR64:$src, sub_sd), 0), 1)>; + + def : Pat<(v4i32 (X86VBroadcast GR32:$src)), + (VPSHUFDri + (INSERT_SUBREG (v4i32 (IMPLICIT_DEF)), GR32:$src, sub_ss), 0)>; + def : Pat<(v8i32 (X86VBroadcast GR32:$src)), + (VINSERTF128rr (INSERT_SUBREG (v8i32 (IMPLICIT_DEF)), + (VPSHUFDri + (INSERT_SUBREG (v4i32 (IMPLICIT_DEF)), GR32:$src, sub_ss), 0), + sub_xmm), + (VPSHUFDri + (INSERT_SUBREG (v4i32 (IMPLICIT_DEF)), GR32:$src, sub_ss), + 0), 1)>; + def : Pat<(v4i64 (X86VBroadcast GR64:$src)), + (VINSERTF128rr (INSERT_SUBREG (v4i64 (IMPLICIT_DEF)), + (VPSHUFDri + (INSERT_SUBREG (v2i64 (IMPLICIT_DEF)), GR64:$src, sub_sd), 0), + sub_xmm), + (VPSHUFDri + (INSERT_SUBREG (v2i64 (IMPLICIT_DEF)), GR64:$src, sub_sd), + 0), 1)>; } } |

