1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs < %s | FileCheck %s 3target datalayout = "E-m:e-i64:64-n32:64" 4target triple = "powerpc64-unknown-linux-gnu" 5 6define void @a32min(ptr nocapture dereferenceable(4) %minimum, i32 %val) #0 { 7; CHECK-LABEL: a32min: 8; CHECK: # %bb.0: # %entry 9; CHECK-NEXT: .LBB0_1: # %entry 10; CHECK-NEXT: # 11; CHECK-NEXT: lwarx 5, 0, 3 12; CHECK-NEXT: cmpw 5, 4 13; CHECK-NEXT: bltlr 0 14; CHECK-NEXT: # %bb.2: # %entry 15; CHECK-NEXT: # 16; CHECK-NEXT: stwcx. 4, 0, 3 17; CHECK-NEXT: bne 0, .LBB0_1 18; CHECK-NEXT: # %bb.3: # %entry 19; CHECK-NEXT: blr 20entry: 21 %0 = atomicrmw min ptr %minimum, i32 %val monotonic 22 ret void 23 24} 25 26define void @a32max(ptr nocapture dereferenceable(4) %minimum, i32 %val) #0 { 27; CHECK-LABEL: a32max: 28; CHECK: # %bb.0: # %entry 29; CHECK-NEXT: .LBB1_1: # %entry 30; CHECK-NEXT: # 31; CHECK-NEXT: lwarx 5, 0, 3 32; CHECK-NEXT: cmpw 5, 4 33; CHECK-NEXT: bgtlr 0 34; CHECK-NEXT: # %bb.2: # %entry 35; CHECK-NEXT: # 36; CHECK-NEXT: stwcx. 4, 0, 3 37; CHECK-NEXT: bne 0, .LBB1_1 38; CHECK-NEXT: # %bb.3: # %entry 39; CHECK-NEXT: blr 40entry: 41 %0 = atomicrmw max ptr %minimum, i32 %val monotonic 42 ret void 43 44} 45 46define void @a32umin(ptr nocapture dereferenceable(4) %minimum, i32 %val) #0 { 47; CHECK-LABEL: a32umin: 48; CHECK: # %bb.0: # %entry 49; CHECK-NEXT: .LBB2_1: # %entry 50; CHECK-NEXT: # 51; CHECK-NEXT: lwarx 5, 0, 3 52; CHECK-NEXT: cmplw 5, 4 53; CHECK-NEXT: bltlr 0 54; CHECK-NEXT: # %bb.2: # %entry 55; CHECK-NEXT: # 56; CHECK-NEXT: stwcx. 4, 0, 3 57; CHECK-NEXT: bne 0, .LBB2_1 58; CHECK-NEXT: # %bb.3: # %entry 59; CHECK-NEXT: blr 60entry: 61 %0 = atomicrmw umin ptr %minimum, i32 %val monotonic 62 ret void 63 64} 65 66define void @a32umax(ptr nocapture dereferenceable(4) %minimum, i32 %val) #0 { 67; CHECK-LABEL: a32umax: 68; CHECK: # %bb.0: # %entry 69; CHECK-NEXT: .LBB3_1: # %entry 70; CHECK-NEXT: # 71; CHECK-NEXT: lwarx 5, 0, 3 72; CHECK-NEXT: cmplw 5, 4 73; CHECK-NEXT: bgtlr 0 74; CHECK-NEXT: # %bb.2: # %entry 75; CHECK-NEXT: # 76; CHECK-NEXT: stwcx. 4, 0, 3 77; CHECK-NEXT: bne 0, .LBB3_1 78; CHECK-NEXT: # %bb.3: # %entry 79; CHECK-NEXT: blr 80entry: 81 %0 = atomicrmw umax ptr %minimum, i32 %val monotonic 82 ret void 83 84} 85 86define void @a16min(ptr nocapture dereferenceable(4) %minimum, i16 %val) #1 { 87; CHECK-LABEL: a16min: 88; CHECK: # %bb.0: # %entry 89; CHECK-NEXT: extsh 4, 4 90; CHECK-NEXT: .LBB4_1: # %entry 91; CHECK-NEXT: # 92; CHECK-NEXT: lharx 5, 0, 3 93; CHECK-NEXT: extsh 5, 5 94; CHECK-NEXT: cmpw 5, 4 95; CHECK-NEXT: bltlr 0 96; CHECK-NEXT: # %bb.2: # %entry 97; CHECK-NEXT: # 98; CHECK-NEXT: sthcx. 4, 0, 3 99; CHECK-NEXT: bne 0, .LBB4_1 100; CHECK-NEXT: # %bb.3: # %entry 101; CHECK-NEXT: blr 102entry: 103 %0 = atomicrmw min ptr %minimum, i16 %val monotonic 104 ret void 105 106} 107 108define void @a16max(ptr nocapture dereferenceable(4) %minimum, i16 %val) #1 { 109; CHECK-LABEL: a16max: 110; CHECK: # %bb.0: # %entry 111; CHECK-NEXT: extsh 4, 4 112; CHECK-NEXT: .LBB5_1: # %entry 113; CHECK-NEXT: # 114; CHECK-NEXT: lharx 5, 0, 3 115; CHECK-NEXT: extsh 5, 5 116; CHECK-NEXT: cmpw 5, 4 117; CHECK-NEXT: bgtlr 0 118; CHECK-NEXT: # %bb.2: # %entry 119; CHECK-NEXT: # 120; CHECK-NEXT: sthcx. 4, 0, 3 121; CHECK-NEXT: bne 0, .LBB5_1 122; CHECK-NEXT: # %bb.3: # %entry 123; CHECK-NEXT: blr 124entry: 125 %0 = atomicrmw max ptr %minimum, i16 %val monotonic 126 ret void 127 128} 129 130define void @a16umin(ptr nocapture dereferenceable(4) %minimum, i16 %val) #1 { 131; CHECK-LABEL: a16umin: 132; CHECK: # %bb.0: # %entry 133; CHECK-NEXT: .LBB6_1: # %entry 134; CHECK-NEXT: # 135; CHECK-NEXT: lharx 5, 0, 3 136; CHECK-NEXT: cmplw 5, 4 137; CHECK-NEXT: bltlr 0 138; CHECK-NEXT: # %bb.2: # %entry 139; CHECK-NEXT: # 140; CHECK-NEXT: sthcx. 4, 0, 3 141; CHECK-NEXT: bne 0, .LBB6_1 142; CHECK-NEXT: # %bb.3: # %entry 143; CHECK-NEXT: blr 144entry: 145 %0 = atomicrmw umin ptr %minimum, i16 %val monotonic 146 ret void 147 148} 149 150define void @a16umax(ptr nocapture dereferenceable(4) %minimum, i16 %val) #1 { 151; CHECK-LABEL: a16umax: 152; CHECK: # %bb.0: # %entry 153; CHECK-NEXT: .LBB7_1: # %entry 154; CHECK-NEXT: # 155; CHECK-NEXT: lharx 5, 0, 3 156; CHECK-NEXT: cmplw 5, 4 157; CHECK-NEXT: bgtlr 0 158; CHECK-NEXT: # %bb.2: # %entry 159; CHECK-NEXT: # 160; CHECK-NEXT: sthcx. 4, 0, 3 161; CHECK-NEXT: bne 0, .LBB7_1 162; CHECK-NEXT: # %bb.3: # %entry 163; CHECK-NEXT: blr 164entry: 165 %0 = atomicrmw umax ptr %minimum, i16 %val monotonic 166 ret void 167 168} 169 170define void @a8min(ptr nocapture dereferenceable(4) %minimum, i8 %val) #1 { 171; CHECK-LABEL: a8min: 172; CHECK: # %bb.0: # %entry 173; CHECK-NEXT: extsb 4, 4 174; CHECK-NEXT: .LBB8_1: # %entry 175; CHECK-NEXT: # 176; CHECK-NEXT: lbarx 5, 0, 3 177; CHECK-NEXT: extsb 5, 5 178; CHECK-NEXT: cmpw 5, 4 179; CHECK-NEXT: bltlr 0 180; CHECK-NEXT: # %bb.2: # %entry 181; CHECK-NEXT: # 182; CHECK-NEXT: stbcx. 4, 0, 3 183; CHECK-NEXT: bne 0, .LBB8_1 184; CHECK-NEXT: # %bb.3: # %entry 185; CHECK-NEXT: blr 186entry: 187 %0 = atomicrmw min ptr %minimum, i8 %val monotonic 188 ret void 189 190} 191 192define void @a8max(ptr nocapture dereferenceable(4) %minimum, i8 %val) #1 { 193; CHECK-LABEL: a8max: 194; CHECK: # %bb.0: # %entry 195; CHECK-NEXT: extsb 4, 4 196; CHECK-NEXT: .LBB9_1: # %entry 197; CHECK-NEXT: # 198; CHECK-NEXT: lbarx 5, 0, 3 199; CHECK-NEXT: extsb 5, 5 200; CHECK-NEXT: cmpw 5, 4 201; CHECK-NEXT: bgtlr 0 202; CHECK-NEXT: # %bb.2: # %entry 203; CHECK-NEXT: # 204; CHECK-NEXT: stbcx. 4, 0, 3 205; CHECK-NEXT: bne 0, .LBB9_1 206; CHECK-NEXT: # %bb.3: # %entry 207; CHECK-NEXT: blr 208entry: 209 %0 = atomicrmw max ptr %minimum, i8 %val monotonic 210 ret void 211 212} 213 214define void @a8umin(ptr nocapture dereferenceable(4) %minimum, i8 %val) #1 { 215; CHECK-LABEL: a8umin: 216; CHECK: # %bb.0: # %entry 217; CHECK-NEXT: .LBB10_1: # %entry 218; CHECK-NEXT: # 219; CHECK-NEXT: lbarx 5, 0, 3 220; CHECK-NEXT: cmplw 5, 4 221; CHECK-NEXT: bltlr 0 222; CHECK-NEXT: # %bb.2: # %entry 223; CHECK-NEXT: # 224; CHECK-NEXT: stbcx. 4, 0, 3 225; CHECK-NEXT: bne 0, .LBB10_1 226; CHECK-NEXT: # %bb.3: # %entry 227; CHECK-NEXT: blr 228entry: 229 %0 = atomicrmw umin ptr %minimum, i8 %val monotonic 230 ret void 231 232} 233 234define void @a8umax(ptr nocapture dereferenceable(4) %minimum, i8 %val) #1 { 235; CHECK-LABEL: a8umax: 236; CHECK: # %bb.0: # %entry 237; CHECK-NEXT: .LBB11_1: # %entry 238; CHECK-NEXT: # 239; CHECK-NEXT: lbarx 5, 0, 3 240; CHECK-NEXT: cmplw 5, 4 241; CHECK-NEXT: bgtlr 0 242; CHECK-NEXT: # %bb.2: # %entry 243; CHECK-NEXT: # 244; CHECK-NEXT: stbcx. 4, 0, 3 245; CHECK-NEXT: bne 0, .LBB11_1 246; CHECK-NEXT: # %bb.3: # %entry 247; CHECK-NEXT: blr 248entry: 249 %0 = atomicrmw umax ptr %minimum, i8 %val monotonic 250 ret void 251 252} 253 254define void @a64min(ptr nocapture dereferenceable(4) %minimum, i64 %val) #0 { 255; CHECK-LABEL: a64min: 256; CHECK: # %bb.0: # %entry 257; CHECK-NEXT: .LBB12_1: # %entry 258; CHECK-NEXT: # 259; CHECK-NEXT: ldarx 5, 0, 3 260; CHECK-NEXT: cmpd 5, 4 261; CHECK-NEXT: bltlr 0 262; CHECK-NEXT: # %bb.2: # %entry 263; CHECK-NEXT: # 264; CHECK-NEXT: stdcx. 4, 0, 3 265; CHECK-NEXT: bne 0, .LBB12_1 266; CHECK-NEXT: # %bb.3: # %entry 267; CHECK-NEXT: blr 268entry: 269 %0 = atomicrmw min ptr %minimum, i64 %val monotonic 270 ret void 271 272} 273 274define void @a64max(ptr nocapture dereferenceable(4) %minimum, i64 %val) #0 { 275; CHECK-LABEL: a64max: 276; CHECK: # %bb.0: # %entry 277; CHECK-NEXT: .LBB13_1: # %entry 278; CHECK-NEXT: # 279; CHECK-NEXT: ldarx 5, 0, 3 280; CHECK-NEXT: cmpd 5, 4 281; CHECK-NEXT: bgtlr 0 282; CHECK-NEXT: # %bb.2: # %entry 283; CHECK-NEXT: # 284; CHECK-NEXT: stdcx. 4, 0, 3 285; CHECK-NEXT: bne 0, .LBB13_1 286; CHECK-NEXT: # %bb.3: # %entry 287; CHECK-NEXT: blr 288entry: 289 %0 = atomicrmw max ptr %minimum, i64 %val monotonic 290 ret void 291 292} 293 294define void @a64umin(ptr nocapture dereferenceable(4) %minimum, i64 %val) #0 { 295; CHECK-LABEL: a64umin: 296; CHECK: # %bb.0: # %entry 297; CHECK-NEXT: .LBB14_1: # %entry 298; CHECK-NEXT: # 299; CHECK-NEXT: ldarx 5, 0, 3 300; CHECK-NEXT: cmpld 5, 4 301; CHECK-NEXT: bltlr 0 302; CHECK-NEXT: # %bb.2: # %entry 303; CHECK-NEXT: # 304; CHECK-NEXT: stdcx. 4, 0, 3 305; CHECK-NEXT: bne 0, .LBB14_1 306; CHECK-NEXT: # %bb.3: # %entry 307; CHECK-NEXT: blr 308entry: 309 %0 = atomicrmw umin ptr %minimum, i64 %val monotonic 310 ret void 311 312} 313 314define void @a64umax(ptr nocapture dereferenceable(4) %minimum, i64 %val) #0 { 315; CHECK-LABEL: a64umax: 316; CHECK: # %bb.0: # %entry 317; CHECK-NEXT: .LBB15_1: # %entry 318; CHECK-NEXT: # 319; CHECK-NEXT: ldarx 5, 0, 3 320; CHECK-NEXT: cmpld 5, 4 321; CHECK-NEXT: bgtlr 0 322; CHECK-NEXT: # %bb.2: # %entry 323; CHECK-NEXT: # 324; CHECK-NEXT: stdcx. 4, 0, 3 325; CHECK-NEXT: bne 0, .LBB15_1 326; CHECK-NEXT: # %bb.3: # %entry 327; CHECK-NEXT: blr 328entry: 329 %0 = atomicrmw umax ptr %minimum, i64 %val monotonic 330 ret void 331 332} 333 334define void @ae16min(ptr nocapture dereferenceable(4) %minimum, i16 %val) #0 { 335; CHECK-LABEL: ae16min: 336; CHECK: # %bb.0: # %entry 337; CHECK-NEXT: li 5, 0 338; CHECK-NEXT: rlwinm 6, 3, 3, 27, 27 339; CHECK-NEXT: extsh 4, 4 340; CHECK-NEXT: ori 7, 5, 65535 341; CHECK-NEXT: xori 5, 6, 16 342; CHECK-NEXT: rldicr 3, 3, 0, 61 343; CHECK-NEXT: slw 8, 4, 5 344; CHECK-NEXT: slw 6, 7, 5 345; CHECK-NEXT: and 7, 8, 6 346; CHECK-NEXT: .LBB16_1: # %entry 347; CHECK-NEXT: # 348; CHECK-NEXT: lwarx 8, 0, 3 349; CHECK-NEXT: and 9, 8, 6 350; CHECK-NEXT: srw 9, 9, 5 351; CHECK-NEXT: extsh 9, 9 352; CHECK-NEXT: cmpw 9, 4 353; CHECK-NEXT: bltlr 0 354; CHECK-NEXT: # %bb.2: # %entry 355; CHECK-NEXT: # 356; CHECK-NEXT: andc 8, 8, 6 357; CHECK-NEXT: or 8, 7, 8 358; CHECK-NEXT: stwcx. 8, 0, 3 359; CHECK-NEXT: bne 0, .LBB16_1 360; CHECK-NEXT: # %bb.3: # %entry 361; CHECK-NEXT: blr 362entry: 363 %0 = atomicrmw min ptr %minimum, i16 %val monotonic 364 ret void 365 366} 367 368define void @ae16max(ptr nocapture dereferenceable(4) %minimum, i16 %val) #0 { 369; CHECK-LABEL: ae16max: 370; CHECK: # %bb.0: # %entry 371; CHECK-NEXT: li 5, 0 372; CHECK-NEXT: rlwinm 6, 3, 3, 27, 27 373; CHECK-NEXT: extsh 4, 4 374; CHECK-NEXT: ori 7, 5, 65535 375; CHECK-NEXT: xori 5, 6, 16 376; CHECK-NEXT: rldicr 3, 3, 0, 61 377; CHECK-NEXT: slw 8, 4, 5 378; CHECK-NEXT: slw 6, 7, 5 379; CHECK-NEXT: and 7, 8, 6 380; CHECK-NEXT: .LBB17_1: # %entry 381; CHECK-NEXT: # 382; CHECK-NEXT: lwarx 8, 0, 3 383; CHECK-NEXT: and 9, 8, 6 384; CHECK-NEXT: srw 9, 9, 5 385; CHECK-NEXT: extsh 9, 9 386; CHECK-NEXT: cmpw 9, 4 387; CHECK-NEXT: bgtlr 0 388; CHECK-NEXT: # %bb.2: # %entry 389; CHECK-NEXT: # 390; CHECK-NEXT: andc 8, 8, 6 391; CHECK-NEXT: or 8, 7, 8 392; CHECK-NEXT: stwcx. 8, 0, 3 393; CHECK-NEXT: bne 0, .LBB17_1 394; CHECK-NEXT: # %bb.3: # %entry 395; CHECK-NEXT: blr 396entry: 397 %0 = atomicrmw max ptr %minimum, i16 %val monotonic 398 ret void 399 400} 401 402define void @ae16umin(ptr nocapture dereferenceable(4) %minimum, i16 %val) #0 { 403; CHECK-LABEL: ae16umin: 404; CHECK: # %bb.0: # %entry 405; CHECK-NEXT: li 5, 0 406; CHECK-NEXT: rlwinm 6, 3, 3, 27, 27 407; CHECK-NEXT: ori 5, 5, 65535 408; CHECK-NEXT: xori 6, 6, 16 409; CHECK-NEXT: slw 4, 4, 6 410; CHECK-NEXT: slw 5, 5, 6 411; CHECK-NEXT: rldicr 3, 3, 0, 61 412; CHECK-NEXT: and 6, 4, 5 413; CHECK-NEXT: .LBB18_1: # %entry 414; CHECK-NEXT: # 415; CHECK-NEXT: lwarx 7, 0, 3 416; CHECK-NEXT: and 8, 7, 5 417; CHECK-NEXT: cmplw 8, 4 418; CHECK-NEXT: bltlr 0 419; CHECK-NEXT: # %bb.2: # %entry 420; CHECK-NEXT: # 421; CHECK-NEXT: andc 7, 7, 5 422; CHECK-NEXT: or 7, 6, 7 423; CHECK-NEXT: stwcx. 7, 0, 3 424; CHECK-NEXT: bne 0, .LBB18_1 425; CHECK-NEXT: # %bb.3: # %entry 426; CHECK-NEXT: blr 427entry: 428 %0 = atomicrmw umin ptr %minimum, i16 %val monotonic 429 ret void 430 431} 432 433define void @ae16umax(ptr nocapture dereferenceable(4) %minimum, i16 %val) #0 { 434; CHECK-LABEL: ae16umax: 435; CHECK: # %bb.0: # %entry 436; CHECK-NEXT: li 5, 0 437; CHECK-NEXT: rlwinm 6, 3, 3, 27, 27 438; CHECK-NEXT: ori 5, 5, 65535 439; CHECK-NEXT: xori 6, 6, 16 440; CHECK-NEXT: slw 4, 4, 6 441; CHECK-NEXT: slw 5, 5, 6 442; CHECK-NEXT: rldicr 3, 3, 0, 61 443; CHECK-NEXT: and 6, 4, 5 444; CHECK-NEXT: .LBB19_1: # %entry 445; CHECK-NEXT: # 446; CHECK-NEXT: lwarx 7, 0, 3 447; CHECK-NEXT: and 8, 7, 5 448; CHECK-NEXT: cmplw 8, 4 449; CHECK-NEXT: bgtlr 0 450; CHECK-NEXT: # %bb.2: # %entry 451; CHECK-NEXT: # 452; CHECK-NEXT: andc 7, 7, 5 453; CHECK-NEXT: or 7, 6, 7 454; CHECK-NEXT: stwcx. 7, 0, 3 455; CHECK-NEXT: bne 0, .LBB19_1 456; CHECK-NEXT: # %bb.3: # %entry 457; CHECK-NEXT: blr 458entry: 459 %0 = atomicrmw umax ptr %minimum, i16 %val monotonic 460 ret void 461 462} 463 464define void @ae8min(ptr nocapture dereferenceable(4) %minimum, i8 %val) #0 { 465; CHECK-LABEL: ae8min: 466; CHECK: # %bb.0: # %entry 467; CHECK-NEXT: rlwinm 5, 3, 3, 27, 28 468; CHECK-NEXT: li 6, 255 469; CHECK-NEXT: extsb 4, 4 470; CHECK-NEXT: xori 5, 5, 24 471; CHECK-NEXT: slw 7, 4, 5 472; CHECK-NEXT: slw 6, 6, 5 473; CHECK-NEXT: rldicr 3, 3, 0, 61 474; CHECK-NEXT: and 7, 7, 6 475; CHECK-NEXT: .LBB20_1: # %entry 476; CHECK-NEXT: # 477; CHECK-NEXT: lwarx 8, 0, 3 478; CHECK-NEXT: and 9, 8, 6 479; CHECK-NEXT: srw 9, 9, 5 480; CHECK-NEXT: extsb 9, 9 481; CHECK-NEXT: cmpw 9, 4 482; CHECK-NEXT: bltlr 0 483; CHECK-NEXT: # %bb.2: # %entry 484; CHECK-NEXT: # 485; CHECK-NEXT: andc 8, 8, 6 486; CHECK-NEXT: or 8, 7, 8 487; CHECK-NEXT: stwcx. 8, 0, 3 488; CHECK-NEXT: bne 0, .LBB20_1 489; CHECK-NEXT: # %bb.3: # %entry 490; CHECK-NEXT: blr 491entry: 492 %0 = atomicrmw min ptr %minimum, i8 %val monotonic 493 ret void 494 495} 496 497define void @ae8max(ptr nocapture dereferenceable(4) %minimum, i8 %val) #0 { 498; CHECK-LABEL: ae8max: 499; CHECK: # %bb.0: # %entry 500; CHECK-NEXT: rlwinm 5, 3, 3, 27, 28 501; CHECK-NEXT: li 6, 255 502; CHECK-NEXT: extsb 4, 4 503; CHECK-NEXT: xori 5, 5, 24 504; CHECK-NEXT: slw 7, 4, 5 505; CHECK-NEXT: slw 6, 6, 5 506; CHECK-NEXT: rldicr 3, 3, 0, 61 507; CHECK-NEXT: and 7, 7, 6 508; CHECK-NEXT: .LBB21_1: # %entry 509; CHECK-NEXT: # 510; CHECK-NEXT: lwarx 8, 0, 3 511; CHECK-NEXT: and 9, 8, 6 512; CHECK-NEXT: srw 9, 9, 5 513; CHECK-NEXT: extsb 9, 9 514; CHECK-NEXT: cmpw 9, 4 515; CHECK-NEXT: bgtlr 0 516; CHECK-NEXT: # %bb.2: # %entry 517; CHECK-NEXT: # 518; CHECK-NEXT: andc 8, 8, 6 519; CHECK-NEXT: or 8, 7, 8 520; CHECK-NEXT: stwcx. 8, 0, 3 521; CHECK-NEXT: bne 0, .LBB21_1 522; CHECK-NEXT: # %bb.3: # %entry 523; CHECK-NEXT: blr 524entry: 525 %0 = atomicrmw max ptr %minimum, i8 %val monotonic 526 ret void 527 528} 529 530define void @ae8umin(ptr nocapture dereferenceable(4) %minimum, i8 %val) #0 { 531; CHECK-LABEL: ae8umin: 532; CHECK: # %bb.0: # %entry 533; CHECK-NEXT: rlwinm 6, 3, 3, 27, 28 534; CHECK-NEXT: li 5, 255 535; CHECK-NEXT: xori 6, 6, 24 536; CHECK-NEXT: rldicr 3, 3, 0, 61 537; CHECK-NEXT: slw 4, 4, 6 538; CHECK-NEXT: slw 5, 5, 6 539; CHECK-NEXT: and 6, 4, 5 540; CHECK-NEXT: .LBB22_1: # %entry 541; CHECK-NEXT: # 542; CHECK-NEXT: lwarx 7, 0, 3 543; CHECK-NEXT: and 8, 7, 5 544; CHECK-NEXT: cmplw 8, 4 545; CHECK-NEXT: bltlr 0 546; CHECK-NEXT: # %bb.2: # %entry 547; CHECK-NEXT: # 548; CHECK-NEXT: andc 7, 7, 5 549; CHECK-NEXT: or 7, 6, 7 550; CHECK-NEXT: stwcx. 7, 0, 3 551; CHECK-NEXT: bne 0, .LBB22_1 552; CHECK-NEXT: # %bb.3: # %entry 553; CHECK-NEXT: blr 554entry: 555 %0 = atomicrmw umin ptr %minimum, i8 %val monotonic 556 ret void 557 558} 559 560define void @ae8umax(ptr nocapture dereferenceable(4) %minimum, i8 %val) #0 { 561; CHECK-LABEL: ae8umax: 562; CHECK: # %bb.0: # %entry 563; CHECK-NEXT: rlwinm 6, 3, 3, 27, 28 564; CHECK-NEXT: li 5, 255 565; CHECK-NEXT: xori 6, 6, 24 566; CHECK-NEXT: rldicr 3, 3, 0, 61 567; CHECK-NEXT: slw 4, 4, 6 568; CHECK-NEXT: slw 5, 5, 6 569; CHECK-NEXT: and 6, 4, 5 570; CHECK-NEXT: .LBB23_1: # %entry 571; CHECK-NEXT: # 572; CHECK-NEXT: lwarx 7, 0, 3 573; CHECK-NEXT: and 8, 7, 5 574; CHECK-NEXT: cmplw 8, 4 575; CHECK-NEXT: bgtlr 0 576; CHECK-NEXT: # %bb.2: # %entry 577; CHECK-NEXT: # 578; CHECK-NEXT: andc 7, 7, 5 579; CHECK-NEXT: or 7, 6, 7 580; CHECK-NEXT: stwcx. 7, 0, 3 581; CHECK-NEXT: bne 0, .LBB23_1 582; CHECK-NEXT: # %bb.3: # %entry 583; CHECK-NEXT: blr 584entry: 585 %0 = atomicrmw umax ptr %minimum, i8 %val monotonic 586 ret void 587 588} 589 590attributes #0 = { nounwind "target-cpu"="ppc64" } 591attributes #1 = { nounwind "target-cpu"="pwr8" } 592 593