| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- ; RUN: opt < %s -instsimplify -S | FileCheck %s
- define i1 @max1(i32 %x, i32 %y) {
- ; CHECK-LABEL: @max1(
- %c = icmp sgt i32 %x, %y
- %m = select i1 %c, i32 %x, i32 %y
- %r = icmp slt i32 %m, %x
- ret i1 %r
- ; CHECK: ret i1 false
- }
- define i1 @max2(i32 %x, i32 %y) {
- ; CHECK-LABEL: @max2(
- %c = icmp sge i32 %x, %y
- %m = select i1 %c, i32 %x, i32 %y
- %r = icmp sge i32 %m, %x
- ret i1 %r
- ; CHECK: ret i1 true
- }
- define i1 @max3(i32 %x, i32 %y) {
- ; CHECK-LABEL: @max3(
- %c = icmp ugt i32 %x, %y
- %m = select i1 %c, i32 %x, i32 %y
- %r = icmp ult i32 %m, %x
- ret i1 %r
- ; CHECK: ret i1 false
- }
- define i1 @max4(i32 %x, i32 %y) {
- ; CHECK-LABEL: @max4(
- %c = icmp uge i32 %x, %y
- %m = select i1 %c, i32 %x, i32 %y
- %r = icmp uge i32 %m, %x
- ret i1 %r
- ; CHECK: ret i1 true
- }
- define i1 @max5(i32 %x, i32 %y) {
- ; CHECK-LABEL: @max5(
- %c = icmp sgt i32 %x, %y
- %m = select i1 %c, i32 %x, i32 %y
- %r = icmp sgt i32 %x, %m
- ret i1 %r
- ; CHECK: ret i1 false
- }
- define i1 @max6(i32 %x, i32 %y) {
- ; CHECK-LABEL: @max6(
- %c = icmp sge i32 %x, %y
- %m = select i1 %c, i32 %x, i32 %y
- %r = icmp sle i32 %x, %m
- ret i1 %r
- ; CHECK: ret i1 true
- }
- define i1 @max7(i32 %x, i32 %y) {
- ; CHECK-LABEL: @max7(
- %c = icmp ugt i32 %x, %y
- %m = select i1 %c, i32 %x, i32 %y
- %r = icmp ugt i32 %x, %m
- ret i1 %r
- ; CHECK: ret i1 false
- }
- define i1 @max8(i32 %x, i32 %y) {
- ; CHECK-LABEL: @max8(
- %c = icmp uge i32 %x, %y
- %m = select i1 %c, i32 %x, i32 %y
- %r = icmp ule i32 %x, %m
- ret i1 %r
- ; CHECK: ret i1 true
- }
- define i1 @min1(i32 %x, i32 %y) {
- ; CHECK-LABEL: @min1(
- %c = icmp sgt i32 %x, %y
- %m = select i1 %c, i32 %y, i32 %x
- %r = icmp sgt i32 %m, %x
- ret i1 %r
- ; CHECK: ret i1 false
- }
- define i1 @min2(i32 %x, i32 %y) {
- ; CHECK-LABEL: @min2(
- %c = icmp sge i32 %x, %y
- %m = select i1 %c, i32 %y, i32 %x
- %r = icmp sle i32 %m, %x
- ret i1 %r
- ; CHECK: ret i1 true
- }
- define i1 @min3(i32 %x, i32 %y) {
- ; CHECK-LABEL: @min3(
- %c = icmp ugt i32 %x, %y
- %m = select i1 %c, i32 %y, i32 %x
- %r = icmp ugt i32 %m, %x
- ret i1 %r
- ; CHECK: ret i1 false
- }
- define i1 @min4(i32 %x, i32 %y) {
- ; CHECK-LABEL: @min4(
- %c = icmp uge i32 %x, %y
- %m = select i1 %c, i32 %y, i32 %x
- %r = icmp ule i32 %m, %x
- ret i1 %r
- ; CHECK: ret i1 true
- }
- define i1 @min5(i32 %x, i32 %y) {
- ; CHECK-LABEL: @min5(
- %c = icmp sgt i32 %x, %y
- %m = select i1 %c, i32 %y, i32 %x
- %r = icmp slt i32 %x, %m
- ret i1 %r
- ; CHECK: ret i1 false
- }
- define i1 @min6(i32 %x, i32 %y) {
- ; CHECK-LABEL: @min6(
- %c = icmp sge i32 %x, %y
- %m = select i1 %c, i32 %y, i32 %x
- %r = icmp sge i32 %x, %m
- ret i1 %r
- ; CHECK: ret i1 true
- }
- define i1 @min7(i32 %x, i32 %y) {
- ; CHECK-LABEL: @min7(
- %c = icmp ugt i32 %x, %y
- %m = select i1 %c, i32 %y, i32 %x
- %r = icmp ult i32 %x, %m
- ret i1 %r
- ; CHECK: ret i1 false
- }
- define i1 @min8(i32 %x, i32 %y) {
- ; CHECK-LABEL: @min8(
- %c = icmp uge i32 %x, %y
- %m = select i1 %c, i32 %y, i32 %x
- %r = icmp uge i32 %x, %m
- ret i1 %r
- ; CHECK: ret i1 true
- }
- define i1 @maxmin1(i32 %x, i32 %y, i32 %z) {
- ; CHECK-LABEL: @maxmin1(
- %c1 = icmp sge i32 %x, %y
- %max = select i1 %c1, i32 %x, i32 %y
- %c2 = icmp sge i32 %x, %z
- %min = select i1 %c2, i32 %z, i32 %x
- %c = icmp sge i32 %max, %min
- ret i1 %c
- ; CHECK: ret i1 true
- }
- define i1 @maxmin2(i32 %x, i32 %y, i32 %z) {
- ; CHECK-LABEL: @maxmin2(
- %c1 = icmp sge i32 %x, %y
- %max = select i1 %c1, i32 %x, i32 %y
- %c2 = icmp sge i32 %x, %z
- %min = select i1 %c2, i32 %z, i32 %x
- %c = icmp sgt i32 %min, %max
- ret i1 %c
- ; CHECK: ret i1 false
- }
- define i1 @maxmin3(i32 %x, i32 %y, i32 %z) {
- ; CHECK-LABEL: @maxmin3(
- %c1 = icmp sge i32 %x, %y
- %max = select i1 %c1, i32 %x, i32 %y
- %c2 = icmp sge i32 %x, %z
- %min = select i1 %c2, i32 %z, i32 %x
- %c = icmp sle i32 %min, %max
- ret i1 %c
- ; CHECK: ret i1 true
- }
- define i1 @maxmin4(i32 %x, i32 %y, i32 %z) {
- ; CHECK-LABEL: @maxmin4(
- %c1 = icmp sge i32 %x, %y
- %max = select i1 %c1, i32 %x, i32 %y
- %c2 = icmp sge i32 %x, %z
- %min = select i1 %c2, i32 %z, i32 %x
- %c = icmp slt i32 %max, %min
- ret i1 %c
- ; CHECK: ret i1 false
- }
- define i1 @maxmin5(i32 %x, i32 %y, i32 %z) {
- ; CHECK-LABEL: @maxmin5(
- %c1 = icmp uge i32 %x, %y
- %max = select i1 %c1, i32 %x, i32 %y
- %c2 = icmp uge i32 %x, %z
- %min = select i1 %c2, i32 %z, i32 %x
- %c = icmp uge i32 %max, %min
- ret i1 %c
- ; CHECK: ret i1 true
- }
- define i1 @maxmin6(i32 %x, i32 %y, i32 %z) {
- ; CHECK-LABEL: @maxmin6(
- %c1 = icmp uge i32 %x, %y
- %max = select i1 %c1, i32 %x, i32 %y
- %c2 = icmp uge i32 %x, %z
- %min = select i1 %c2, i32 %z, i32 %x
- %c = icmp ugt i32 %min, %max
- ret i1 %c
- ; CHECK: ret i1 false
- }
- define i1 @maxmin7(i32 %x, i32 %y, i32 %z) {
- ; CHECK-LABEL: @maxmin7(
- %c1 = icmp uge i32 %x, %y
- %max = select i1 %c1, i32 %x, i32 %y
- %c2 = icmp uge i32 %x, %z
- %min = select i1 %c2, i32 %z, i32 %x
- %c = icmp ule i32 %min, %max
- ret i1 %c
- ; CHECK: ret i1 true
- }
- define i1 @maxmin8(i32 %x, i32 %y, i32 %z) {
- ; CHECK-LABEL: @maxmin8(
- %c1 = icmp uge i32 %x, %y
- %max = select i1 %c1, i32 %x, i32 %y
- %c2 = icmp uge i32 %x, %z
- %min = select i1 %c2, i32 %z, i32 %x
- %c = icmp ult i32 %max, %min
- ret i1 %c
- ; CHECK: ret i1 false
- }
- define i1 @eqcmp1(i32 %x, i32 %y) {
- ; CHECK-LABEL: @eqcmp1(
- %c = icmp sge i32 %x, %y
- %max = select i1 %c, i32 %x, i32 %y
- %r = icmp eq i32 %max, %x
- ret i1 %r
- ; CHECK: ret i1 %c
- }
- define i1 @eqcmp2(i32 %x, i32 %y) {
- ; CHECK-LABEL: @eqcmp2(
- %c = icmp sge i32 %x, %y
- %max = select i1 %c, i32 %x, i32 %y
- %r = icmp eq i32 %x, %max
- ret i1 %r
- ; CHECK: ret i1 %c
- }
- define i1 @eqcmp3(i32 %x, i32 %y) {
- ; CHECK-LABEL: @eqcmp3(
- %c = icmp uge i32 %x, %y
- %max = select i1 %c, i32 %x, i32 %y
- %r = icmp eq i32 %max, %x
- ret i1 %r
- ; CHECK: ret i1 %c
- }
- define i1 @eqcmp4(i32 %x, i32 %y) {
- ; CHECK-LABEL: @eqcmp4(
- %c = icmp uge i32 %x, %y
- %max = select i1 %c, i32 %x, i32 %y
- %r = icmp eq i32 %x, %max
- ret i1 %r
- ; CHECK: ret i1 %c
- }
|