blob: 31b9c2eb4c777b416945a36236738cd7fb6cf14a [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
Benjamin Krameredb7fe52010-12-18 14:23:57 +00003define <4 x i32> @signd(<4 x i32> %a, <4 x i32> %b) nounwind {
Nate Begemanb65c1752010-12-17 22:55:37 +00004entry:
Benjamin Krameredb7fe52010-12-18 14:23:57 +00005; CHECK: signd:
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
Benjamin Krameredb7fe52010-12-18 14:23:57 +000018define <4 x i32> @blendvb(<4 x i32> %b, <4 x i32> %a, <4 x i32> %c) nounwind {
Nate Begemanb65c1752010-12-17 22:55:37 +000019entry:
Benjamin Krameredb7fe52010-12-18 14:23:57 +000020; CHECK: blendvb:
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}