86 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4declare i32 @llvm.smax.i32(i32 %a, i32 %b)5declare i32 @llvm.smin.i32(i32 %a, i32 %b)6declare i32 @llvm.umax.i32(i32 %a, i32 %b)7declare i32 @llvm.umin.i32(i32 %a, i32 %b)8 9define i32 @uadd_min_max(i32 %a, i32 %b) {10; CHECK-LABEL: @uadd_min_max(11; CHECK-NEXT: entry:12; CHECK-NEXT: [[RES:%.*]] = add i32 [[A:%.*]], [[B:%.*]]13; CHECK-NEXT: ret i32 [[RES]]14;15entry:16 %max = call i32 @llvm.umax.i32(i32 %a, i32 %b)17 %min = call i32 @llvm.umin.i32(i32 %a, i32 %b)18 %res = add i32 %min, %max19 ret i32 %res20}21 22define i32 @uadd_min_max_comm(i32 %a, i32 %b) {23; CHECK-LABEL: @uadd_min_max_comm(24; CHECK-NEXT: entry:25; CHECK-NEXT: [[RES:%.*]] = add i32 [[B:%.*]], [[A:%.*]]26; CHECK-NEXT: ret i32 [[RES]]27;28entry:29 %max = call i32 @llvm.umax.i32(i32 %b, i32 %a)30 %min = call i32 @llvm.umin.i32(i32 %a, i32 %b)31 %res = add i32 %min, %max32 ret i32 %res33}34 35define i32 @uadd_min_max_nuw_nsw(i32 %a, i32 %b) {36; CHECK-LABEL: @uadd_min_max_nuw_nsw(37; CHECK-NEXT: entry:38; CHECK-NEXT: [[RES:%.*]] = add nuw nsw i32 [[A:%.*]], [[B:%.*]]39; CHECK-NEXT: ret i32 [[RES]]40;41entry:42 %max = call i32 @llvm.umax.i32(i32 %a, i32 %b)43 %min = call i32 @llvm.umin.i32(i32 %a, i32 %b)44 %res = add nuw nsw i32 %min, %max45 ret i32 %res46}47 48define i32 @sadd_min_max(i32 %a, i32 %b) {49; CHECK-LABEL: @sadd_min_max(50; CHECK-NEXT: entry:51; CHECK-NEXT: [[RES:%.*]] = add i32 [[A:%.*]], [[B:%.*]]52; CHECK-NEXT: ret i32 [[RES]]53;54entry:55 %max = call i32 @llvm.smax.i32(i32 %a, i32 %b)56 %min = call i32 @llvm.smin.i32(i32 %a, i32 %b)57 %res = add i32 %min, %max58 ret i32 %res59}60 61define i32 @sadd_min_max_comm(i32 %a, i32 %b) {62; CHECK-LABEL: @sadd_min_max_comm(63; CHECK-NEXT: entry:64; CHECK-NEXT: [[RES:%.*]] = add i32 [[B:%.*]], [[A:%.*]]65; CHECK-NEXT: ret i32 [[RES]]66;67entry:68 %max = call i32 @llvm.smax.i32(i32 %b, i32 %a)69 %min = call i32 @llvm.smin.i32(i32 %a, i32 %b)70 %res = add i32 %min, %max71 ret i32 %res72}73 74define i32 @sadd_min_max_nuw_nsw(i32 %a, i32 %b) {75; CHECK-LABEL: @sadd_min_max_nuw_nsw(76; CHECK-NEXT: entry:77; CHECK-NEXT: [[RES:%.*]] = add nuw nsw i32 [[A:%.*]], [[B:%.*]]78; CHECK-NEXT: ret i32 [[RES]]79;80entry:81 %max = call i32 @llvm.smax.i32(i32 %a, i32 %b)82 %min = call i32 @llvm.smin.i32(i32 %a, i32 %b)83 %res = add nuw nsw i32 %min, %max84 ret i32 %res85}86