xref: /llvm-project/llvm/test/Analysis/ScalarEvolution/minmax-intrinsics.ll (revision 50153213c80286c6c91da4612aaf234cc6438c63)
16b50ce3aSNikita Popov; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
26b50ce3aSNikita Popov; RUN: opt -disable-output "-passes=print<scalar-evolution>" < %s 2>&1 | FileCheck %s
36b50ce3aSNikita Popov
46b50ce3aSNikita Popovdeclare i32 @llvm.umax.i32(i32, i32)
56b50ce3aSNikita Popovdeclare i32 @llvm.umin.i32(i32, i32)
66b50ce3aSNikita Popovdeclare i32 @llvm.smax.i32(i32, i32)
76b50ce3aSNikita Popovdeclare i32 @llvm.smin.i32(i32, i32)
86b50ce3aSNikita Popov
96b50ce3aSNikita Popovdefine i32 @umax(i32 %x, i32 %y) {
106b50ce3aSNikita Popov; CHECK-LABEL: 'umax'
116b50ce3aSNikita Popov; CHECK-NEXT:  Classifying expressions for: @umax
126b50ce3aSNikita Popov; CHECK-NEXT:    %z = call i32 @llvm.umax.i32(i32 %x, i32 %y)
13*ac87480bSNikita Popov; CHECK-NEXT:    --> (%x umax %y) U: full-set S: full-set
146b50ce3aSNikita Popov; CHECK-NEXT:  Determining loop execution counts for: @umax
156b50ce3aSNikita Popov;
166b50ce3aSNikita Popov  %z = call i32 @llvm.umax.i32(i32 %x, i32 %y)
176b50ce3aSNikita Popov  ret i32 %z
186b50ce3aSNikita Popov}
196b50ce3aSNikita Popov
206b50ce3aSNikita Popovdefine i32 @umin(i32 %x, i32 %y) {
216b50ce3aSNikita Popov; CHECK-LABEL: 'umin'
226b50ce3aSNikita Popov; CHECK-NEXT:  Classifying expressions for: @umin
236b50ce3aSNikita Popov; CHECK-NEXT:    %z = call i32 @llvm.umin.i32(i32 %x, i32 %y)
24*ac87480bSNikita Popov; CHECK-NEXT:    --> (%x umin %y) U: full-set S: full-set
256b50ce3aSNikita Popov; CHECK-NEXT:  Determining loop execution counts for: @umin
266b50ce3aSNikita Popov;
276b50ce3aSNikita Popov  %z = call i32 @llvm.umin.i32(i32 %x, i32 %y)
286b50ce3aSNikita Popov  ret i32 %z
296b50ce3aSNikita Popov}
306b50ce3aSNikita Popov
316b50ce3aSNikita Popovdefine i32 @smax(i32 %x, i32 %y) {
326b50ce3aSNikita Popov; CHECK-LABEL: 'smax'
336b50ce3aSNikita Popov; CHECK-NEXT:  Classifying expressions for: @smax
346b50ce3aSNikita Popov; CHECK-NEXT:    %z = call i32 @llvm.smax.i32(i32 %x, i32 %y)
35*ac87480bSNikita Popov; CHECK-NEXT:    --> (%x smax %y) U: full-set S: full-set
366b50ce3aSNikita Popov; CHECK-NEXT:  Determining loop execution counts for: @smax
376b50ce3aSNikita Popov;
386b50ce3aSNikita Popov  %z = call i32 @llvm.smax.i32(i32 %x, i32 %y)
396b50ce3aSNikita Popov  ret i32 %z
406b50ce3aSNikita Popov}
416b50ce3aSNikita Popov
426b50ce3aSNikita Popovdefine i32 @smin(i32 %x, i32 %y) {
436b50ce3aSNikita Popov; CHECK-LABEL: 'smin'
446b50ce3aSNikita Popov; CHECK-NEXT:  Classifying expressions for: @smin
456b50ce3aSNikita Popov; CHECK-NEXT:    %z = call i32 @llvm.smin.i32(i32 %x, i32 %y)
46*ac87480bSNikita Popov; CHECK-NEXT:    --> (%x smin %y) U: full-set S: full-set
476b50ce3aSNikita Popov; CHECK-NEXT:  Determining loop execution counts for: @smin
486b50ce3aSNikita Popov;
496b50ce3aSNikita Popov  %z = call i32 @llvm.smin.i32(i32 %x, i32 %y)
506b50ce3aSNikita Popov  ret i32 %z
516b50ce3aSNikita Popov}
526b50ce3aSNikita Popov
536b50ce3aSNikita Popovdefine i32 @clamp(i32 %x) {
546b50ce3aSNikita Popov; CHECK-LABEL: 'clamp'
556b50ce3aSNikita Popov; CHECK-NEXT:  Classifying expressions for: @clamp
566b50ce3aSNikita Popov; CHECK-NEXT:    %y = call i32 @llvm.umax.i32(i32 %x, i32 10)
57*ac87480bSNikita Popov; CHECK-NEXT:    --> (10 umax %x) U: [10,0) S: [10,0)
586b50ce3aSNikita Popov; CHECK-NEXT:    %z = call i32 @llvm.umin.i32(i32 %y, i32 20)
59*ac87480bSNikita Popov; CHECK-NEXT:    --> (20 umin (10 umax %x)) U: [10,21) S: [10,21)
606b50ce3aSNikita Popov; CHECK-NEXT:  Determining loop execution counts for: @clamp
616b50ce3aSNikita Popov;
626b50ce3aSNikita Popov  %y = call i32 @llvm.umax.i32(i32 %x, i32 10)
636b50ce3aSNikita Popov  %z = call i32 @llvm.umin.i32(i32 %y, i32 20)
646b50ce3aSNikita Popov  ret i32 %z
656b50ce3aSNikita Popov}
66