blob: be5a2399d2244a15961fddf4912f94e8916e8128 [file] [log] [blame]
Benjamin Kramer07265b82010-12-18 14:07:28 +00001; RUN: llc < %s -march=x86 -mcpu=nehalem | FileCheck %s
Nate Begemanb65c1752010-12-17 22:55:37 +00002
3define <4 x i32> @psignd(<4 x i32> %a, <4 x i32> %b) nounwind ssp {
4entry:
Benjamin Kramer07265b82010-12-18 14:07:28 +00005; CHECK: psignd:
Nate Begemanb65c1752010-12-17 22:55:37 +00006; CHECK: psignd
7; CHECK-NOT: sub
Benjamin Kramer07265b82010-12-18 14:07:28 +00008; CHECK: ret
Nate Begemanb65c1752010-12-17 22:55:37 +00009 %b.lobit = ashr <4 x i32> %b, <i32 31, i32 31, i32 31, i32 31>
10 %sub = sub nsw <4 x i32> zeroinitializer, %a
11 %0 = xor <4 x i32> %b.lobit, <i32 -1, i32 -1, i32 -1, i32 -1>
12 %1 = and <4 x i32> %a, %0
13 %2 = and <4 x i32> %b.lobit, %sub
14 %cond = or <4 x i32> %1, %2
15 ret <4 x i32> %cond
16}
17
18define <4 x i32> @pblendvb(<4 x i32> %b, <4 x i32> %a, <4 x i32> %c) nounwind ssp {
19entry:
Benjamin Kramer07265b82010-12-18 14:07:28 +000020; CHECK: pblendvb:
Nate Begemanb65c1752010-12-17 22:55:37 +000021; CHECK: pblendvb
Benjamin Kramer07265b82010-12-18 14:07:28 +000022; CHECK: ret
Nate Begemanb65c1752010-12-17 22:55:37 +000023 %b.lobit = ashr <4 x i32> %b, <i32 31, i32 31, i32 31, i32 31>
24 %sub = sub nsw <4 x i32> zeroinitializer, %a
25 %0 = xor <4 x i32> %b.lobit, <i32 -1, i32 -1, i32 -1, i32 -1>
26 %1 = and <4 x i32> %c, %0
27 %2 = and <4 x i32> %a, %b.lobit
28 %cond = or <4 x i32> %1, %2
29 ret <4 x i32> %cond
30}