mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 19:31:58 +00:00
The vbroadcast family of instructions has 'fallback patterns' in case where the
load source operand is used by multiple nodes. The v2i64 broadcast was emulated by shuffling the two lower i32 elements to the upper two. We had a bug in the immediate used for the broadcast. Replacing 0 to 0x44. 0x44 means [01|00|01|00] which corresponds to the correct lane. Patch by Michael Kuperstein. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160430 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a0f14afee1
commit
fd34c110cf
@ -7781,11 +7781,12 @@ def : Pat<(v4i32 (X86VBroadcast (loadi32 addr:$src))),
|
||||
def : Pat<(v4f64 (X86VBroadcast FR64:$src)),
|
||||
(VINSERTF128rr (INSERT_SUBREG (v4f64 (IMPLICIT_DEF)),
|
||||
(VPSHUFDri
|
||||
(INSERT_SUBREG (v2f64 (IMPLICIT_DEF)), FR64:$src, sub_sd), 0),
|
||||
sub_xmm),
|
||||
(INSERT_SUBREG (v2f64 (IMPLICIT_DEF)), FR64:$src, sub_sd),
|
||||
0x44),
|
||||
sub_xmm),
|
||||
(VPSHUFDri
|
||||
(INSERT_SUBREG (v2f64 (IMPLICIT_DEF)), FR64:$src, sub_sd),
|
||||
0), 1)>;
|
||||
0x44), 1)>;
|
||||
|
||||
def : Pat<(v4i32 (X86VBroadcast GR32:$src)),
|
||||
(VPSHUFDri
|
||||
@ -7801,11 +7802,12 @@ def : Pat<(v4i32 (X86VBroadcast (loadi32 addr:$src))),
|
||||
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),
|
||||
(INSERT_SUBREG (v2i64 (IMPLICIT_DEF)), GR64:$src, sub_sd),
|
||||
0x44),
|
||||
sub_xmm),
|
||||
(VPSHUFDri
|
||||
(INSERT_SUBREG (v2i64 (IMPLICIT_DEF)), GR64:$src, sub_sd),
|
||||
0), 1)>;
|
||||
0x44), 1)>;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user