blob: 85ffe1f4e0f37e61146b35370ac1bfd85cec64e7 [file] [log] [blame]
Sanjay Patelcaf369b2017-03-13 19:59:14 +00001; RUN: opt -simplifycfg -S < %s | FileCheck %s
Sanjay Patel6023a252017-03-13 15:45:37 +00002
Sanjay Patelcaf369b2017-03-13 19:59:14 +00003; FIXME: Hoist the sdiv because it's safe and free.
Sanjay Patel6023a252017-03-13 15:45:37 +00004; PR31028 - https://bugs.llvm.org/show_bug.cgi?id=31028
5
6define i32 @hoist_sdiv(i32 %a, i32 %b) {
7; CHECK-LABEL: @hoist_sdiv(
8; CHECK-NEXT: entry:
9; CHECK-NEXT: [[REM:%.*]] = srem i32 %a, %b
10; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[REM]], 42
11; CHECK-NEXT: br i1 [[CMP]], label %if, label %end
12; CHECK: if:
13; CHECK-NEXT: [[DIV:%.*]] = sdiv i32 %a, %b
14; CHECK-NEXT: br label %end
15; CHECK: end:
16; CHECK-NEXT: [[RET:%.*]] = phi i32 [ [[DIV]], %if ], [ 3, %entry ]
17; CHECK-NEXT: ret i32 [[RET]]
18;
19entry:
20 %rem = srem i32 %a, %b
21 %cmp = icmp eq i32 %rem, 42
22 br i1 %cmp, label %if, label %end
23
24if:
25 %div = sdiv i32 %a, %b
26 br label %end
27
28end:
29 %ret = phi i32 [ %div, %if ], [ 3, %entry ]
30 ret i32 %ret
31}
32
Sanjay Patelcaf369b2017-03-13 19:59:14 +000033; FIXME: Hoist the udiv because it's safe and free.
Sanjay Patel6023a252017-03-13 15:45:37 +000034
35define i64 @hoist_udiv(i64 %a, i64 %b) {
36; CHECK-LABEL: @hoist_udiv(
37; CHECK-NEXT: entry:
38; CHECK-NEXT: [[REM:%.*]] = urem i64 %a, %b
39; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 [[REM]], 42
40; CHECK-NEXT: br i1 [[CMP]], label %if, label %end
41; CHECK: if:
42; CHECK-NEXT: [[DIV:%.*]] = udiv i64 %a, %b
43; CHECK-NEXT: br label %end
44; CHECK: end:
45; CHECK-NEXT: [[RET:%.*]] = phi i64 [ [[DIV]], %if ], [ 3, %entry ]
46; CHECK-NEXT: ret i64 [[RET]]
47;
48entry:
49 %rem = urem i64 %a, %b
50 %cmp = icmp eq i64 %rem, 42
51 br i1 %cmp, label %if, label %end
52
53if:
54 %div = udiv i64 %a, %b
55 br label %end
56
57end:
58 %ret = phi i64 [ %div, %if ], [ 3, %entry ]
59 ret i64 %ret
60}
61
Sanjay Patelcaf369b2017-03-13 19:59:14 +000062; FIXME: Hoist the srem because it's safe and likely free.
Sanjay Patel6023a252017-03-13 15:45:37 +000063
64define i16 @hoist_srem(i16 %a, i16 %b) {
65; CHECK-LABEL: @hoist_srem(
66; CHECK-NEXT: entry:
67; CHECK-NEXT: [[DIV:%.*]] = sdiv i16 %a, %b
68; CHECK-NEXT: [[CMP:%.*]] = icmp eq i16 [[DIV]], 42
69; CHECK-NEXT: br i1 [[CMP]], label %if, label %end
70; CHECK: if:
71; CHECK-NEXT: [[REM:%.*]] = srem i16 %a, %b
72; CHECK-NEXT: br label %end
73; CHECK: end:
74; CHECK-NEXT: [[RET:%.*]] = phi i16 [ [[REM]], %if ], [ 3, %entry ]
75; CHECK-NEXT: ret i16 [[RET]]
76;
77entry:
78 %div = sdiv i16 %a, %b
79 %cmp = icmp eq i16 %div, 42
80 br i1 %cmp, label %if, label %end
81
82if:
83 %rem = srem i16 %a, %b
84 br label %end
85
86end:
87 %ret = phi i16 [ %rem, %if ], [ 3, %entry ]
88 ret i16 %ret
89}
90
Sanjay Patelcaf369b2017-03-13 19:59:14 +000091; FIXME: Hoist the urem because it's safe and likely free.
Sanjay Patel6023a252017-03-13 15:45:37 +000092
93define i8 @hoist_urem(i8 %a, i8 %b) {
94; CHECK-LABEL: @hoist_urem(
95; CHECK-NEXT: entry:
96; CHECK-NEXT: [[DIV:%.*]] = udiv i8 %a, %b
97; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[DIV]], 42
98; CHECK-NEXT: br i1 [[CMP]], label %if, label %end
99; CHECK: if:
100; CHECK-NEXT: [[REM:%.*]] = urem i8 %a, %b
101; CHECK-NEXT: br label %end
102; CHECK: end:
103; CHECK-NEXT: [[RET:%.*]] = phi i8 [ [[REM]], %if ], [ 3, %entry ]
104; CHECK-NEXT: ret i8 [[RET]]
105;
106entry:
107 %div = udiv i8 %a, %b
108 %cmp = icmp eq i8 %div, 42
109 br i1 %cmp, label %if, label %end
110
111if:
112 %rem = urem i8 %a, %b
113 br label %end
114
115end:
116 %ret = phi i8 [ %rem, %if ], [ 3, %entry ]
117 ret i8 %ret
118}
119