pcmpeqd and friends are Commutable.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106886 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2010-06-25 21:05:35 +00:00
parent ee278437e6
commit ca5b8553ea
2 changed files with 23 additions and 3 deletions

View File

@ -2060,9 +2060,9 @@ let Constraints = "$src1 = $dst", ExeDomain = SSEPackedInt in {
}
// SSE2 Integer comparison
defm PCMPEQB : PDI_binop_rm_int<0x74, "pcmpeqb", int_x86_sse2_pcmpeq_b>;
defm PCMPEQW : PDI_binop_rm_int<0x75, "pcmpeqw", int_x86_sse2_pcmpeq_w>;
defm PCMPEQD : PDI_binop_rm_int<0x76, "pcmpeqd", int_x86_sse2_pcmpeq_d>;
defm PCMPEQB : PDI_binop_rm_int<0x74, "pcmpeqb", int_x86_sse2_pcmpeq_b, 1>;
defm PCMPEQW : PDI_binop_rm_int<0x75, "pcmpeqw", int_x86_sse2_pcmpeq_w, 1>;
defm PCMPEQD : PDI_binop_rm_int<0x76, "pcmpeqd", int_x86_sse2_pcmpeq_d, 1>;
defm PCMPGTB : PDI_binop_rm_int<0x64, "pcmpgtb", int_x86_sse2_pcmpgt_b>;
defm PCMPGTW : PDI_binop_rm_int<0x65, "pcmpgtw", int_x86_sse2_pcmpgt_w>;
defm PCMPGTD : PDI_binop_rm_int<0x66, "pcmpgtd", int_x86_sse2_pcmpgt_d>;

View File

@ -0,0 +1,20 @@
; RUN: llc -march=x86-64 < %s | FileCheck %s
; Commute the comparison to avoid a move.
; PR7500.
; CHECK: a:
; CHECK-NOT: mov
; CHECK: pcmpeqd
define <2 x double> @a(<2 x double>, <2 x double>) nounwind readnone {
entry:
%tmp6 = bitcast <2 x double> %0 to <4 x i32> ; <<4 x i32>> [#uses=2]
%tmp4 = bitcast <2 x double> %1 to <4 x i32> ; <<4 x i32>> [#uses=1]
%cmp = icmp eq <4 x i32> %tmp6, %tmp4 ; <<4 x i1>> [#uses=1]
%sext = sext <4 x i1> %cmp to <4 x i32> ; <<4 x i32>> [#uses=1]
%and = and <4 x i32> %tmp6, %sext ; <<4 x i32>> [#uses=1]
%tmp8 = bitcast <4 x i32> %and to <2 x double> ; <<2 x double>> [#uses=1]
ret <2 x double> %tmp8
}