1*fcd51deeSJorge Botto; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 2*fcd51deeSJorge Botto; RUN: opt -S -passes=instcombine < %s 2>&1 | FileCheck %s 3*fcd51deeSJorge Botto 4*fcd51deeSJorge Botto 5*fcd51deeSJorge Bottodefine i8 @umax_of_add_nuw(i8 %a, i8 %b, i8 %c) { 6*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @umax_of_add_nuw( 7*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 8*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umax.i8(i8 [[B]], i8 [[C]]) 9*fcd51deeSJorge Botto; CHECK-NEXT: [[MAX:%.*]] = add nuw i8 [[TMP1]], [[A]] 10*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MAX]] 11*fcd51deeSJorge Botto; 12*fcd51deeSJorge Botto %add1 = add nuw i8 %b, %a 13*fcd51deeSJorge Botto %add2 = add nuw i8 %c, %a 14*fcd51deeSJorge Botto %max = call i8 @llvm.umax.i8(i8 %add1, i8 %add2) 15*fcd51deeSJorge Botto ret i8 %max 16*fcd51deeSJorge Botto} 17*fcd51deeSJorge Botto 18*fcd51deeSJorge Bottodefine i8 @umax_of_add_nuw_comm(i8 %a, i8 %b, i8 %c) { 19*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @umax_of_add_nuw_comm( 20*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 21*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umax.i8(i8 [[B]], i8 [[C]]) 22*fcd51deeSJorge Botto; CHECK-NEXT: [[MAX:%.*]] = add nuw i8 [[TMP1]], [[A]] 23*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MAX]] 24*fcd51deeSJorge Botto; 25*fcd51deeSJorge Botto %add1 = add nuw i8 %a, %b 26*fcd51deeSJorge Botto %add2 = add nuw i8 %a, %c 27*fcd51deeSJorge Botto %max = call i8 @llvm.umax.i8(i8 %add1, i8 %add2) 28*fcd51deeSJorge Botto ret i8 %max 29*fcd51deeSJorge Botto} 30*fcd51deeSJorge Botto 31*fcd51deeSJorge Bottodefine i8 @umax_of_add_nuw_nsw_lhs(i8 %a, i8 %b, i8 %c) { 32*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @umax_of_add_nuw_nsw_lhs( 33*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 34*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umax.i8(i8 [[B]], i8 [[C]]) 35*fcd51deeSJorge Botto; CHECK-NEXT: [[MAX:%.*]] = add nuw i8 [[TMP1]], [[A]] 36*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MAX]] 37*fcd51deeSJorge Botto; 38*fcd51deeSJorge Botto %add1 = add nuw nsw i8 %b, %a 39*fcd51deeSJorge Botto %add2 = add nuw i8 %c, %a 40*fcd51deeSJorge Botto %max = call i8 @llvm.umax.i8(i8 %add1, i8 %add2) 41*fcd51deeSJorge Botto ret i8 %max 42*fcd51deeSJorge Botto} 43*fcd51deeSJorge Botto 44*fcd51deeSJorge Bottodefine i8 @umax_of_add_nuw_nsw_lhs_comm(i8 %a, i8 %b, i8 %c) { 45*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @umax_of_add_nuw_nsw_lhs_comm( 46*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 47*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umax.i8(i8 [[B]], i8 [[C]]) 48*fcd51deeSJorge Botto; CHECK-NEXT: [[MAX:%.*]] = add nuw i8 [[TMP1]], [[A]] 49*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MAX]] 50*fcd51deeSJorge Botto; 51*fcd51deeSJorge Botto %add1 = add nuw nsw i8 %a, %b 52*fcd51deeSJorge Botto %add2 = add nuw i8 %a, %c 53*fcd51deeSJorge Botto %max = call i8 @llvm.umax.i8(i8 %add1, i8 %add2) 54*fcd51deeSJorge Botto ret i8 %max 55*fcd51deeSJorge Botto} 56*fcd51deeSJorge Botto 57*fcd51deeSJorge Bottodefine i8 @umax_of_add_nuw_nsw_rhs(i8 %a, i8 %b, i8 %c) { 58*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @umax_of_add_nuw_nsw_rhs( 59*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 60*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umax.i8(i8 [[B]], i8 [[C]]) 61*fcd51deeSJorge Botto; CHECK-NEXT: [[MAX:%.*]] = add nuw i8 [[TMP1]], [[A]] 62*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MAX]] 63*fcd51deeSJorge Botto; 64*fcd51deeSJorge Botto %add1 = add nuw i8 %b, %a 65*fcd51deeSJorge Botto %add2 = add nuw nsw i8 %c, %a 66*fcd51deeSJorge Botto %max = call i8 @llvm.umax.i8(i8 %add1, i8 %add2) 67*fcd51deeSJorge Botto ret i8 %max 68*fcd51deeSJorge Botto} 69*fcd51deeSJorge Botto 70*fcd51deeSJorge Bottodefine i8 @umax_of_add_nuw_nsw_rhs_comm(i8 %a, i8 %b, i8 %c) { 71*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @umax_of_add_nuw_nsw_rhs_comm( 72*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 73*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umax.i8(i8 [[B]], i8 [[C]]) 74*fcd51deeSJorge Botto; CHECK-NEXT: [[MAX:%.*]] = add nuw i8 [[TMP1]], [[A]] 75*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MAX]] 76*fcd51deeSJorge Botto; 77*fcd51deeSJorge Botto %add1 = add nuw i8 %a, %b 78*fcd51deeSJorge Botto %add2 = add nuw nsw i8 %a, %c 79*fcd51deeSJorge Botto %max = call i8 @llvm.umax.i8(i8 %add1, i8 %add2) 80*fcd51deeSJorge Botto ret i8 %max 81*fcd51deeSJorge Botto} 82*fcd51deeSJorge Botto 83*fcd51deeSJorge Bottodefine i8 @umax_of_add_nuw_nsw(i8 %a, i8 %b, i8 %c) { 84*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @umax_of_add_nuw_nsw( 85*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 86*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umax.i8(i8 [[B]], i8 [[C]]) 87*fcd51deeSJorge Botto; CHECK-NEXT: [[MAX:%.*]] = add nuw nsw i8 [[TMP1]], [[A]] 88*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MAX]] 89*fcd51deeSJorge Botto; 90*fcd51deeSJorge Botto %add1 = add nuw nsw i8 %b, %a 91*fcd51deeSJorge Botto %add2 = add nuw nsw i8 %c, %a 92*fcd51deeSJorge Botto %max = call i8 @llvm.umax.i8(i8 %add1, i8 %add2) 93*fcd51deeSJorge Botto ret i8 %max 94*fcd51deeSJorge Botto} 95*fcd51deeSJorge Botto 96*fcd51deeSJorge Bottodefine i8 @umax_of_add_nuw_nsw_comm(i8 %a, i8 %b, i8 %c) { 97*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @umax_of_add_nuw_nsw_comm( 98*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 99*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umax.i8(i8 [[B]], i8 [[C]]) 100*fcd51deeSJorge Botto; CHECK-NEXT: [[MAX:%.*]] = add nuw nsw i8 [[TMP1]], [[A]] 101*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MAX]] 102*fcd51deeSJorge Botto; 103*fcd51deeSJorge Botto %add1 = add nuw nsw i8 %a, %b 104*fcd51deeSJorge Botto %add2 = add nuw nsw i8 %a, %c 105*fcd51deeSJorge Botto %max = call i8 @llvm.umax.i8(i8 %add1, i8 %add2) 106*fcd51deeSJorge Botto ret i8 %max 107*fcd51deeSJorge Botto} 108*fcd51deeSJorge Botto 109*fcd51deeSJorge Botto; negative test 110*fcd51deeSJorge Bottodefine i8 @umax_of_add_nsw(i8 %a, i8 %b, i8 %c) { 111*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @umax_of_add_nsw( 112*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 113*fcd51deeSJorge Botto; CHECK-NEXT: [[ADD1:%.*]] = add nsw i8 [[B]], [[A]] 114*fcd51deeSJorge Botto; CHECK-NEXT: [[ADD2:%.*]] = add nsw i8 [[C]], [[A]] 115*fcd51deeSJorge Botto; CHECK-NEXT: [[MAX:%.*]] = call i8 @llvm.umax.i8(i8 [[ADD1]], i8 [[ADD2]]) 116*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MAX]] 117*fcd51deeSJorge Botto; 118*fcd51deeSJorge Botto %add1 = add nsw i8 %b, %a 119*fcd51deeSJorge Botto %add2 = add nsw i8 %c, %a 120*fcd51deeSJorge Botto %max = call i8 @llvm.umax.i8(i8 %add1, i8 %add2) 121*fcd51deeSJorge Botto ret i8 %max 122*fcd51deeSJorge Botto} 123*fcd51deeSJorge Botto 124*fcd51deeSJorge Botto; negative test 125*fcd51deeSJorge Bottodefine i8 @umax_of_add(i8 %a, i8 %b, i8 %c) { 126*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @umax_of_add( 127*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 128*fcd51deeSJorge Botto; CHECK-NEXT: [[ADD1:%.*]] = add i8 [[B]], [[A]] 129*fcd51deeSJorge Botto; CHECK-NEXT: [[ADD2:%.*]] = add i8 [[C]], [[A]] 130*fcd51deeSJorge Botto; CHECK-NEXT: [[MAX:%.*]] = call i8 @llvm.umax.i8(i8 [[ADD1]], i8 [[ADD2]]) 131*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MAX]] 132*fcd51deeSJorge Botto; 133*fcd51deeSJorge Botto %add1 = add i8 %b, %a 134*fcd51deeSJorge Botto %add2 = add i8 %c, %a 135*fcd51deeSJorge Botto %max = call i8 @llvm.umax.i8(i8 %add1, i8 %add2) 136*fcd51deeSJorge Botto ret i8 %max 137*fcd51deeSJorge Botto} 138*fcd51deeSJorge Botto 139*fcd51deeSJorge Bottodefine i8 @umin_of_add_nuw(i8 %a, i8 %b, i8 %c) { 140*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @umin_of_add_nuw( 141*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 142*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umin.i8(i8 [[B]], i8 [[C]]) 143*fcd51deeSJorge Botto; CHECK-NEXT: [[MIN:%.*]] = add nuw i8 [[TMP1]], [[A]] 144*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MIN]] 145*fcd51deeSJorge Botto; 146*fcd51deeSJorge Botto %add1 = add nuw i8 %b, %a 147*fcd51deeSJorge Botto %add2 = add nuw i8 %c, %a 148*fcd51deeSJorge Botto %min = call i8 @llvm.umin.i8(i8 %add1, i8 %add2) 149*fcd51deeSJorge Botto ret i8 %min 150*fcd51deeSJorge Botto} 151*fcd51deeSJorge Botto 152*fcd51deeSJorge Bottodefine i8 @umin_of_add_nuw_comm(i8 %a, i8 %b, i8 %c) { 153*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @umin_of_add_nuw_comm( 154*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 155*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umin.i8(i8 [[B]], i8 [[C]]) 156*fcd51deeSJorge Botto; CHECK-NEXT: [[MIN:%.*]] = add nuw i8 [[TMP1]], [[A]] 157*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MIN]] 158*fcd51deeSJorge Botto; 159*fcd51deeSJorge Botto %add1 = add nuw i8 %a, %b 160*fcd51deeSJorge Botto %add2 = add nuw i8 %a, %c 161*fcd51deeSJorge Botto %min = call i8 @llvm.umin.i8(i8 %add1, i8 %add2) 162*fcd51deeSJorge Botto ret i8 %min 163*fcd51deeSJorge Botto} 164*fcd51deeSJorge Botto 165*fcd51deeSJorge Bottodefine i8 @umin_of_add_nuw_nsw_lhs(i8 %a, i8 %b, i8 %c) { 166*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @umin_of_add_nuw_nsw_lhs( 167*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 168*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umin.i8(i8 [[B]], i8 [[C]]) 169*fcd51deeSJorge Botto; CHECK-NEXT: [[MIN:%.*]] = add nuw i8 [[TMP1]], [[A]] 170*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MIN]] 171*fcd51deeSJorge Botto; 172*fcd51deeSJorge Botto %add1 = add nuw nsw i8 %b, %a 173*fcd51deeSJorge Botto %add2 = add nuw i8 %c, %a 174*fcd51deeSJorge Botto %min = call i8 @llvm.umin.i8(i8 %add1, i8 %add2) 175*fcd51deeSJorge Botto ret i8 %min 176*fcd51deeSJorge Botto} 177*fcd51deeSJorge Botto 178*fcd51deeSJorge Bottodefine i8 @umin_of_add_nuw_nsw_lhs_comm(i8 %a, i8 %b, i8 %c) { 179*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @umin_of_add_nuw_nsw_lhs_comm( 180*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 181*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umin.i8(i8 [[B]], i8 [[C]]) 182*fcd51deeSJorge Botto; CHECK-NEXT: [[MIN:%.*]] = add nuw i8 [[TMP1]], [[A]] 183*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MIN]] 184*fcd51deeSJorge Botto; 185*fcd51deeSJorge Botto %add1 = add nuw nsw i8 %a, %b 186*fcd51deeSJorge Botto %add2 = add nuw i8 %a, %c 187*fcd51deeSJorge Botto %min = call i8 @llvm.umin.i8(i8 %add1, i8 %add2) 188*fcd51deeSJorge Botto ret i8 %min 189*fcd51deeSJorge Botto} 190*fcd51deeSJorge Botto 191*fcd51deeSJorge Bottodefine i8 @umin_of_add_nuw_nsw_rhs(i8 %a, i8 %b, i8 %c) { 192*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @umin_of_add_nuw_nsw_rhs( 193*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 194*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umin.i8(i8 [[B]], i8 [[C]]) 195*fcd51deeSJorge Botto; CHECK-NEXT: [[MIN:%.*]] = add nuw i8 [[TMP1]], [[A]] 196*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MIN]] 197*fcd51deeSJorge Botto; 198*fcd51deeSJorge Botto %add1 = add nuw i8 %b, %a 199*fcd51deeSJorge Botto %add2 = add nuw nsw i8 %c, %a 200*fcd51deeSJorge Botto %min = call i8 @llvm.umin.i8(i8 %add1, i8 %add2) 201*fcd51deeSJorge Botto ret i8 %min 202*fcd51deeSJorge Botto} 203*fcd51deeSJorge Botto 204*fcd51deeSJorge Bottodefine i8 @umin_of_add_nuw_nsw_rhs_comm(i8 %a, i8 %b, i8 %c) { 205*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @umin_of_add_nuw_nsw_rhs_comm( 206*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 207*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umin.i8(i8 [[B]], i8 [[C]]) 208*fcd51deeSJorge Botto; CHECK-NEXT: [[MIN:%.*]] = add nuw i8 [[TMP1]], [[A]] 209*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MIN]] 210*fcd51deeSJorge Botto; 211*fcd51deeSJorge Botto %add1 = add nuw i8 %a, %b 212*fcd51deeSJorge Botto %add2 = add nuw nsw i8 %a, %c 213*fcd51deeSJorge Botto %min = call i8 @llvm.umin.i8(i8 %add1, i8 %add2) 214*fcd51deeSJorge Botto ret i8 %min 215*fcd51deeSJorge Botto} 216*fcd51deeSJorge Botto 217*fcd51deeSJorge Bottodefine i8 @umin_of_add_nuw_nsw(i8 %a, i8 %b, i8 %c) { 218*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @umin_of_add_nuw_nsw( 219*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 220*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umin.i8(i8 [[B]], i8 [[C]]) 221*fcd51deeSJorge Botto; CHECK-NEXT: [[MIN:%.*]] = add nuw nsw i8 [[TMP1]], [[A]] 222*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MIN]] 223*fcd51deeSJorge Botto; 224*fcd51deeSJorge Botto %add1 = add nuw nsw i8 %b, %a 225*fcd51deeSJorge Botto %add2 = add nuw nsw i8 %c, %a 226*fcd51deeSJorge Botto %min = call i8 @llvm.umin.i8(i8 %add1, i8 %add2) 227*fcd51deeSJorge Botto ret i8 %min 228*fcd51deeSJorge Botto} 229*fcd51deeSJorge Botto 230*fcd51deeSJorge Bottodefine i8 @umin_of_add_nuw_nsw_comm(i8 %a, i8 %b, i8 %c) { 231*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @umin_of_add_nuw_nsw_comm( 232*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 233*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umin.i8(i8 [[B]], i8 [[C]]) 234*fcd51deeSJorge Botto; CHECK-NEXT: [[MIN:%.*]] = add nuw nsw i8 [[TMP1]], [[A]] 235*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MIN]] 236*fcd51deeSJorge Botto; 237*fcd51deeSJorge Botto %add1 = add nuw nsw i8 %a, %b 238*fcd51deeSJorge Botto %add2 = add nuw nsw i8 %a, %c 239*fcd51deeSJorge Botto %min = call i8 @llvm.umin.i8(i8 %add1, i8 %add2) 240*fcd51deeSJorge Botto ret i8 %min 241*fcd51deeSJorge Botto} 242*fcd51deeSJorge Botto 243*fcd51deeSJorge Botto; negative test 244*fcd51deeSJorge Bottodefine i8 @umin_of_add_nsw(i8 %a, i8 %b, i8 %c) { 245*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @umin_of_add_nsw( 246*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 247*fcd51deeSJorge Botto; CHECK-NEXT: [[ADD1:%.*]] = add nsw i8 [[B]], [[A]] 248*fcd51deeSJorge Botto; CHECK-NEXT: [[ADD2:%.*]] = add nsw i8 [[C]], [[A]] 249*fcd51deeSJorge Botto; CHECK-NEXT: [[MIN:%.*]] = call i8 @llvm.umin.i8(i8 [[ADD1]], i8 [[ADD2]]) 250*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MIN]] 251*fcd51deeSJorge Botto; 252*fcd51deeSJorge Botto %add1 = add nsw i8 %b, %a 253*fcd51deeSJorge Botto %add2 = add nsw i8 %c, %a 254*fcd51deeSJorge Botto %min = call i8 @llvm.umin.i8(i8 %add1, i8 %add2) 255*fcd51deeSJorge Botto ret i8 %min 256*fcd51deeSJorge Botto} 257*fcd51deeSJorge Botto 258*fcd51deeSJorge Botto; negative test 259*fcd51deeSJorge Bottodefine i8 @umin_of_add(i8 %a, i8 %b, i8 %c) { 260*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @umin_of_add( 261*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 262*fcd51deeSJorge Botto; CHECK-NEXT: [[ADD1:%.*]] = add i8 [[B]], [[A]] 263*fcd51deeSJorge Botto; CHECK-NEXT: [[ADD2:%.*]] = add i8 [[C]], [[A]] 264*fcd51deeSJorge Botto; CHECK-NEXT: [[MIN:%.*]] = call i8 @llvm.umin.i8(i8 [[ADD1]], i8 [[ADD2]]) 265*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MIN]] 266*fcd51deeSJorge Botto; 267*fcd51deeSJorge Botto %add1 = add i8 %b, %a 268*fcd51deeSJorge Botto %add2 = add i8 %c, %a 269*fcd51deeSJorge Botto %min = call i8 @llvm.umin.i8(i8 %add1, i8 %add2) 270*fcd51deeSJorge Botto ret i8 %min 271*fcd51deeSJorge Botto} 272*fcd51deeSJorge Botto 273*fcd51deeSJorge Botto; negative test 274*fcd51deeSJorge Bottodefine i8 @smax_of_add_nuw(i8 %a, i8 %b, i8 %c) { 275*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @smax_of_add_nuw( 276*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 277*fcd51deeSJorge Botto; CHECK-NEXT: [[ADD1:%.*]] = add nuw i8 [[B]], [[A]] 278*fcd51deeSJorge Botto; CHECK-NEXT: [[ADD2:%.*]] = add nuw i8 [[C]], [[A]] 279*fcd51deeSJorge Botto; CHECK-NEXT: [[MAX:%.*]] = call i8 @llvm.smax.i8(i8 [[ADD1]], i8 [[ADD2]]) 280*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MAX]] 281*fcd51deeSJorge Botto; 282*fcd51deeSJorge Botto %add1 = add nuw i8 %b, %a 283*fcd51deeSJorge Botto %add2 = add nuw i8 %c, %a 284*fcd51deeSJorge Botto %max = call i8 @llvm.smax.i8(i8 %add1, i8 %add2) 285*fcd51deeSJorge Botto ret i8 %max 286*fcd51deeSJorge Botto} 287*fcd51deeSJorge Botto 288*fcd51deeSJorge Bottodefine i8 @smax_of_add_nsw(i8 %a, i8 %b, i8 %c) { 289*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @smax_of_add_nsw( 290*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 291*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smax.i8(i8 [[B]], i8 [[C]]) 292*fcd51deeSJorge Botto; CHECK-NEXT: [[MAX:%.*]] = add nsw i8 [[TMP1]], [[A]] 293*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MAX]] 294*fcd51deeSJorge Botto; 295*fcd51deeSJorge Botto %add1 = add nsw i8 %b, %a 296*fcd51deeSJorge Botto %add2 = add nsw i8 %c, %a 297*fcd51deeSJorge Botto %max = call i8 @llvm.smax.i8(i8 %add1, i8 %add2) 298*fcd51deeSJorge Botto ret i8 %max 299*fcd51deeSJorge Botto} 300*fcd51deeSJorge Botto 301*fcd51deeSJorge Bottodefine i8 @smax_of_add_nsw_comm(i8 %a, i8 %b, i8 %c) { 302*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @smax_of_add_nsw_comm( 303*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 304*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smax.i8(i8 [[B]], i8 [[C]]) 305*fcd51deeSJorge Botto; CHECK-NEXT: [[MAX:%.*]] = add nsw i8 [[TMP1]], [[A]] 306*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MAX]] 307*fcd51deeSJorge Botto; 308*fcd51deeSJorge Botto %add1 = add nsw i8 %a, %b 309*fcd51deeSJorge Botto %add2 = add nsw i8 %a, %c 310*fcd51deeSJorge Botto %max = call i8 @llvm.smax.i8(i8 %add1, i8 %add2) 311*fcd51deeSJorge Botto ret i8 %max 312*fcd51deeSJorge Botto} 313*fcd51deeSJorge Botto 314*fcd51deeSJorge Bottodefine i8 @smax_of_add_nsw_nuw_lhs(i8 %a, i8 %b, i8 %c) { 315*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @smax_of_add_nsw_nuw_lhs( 316*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 317*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smax.i8(i8 [[B]], i8 [[C]]) 318*fcd51deeSJorge Botto; CHECK-NEXT: [[MAX:%.*]] = add nsw i8 [[TMP1]], [[A]] 319*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MAX]] 320*fcd51deeSJorge Botto; 321*fcd51deeSJorge Botto %add1 = add nsw nuw i8 %b, %a 322*fcd51deeSJorge Botto %add2 = add nsw i8 %c, %a 323*fcd51deeSJorge Botto %max = call i8 @llvm.smax.i8(i8 %add1, i8 %add2) 324*fcd51deeSJorge Botto ret i8 %max 325*fcd51deeSJorge Botto} 326*fcd51deeSJorge Botto 327*fcd51deeSJorge Bottodefine i8 @smax_of_add_nsw_nuw_lhs_comm(i8 %a, i8 %b, i8 %c) { 328*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @smax_of_add_nsw_nuw_lhs_comm( 329*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 330*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smax.i8(i8 [[B]], i8 [[C]]) 331*fcd51deeSJorge Botto; CHECK-NEXT: [[MAX:%.*]] = add nsw i8 [[TMP1]], [[A]] 332*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MAX]] 333*fcd51deeSJorge Botto; 334*fcd51deeSJorge Botto %add1 = add nsw nuw i8 %a, %b 335*fcd51deeSJorge Botto %add2 = add nsw i8 %a, %c 336*fcd51deeSJorge Botto %max = call i8 @llvm.smax.i8(i8 %add1, i8 %add2) 337*fcd51deeSJorge Botto ret i8 %max 338*fcd51deeSJorge Botto} 339*fcd51deeSJorge Botto 340*fcd51deeSJorge Bottodefine i8 @smax_of_add_nsw_nuw_rhs(i8 %a, i8 %b, i8 %c) { 341*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @smax_of_add_nsw_nuw_rhs( 342*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 343*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smax.i8(i8 [[B]], i8 [[C]]) 344*fcd51deeSJorge Botto; CHECK-NEXT: [[MAX:%.*]] = add nsw i8 [[TMP1]], [[A]] 345*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MAX]] 346*fcd51deeSJorge Botto; 347*fcd51deeSJorge Botto %add1 = add nsw i8 %b, %a 348*fcd51deeSJorge Botto %add2 = add nsw nuw i8 %c, %a 349*fcd51deeSJorge Botto %max = call i8 @llvm.smax.i8(i8 %add1, i8 %add2) 350*fcd51deeSJorge Botto ret i8 %max 351*fcd51deeSJorge Botto} 352*fcd51deeSJorge Botto 353*fcd51deeSJorge Bottodefine i8 @smax_of_add_nsw_nuw_rhs_comm(i8 %a, i8 %b, i8 %c) { 354*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @smax_of_add_nsw_nuw_rhs_comm( 355*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 356*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smax.i8(i8 [[B]], i8 [[C]]) 357*fcd51deeSJorge Botto; CHECK-NEXT: [[MAX:%.*]] = add nsw i8 [[TMP1]], [[A]] 358*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MAX]] 359*fcd51deeSJorge Botto; 360*fcd51deeSJorge Botto %add1 = add nsw i8 %a, %b 361*fcd51deeSJorge Botto %add2 = add nsw nuw i8 %a, %c 362*fcd51deeSJorge Botto %max = call i8 @llvm.smax.i8(i8 %add1, i8 %add2) 363*fcd51deeSJorge Botto ret i8 %max 364*fcd51deeSJorge Botto} 365*fcd51deeSJorge Botto 366*fcd51deeSJorge Bottodefine i8 @smax_of_add_nsw_nuw(i8 %a, i8 %b, i8 %c) { 367*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @smax_of_add_nsw_nuw( 368*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 369*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smax.i8(i8 [[B]], i8 [[C]]) 370*fcd51deeSJorge Botto; CHECK-NEXT: [[MAX:%.*]] = add nuw nsw i8 [[TMP1]], [[A]] 371*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MAX]] 372*fcd51deeSJorge Botto; 373*fcd51deeSJorge Botto %add1 = add nsw nuw i8 %b, %a 374*fcd51deeSJorge Botto %add2 = add nsw nuw i8 %c, %a 375*fcd51deeSJorge Botto %max = call i8 @llvm.smax.i8(i8 %add1, i8 %add2) 376*fcd51deeSJorge Botto ret i8 %max 377*fcd51deeSJorge Botto} 378*fcd51deeSJorge Botto 379*fcd51deeSJorge Bottodefine i8 @smax_of_add_nsw_nuw_comm(i8 %a, i8 %b, i8 %c) { 380*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @smax_of_add_nsw_nuw_comm( 381*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 382*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smax.i8(i8 [[B]], i8 [[C]]) 383*fcd51deeSJorge Botto; CHECK-NEXT: [[MAX:%.*]] = add nuw nsw i8 [[TMP1]], [[A]] 384*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MAX]] 385*fcd51deeSJorge Botto; 386*fcd51deeSJorge Botto %add1 = add nsw nuw i8 %a, %b 387*fcd51deeSJorge Botto %add2 = add nsw nuw i8 %a, %c 388*fcd51deeSJorge Botto %max = call i8 @llvm.smax.i8(i8 %add1, i8 %add2) 389*fcd51deeSJorge Botto ret i8 %max 390*fcd51deeSJorge Botto} 391*fcd51deeSJorge Botto 392*fcd51deeSJorge Botto; negative test 393*fcd51deeSJorge Bottodefine i8 @smax_of_add(i8 %a, i8 %b, i8 %c) { 394*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @smax_of_add( 395*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 396*fcd51deeSJorge Botto; CHECK-NEXT: [[ADD1:%.*]] = add i8 [[B]], [[A]] 397*fcd51deeSJorge Botto; CHECK-NEXT: [[ADD2:%.*]] = add i8 [[C]], [[A]] 398*fcd51deeSJorge Botto; CHECK-NEXT: [[MAX:%.*]] = call i8 @llvm.smax.i8(i8 [[ADD1]], i8 [[ADD2]]) 399*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MAX]] 400*fcd51deeSJorge Botto; 401*fcd51deeSJorge Botto %add1 = add i8 %b, %a 402*fcd51deeSJorge Botto %add2 = add i8 %c, %a 403*fcd51deeSJorge Botto %max = call i8 @llvm.smax.i8(i8 %add1, i8 %add2) 404*fcd51deeSJorge Botto ret i8 %max 405*fcd51deeSJorge Botto} 406*fcd51deeSJorge Botto 407*fcd51deeSJorge Botto; negative test 408*fcd51deeSJorge Bottodefine i8 @smin_of_add_nuw(i8 %a, i8 %b, i8 %c) { 409*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @smin_of_add_nuw( 410*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 411*fcd51deeSJorge Botto; CHECK-NEXT: [[ADD1:%.*]] = add nuw i8 [[B]], [[A]] 412*fcd51deeSJorge Botto; CHECK-NEXT: [[ADD2:%.*]] = add nuw i8 [[C]], [[A]] 413*fcd51deeSJorge Botto; CHECK-NEXT: [[MIN:%.*]] = call i8 @llvm.smin.i8(i8 [[ADD1]], i8 [[ADD2]]) 414*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MIN]] 415*fcd51deeSJorge Botto; 416*fcd51deeSJorge Botto %add1 = add nuw i8 %b, %a 417*fcd51deeSJorge Botto %add2 = add nuw i8 %c, %a 418*fcd51deeSJorge Botto %min = call i8 @llvm.smin.i8(i8 %add1, i8 %add2) 419*fcd51deeSJorge Botto ret i8 %min 420*fcd51deeSJorge Botto} 421*fcd51deeSJorge Botto 422*fcd51deeSJorge Bottodefine i8 @smin_of_add_nsw(i8 %a, i8 %b, i8 %c) { 423*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @smin_of_add_nsw( 424*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 425*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smin.i8(i8 [[B]], i8 [[C]]) 426*fcd51deeSJorge Botto; CHECK-NEXT: [[MIN:%.*]] = add nsw i8 [[TMP1]], [[A]] 427*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MIN]] 428*fcd51deeSJorge Botto; 429*fcd51deeSJorge Botto %add1 = add nsw i8 %b, %a 430*fcd51deeSJorge Botto %add2 = add nsw i8 %c, %a 431*fcd51deeSJorge Botto %min = call i8 @llvm.smin.i8(i8 %add1, i8 %add2) 432*fcd51deeSJorge Botto ret i8 %min 433*fcd51deeSJorge Botto} 434*fcd51deeSJorge Botto 435*fcd51deeSJorge Bottodefine i8 @smin_of_add_nsw_comm(i8 %a, i8 %b, i8 %c) { 436*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @smin_of_add_nsw_comm( 437*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 438*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smin.i8(i8 [[B]], i8 [[C]]) 439*fcd51deeSJorge Botto; CHECK-NEXT: [[MIN:%.*]] = add nsw i8 [[TMP1]], [[A]] 440*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MIN]] 441*fcd51deeSJorge Botto; 442*fcd51deeSJorge Botto %add1 = add nsw i8 %a, %b 443*fcd51deeSJorge Botto %add2 = add nsw i8 %a, %c 444*fcd51deeSJorge Botto %min = call i8 @llvm.smin.i8(i8 %add1, i8 %add2) 445*fcd51deeSJorge Botto ret i8 %min 446*fcd51deeSJorge Botto} 447*fcd51deeSJorge Botto 448*fcd51deeSJorge Bottodefine i8 @smin_of_add_nsw_nuw_lhs(i8 %a, i8 %b, i8 %c) { 449*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @smin_of_add_nsw_nuw_lhs( 450*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 451*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smin.i8(i8 [[B]], i8 [[C]]) 452*fcd51deeSJorge Botto; CHECK-NEXT: [[MIN:%.*]] = add nsw i8 [[TMP1]], [[A]] 453*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MIN]] 454*fcd51deeSJorge Botto; 455*fcd51deeSJorge Botto %add1 = add nsw nuw i8 %b, %a 456*fcd51deeSJorge Botto %add2 = add nsw i8 %c, %a 457*fcd51deeSJorge Botto %min = call i8 @llvm.smin.i8(i8 %add1, i8 %add2) 458*fcd51deeSJorge Botto ret i8 %min 459*fcd51deeSJorge Botto} 460*fcd51deeSJorge Botto 461*fcd51deeSJorge Bottodefine i8 @smin_of_add_nsw_nuw_lhs_comm(i8 %a, i8 %b, i8 %c) { 462*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @smin_of_add_nsw_nuw_lhs_comm( 463*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 464*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smin.i8(i8 [[B]], i8 [[C]]) 465*fcd51deeSJorge Botto; CHECK-NEXT: [[MIN:%.*]] = add nsw i8 [[TMP1]], [[A]] 466*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MIN]] 467*fcd51deeSJorge Botto; 468*fcd51deeSJorge Botto %add1 = add nsw nuw i8 %a, %b 469*fcd51deeSJorge Botto %add2 = add nsw i8 %a, %c 470*fcd51deeSJorge Botto %min = call i8 @llvm.smin.i8(i8 %add1, i8 %add2) 471*fcd51deeSJorge Botto ret i8 %min 472*fcd51deeSJorge Botto} 473*fcd51deeSJorge Botto 474*fcd51deeSJorge Bottodefine i8 @smin_of_add_nsw_nuw_rhs(i8 %a, i8 %b, i8 %c) { 475*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @smin_of_add_nsw_nuw_rhs( 476*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 477*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smin.i8(i8 [[B]], i8 [[C]]) 478*fcd51deeSJorge Botto; CHECK-NEXT: [[MIN:%.*]] = add nsw i8 [[TMP1]], [[A]] 479*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MIN]] 480*fcd51deeSJorge Botto; 481*fcd51deeSJorge Botto %add1 = add nsw i8 %b, %a 482*fcd51deeSJorge Botto %add2 = add nsw nuw i8 %c, %a 483*fcd51deeSJorge Botto %min = call i8 @llvm.smin.i8(i8 %add1, i8 %add2) 484*fcd51deeSJorge Botto ret i8 %min 485*fcd51deeSJorge Botto} 486*fcd51deeSJorge Botto 487*fcd51deeSJorge Bottodefine i8 @smin_of_add_nsw_nuw_rhs_comm(i8 %a, i8 %b, i8 %c) { 488*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @smin_of_add_nsw_nuw_rhs_comm( 489*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 490*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smin.i8(i8 [[B]], i8 [[C]]) 491*fcd51deeSJorge Botto; CHECK-NEXT: [[MIN:%.*]] = add nsw i8 [[TMP1]], [[A]] 492*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MIN]] 493*fcd51deeSJorge Botto; 494*fcd51deeSJorge Botto %add1 = add nsw i8 %a, %b 495*fcd51deeSJorge Botto %add2 = add nsw nuw i8 %a, %c 496*fcd51deeSJorge Botto %min = call i8 @llvm.smin.i8(i8 %add1, i8 %add2) 497*fcd51deeSJorge Botto ret i8 %min 498*fcd51deeSJorge Botto} 499*fcd51deeSJorge Botto 500*fcd51deeSJorge Bottodefine i8 @smin_of_add_nsw_nuw(i8 %a, i8 %b, i8 %c) { 501*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @smin_of_add_nsw_nuw( 502*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 503*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smin.i8(i8 [[B]], i8 [[C]]) 504*fcd51deeSJorge Botto; CHECK-NEXT: [[MIN:%.*]] = add nuw nsw i8 [[TMP1]], [[A]] 505*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MIN]] 506*fcd51deeSJorge Botto; 507*fcd51deeSJorge Botto %add1 = add nsw nuw i8 %b, %a 508*fcd51deeSJorge Botto %add2 = add nsw nuw i8 %c, %a 509*fcd51deeSJorge Botto %min = call i8 @llvm.smin.i8(i8 %add1, i8 %add2) 510*fcd51deeSJorge Botto ret i8 %min 511*fcd51deeSJorge Botto} 512*fcd51deeSJorge Botto 513*fcd51deeSJorge Bottodefine i8 @smin_of_add_nsw_nuw_comm(i8 %a, i8 %b, i8 %c) { 514*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @smin_of_add_nsw_nuw_comm( 515*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 516*fcd51deeSJorge Botto; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smin.i8(i8 [[B]], i8 [[C]]) 517*fcd51deeSJorge Botto; CHECK-NEXT: [[MIN:%.*]] = add nuw nsw i8 [[TMP1]], [[A]] 518*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MIN]] 519*fcd51deeSJorge Botto; 520*fcd51deeSJorge Botto %add1 = add nsw nuw i8 %a, %b 521*fcd51deeSJorge Botto %add2 = add nsw nuw i8 %a, %c 522*fcd51deeSJorge Botto %min = call i8 @llvm.smin.i8(i8 %add1, i8 %add2) 523*fcd51deeSJorge Botto ret i8 %min 524*fcd51deeSJorge Botto} 525*fcd51deeSJorge Botto 526*fcd51deeSJorge Botto; negative test 527*fcd51deeSJorge Bottodefine i8 @smin_of_add(i8 %a, i8 %b, i8 %c) { 528*fcd51deeSJorge Botto; CHECK-LABEL: define i8 @smin_of_add( 529*fcd51deeSJorge Botto; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) { 530*fcd51deeSJorge Botto; CHECK-NEXT: [[ADD1:%.*]] = add i8 [[B]], [[A]] 531*fcd51deeSJorge Botto; CHECK-NEXT: [[ADD2:%.*]] = add i8 [[C]], [[A]] 532*fcd51deeSJorge Botto; CHECK-NEXT: [[MIN:%.*]] = call i8 @llvm.smin.i8(i8 [[ADD1]], i8 [[ADD2]]) 533*fcd51deeSJorge Botto; CHECK-NEXT: ret i8 [[MIN]] 534*fcd51deeSJorge Botto; 535*fcd51deeSJorge Botto %add1 = add i8 %b, %a 536*fcd51deeSJorge Botto %add2 = add i8 %c, %a 537*fcd51deeSJorge Botto %min = call i8 @llvm.smin.i8(i8 %add1, i8 %add2) 538*fcd51deeSJorge Botto ret i8 %min 539*fcd51deeSJorge Botto} 540