[InstSimplify] Add self-fdiv identities for -ffinite-math-only.
[oota-llvm.git] / test / Transforms / InstSimplify / rem.ll
1 ; RUN: opt < %s -instsimplify -S | FileCheck %s
2
3 define 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
11 define 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
19 define 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
28 define 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
37 define 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 }