Add a test for the foldSelectICmpAndOr fix committed in r180779.
[oota-llvm.git] / test / Transforms / InstCombine / apint-select.ll
1 ; This test makes sure that these instructions are properly eliminated.
2
3 ; RUN: opt < %s -instcombine -S | not grep select
4
5
6 define i41 @test1(i1 %C) {
7         %V = select i1 %C, i41 1, i41 0  ; V = C
8         ret i41 %V
9 }
10
11 define i999 @test2(i1 %C) {
12         %V = select i1 %C, i999 0, i999 1  ; V = C
13         ret i999 %V
14 }
15
16 define i41 @test3(i41 %X) {
17     ;; (x <s 0) ? -1 : 0 -> ashr x, 31
18     %t = icmp slt i41 %X, 0
19     %V = select i1 %t, i41 -1, i41 0
20     ret i41 %V
21 }
22
23 define i1023 @test4(i1023 %X) {
24     ;; (x <s 0) ? -1 : 0 -> ashr x, 31
25     %t = icmp slt i1023 %X, 0
26     %V = select i1 %t, i1023 -1, i1023 0
27     ret i1023 %V
28 }
29
30 define i41 @test5(i41 %X) {
31     ;; ((X & 27) ? 27 : 0)
32     %Y = and i41 %X, 32
33     %t = icmp ne i41 %Y, 0
34     %V = select i1 %t, i41 32, i41 0
35     ret i41 %V
36 }
37
38 define i1023 @test6(i1023 %X) {
39     ;; ((X & 27) ? 27 : 0)
40     %Y = and i1023 %X, 64 
41     %t = icmp ne i1023 %Y, 0
42     %V = select i1 %t, i1023 64, i1023 0
43     ret i1023 %V
44 }