1; RUN: opt < %s -instcombine -S | FileCheck %s 2 3define i32 @abs_abs_x01(i32 %x) { 4 %cmp = icmp sgt i32 %x, -1 5 %sub = sub nsw i32 0, %x 6 %cond = select i1 %cmp, i32 %x, i32 %sub 7 %cmp1 = icmp sgt i32 %cond, -1 8 %sub16 = sub nsw i32 0, %cond 9 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 10 ret i32 %cond18 11; CHECK-LABEL: @abs_abs_x01( 12; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, -1 13; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 14; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 15; CHECK-NEXT: ret i32 [[SEL]] 16} 17 18define i32 @abs_abs_x02(i32 %x) { 19 %cmp = icmp sgt i32 %x, 0 20 %sub = sub nsw i32 0, %x 21 %cond = select i1 %cmp, i32 %x, i32 %sub 22 %cmp1 = icmp sgt i32 %cond, -1 23 %sub16 = sub nsw i32 0, %cond 24 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 25 ret i32 %cond18 26; CHECK-LABEL: @abs_abs_x02( 27; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, 0 28; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 29; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 30; CHECK-NEXT: ret i32 [[SEL]] 31} 32 33define i32 @abs_abs_x03(i32 %x) { 34 %cmp = icmp slt i32 %x, 0 35 %sub = sub nsw i32 0, %x 36 %cond = select i1 %cmp, i32 %sub, i32 %x 37 %cmp1 = icmp sgt i32 %cond, -1 38 %sub16 = sub nsw i32 0, %cond 39 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 40 ret i32 %cond18 41; CHECK-LABEL: @abs_abs_x03( 42; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 0 43; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 44; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 45; CHECK-NEXT: ret i32 [[SEL]] 46} 47 48define i32 @abs_abs_x04(i32 %x) { 49 %cmp = icmp slt i32 %x, 1 50 %sub = sub nsw i32 0, %x 51 %cond = select i1 %cmp, i32 %sub, i32 %x 52 %cmp1 = icmp sgt i32 %cond, -1 53 %sub16 = sub nsw i32 0, %cond 54 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 55 ret i32 %cond18 56; CHECK-LABEL: @abs_abs_x04( 57; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 1 58; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 59; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 60; CHECK-NEXT: ret i32 [[SEL]] 61} 62 63define i32 @abs_abs_x05(i32 %x) { 64 %cmp = icmp sgt i32 %x, -1 65 %sub = sub nsw i32 0, %x 66 %cond = select i1 %cmp, i32 %x, i32 %sub 67 %cmp1 = icmp sgt i32 %cond, 0 68 %sub16 = sub nsw i32 0, %cond 69 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 70 ret i32 %cond18 71; CHECK-LABEL: @abs_abs_x05( 72; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, -1 73; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 74; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 75; CHECK-NEXT: ret i32 [[SEL]] 76} 77 78define i32 @abs_abs_x06(i32 %x) { 79 %cmp = icmp sgt i32 %x, 0 80 %sub = sub nsw i32 0, %x 81 %cond = select i1 %cmp, i32 %x, i32 %sub 82 %cmp1 = icmp sgt i32 %cond, 0 83 %sub16 = sub nsw i32 0, %cond 84 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 85 ret i32 %cond18 86; CHECK-LABEL: @abs_abs_x06( 87; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, 0 88; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 89; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 90; CHECK-NEXT: ret i32 [[SEL]] 91} 92 93define i32 @abs_abs_x07(i32 %x) { 94 %cmp = icmp slt i32 %x, 0 95 %sub = sub nsw i32 0, %x 96 %cond = select i1 %cmp, i32 %sub, i32 %x 97 %cmp1 = icmp sgt i32 %cond, 0 98 %sub16 = sub nsw i32 0, %cond 99 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 100 ret i32 %cond18 101; CHECK-LABEL: @abs_abs_x07( 102; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 0 103; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 104; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 105; CHECK-NEXT: ret i32 [[SEL]] 106} 107 108define i32 @abs_abs_x08(i32 %x) { 109 %cmp = icmp slt i32 %x, 1 110 %sub = sub nsw i32 0, %x 111 %cond = select i1 %cmp, i32 %sub, i32 %x 112 %cmp1 = icmp sgt i32 %cond, 0 113 %sub16 = sub nsw i32 0, %cond 114 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 115 ret i32 %cond18 116; CHECK-LABEL: @abs_abs_x08( 117; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 1 118; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 119; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 120; CHECK-NEXT: ret i32 [[SEL]] 121} 122 123define i32 @abs_abs_x09(i32 %x) { 124 %cmp = icmp sgt i32 %x, -1 125 %sub = sub nsw i32 0, %x 126 %cond = select i1 %cmp, i32 %x, i32 %sub 127 %cmp1 = icmp slt i32 %cond, 0 128 %sub9 = sub nsw i32 0, %cond 129 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 130 ret i32 %cond18 131; CHECK-LABEL: @abs_abs_x09( 132; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, -1 133; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 134; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 135; CHECK-NEXT: ret i32 [[SEL]] 136} 137 138define i32 @abs_abs_x10(i32 %x) { 139 %cmp = icmp sgt i32 %x, 0 140 %sub = sub nsw i32 0, %x 141 %cond = select i1 %cmp, i32 %x, i32 %sub 142 %cmp1 = icmp slt i32 %cond, 0 143 %sub9 = sub nsw i32 0, %cond 144 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 145 ret i32 %cond18 146; CHECK-LABEL: @abs_abs_x10( 147; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, 0 148; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 149; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 150; CHECK-NEXT: ret i32 [[SEL]] 151} 152 153define i32 @abs_abs_x11(i32 %x) { 154 %cmp = icmp slt i32 %x, 0 155 %sub = sub nsw i32 0, %x 156 %cond = select i1 %cmp, i32 %sub, i32 %x 157 %cmp1 = icmp slt i32 %cond, 0 158 %sub9 = sub nsw i32 0, %cond 159 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 160 ret i32 %cond18 161; CHECK-LABEL: @abs_abs_x11( 162; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 0 163; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 164; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 165; CHECK-NEXT: ret i32 [[SEL]] 166} 167 168define i32 @abs_abs_x12(i32 %x) { 169 %cmp = icmp slt i32 %x, 1 170 %sub = sub nsw i32 0, %x 171 %cond = select i1 %cmp, i32 %sub, i32 %x 172 %cmp1 = icmp slt i32 %cond, 0 173 %sub9 = sub nsw i32 0, %cond 174 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 175 ret i32 %cond18 176; CHECK-LABEL: @abs_abs_x12( 177; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 1 178; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 179; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 180; CHECK-NEXT: ret i32 [[SEL]] 181} 182 183define i32 @abs_abs_x13(i32 %x) { 184 %cmp = icmp sgt i32 %x, -1 185 %sub = sub nsw i32 0, %x 186 %cond = select i1 %cmp, i32 %x, i32 %sub 187 %cmp1 = icmp slt i32 %cond, 1 188 %sub9 = sub nsw i32 0, %cond 189 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 190 ret i32 %cond18 191; CHECK-LABEL: @abs_abs_x13( 192; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, -1 193; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 194; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 195; CHECK-NEXT: ret i32 [[SEL]] 196} 197 198define i32 @abs_abs_x14(i32 %x) { 199 %cmp = icmp sgt i32 %x, 0 200 %sub = sub nsw i32 0, %x 201 %cond = select i1 %cmp, i32 %x, i32 %sub 202 %cmp1 = icmp slt i32 %cond, 1 203 %sub9 = sub nsw i32 0, %cond 204 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 205 ret i32 %cond18 206; CHECK-LABEL: @abs_abs_x14( 207; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, 0 208; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 209; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 210; CHECK-NEXT: ret i32 [[SEL]] 211} 212 213define i32 @abs_abs_x15(i32 %x) { 214 %cmp = icmp slt i32 %x, 0 215 %sub = sub nsw i32 0, %x 216 %cond = select i1 %cmp, i32 %sub, i32 %x 217 %cmp1 = icmp slt i32 %cond, 1 218 %sub9 = sub nsw i32 0, %cond 219 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 220 ret i32 %cond18 221; CHECK-LABEL: @abs_abs_x15( 222; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 0 223; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 224; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 225; CHECK-NEXT: ret i32 [[SEL]] 226} 227 228define i32 @abs_abs_x16(i32 %x) { 229 %cmp = icmp slt i32 %x, 1 230 %sub = sub nsw i32 0, %x 231 %cond = select i1 %cmp, i32 %sub, i32 %x 232 %cmp1 = icmp slt i32 %cond, 1 233 %sub9 = sub nsw i32 0, %cond 234 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 235 ret i32 %cond18 236; CHECK-LABEL: @abs_abs_x16( 237; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 1 238; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 239; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 240; CHECK-NEXT: ret i32 [[SEL]] 241} 242 243define i32 @nabs_nabs_x01(i32 %x) { 244 %cmp = icmp sgt i32 %x, -1 245 %sub = sub nsw i32 0, %x 246 %cond = select i1 %cmp, i32 %sub, i32 %x 247 %cmp1 = icmp sgt i32 %cond, -1 248 %sub9 = sub nsw i32 0, %cond 249 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 250 ret i32 %cond18 251; CHECK-LABEL: @nabs_nabs_x01( 252; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, -1 253; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 254; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 255; CHECK-NEXT: ret i32 [[SEL]] 256} 257 258define i32 @nabs_nabs_x02(i32 %x) { 259 %cmp = icmp sgt i32 %x, 0 260 %sub = sub nsw i32 0, %x 261 %cond = select i1 %cmp, i32 %sub, i32 %x 262 %cmp1 = icmp sgt i32 %cond, -1 263 %sub9 = sub nsw i32 0, %cond 264 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 265 ret i32 %cond18 266; CHECK-LABEL: @nabs_nabs_x02( 267; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, 0 268; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 269; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 270; CHECK-NEXT: ret i32 [[SEL]] 271} 272 273define i32 @nabs_nabs_x03(i32 %x) { 274 %cmp = icmp slt i32 %x, 0 275 %sub = sub nsw i32 0, %x 276 %cond = select i1 %cmp, i32 %x, i32 %sub 277 %cmp1 = icmp sgt i32 %cond, -1 278 %sub9 = sub nsw i32 0, %cond 279 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 280 ret i32 %cond18 281; CHECK-LABEL: @nabs_nabs_x03( 282; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 0 283; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 284; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 285; CHECK-NEXT: ret i32 [[SEL]] 286} 287 288define i32 @nabs_nabs_x04(i32 %x) { 289 %cmp = icmp slt i32 %x, 1 290 %sub = sub nsw i32 0, %x 291 %cond = select i1 %cmp, i32 %x, i32 %sub 292 %cmp1 = icmp sgt i32 %cond, -1 293 %sub9 = sub nsw i32 0, %cond 294 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 295 ret i32 %cond18 296; CHECK-LABEL: @nabs_nabs_x04( 297; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 1 298; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 299; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 300; CHECK-NEXT: ret i32 [[SEL]] 301} 302 303define i32 @nabs_nabs_x05(i32 %x) { 304 %cmp = icmp sgt i32 %x, -1 305 %sub = sub nsw i32 0, %x 306 %cond = select i1 %cmp, i32 %sub, i32 %x 307 %cmp1 = icmp sgt i32 %cond, 0 308 %sub9 = sub nsw i32 0, %cond 309 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 310 ret i32 %cond18 311; CHECK-LABEL: @nabs_nabs_x05( 312; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, -1 313; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 314; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 315; CHECK-NEXT: ret i32 [[SEL]] 316} 317 318define i32 @nabs_nabs_x06(i32 %x) { 319 %cmp = icmp sgt i32 %x, 0 320 %sub = sub nsw i32 0, %x 321 %cond = select i1 %cmp, i32 %sub, i32 %x 322 %cmp1 = icmp sgt i32 %cond, 0 323 %sub9 = sub nsw i32 0, %cond 324 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 325 ret i32 %cond18 326; CHECK-LABEL: @nabs_nabs_x06( 327; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, 0 328; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 329; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 330; CHECK-NEXT: ret i32 [[SEL]] 331} 332 333define i32 @nabs_nabs_x07(i32 %x) { 334 %cmp = icmp slt i32 %x, 0 335 %sub = sub nsw i32 0, %x 336 %cond = select i1 %cmp, i32 %x, i32 %sub 337 %cmp1 = icmp sgt i32 %cond, 0 338 %sub9 = sub nsw i32 0, %cond 339 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 340 ret i32 %cond18 341; CHECK-LABEL: @nabs_nabs_x07( 342; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 0 343; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 344; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 345; CHECK-NEXT: ret i32 [[SEL]] 346} 347 348define i32 @nabs_nabs_x08(i32 %x) { 349 %cmp = icmp slt i32 %x, 1 350 %sub = sub nsw i32 0, %x 351 %cond = select i1 %cmp, i32 %x, i32 %sub 352 %cmp1 = icmp sgt i32 %cond, 0 353 %sub9 = sub nsw i32 0, %cond 354 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 355 ret i32 %cond18 356; CHECK-LABEL: @nabs_nabs_x08( 357; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 1 358; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 359; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 360; CHECK-NEXT: ret i32 [[SEL]] 361} 362 363define i32 @nabs_nabs_x09(i32 %x) { 364 %cmp = icmp sgt i32 %x, -1 365 %sub = sub nsw i32 0, %x 366 %cond = select i1 %cmp, i32 %sub, i32 %x 367 %cmp1 = icmp slt i32 %cond, 0 368 %sub16 = sub nsw i32 0, %cond 369 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 370 ret i32 %cond18 371; CHECK-LABEL: @nabs_nabs_x09( 372; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, -1 373; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 374; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 375; CHECK-NEXT: ret i32 [[SEL]] 376} 377 378define i32 @nabs_nabs_x10(i32 %x) { 379 %cmp = icmp sgt i32 %x, 0 380 %sub = sub nsw i32 0, %x 381 %cond = select i1 %cmp, i32 %sub, i32 %x 382 %cmp1 = icmp slt i32 %cond, 0 383 %sub16 = sub nsw i32 0, %cond 384 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 385 ret i32 %cond18 386; CHECK-LABEL: @nabs_nabs_x10( 387; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, 0 388; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 389; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 390; CHECK-NEXT: ret i32 [[SEL]] 391} 392 393define i32 @nabs_nabs_x11(i32 %x) { 394 %cmp = icmp slt i32 %x, 0 395 %sub = sub nsw i32 0, %x 396 %cond = select i1 %cmp, i32 %x, i32 %sub 397 %cmp1 = icmp slt i32 %cond, 0 398 %sub16 = sub nsw i32 0, %cond 399 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 400 ret i32 %cond18 401; CHECK-LABEL: @nabs_nabs_x11( 402; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 0 403; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 404; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 405; CHECK-NEXT: ret i32 [[SEL]] 406} 407 408define i32 @nabs_nabs_x12(i32 %x) { 409 %cmp = icmp slt i32 %x, 1 410 %sub = sub nsw i32 0, %x 411 %cond = select i1 %cmp, i32 %x, i32 %sub 412 %cmp1 = icmp slt i32 %cond, 0 413 %sub16 = sub nsw i32 0, %cond 414 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 415 ret i32 %cond18 416; CHECK-LABEL: @nabs_nabs_x12( 417; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 1 418; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 419; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 420; CHECK-NEXT: ret i32 [[SEL]] 421} 422 423define i32 @nabs_nabs_x13(i32 %x) { 424 %cmp = icmp sgt i32 %x, -1 425 %sub = sub nsw i32 0, %x 426 %cond = select i1 %cmp, i32 %sub, i32 %x 427 %cmp1 = icmp slt i32 %cond, 1 428 %sub16 = sub nsw i32 0, %cond 429 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 430 ret i32 %cond18 431; CHECK-LABEL: @nabs_nabs_x13( 432; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, -1 433; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 434; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 435; CHECK-NEXT: ret i32 [[SEL]] 436} 437 438define i32 @nabs_nabs_x14(i32 %x) { 439 %cmp = icmp sgt i32 %x, 0 440 %sub = sub nsw i32 0, %x 441 %cond = select i1 %cmp, i32 %sub, i32 %x 442 %cmp1 = icmp slt i32 %cond, 1 443 %sub16 = sub nsw i32 0, %cond 444 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 445 ret i32 %cond18 446; CHECK-LABEL: @nabs_nabs_x14( 447; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, 0 448; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 449; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 450; CHECK-NEXT: ret i32 [[SEL]] 451} 452 453define i32 @nabs_nabs_x15(i32 %x) { 454 %cmp = icmp slt i32 %x, 0 455 %sub = sub nsw i32 0, %x 456 %cond = select i1 %cmp, i32 %x, i32 %sub 457 %cmp1 = icmp slt i32 %cond, 1 458 %sub16 = sub nsw i32 0, %cond 459 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 460 ret i32 %cond18 461; CHECK-LABEL: @nabs_nabs_x15( 462; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 0 463; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 464; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 465; CHECK-NEXT: ret i32 [[SEL]] 466} 467 468define i32 @nabs_nabs_x16(i32 %x) { 469 %cmp = icmp slt i32 %x, 1 470 %sub = sub nsw i32 0, %x 471 %cond = select i1 %cmp, i32 %x, i32 %sub 472 %cmp1 = icmp slt i32 %cond, 1 473 %sub16 = sub nsw i32 0, %cond 474 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 475 ret i32 %cond18 476; CHECK-LABEL: @nabs_nabs_x16( 477; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 1 478; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 479; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 480; CHECK-NEXT: ret i32 [[SEL]] 481} 482 483define i32 @abs_nabs_x01(i32 %x) { 484 %cmp = icmp sgt i32 %x, -1 485 %sub = sub nsw i32 0, %x 486 %cond = select i1 %cmp, i32 %sub, i32 %x 487 %cmp1 = icmp sgt i32 %cond, -1 488 %sub16 = sub nsw i32 0, %cond 489 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 490 ret i32 %cond18 491; CHECK-LABEL: @abs_nabs_x01( 492; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, -1 493; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 494; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 495; CHECK-NEXT: ret i32 [[SEL]] 496} 497 498define i32 @abs_nabs_x02(i32 %x) { 499 %cmp = icmp sgt i32 %x, 0 500 %sub = sub nsw i32 0, %x 501 %cond = select i1 %cmp, i32 %sub, i32 %x 502 %cmp1 = icmp sgt i32 %cond, -1 503 %sub16 = sub nsw i32 0, %cond 504 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 505 ret i32 %cond18 506; CHECK-LABEL: @abs_nabs_x02( 507; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, 0 508; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 509; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 510; CHECK-NEXT: ret i32 [[SEL]] 511} 512 513define i32 @abs_nabs_x03(i32 %x) { 514 %cmp = icmp slt i32 %x, 0 515 %sub = sub nsw i32 0, %x 516 %cond = select i1 %cmp, i32 %x, i32 %sub 517 %cmp1 = icmp sgt i32 %cond, -1 518 %sub16 = sub nsw i32 0, %cond 519 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 520 ret i32 %cond18 521; CHECK-LABEL: @abs_nabs_x03( 522; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 0 523; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 524; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 525; CHECK-NEXT: ret i32 [[SEL]] 526} 527 528define i32 @abs_nabs_x04(i32 %x) { 529 %cmp = icmp slt i32 %x, 1 530 %sub = sub nsw i32 0, %x 531 %cond = select i1 %cmp, i32 %x, i32 %sub 532 %cmp1 = icmp sgt i32 %cond, -1 533 %sub16 = sub nsw i32 0, %cond 534 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 535 ret i32 %cond18 536; CHECK-LABEL: @abs_nabs_x04( 537; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 1 538; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 539; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 540; CHECK-NEXT: ret i32 [[SEL]] 541} 542 543define i32 @abs_nabs_x05(i32 %x) { 544 %cmp = icmp sgt i32 %x, -1 545 %sub = sub nsw i32 0, %x 546 %cond = select i1 %cmp, i32 %sub, i32 %x 547 %cmp1 = icmp sgt i32 %cond, 0 548 %sub16 = sub nsw i32 0, %cond 549 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 550 ret i32 %cond18 551; CHECK-LABEL: @abs_nabs_x05( 552; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, -1 553; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 554; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 555; CHECK-NEXT: ret i32 [[SEL]] 556} 557 558define i32 @abs_nabs_x06(i32 %x) { 559 %cmp = icmp sgt i32 %x, 0 560 %sub = sub nsw i32 0, %x 561 %cond = select i1 %cmp, i32 %sub, i32 %x 562 %cmp1 = icmp sgt i32 %cond, 0 563 %sub16 = sub nsw i32 0, %cond 564 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 565 ret i32 %cond18 566; CHECK-LABEL: @abs_nabs_x06( 567; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, 0 568; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 569; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 570; CHECK-NEXT: ret i32 [[SEL]] 571} 572 573define i32 @abs_nabs_x07(i32 %x) { 574 %cmp = icmp slt i32 %x, 0 575 %sub = sub nsw i32 0, %x 576 %cond = select i1 %cmp, i32 %x, i32 %sub 577 %cmp1 = icmp sgt i32 %cond, 0 578 %sub16 = sub nsw i32 0, %cond 579 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 580 ret i32 %cond18 581; CHECK-LABEL: @abs_nabs_x07( 582; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 0 583; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 584; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 585; CHECK-NEXT: ret i32 [[SEL]] 586} 587 588define i32 @abs_nabs_x08(i32 %x) { 589 %cmp = icmp slt i32 %x, 1 590 %sub = sub nsw i32 0, %x 591 %cond = select i1 %cmp, i32 %x, i32 %sub 592 %cmp1 = icmp sgt i32 %cond, 0 593 %sub16 = sub nsw i32 0, %cond 594 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 595 ret i32 %cond18 596; CHECK-LABEL: @abs_nabs_x08( 597; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 1 598; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 599; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 600; CHECK-NEXT: ret i32 [[SEL]] 601} 602 603define i32 @abs_nabs_x09(i32 %x) { 604 %cmp = icmp sgt i32 %x, -1 605 %sub = sub nsw i32 0, %x 606 %cond = select i1 %cmp, i32 %sub, i32 %x 607 %cmp1 = icmp slt i32 %cond, 0 608 %sub9 = sub nsw i32 0, %cond 609 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 610 ret i32 %cond18 611; CHECK-LABEL: @abs_nabs_x09( 612; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, -1 613; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 614; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 615; CHECK-NEXT: ret i32 [[SEL]] 616} 617 618define i32 @abs_nabs_x10(i32 %x) { 619 %cmp = icmp sgt i32 %x, 0 620 %sub = sub nsw i32 0, %x 621 %cond = select i1 %cmp, i32 %sub, i32 %x 622 %cmp1 = icmp slt i32 %cond, 0 623 %sub9 = sub nsw i32 0, %cond 624 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 625 ret i32 %cond18 626; CHECK-LABEL: @abs_nabs_x10( 627; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, 0 628; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 629; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 630; CHECK-NEXT: ret i32 [[SEL]] 631} 632 633define i32 @abs_nabs_x11(i32 %x) { 634 %cmp = icmp slt i32 %x, 0 635 %sub = sub nsw i32 0, %x 636 %cond = select i1 %cmp, i32 %x, i32 %sub 637 %cmp1 = icmp slt i32 %cond, 0 638 %sub9 = sub nsw i32 0, %cond 639 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 640 ret i32 %cond18 641; CHECK-LABEL: @abs_nabs_x11( 642; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 0 643; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 644; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 645; CHECK-NEXT: ret i32 [[SEL]] 646} 647 648define i32 @abs_nabs_x12(i32 %x) { 649 %cmp = icmp slt i32 %x, 1 650 %sub = sub nsw i32 0, %x 651 %cond = select i1 %cmp, i32 %x, i32 %sub 652 %cmp1 = icmp slt i32 %cond, 0 653 %sub9 = sub nsw i32 0, %cond 654 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 655 ret i32 %cond18 656; CHECK-LABEL: @abs_nabs_x12( 657; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 1 658; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 659; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 660; CHECK-NEXT: ret i32 [[SEL]] 661} 662 663define i32 @abs_nabs_x13(i32 %x) { 664 %cmp = icmp sgt i32 %x, -1 665 %sub = sub nsw i32 0, %x 666 %cond = select i1 %cmp, i32 %sub, i32 %x 667 %cmp1 = icmp slt i32 %cond, 1 668 %sub9 = sub nsw i32 0, %cond 669 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 670 ret i32 %cond18 671; CHECK-LABEL: @abs_nabs_x13( 672; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, -1 673; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 674; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 675; CHECK-NEXT: ret i32 [[SEL]] 676} 677 678define i32 @abs_nabs_x14(i32 %x) { 679 %cmp = icmp sgt i32 %x, 0 680 %sub = sub nsw i32 0, %x 681 %cond = select i1 %cmp, i32 %sub, i32 %x 682 %cmp1 = icmp slt i32 %cond, 1 683 %sub9 = sub nsw i32 0, %cond 684 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 685 ret i32 %cond18 686; CHECK-LABEL: @abs_nabs_x14( 687; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, 0 688; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 689; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 690; CHECK-NEXT: ret i32 [[SEL]] 691} 692 693define i32 @abs_nabs_x15(i32 %x) { 694 %cmp = icmp slt i32 %x, 0 695 %sub = sub nsw i32 0, %x 696 %cond = select i1 %cmp, i32 %x, i32 %sub 697 %cmp1 = icmp slt i32 %cond, 1 698 %sub9 = sub nsw i32 0, %cond 699 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 700 ret i32 %cond18 701; CHECK-LABEL: @abs_nabs_x15( 702; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 0 703; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 704; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 705; CHECK-NEXT: ret i32 [[SEL]] 706} 707 708define i32 @abs_nabs_x16(i32 %x) { 709 %cmp = icmp slt i32 %x, 1 710 %sub = sub nsw i32 0, %x 711 %cond = select i1 %cmp, i32 %x, i32 %sub 712 %cmp1 = icmp slt i32 %cond, 1 713 %sub9 = sub nsw i32 0, %cond 714 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 715 ret i32 %cond18 716; CHECK-LABEL: @abs_nabs_x16( 717; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 1 718; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 719; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 720; CHECK-NEXT: ret i32 [[SEL]] 721} 722 723define i32 @nabs_abs_x01(i32 %x) { 724 %cmp = icmp sgt i32 %x, -1 725 %sub = sub nsw i32 0, %x 726 %cond = select i1 %cmp, i32 %x, i32 %sub 727 %cmp1 = icmp sgt i32 %cond, -1 728 %sub9 = sub nsw i32 0, %cond 729 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 730 ret i32 %cond18 731; CHECK-LABEL: @nabs_abs_x01( 732; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, -1 733; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 734; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 735; CHECK-NEXT: ret i32 [[SEL]] 736} 737 738define i32 @nabs_abs_x02(i32 %x) { 739 %cmp = icmp sgt i32 %x, 0 740 %sub = sub nsw i32 0, %x 741 %cond = select i1 %cmp, i32 %x, i32 %sub 742 %cmp1 = icmp sgt i32 %cond, -1 743 %sub9 = sub nsw i32 0, %cond 744 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 745 ret i32 %cond18 746; CHECK-LABEL: @nabs_abs_x02( 747; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, 0 748; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 749; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 750; CHECK-NEXT: ret i32 [[SEL]] 751} 752 753define i32 @nabs_abs_x03(i32 %x) { 754 %cmp = icmp slt i32 %x, 0 755 %sub = sub nsw i32 0, %x 756 %cond = select i1 %cmp, i32 %sub, i32 %x 757 %cmp1 = icmp sgt i32 %cond, -1 758 %sub9 = sub nsw i32 0, %cond 759 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 760 ret i32 %cond18 761; CHECK-LABEL: @nabs_abs_x03( 762; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 0 763; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 764; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 765; CHECK-NEXT: ret i32 [[SEL]] 766} 767 768define i32 @nabs_abs_x04(i32 %x) { 769 %cmp = icmp slt i32 %x, 1 770 %sub = sub nsw i32 0, %x 771 %cond = select i1 %cmp, i32 %sub, i32 %x 772 %cmp1 = icmp sgt i32 %cond, -1 773 %sub9 = sub nsw i32 0, %cond 774 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 775 ret i32 %cond18 776; CHECK-LABEL: @nabs_abs_x04( 777; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 1 778; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 779; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 780; CHECK-NEXT: ret i32 [[SEL]] 781} 782 783define i32 @nabs_abs_x05(i32 %x) { 784 %cmp = icmp sgt i32 %x, -1 785 %sub = sub nsw i32 0, %x 786 %cond = select i1 %cmp, i32 %x, i32 %sub 787 %cmp1 = icmp sgt i32 %cond, 0 788 %sub9 = sub nsw i32 0, %cond 789 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 790 ret i32 %cond18 791; CHECK-LABEL: @nabs_abs_x05( 792; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, -1 793; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 794; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 795; CHECK-NEXT: ret i32 [[SEL]] 796} 797 798define i32 @nabs_abs_x06(i32 %x) { 799 %cmp = icmp sgt i32 %x, 0 800 %sub = sub nsw i32 0, %x 801 %cond = select i1 %cmp, i32 %x, i32 %sub 802 %cmp1 = icmp sgt i32 %cond, 0 803 %sub9 = sub nsw i32 0, %cond 804 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 805 ret i32 %cond18 806; CHECK-LABEL: @nabs_abs_x06( 807; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, 0 808; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 809; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 810; CHECK-NEXT: ret i32 [[SEL]] 811} 812 813define i32 @nabs_abs_x07(i32 %x) { 814 %cmp = icmp slt i32 %x, 0 815 %sub = sub nsw i32 0, %x 816 %cond = select i1 %cmp, i32 %sub, i32 %x 817 %cmp1 = icmp sgt i32 %cond, 0 818 %sub9 = sub nsw i32 0, %cond 819 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 820 ret i32 %cond18 821; CHECK-LABEL: @nabs_abs_x07( 822; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 0 823; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 824; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 825; CHECK-NEXT: ret i32 [[SEL]] 826} 827 828define i32 @nabs_abs_x08(i32 %x) { 829 %cmp = icmp slt i32 %x, 1 830 %sub = sub nsw i32 0, %x 831 %cond = select i1 %cmp, i32 %sub, i32 %x 832 %cmp1 = icmp sgt i32 %cond, 0 833 %sub9 = sub nsw i32 0, %cond 834 %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond 835 ret i32 %cond18 836; CHECK-LABEL: @nabs_abs_x08( 837; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 1 838; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 839; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 840; CHECK-NEXT: ret i32 [[SEL]] 841} 842 843define i32 @nabs_abs_x09(i32 %x) { 844 %cmp = icmp sgt i32 %x, -1 845 %sub = sub nsw i32 0, %x 846 %cond = select i1 %cmp, i32 %x, i32 %sub 847 %cmp1 = icmp slt i32 %cond, 0 848 %sub16 = sub nsw i32 0, %cond 849 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 850 ret i32 %cond18 851; CHECK-LABEL: @nabs_abs_x09( 852; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, -1 853; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 854; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 855; CHECK-NEXT: ret i32 [[SEL]] 856} 857 858define i32 @nabs_abs_x10(i32 %x) { 859 %cmp = icmp sgt i32 %x, 0 860 %sub = sub nsw i32 0, %x 861 %cond = select i1 %cmp, i32 %x, i32 %sub 862 %cmp1 = icmp slt i32 %cond, 0 863 %sub16 = sub nsw i32 0, %cond 864 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 865 ret i32 %cond18 866; CHECK-LABEL: @nabs_abs_x10( 867; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, 0 868; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 869; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 870; CHECK-NEXT: ret i32 [[SEL]] 871} 872 873define i32 @nabs_abs_x11(i32 %x) { 874 %cmp = icmp slt i32 %x, 0 875 %sub = sub nsw i32 0, %x 876 %cond = select i1 %cmp, i32 %sub, i32 %x 877 %cmp1 = icmp slt i32 %cond, 0 878 %sub16 = sub nsw i32 0, %cond 879 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 880 ret i32 %cond18 881; CHECK-LABEL: @nabs_abs_x11( 882; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 0 883; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 884; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 885; CHECK-NEXT: ret i32 [[SEL]] 886} 887 888define i32 @nabs_abs_x12(i32 %x) { 889 %cmp = icmp slt i32 %x, 1 890 %sub = sub nsw i32 0, %x 891 %cond = select i1 %cmp, i32 %sub, i32 %x 892 %cmp1 = icmp slt i32 %cond, 0 893 %sub16 = sub nsw i32 0, %cond 894 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 895 ret i32 %cond18 896; CHECK-LABEL: @nabs_abs_x12( 897; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 1 898; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 899; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 900; CHECK-NEXT: ret i32 [[SEL]] 901} 902 903define i32 @nabs_abs_x13(i32 %x) { 904 %cmp = icmp sgt i32 %x, -1 905 %sub = sub nsw i32 0, %x 906 %cond = select i1 %cmp, i32 %x, i32 %sub 907 %cmp1 = icmp slt i32 %cond, 1 908 %sub16 = sub nsw i32 0, %cond 909 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 910 ret i32 %cond18 911; CHECK-LABEL: @nabs_abs_x13( 912; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, -1 913; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 914; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 915; CHECK-NEXT: ret i32 [[SEL]] 916} 917 918define i32 @nabs_abs_x14(i32 %x) { 919 %cmp = icmp sgt i32 %x, 0 920 %sub = sub nsw i32 0, %x 921 %cond = select i1 %cmp, i32 %x, i32 %sub 922 %cmp1 = icmp slt i32 %cond, 1 923 %sub16 = sub nsw i32 0, %cond 924 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 925 ret i32 %cond18 926; CHECK-LABEL: @nabs_abs_x14( 927; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp sgt i32 %x, 0 928; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 929; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 [[NEG]], i32 %x 930; CHECK-NEXT: ret i32 [[SEL]] 931} 932 933define i32 @nabs_abs_x15(i32 %x) { 934 %cmp = icmp slt i32 %x, 0 935 %sub = sub nsw i32 0, %x 936 %cond = select i1 %cmp, i32 %sub, i32 %x 937 %cmp1 = icmp slt i32 %cond, 1 938 %sub16 = sub nsw i32 0, %cond 939 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 940 ret i32 %cond18 941; CHECK-LABEL: @nabs_abs_x15( 942; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 0 943; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 944; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 945; CHECK-NEXT: ret i32 [[SEL]] 946} 947 948define i32 @nabs_abs_x16(i32 %x) { 949 %cmp = icmp slt i32 %x, 1 950 %sub = sub nsw i32 0, %x 951 %cond = select i1 %cmp, i32 %sub, i32 %x 952 %cmp1 = icmp slt i32 %cond, 1 953 %sub16 = sub nsw i32 0, %cond 954 %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16 955 ret i32 %cond18 956; CHECK-LABEL: @nabs_abs_x16( 957; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp slt i32 %x, 1 958; CHECK-NEXT: [[NEG:%[a-z0-9]+]] = sub nsw i32 0, %x 959; CHECK-NEXT: [[SEL:%[a-z0-9]+]] = select i1 [[CMP]], i32 %x, i32 [[NEG]] 960; CHECK-NEXT: ret i32 [[SEL]] 961}