brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · 2117a55 Raw
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