1; RUN: opt < %s -instsimplify -S | FileCheck %s 2 3define i1 @max1(i32 %x, i32 %y) { 4; CHECK: @max1 5 %c = icmp sgt i32 %x, %y 6 %m = select i1 %c, i32 %x, i32 %y 7 %r = icmp slt i32 %m, %x 8 ret i1 %r 9; CHECK: ret i1 false 10} 11 12define i1 @max2(i32 %x, i32 %y) { 13; CHECK: @max2 14 %c = icmp sge i32 %x, %y 15 %m = select i1 %c, i32 %x, i32 %y 16 %r = icmp sge i32 %m, %x 17 ret i1 %r 18; CHECK: ret i1 true 19} 20 21define i1 @max3(i32 %x, i32 %y) { 22; CHECK: @max3 23 %c = icmp ugt i32 %x, %y 24 %m = select i1 %c, i32 %x, i32 %y 25 %r = icmp ult i32 %m, %x 26 ret i1 %r 27; CHECK: ret i1 false 28} 29 30define i1 @max4(i32 %x, i32 %y) { 31; CHECK: @max4 32 %c = icmp uge i32 %x, %y 33 %m = select i1 %c, i32 %x, i32 %y 34 %r = icmp uge i32 %m, %x 35 ret i1 %r 36; CHECK: ret i1 true 37} 38 39define i1 @max5(i32 %x, i32 %y) { 40; CHECK: @max5 41 %c = icmp sgt i32 %x, %y 42 %m = select i1 %c, i32 %x, i32 %y 43 %r = icmp sgt i32 %x, %m 44 ret i1 %r 45; CHECK: ret i1 false 46} 47 48define i1 @max6(i32 %x, i32 %y) { 49; CHECK: @max6 50 %c = icmp sge i32 %x, %y 51 %m = select i1 %c, i32 %x, i32 %y 52 %r = icmp sle i32 %x, %m 53 ret i1 %r 54; CHECK: ret i1 true 55} 56 57define i1 @max7(i32 %x, i32 %y) { 58; CHECK: @max7 59 %c = icmp ugt i32 %x, %y 60 %m = select i1 %c, i32 %x, i32 %y 61 %r = icmp ugt i32 %x, %m 62 ret i1 %r 63; CHECK: ret i1 false 64} 65 66define i1 @max8(i32 %x, i32 %y) { 67; CHECK: @max8 68 %c = icmp uge i32 %x, %y 69 %m = select i1 %c, i32 %x, i32 %y 70 %r = icmp ule i32 %x, %m 71 ret i1 %r 72; CHECK: ret i1 true 73} 74 75define i1 @min1(i32 %x, i32 %y) { 76; CHECK: @min1 77 %c = icmp sgt i32 %x, %y 78 %m = select i1 %c, i32 %y, i32 %x 79 %r = icmp sgt i32 %m, %x 80 ret i1 %r 81; CHECK: ret i1 false 82} 83 84define i1 @min2(i32 %x, i32 %y) { 85; CHECK: @min2 86 %c = icmp sge i32 %x, %y 87 %m = select i1 %c, i32 %y, i32 %x 88 %r = icmp sle i32 %m, %x 89 ret i1 %r 90; CHECK: ret i1 true 91} 92 93define i1 @min3(i32 %x, i32 %y) { 94; CHECK: @min3 95 %c = icmp ugt i32 %x, %y 96 %m = select i1 %c, i32 %y, i32 %x 97 %r = icmp ugt i32 %m, %x 98 ret i1 %r 99; CHECK: ret i1 false 100} 101 102define i1 @min4(i32 %x, i32 %y) { 103; CHECK: @min4 104 %c = icmp uge i32 %x, %y 105 %m = select i1 %c, i32 %y, i32 %x 106 %r = icmp ule i32 %m, %x 107 ret i1 %r 108; CHECK: ret i1 true 109} 110 111define i1 @min5(i32 %x, i32 %y) { 112; CHECK: @min5 113 %c = icmp sgt i32 %x, %y 114 %m = select i1 %c, i32 %y, i32 %x 115 %r = icmp slt i32 %x, %m 116 ret i1 %r 117; CHECK: ret i1 false 118} 119 120define i1 @min6(i32 %x, i32 %y) { 121; CHECK: @min6 122 %c = icmp sge i32 %x, %y 123 %m = select i1 %c, i32 %y, i32 %x 124 %r = icmp sge i32 %x, %m 125 ret i1 %r 126; CHECK: ret i1 true 127} 128 129define i1 @min7(i32 %x, i32 %y) { 130; CHECK: @min7 131 %c = icmp ugt i32 %x, %y 132 %m = select i1 %c, i32 %y, i32 %x 133 %r = icmp ult i32 %x, %m 134 ret i1 %r 135; CHECK: ret i1 false 136} 137 138define i1 @min8(i32 %x, i32 %y) { 139; CHECK: @min8 140 %c = icmp uge i32 %x, %y 141 %m = select i1 %c, i32 %y, i32 %x 142 %r = icmp uge i32 %x, %m 143 ret i1 %r 144; CHECK: ret i1 true 145} 146 147define i1 @maxmin1(i32 %x, i32 %y, i32 %z) { 148; CHECK: @maxmin1 149 %c1 = icmp sge i32 %x, %y 150 %max = select i1 %c1, i32 %x, i32 %y 151 %c2 = icmp sge i32 %x, %z 152 %min = select i1 %c2, i32 %z, i32 %x 153 %c = icmp sge i32 %max, %min 154 ret i1 %c 155; CHECK: ret i1 true 156} 157 158define i1 @maxmin2(i32 %x, i32 %y, i32 %z) { 159; CHECK: @maxmin2 160 %c1 = icmp sge i32 %x, %y 161 %max = select i1 %c1, i32 %x, i32 %y 162 %c2 = icmp sge i32 %x, %z 163 %min = select i1 %c2, i32 %z, i32 %x 164 %c = icmp sgt i32 %min, %max 165 ret i1 %c 166; CHECK: ret i1 false 167} 168 169define i1 @maxmin3(i32 %x, i32 %y, i32 %z) { 170; CHECK: @maxmin3 171 %c1 = icmp sge i32 %x, %y 172 %max = select i1 %c1, i32 %x, i32 %y 173 %c2 = icmp sge i32 %x, %z 174 %min = select i1 %c2, i32 %z, i32 %x 175 %c = icmp sle i32 %min, %max 176 ret i1 %c 177; CHECK: ret i1 true 178} 179 180define i1 @maxmin4(i32 %x, i32 %y, i32 %z) { 181; CHECK: @maxmin4 182 %c1 = icmp sge i32 %x, %y 183 %max = select i1 %c1, i32 %x, i32 %y 184 %c2 = icmp sge i32 %x, %z 185 %min = select i1 %c2, i32 %z, i32 %x 186 %c = icmp slt i32 %max, %min 187 ret i1 %c 188; CHECK: ret i1 false 189} 190 191define i1 @maxmin5(i32 %x, i32 %y, i32 %z) { 192; CHECK: @maxmin5 193 %c1 = icmp uge i32 %x, %y 194 %max = select i1 %c1, i32 %x, i32 %y 195 %c2 = icmp uge i32 %x, %z 196 %min = select i1 %c2, i32 %z, i32 %x 197 %c = icmp uge i32 %max, %min 198 ret i1 %c 199; CHECK: ret i1 true 200} 201 202define i1 @maxmin6(i32 %x, i32 %y, i32 %z) { 203; CHECK: @maxmin6 204 %c1 = icmp uge i32 %x, %y 205 %max = select i1 %c1, i32 %x, i32 %y 206 %c2 = icmp uge i32 %x, %z 207 %min = select i1 %c2, i32 %z, i32 %x 208 %c = icmp ugt i32 %min, %max 209 ret i1 %c 210; CHECK: ret i1 false 211} 212 213define i1 @maxmin7(i32 %x, i32 %y, i32 %z) { 214; CHECK: @maxmin7 215 %c1 = icmp uge i32 %x, %y 216 %max = select i1 %c1, i32 %x, i32 %y 217 %c2 = icmp uge i32 %x, %z 218 %min = select i1 %c2, i32 %z, i32 %x 219 %c = icmp ule i32 %min, %max 220 ret i1 %c 221; CHECK: ret i1 true 222} 223 224define i1 @maxmin8(i32 %x, i32 %y, i32 %z) { 225; CHECK: @maxmin8 226 %c1 = icmp uge i32 %x, %y 227 %max = select i1 %c1, i32 %x, i32 %y 228 %c2 = icmp uge i32 %x, %z 229 %min = select i1 %c2, i32 %z, i32 %x 230 %c = icmp ult i32 %max, %min 231 ret i1 %c 232; CHECK: ret i1 false 233} 234 235define i1 @eqcmp1(i32 %x, i32 %y) { 236; CHECK: @eqcmp1 237 %c = icmp sge i32 %x, %y 238 %max = select i1 %c, i32 %x, i32 %y 239 %r = icmp eq i32 %max, %x 240 ret i1 %r 241; CHECK: ret i1 %c 242} 243 244define i1 @eqcmp2(i32 %x, i32 %y) { 245; CHECK: @eqcmp2 246 %c = icmp sge i32 %x, %y 247 %max = select i1 %c, i32 %x, i32 %y 248 %r = icmp eq i32 %x, %max 249 ret i1 %r 250; CHECK: ret i1 %c 251} 252 253define i1 @eqcmp3(i32 %x, i32 %y) { 254; CHECK: @eqcmp3 255 %c = icmp uge i32 %x, %y 256 %max = select i1 %c, i32 %x, i32 %y 257 %r = icmp eq i32 %max, %x 258 ret i1 %r 259; CHECK: ret i1 %c 260} 261 262define i1 @eqcmp4(i32 %x, i32 %y) { 263; CHECK: @eqcmp4 264 %c = icmp uge i32 %x, %y 265 %max = select i1 %c, i32 %x, i32 %y 266 %r = icmp eq i32 %x, %max 267 ret i1 %r 268; CHECK: ret i1 %c 269} 270