blob: a738f7442352d7afbe73c619d59573383794a43b [file] [log] [blame]
Chris Lattnerfd747f82004-03-12 06:01:00 +00001; This test makes sure that these instructions are properly eliminated.
Chris Lattnerfd747f82004-03-12 06:01:00 +00002
3; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep select
4
5implementation
6
7int %test1(int %A, int %B) {
8 %C = select bool false, int %A, int %B
9 ret int %C
10}
11
12int %test2(int %A, int %B) {
13 %C = select bool true, int %A, int %B
14 ret int %C
15}
16
Chris Lattnerb785d282004-03-30 19:36:54 +000017int %test3(bool %C, int %I) {
18 %V = select bool %C, int %I, int %I ; V = I
19 ret int %V
20}
21
22bool %test4(bool %C) {
23 %V = select bool %C, bool true, bool false ; V = C
24 ret bool %V
25}
26
27bool %test5(bool %C) {
28 %V = select bool %C, bool false, bool true ; V = !C
29 ret bool %V
30}
31
32int %test6(bool %C) {
33 %V = select bool %C, int 1, int 0 ; V = cast C to int
34 ret int %V
35}
Chris Lattnerfd747f82004-03-12 06:01:00 +000036
Chris Lattnerac42fd52004-04-08 04:43:04 +000037bool %test7(bool %C, bool %X) {
38 %R = select bool %C, bool true, bool %X ; R = or C, X
39 ret bool %R
40}
41
42bool %test8(bool %C, bool %X) {
43 %R = select bool %C, bool %X, bool false ; R = and C, X
44 ret bool %R
45}
46
47bool %test9(bool %C, bool %X) {
48 %R = select bool %C, bool false, bool %X ; R = and !C, X
49 ret bool %R
50}
51
52bool %test10(bool %C, bool %X) {
53 %R = select bool %C, bool %X, bool true ; R = or !C, X
54 ret bool %R
55}
Chris Lattner755cab22004-04-09 18:19:29 +000056
57int %test11(int %a) {
58 %C = seteq int %a, 0
59 %R = select bool %C, int 0, int 1
60 ret int %R
61}
62
Chris Lattnerbe68fd02004-04-09 23:43:48 +000063int %test12(bool %cond, int %a) {
64 %b = or int %a, 1
65 %c = select bool %cond, int %b, int %a
66 ret int %c
67}
68
69int %test12a(bool %cond, int %a) {
70 %b = shr int %a, ubyte 1
71 %c = select bool %cond, int %b, int %a
72 ret int %c
73}
74
75int %test12b(bool %cond, int %a) {
76 %b = shr int %a, ubyte 1
77 %c = select bool %cond, int %a, int %b
78 ret int %c
79}
80
Chris Lattner1f99df62004-04-10 22:21:14 +000081int %test13(int %a, int %b) {
82 %C = seteq int %a, %b
83 %V = select bool %C, int %a, int %b
84 ret int %V
85}
86
87int %test13a(int %a, int %b) {
88 %C = setne int %a, %b
89 %V = select bool %C, int %a, int %b
90 ret int %V
91}
92
93int %test13b(int %a, int %b) {
94 %C = seteq int %a, %b
95 %V = select bool %C, int %b, int %a
96 ret int %V
97}
Chris Lattner52d74302004-06-09 04:23:57 +000098
99bool %test14a(bool %C, int %X) {
100 %V = select bool %C, int %X, int 0
101 %R = setlt int %V, 1 ; (X < 1) | !C
102 ret bool %R
103}
104
105bool %test14b(bool %C, int %X) {
106 %V = select bool %C, int 0, int %X
107 %R = setlt int %V, 1 ; (X < 1) | C
108 ret bool %R
109}
110
Chris Lattnerce527c82004-06-09 07:59:40 +0000111int %test15a(int %X) { ;; Code sequence for (X & 16) ? 16 : 0
112 %t1 = and int %X, 16
113 %t2 = seteq int %t1, 0
114 %t3 = select bool %t2, int 0, int 16 ;; X & 16
115 ret int %t3
116}
117
118int %test15b(int %X) { ;; Code sequence for (X & 32) ? 0 : 24
119 %t1 = and int %X, 32
120 %t2 = seteq int %t1, 0
121 %t3 = select bool %t2, int 32, int 0 ;; ~X & 32
122 ret int %t3
123}
124
125int %test15c(int %X) { ;; Alternate code sequence for (X & 16) ? 16 : 0
126 %t1 = and int %X, 16
127 %t2 = seteq int %t1, 16
128 %t3 = select bool %t2, int 16, int 0 ;; X & 16
129 ret int %t3
130}
131
132int %test15d(int %X) { ;; Alternate code sequence for (X & 16) ? 16 : 0
133 %t1 = and int %X, 16
134 %t2 = setne int %t1, 0
135 %t3 = select bool %t2, int 16, int 0 ;; X & 16
136 ret int %t3
137}
Chris Lattnerfb473592004-09-23 15:45:20 +0000138
139int %test16(bool %C, int* %P) {
140 %P2 = select bool %C, int* %P, int* null
141 %V = load int* %P2
142 ret int %V
143}
Chris Lattner64a8a7f2005-04-23 15:31:03 +0000144
145bool %test17(int* %X, bool %C) {
146 %R = select bool %C, int* %X, int* null
147 %RV = seteq int* %R, null
148 ret bool %RV
149}
Chris Lattnerb6118b02006-09-09 20:26:04 +0000150
151int %test18(int %X, int %Y, bool %C) {
152 %R = select bool %C, int %X, int 0
153 %V = div int %Y, %R ; div Y,X
154 ret int %V
155}
Chris Lattnerdb4fbdd2006-09-19 06:16:46 +0000156
157int %test19(uint %x) {
158entry:
159 %tmp = setgt uint %x, 2147483647
160 %retval = select bool %tmp, int -1, int 0
161 ret int %retval
162}
163
164int %test20(int %x) {
165 %tmp = setlt int %x, 0
166 %retval = select bool %tmp, int -1, int 0
167 ret int %retval
168}
169