236
|
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
|
2 ; RUN: opt < %s -passes=indvars -S | FileCheck %s
|
|
3
|
|
4 define i32 @logical_and_2ops(i32 %n, i32 %m) {
|
|
5 ; CHECK-LABEL: @logical_and_2ops(
|
|
6 ; CHECK-NEXT: entry:
|
|
7 ; CHECK-NEXT: [[TMP0:%.*]] = freeze i32 [[M:%.*]]
|
|
8 ; CHECK-NEXT: br label [[LOOP:%.*]]
|
|
9 ; CHECK: loop:
|
|
10 ; CHECK-NEXT: br i1 false, label [[LOOP]], label [[EXIT:%.*]]
|
|
11 ; CHECK: exit:
|
|
12 ; CHECK-NEXT: [[UMIN:%.*]] = call i32 @llvm.umin.i32(i32 [[TMP0]], i32 [[N:%.*]])
|
|
13 ; CHECK-NEXT: ret i32 [[UMIN]]
|
|
14 ;
|
|
15 entry:
|
|
16 br label %loop
|
|
17 loop:
|
|
18 %i = phi i32 [0, %entry], [%i.next, %loop]
|
|
19 %i.next = add i32 %i, 1
|
|
20 %cond_p0 = icmp ult i32 %i, %n
|
|
21 %cond_p1 = icmp ult i32 %i, %m
|
|
22 %cond = select i1 %cond_p0, i1 %cond_p1, i1 false
|
|
23 br i1 %cond, label %loop, label %exit
|
|
24 exit:
|
|
25 ret i32 %i
|
|
26 }
|
|
27
|
|
28 define i32 @logical_or_2ops(i32 %n, i32 %m) {
|
|
29 ; CHECK-LABEL: @logical_or_2ops(
|
|
30 ; CHECK-NEXT: entry:
|
|
31 ; CHECK-NEXT: [[TMP0:%.*]] = freeze i32 [[M:%.*]]
|
|
32 ; CHECK-NEXT: br label [[LOOP:%.*]]
|
|
33 ; CHECK: loop:
|
|
34 ; CHECK-NEXT: br i1 true, label [[EXIT:%.*]], label [[LOOP]]
|
|
35 ; CHECK: exit:
|
|
36 ; CHECK-NEXT: [[UMIN:%.*]] = call i32 @llvm.umin.i32(i32 [[TMP0]], i32 [[N:%.*]])
|
|
37 ; CHECK-NEXT: ret i32 [[UMIN]]
|
|
38 ;
|
|
39 entry:
|
|
40 br label %loop
|
|
41 loop:
|
|
42 %i = phi i32 [0, %entry], [%i.next, %loop]
|
|
43 %i.next = add i32 %i, 1
|
|
44 %cond_p0 = icmp uge i32 %i, %n
|
|
45 %cond_p1 = icmp uge i32 %i, %m
|
|
46 %cond = select i1 %cond_p0, i1 true, i1 %cond_p1
|
|
47 br i1 %cond, label %exit, label %loop
|
|
48 exit:
|
|
49 ret i32 %i
|
|
50 }
|
|
51
|
|
52 define i32 @logical_and_3ops(i32 %n, i32 %m, i32 %k) {
|
|
53 ; CHECK-LABEL: @logical_and_3ops(
|
|
54 ; CHECK-NEXT: entry:
|
|
55 ; CHECK-NEXT: [[TMP0:%.*]] = freeze i32 [[K:%.*]]
|
|
56 ; CHECK-NEXT: [[TMP1:%.*]] = freeze i32 [[M:%.*]]
|
|
57 ; CHECK-NEXT: [[UMIN:%.*]] = call i32 @llvm.umin.i32(i32 [[TMP0]], i32 [[TMP1]])
|
|
58 ; CHECK-NEXT: br label [[LOOP:%.*]]
|
|
59 ; CHECK: loop:
|
|
60 ; CHECK-NEXT: br i1 false, label [[LOOP]], label [[EXIT:%.*]]
|
|
61 ; CHECK: exit:
|
|
62 ; CHECK-NEXT: [[UMIN1:%.*]] = call i32 @llvm.umin.i32(i32 [[UMIN]], i32 [[N:%.*]])
|
|
63 ; CHECK-NEXT: ret i32 [[UMIN1]]
|
|
64 ;
|
|
65 entry:
|
|
66 br label %loop
|
|
67 loop:
|
|
68 %i = phi i32 [0, %entry], [%i.next, %loop]
|
|
69 %i.next = add i32 %i, 1
|
|
70 %cond_p0 = icmp ult i32 %i, %n
|
|
71 %cond_p1 = icmp ult i32 %i, %m
|
|
72 %cond_p2 = icmp ult i32 %i, %k
|
|
73 %cond_p3 = select i1 %cond_p0, i1 %cond_p1, i1 false
|
|
74 %cond = select i1 %cond_p3, i1 %cond_p2, i1 false
|
|
75 br i1 %cond, label %loop, label %exit
|
|
76 exit:
|
|
77 ret i32 %i
|
|
78 }
|
|
79
|
|
80 define i32 @logical_or_3ops(i32 %n, i32 %m, i32 %k) {
|
|
81 ; CHECK-LABEL: @logical_or_3ops(
|
|
82 ; CHECK-NEXT: entry:
|
|
83 ; CHECK-NEXT: [[TMP0:%.*]] = freeze i32 [[K:%.*]]
|
|
84 ; CHECK-NEXT: [[TMP1:%.*]] = freeze i32 [[M:%.*]]
|
|
85 ; CHECK-NEXT: [[UMIN:%.*]] = call i32 @llvm.umin.i32(i32 [[TMP0]], i32 [[TMP1]])
|
|
86 ; CHECK-NEXT: br label [[LOOP:%.*]]
|
|
87 ; CHECK: loop:
|
|
88 ; CHECK-NEXT: br i1 true, label [[EXIT:%.*]], label [[LOOP]]
|
|
89 ; CHECK: exit:
|
|
90 ; CHECK-NEXT: [[UMIN1:%.*]] = call i32 @llvm.umin.i32(i32 [[UMIN]], i32 [[N:%.*]])
|
|
91 ; CHECK-NEXT: ret i32 [[UMIN1]]
|
|
92 ;
|
|
93 entry:
|
|
94 br label %loop
|
|
95 loop:
|
|
96 %i = phi i32 [0, %entry], [%i.next, %loop]
|
|
97 %i.next = add i32 %i, 1
|
|
98 %cond_p0 = icmp uge i32 %i, %n
|
|
99 %cond_p1 = icmp uge i32 %i, %m
|
|
100 %cond_p2 = icmp uge i32 %i, %k
|
|
101 %cond_p3 = select i1 %cond_p0, i1 true, i1 %cond_p1
|
|
102 %cond = select i1 %cond_p3, i1 true, i1 %cond_p2
|
|
103 br i1 %cond, label %exit, label %loop
|
|
104 exit:
|
|
105 ret i32 %i
|
|
106 }
|