• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: opt -S -instcombine < %s | FileCheck %s
2
3declare void @foo()
4
5define void @test1(i32 %a, i32 %b) nounwind {
6  %1 = icmp slt i32 %a, 0
7  %2 = icmp slt i32 %b, 0
8  %or.cond = or i1 %1, %2
9  br i1 %or.cond, label %if.then, label %if.end
10
11; CHECK: @test1
12; CHECK-NEXT: %1 = or i32 %a, %b
13; CHECK-NEXT: %2 = icmp slt i32 %1, 0
14; CHECK-NEXT: br
15
16if.then:
17  tail call void @foo() nounwind
18  ret void
19
20if.end:
21  ret void
22}
23
24define void @test2(i32 %a, i32 %b) nounwind {
25  %1 = icmp sgt i32 %a, -1
26  %2 = icmp sgt i32 %b, -1
27  %or.cond = or i1 %1, %2
28  br i1 %or.cond, label %if.then, label %if.end
29
30; CHECK: @test2
31; CHECK-NEXT: %1 = and i32 %a, %b
32; CHECK-NEXT: %2 = icmp sgt i32 %1, -1
33; CHECK-NEXT: br
34
35if.then:
36  tail call void @foo() nounwind
37  ret void
38
39if.end:
40  ret void
41}
42
43define void @test3(i32 %a, i32 %b) nounwind {
44  %1 = icmp slt i32 %a, 0
45  %2 = icmp slt i32 %b, 0
46  %or.cond = and i1 %1, %2
47  br i1 %or.cond, label %if.then, label %if.end
48
49; CHECK: @test3
50; CHECK-NEXT: %1 = and i32 %a, %b
51; CHECK-NEXT: %2 = icmp slt i32 %1, 0
52; CHECK-NEXT: br
53
54if.then:
55  tail call void @foo() nounwind
56  ret void
57
58if.end:
59  ret void
60}
61
62define void @test4(i32 %a, i32 %b) nounwind {
63  %1 = icmp sgt i32 %a, -1
64  %2 = icmp sgt i32 %b, -1
65  %or.cond = and i1 %1, %2
66  br i1 %or.cond, label %if.then, label %if.end
67
68; CHECK: @test4
69; CHECK-NEXT: %1 = or i32 %a, %b
70; CHECK-NEXT: %2 = icmp sgt i32 %1, -1
71; CHECK-NEXT: br
72
73if.then:
74  tail call void @foo() nounwind
75  ret void
76
77if.end:
78  ret void
79}
80