diff options
author | Bill Wendling <isanbard@gmail.com> | 2008-10-02 05:56:52 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2008-10-02 05:56:52 +0000 |
commit | b04e6edba910509975a2e09900a1ab38fd81299f (patch) | |
tree | dc40a1e8da919441ff6da9c14924c3f024197e7e /llvm/lib | |
parent | d03c02873ad839f67896254851fcd9d64ed69b17 (diff) | |
download | bcm5719-llvm-b04e6edba910509975a2e09900a1ab38fd81299f.tar.gz bcm5719-llvm-b04e6edba910509975a2e09900a1ab38fd81299f.zip |
"The original bug was a complaint that _mm_srli_si128 mis-compiled when passed
a constant vector ("{0x123, 0x456}" syntax). The fix is to simplify the
_mm_srli_si128 macro, and move the "* 8" from the macro into the compiler
back-end. I can't change the existing __builtins because so many people are
using them :-(."
Patch by Stuart Hastings!
llvm-svn: 56944
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/X86/X86InstrSSE.td | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86InstrSSE.td b/llvm/lib/Target/X86/X86InstrSSE.td index 8b4579517e2..93f722332bd 100644 --- a/llvm/lib/Target/X86/X86InstrSSE.td +++ b/llvm/lib/Target/X86/X86InstrSSE.td @@ -1969,6 +1969,10 @@ let Predicates = [HasSSE2] in { (v2i64 (PSLLDQri VR128:$src1, (PSxLDQ_imm imm:$src2)))>; def : Pat<(int_x86_sse2_psrl_dq VR128:$src1, imm:$src2), (v2i64 (PSRLDQri VR128:$src1, (PSxLDQ_imm imm:$src2)))>; + def : Pat<(int_x86_sse2_psll_dq_bs VR128:$src1, imm:$src2), + (v2i64 (PSLLDQri VR128:$src1, imm:$src2))>; + def : Pat<(int_x86_sse2_psrl_dq_bs VR128:$src1, imm:$src2), + (v2i64 (PSRLDQri VR128:$src1, imm:$src2))>; def : Pat<(v2f64 (X86fsrl VR128:$src1, i32immSExt8:$src2)), (v2f64 (PSRLDQri VR128:$src1, (PSxLDQ_imm imm:$src2)))>; |