xref: /llvm-project/llvm/test/Transforms/InstSimplify/exact-nsw-nuw.ll (revision 11b41910dd9ffbc1bffcc818be2de0174eac1e1b)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -passes=instsimplify -S | FileCheck %s
3
4; PR8862
5
6define i32 @shift1(i32 %A, i32 %B) {
7; CHECK-LABEL: @shift1(
8; CHECK-NEXT:    ret i32 [[A:%.*]]
9;
10  %C = lshr exact i32 %A, %B
11  %D = shl nuw i32 %C, %B
12  ret i32 %D
13}
14
15define i32 @shift2(i32 %A, i32 %B) {
16; CHECK-LABEL: @shift2(
17; CHECK-NEXT:    [[C:%.*]] = lshr i32 [[A:%.*]], [[B:%.*]]
18; CHECK-NEXT:    [[D:%.*]] = shl nuw i32 [[C]], [[B]]
19; CHECK-NEXT:    ret i32 [[D]]
20;
21  %C = lshr i32 %A, %B
22  %D = shl nuw i32 %C, %B
23  ret i32 %D
24}
25
26define i32 @shift3(i32 %A, i32 %B) {
27; CHECK-LABEL: @shift3(
28; CHECK-NEXT:    ret i32 [[A:%.*]]
29;
30  %C = ashr exact i32 %A, %B
31  %D = shl nuw i32 %C, %B
32  ret i32 %D
33}
34
35define i32 @shift4(i32 %A, i32 %B) {
36; CHECK-LABEL: @shift4(
37; CHECK-NEXT:    ret i32 [[A:%.*]]
38;
39  %C = shl nuw i32 %A, %B
40  %D = lshr i32 %C, %B
41  ret i32 %D
42}
43
44define i32 @shift5(i32 %A, i32 %B) {
45; CHECK-LABEL: @shift5(
46; CHECK-NEXT:    ret i32 [[A:%.*]]
47;
48  %C = shl nsw i32 %A, %B
49  %D = ashr i32 %C, %B
50  ret i32 %D
51}
52
53define i32 @div1(i32 %V) {
54; CHECK-LABEL: @div1(
55; CHECK-NEXT:    ret i32 0
56;
57  %A = udiv i32 %V, -2147483648
58  %B = udiv i32 %A, -2147483648
59  ret i32 %B
60}
61
62define i32 @div2(i32 %V) {
63; CHECK-LABEL: @div2(
64; CHECK-NEXT:    ret i32 0
65;
66  %A = sdiv i32 %V, -1
67  %B = sdiv i32 %A, -2147483648
68  ret i32 %B
69}
70
71