1; RUN: opt < %s -instsimplify -S | FileCheck %s
2
3define i32 @select1(i32 %x, i1 %b) {
4; CHECK-LABEL: @select1(
5  %rhs = select i1 %b, i32 %x, i32 1
6  %rem = srem i32 %x, %rhs
7  ret i32 %rem
8; CHECK: ret i32 0
9}
10
11define i32 @select2(i32 %x, i1 %b) {
12; CHECK-LABEL: @select2(
13  %rhs = select i1 %b, i32 %x, i32 1
14  %rem = urem i32 %x, %rhs
15  ret i32 %rem
16; CHECK: ret i32 0
17}
18
19define i32 @rem1(i32 %x, i32 %n) {
20; CHECK-LABEL: @rem1(
21; CHECK-NEXT: %mod = srem i32 %x, %n
22; CHECK-NEXT: ret i32 %mod
23 %mod = srem i32 %x, %n
24 %mod1 = srem i32 %mod, %n
25 ret i32 %mod1
26}
27
28define i32 @rem2(i32 %x, i32 %n) {
29; CHECK-LABEL: @rem2(
30; CHECK-NEXT: %mod = urem i32 %x, %n
31; CHECK-NEXT: ret i32 %mod
32 %mod = urem i32 %x, %n
33 %mod1 = urem i32 %mod, %n
34 ret i32 %mod1
35}
36
37define i32 @rem3(i32 %x, i32 %n) {
38; CHECK-LABEL: @rem3(
39; CHECK-NEXT: %[[srem:.*]] = srem i32 %x, %n
40; CHECK-NEXT: %[[urem:.*]] = urem i32 %[[srem]], %n
41; CHECK-NEXT: ret i32 %[[urem]]
42 %mod = srem i32 %x, %n
43 %mod1 = urem i32 %mod, %n
44 ret i32 %mod1
45}
46