blob: 130483ad841095e73acbddf704f873ad7bb2a0d3 [file] [log] [blame]
Chris Lattner09987f72010-01-02 00:22:15 +00001; RUN: llc < %s -mtriple=i386-apple-darwin10 | FileCheck %s
Evan Cheng9ab2b982009-12-18 21:31:31 +00002; rdar://7475489
3
Chris Lattner133ce872010-01-02 00:00:03 +00004define i32 @test1(i32 %a, i32 %b) nounwind ssp {
Evan Cheng9ab2b982009-12-18 21:31:31 +00005entry:
Chris Lattner133ce872010-01-02 00:00:03 +00006; CHECK: test1:
Evan Cheng9ab2b982009-12-18 21:31:31 +00007; CHECK: xorb
8; CHECK-NOT: andb
9; CHECK-NOT: shrb
10; CHECK: testb $64
11 %0 = and i32 %a, 16384
12 %1 = icmp ne i32 %0, 0
13 %2 = and i32 %b, 16384
14 %3 = icmp ne i32 %2, 0
15 %4 = xor i1 %1, %3
16 br i1 %4, label %bb1, label %bb
17
18bb: ; preds = %entry
19 %5 = tail call i32 (...)* @foo() nounwind ; <i32> [#uses=1]
20 ret i32 %5
21
22bb1: ; preds = %entry
23 %6 = tail call i32 (...)* @bar() nounwind ; <i32> [#uses=1]
24 ret i32 %6
25}
26
27declare i32 @foo(...)
28
29declare i32 @bar(...)
Chris Lattner133ce872010-01-02 00:00:03 +000030
31
32
33; PR3351 - (P == 0) & (Q == 0) -> (P|Q) == 0
34define i32 @test2(i32* %P, i32* %Q) nounwind ssp {
35entry:
36 %a = icmp eq i32* %P, null ; <i1> [#uses=1]
37 %b = icmp eq i32* %Q, null ; <i1> [#uses=1]
38 %c = and i1 %a, %b
39 br i1 %c, label %bb1, label %return
40
41bb1: ; preds = %entry
42 ret i32 4
43
44return: ; preds = %entry
45 ret i32 192
46; CHECK: test2:
47; CHECK: movl 4(%esp), %eax
48; CHECK-NEXT: orl 8(%esp), %eax
49; CHECK-NEXT: jne LBB2_2
50}
51
52; PR3351 - (P != 0) | (Q != 0) -> (P|Q) != 0
53define i32 @test3(i32* %P, i32* %Q) nounwind ssp {
54entry:
55 %a = icmp ne i32* %P, null ; <i1> [#uses=1]
56 %b = icmp ne i32* %Q, null ; <i1> [#uses=1]
57 %c = or i1 %a, %b
58 br i1 %c, label %bb1, label %return
59
60bb1: ; preds = %entry
61 ret i32 4
62
63return: ; preds = %entry
64 ret i32 192
65; CHECK: test3:
66; CHECK: movl 4(%esp), %eax
67; CHECK-NEXT: orl 8(%esp), %eax
68; CHECK-NEXT: je LBB3_2
69}