Tests for fp cmov's that I forgot to check in earlier
[oota-llvm.git] / test / CodeGen / X86 / select.ll
1 ; RUN: llvm-as < %s | llc -march=x86
2
3 bool %boolSel(bool %A, bool %B, bool %C) {
4         %X = select bool %A, bool %B, bool %C
5         ret bool %X
6 }
7
8 sbyte %byteSel(bool %A, sbyte %B, sbyte %C) {
9         %X = select bool %A, sbyte %B, sbyte %C
10         ret sbyte %X
11 }
12
13 short %shortSel(bool %A, short %B, short %C) {
14         %X = select bool %A, short %B, short %C
15         ret short %X
16 }
17
18 int %intSel(bool %A, int %B, int %C) {
19         %X = select bool %A, int %B, int %C
20         ret int %X
21 }
22
23 long %longSel(bool %A, long %B, long %C) {
24         %X = select bool %A, long %B, long %C
25         ret long %X
26 }
27
28 double %doubleSel(bool %A, double %B, double %C) {
29         %X = select bool %A, double %B, double %C
30         ret double %X
31 }
32
33 sbyte %foldSel(bool %A, sbyte %B, sbyte %C) {
34         %Cond = setlt sbyte %B, %C
35         %X = select bool %Cond, sbyte %B, sbyte %C
36         ret sbyte %X
37 }
38
39 int %foldSel2(bool %A, int %B, int %C) {
40         %Cond = seteq int %B, %C
41         %X = select bool %Cond, int %B, int %C
42         ret int %X
43 }
44
45 int %foldSel2(bool %A, int %B, int %C, double %X, double %Y) {
46         %Cond = setlt double %X, %Y
47         %X = select bool %Cond, int %B, int %C
48         ret int %X
49 }
50
51 float %foldSel3(bool %A, float %B, float %C, uint %X, uint %Y) {
52         %Cond = setlt uint %X, %Y
53         %X = select bool %Cond, float %B, float %C
54         ret float %X
55 }
56
57 float %nofoldSel4(bool %A, float %B, float %C, int %X, int %Y) {
58         ; X86 doesn't have a cmov that reads the right flags for this!
59         %Cond = setlt int %X, %Y
60         %X = select bool %Cond, float %B, float %C
61         ret float %X
62 }
63