Add support for matching psign & plendvb to the x86 target
[oota-llvm.git] / test / CodeGen / X86 / vec-sign.ll
1 ; RUN: llc < %s -mcpu=nehalem | FileCheck %s
2
3 define <4 x i32> @psignd(<4 x i32> %a, <4 x i32> %b) nounwind ssp {
4 entry:
5 ; CHECK: psignd
6 ; CHECK-NOT: sub
7   %b.lobit = ashr <4 x i32> %b, <i32 31, i32 31, i32 31, i32 31>
8   %sub = sub nsw <4 x i32> zeroinitializer, %a
9   %0 = xor <4 x i32> %b.lobit, <i32 -1, i32 -1, i32 -1, i32 -1>
10   %1 = and <4 x i32> %a, %0
11   %2 = and <4 x i32> %b.lobit, %sub
12   %cond = or <4 x i32> %1, %2
13   ret <4 x i32> %cond
14 }
15
16 define <4 x i32> @pblendvb(<4 x i32> %b, <4 x i32> %a, <4 x i32> %c) nounwind ssp {
17 entry:
18 ; CHECK: pblendvb
19   %b.lobit = ashr <4 x i32> %b, <i32 31, i32 31, i32 31, i32 31>
20   %sub = sub nsw <4 x i32> zeroinitializer, %a
21   %0 = xor <4 x i32> %b.lobit, <i32 -1, i32 -1, i32 -1, i32 -1>
22   %1 = and <4 x i32> %c, %0
23   %2 = and <4 x i32> %a, %b.lobit
24   %cond = or <4 x i32> %1, %2
25   ret <4 x i32> %cond
26 }