1; RUN: llc %s -o - -O1 -debug-only=consthoist 2>&1 | FileCheck %s
2; REQUIRES: asserts
3
4target datalayout = "e-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32"
5target triple = "thumbv6m-apple-ios8.0.0"
6
7declare void @g(i32)
8
9; CHECK: Collect constant i32 -3 from   call void @g(i32 -3) with cost 2
10define void @f(i1 %cond) {
11entry:
12  call void @g(i32 -3)
13  br i1 %cond, label %true, label %ret
14
15true:
16  call void @g(i32 -3)
17  br label %ret
18
19ret:
20  ret void
21}
22
23; CHECK: Function: h
24; CHECK-NOT: Collect constant i32 -193 from
25define void @h(i1 %cond, i32 %p, i32 %q) {
26entry:
27  %a = and i32 %p, 4294967103
28  call void @g(i32 %a)
29  br i1 %cond, label %true, label %ret
30
31true:
32  %b = and i32 %q, 4294967103
33  call void @g(i32 %b)
34  br label %ret
35
36ret:
37  ret void
38}
39
40; CHECK: Function: test_icmp_neg
41; CHECK-NOT: Collect constant
42define void @test_icmp_neg(i1 %cond, i32 %arg, i32 %arg2) {
43entry:
44  %a = icmp ne i32 %arg, -5
45  call void @g2(i1 %a)
46  br i1 %cond, label %true, label %ret
47
48true:
49  %b = icmp ne i32 %arg2, -5
50  call void @g2(i1 %b)
51  br label %ret
52
53ret:
54  ret void
55}
56declare void @g2(i1)
57
58; CHECK: Function: test_icmp_neg2
59; CHECK: Hoist constant (i32 -500) to BB entry
60define void @test_icmp_neg2(i1 %cond, i32 %arg, i32 %arg2) {
61entry:
62  %a = icmp ne i32 %arg, -500
63  call void @g2(i1 %a)
64  br i1 %cond, label %true, label %ret
65
66true:
67  %b = icmp ne i32 %arg2, -500
68  call void @g2(i1 %b)
69  br label %ret
70
71ret:
72  ret void
73}
74
75; CHECK: Function: test_add_neg
76; CHECK-NOT: Collect constant i32 -5
77define void @test_add_neg(i1 %cond, i32 %arg, i32 %arg2) {
78entry:
79  %a = add i32 %arg, -5
80  call void @g(i32 %a)
81  br i1 %cond, label %true, label %ret
82
83true:
84  %b = add i32 %arg2, -5
85  call void @g(i32 %b)
86  br label %ret
87
88ret:
89  ret void
90}
91