xref: /llvm-project/llvm/test/Transforms/CorrelatedValuePropagation/udiv.ll (revision 8ebb3eac02a926ffa4298c12834c57aefb2e8579)
1*8ebb3eacSBjorn Pettersson; RUN: opt < %s -passes=correlated-propagation -S | FileCheck %s
2cee313d2SEric Christopher
3cee313d2SEric Christopher; Check that debug locations are preserved. For more info see:
4cee313d2SEric Christopher;   https://llvm.org/docs/SourceLevelDebugging.html#fixing-errors
5*8ebb3eacSBjorn Pettersson; RUN: opt < %s -enable-debugify -passes=correlated-propagation -S 2>&1 | \
6cee313d2SEric Christopher; RUN:   FileCheck %s -check-prefix=DEBUG
7cee313d2SEric Christopher; DEBUG: CheckModuleDebugify: PASS
8cee313d2SEric Christopher
9cee313d2SEric Christopher; CHECK-LABEL: @test_nop
10cee313d2SEric Christopherdefine void @test_nop(i32 %n) {
117f93ff58SJonathan Roelofs; CHECK: udiv i32 %n, 100
12cee313d2SEric Christopher  %div = udiv i32 %n, 100
13cee313d2SEric Christopher  ret void
14cee313d2SEric Christopher}
15cee313d2SEric Christopher
16cee313d2SEric Christopher; CHECK-LABEL: @test1(
17cee313d2SEric Christopherdefine void @test1(i32 %n) {
18cee313d2SEric Christopherentry:
19cee313d2SEric Christopher  %cmp = icmp ule i32 %n, 65535
20cee313d2SEric Christopher  br i1 %cmp, label %bb, label %exit
21cee313d2SEric Christopher
22cee313d2SEric Christopherbb:
23cee313d2SEric Christopher; CHECK: udiv i16
24cee313d2SEric Christopher  %div = udiv i32 %n, 100
25cee313d2SEric Christopher  br label %exit
26cee313d2SEric Christopher
27cee313d2SEric Christopherexit:
28cee313d2SEric Christopher  ret void
29cee313d2SEric Christopher}
30cee313d2SEric Christopher
31cee313d2SEric Christopher; CHECK-LABEL: @test2(
32cee313d2SEric Christopherdefine void @test2(i32 %n) {
33cee313d2SEric Christopherentry:
34cee313d2SEric Christopher  %cmp = icmp ule i32 %n, 65536
35cee313d2SEric Christopher  br i1 %cmp, label %bb, label %exit
36cee313d2SEric Christopher
37cee313d2SEric Christopherbb:
38cee313d2SEric Christopher; CHECK: udiv i32 %n, 100
39cee313d2SEric Christopher  %div = udiv i32 %n, 100
40cee313d2SEric Christopher  br label %exit
41cee313d2SEric Christopher
42cee313d2SEric Christopherexit:
43cee313d2SEric Christopher  ret void
44cee313d2SEric Christopher}
45cee313d2SEric Christopher
46cee313d2SEric Christopher; CHECK-LABEL: @test3(
47cee313d2SEric Christopherdefine void @test3(i32 %m, i32 %n) {
48cee313d2SEric Christopherentry:
49cee313d2SEric Christopher  %cmp1 = icmp ult i32 %m, 65535
50cee313d2SEric Christopher  %cmp2 = icmp ult i32 %n, 65535
51cee313d2SEric Christopher  %cmp = and i1 %cmp1, %cmp2
52cee313d2SEric Christopher  br i1 %cmp, label %bb, label %exit
53cee313d2SEric Christopher
54cee313d2SEric Christopherbb:
55cee313d2SEric Christopher; CHECK: udiv i16
56cee313d2SEric Christopher  %div = udiv i32 %m, %n
57cee313d2SEric Christopher  br label %exit
58cee313d2SEric Christopher
59cee313d2SEric Christopherexit:
60cee313d2SEric Christopher  ret void
61cee313d2SEric Christopher}
62cee313d2SEric Christopher
63cee313d2SEric Christopher; CHECK-LABEL: @test4(
64cee313d2SEric Christopherdefine void @test4(i32 %m, i32 %n) {
65cee313d2SEric Christopherentry:
66cee313d2SEric Christopher  %cmp1 = icmp ult i32 %m, 65535
67cee313d2SEric Christopher  %cmp2 = icmp ule i32 %n, 65536
68cee313d2SEric Christopher  %cmp = and i1 %cmp1, %cmp2
69cee313d2SEric Christopher  br i1 %cmp, label %bb, label %exit
70cee313d2SEric Christopher
71cee313d2SEric Christopherbb:
72cee313d2SEric Christopher; CHECK: udiv i32 %m, %n
73cee313d2SEric Christopher  %div = udiv i32 %m, %n
74cee313d2SEric Christopher  br label %exit
75cee313d2SEric Christopher
76cee313d2SEric Christopherexit:
77cee313d2SEric Christopher  ret void
78cee313d2SEric Christopher}
79cee313d2SEric Christopher
80cee313d2SEric Christopher; CHECK-LABEL: @test5
81cee313d2SEric Christopherdefine void @test5(i32 %n) {
82cee313d2SEric Christopher  %trunc = and i32 %n, 65535
83cee313d2SEric Christopher  ; CHECK: udiv i16
84cee313d2SEric Christopher  %div = udiv i32 %trunc, 42
85cee313d2SEric Christopher  ret void
86cee313d2SEric Christopher}
87cee313d2SEric Christopher
88cee313d2SEric Christopher; CHECK-LABEL: @test6
89cee313d2SEric Christopherdefine void @test6(i32 %n) {
90cee313d2SEric Christopherentry:
91cee313d2SEric Christopher  %cmp = icmp ule i32 %n, 255
92cee313d2SEric Christopher  br i1 %cmp, label %bb, label %exit
93cee313d2SEric Christopher
94cee313d2SEric Christopherbb:
95cee313d2SEric Christopher; CHECK: udiv i8
96cee313d2SEric Christopher  %div = sdiv i32 %n, 100
97cee313d2SEric Christopher  br label %exit
98cee313d2SEric Christopher
99cee313d2SEric Christopherexit:
100cee313d2SEric Christopher  ret void
101cee313d2SEric Christopher}
102