1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=powerpc64le-linux-gnu -mcpu=pwr8 -verify-machineinstrs \ 3; RUN: < %s | FileCheck %s 4; RUN: llc -mtriple=powerpc-aix- -mcpu=pwr7 -verify-machineinstrs \ 5; RUN: < %s | FileCheck %s --check-prefix=AIX32 6; ModuleID = '../clang/test/CodeGen/Atomics.c' 7 8@sc = dso_local global i8 0, align 1 9@uc = dso_local global i8 0, align 1 10@ss = dso_local global i16 0, align 2 11@us = dso_local global i16 0, align 2 12@si = dso_local global i32 0, align 4 13@ui = dso_local global i32 0, align 4 14@sll = dso_local global i64 0, align 8 15@ull = dso_local global i64 0, align 8 16@u128 = dso_local global i128 0, align 16 17@s128 = dso_local global i128 0, align 16 18 19define dso_local void @test_op_ignore() local_unnamed_addr #0 { 20; CHECK-LABEL: test_op_ignore: 21; CHECK: # %bb.0: # %entry 22; CHECK-NEXT: addis 3, 2, sc@toc@ha 23; CHECK-NEXT: std 26, -48(1) # 8-byte Folded Spill 24; CHECK-NEXT: std 27, -40(1) # 8-byte Folded Spill 25; CHECK-NEXT: addi 4, 3, sc@toc@l 26; CHECK-NEXT: std 28, -32(1) # 8-byte Folded Spill 27; CHECK-NEXT: std 29, -24(1) # 8-byte Folded Spill 28; CHECK-NEXT: std 30, -16(1) # 8-byte Folded Spill 29; CHECK-NEXT: sync 30; CHECK-NEXT: li 3, 1 31; CHECK-NEXT: .LBB0_1: # %entry 32; CHECK-NEXT: # 33; CHECK-NEXT: lbarx 5, 0, 4 34; CHECK-NEXT: addi 5, 5, 1 35; CHECK-NEXT: stbcx. 5, 0, 4 36; CHECK-NEXT: bne 0, .LBB0_1 37; CHECK-NEXT: # %bb.2: # %entry 38; CHECK-NEXT: addis 5, 2, uc@toc@ha 39; CHECK-NEXT: lwsync 40; CHECK-NEXT: sync 41; CHECK-NEXT: addi 5, 5, uc@toc@l 42; CHECK-NEXT: .LBB0_3: # %entry 43; CHECK-NEXT: # 44; CHECK-NEXT: lbarx 6, 0, 5 45; CHECK-NEXT: addi 6, 6, 1 46; CHECK-NEXT: stbcx. 6, 0, 5 47; CHECK-NEXT: bne 0, .LBB0_3 48; CHECK-NEXT: # %bb.4: # %entry 49; CHECK-NEXT: addis 6, 2, ss@toc@ha 50; CHECK-NEXT: lwsync 51; CHECK-NEXT: sync 52; CHECK-NEXT: addi 6, 6, ss@toc@l 53; CHECK-NEXT: .LBB0_5: # %entry 54; CHECK-NEXT: # 55; CHECK-NEXT: lharx 7, 0, 6 56; CHECK-NEXT: addi 7, 7, 1 57; CHECK-NEXT: sthcx. 7, 0, 6 58; CHECK-NEXT: bne 0, .LBB0_5 59; CHECK-NEXT: # %bb.6: # %entry 60; CHECK-NEXT: addis 7, 2, us@toc@ha 61; CHECK-NEXT: lwsync 62; CHECK-NEXT: sync 63; CHECK-NEXT: addi 8, 7, us@toc@l 64; CHECK-NEXT: .LBB0_7: # %entry 65; CHECK-NEXT: # 66; CHECK-NEXT: lharx 7, 0, 8 67; CHECK-NEXT: addi 7, 7, 1 68; CHECK-NEXT: sthcx. 7, 0, 8 69; CHECK-NEXT: bne 0, .LBB0_7 70; CHECK-NEXT: # %bb.8: # %entry 71; CHECK-NEXT: addis 7, 2, si@toc@ha 72; CHECK-NEXT: lwsync 73; CHECK-NEXT: sync 74; CHECK-NEXT: addi 9, 7, si@toc@l 75; CHECK-NEXT: .LBB0_9: # %entry 76; CHECK-NEXT: # 77; CHECK-NEXT: lwarx 7, 0, 9 78; CHECK-NEXT: addi 7, 7, 1 79; CHECK-NEXT: stwcx. 7, 0, 9 80; CHECK-NEXT: bne 0, .LBB0_9 81; CHECK-NEXT: # %bb.10: # %entry 82; CHECK-NEXT: addis 7, 2, ui@toc@ha 83; CHECK-NEXT: lwsync 84; CHECK-NEXT: sync 85; CHECK-NEXT: addi 10, 7, ui@toc@l 86; CHECK-NEXT: .LBB0_11: # %entry 87; CHECK-NEXT: # 88; CHECK-NEXT: lwarx 7, 0, 10 89; CHECK-NEXT: addi 7, 7, 1 90; CHECK-NEXT: stwcx. 7, 0, 10 91; CHECK-NEXT: bne 0, .LBB0_11 92; CHECK-NEXT: # %bb.12: # %entry 93; CHECK-NEXT: addis 7, 2, sll@toc@ha 94; CHECK-NEXT: lwsync 95; CHECK-NEXT: sync 96; CHECK-NEXT: addi 11, 7, sll@toc@l 97; CHECK-NEXT: li 7, 1 98; CHECK-NEXT: .LBB0_13: # %entry 99; CHECK-NEXT: # 100; CHECK-NEXT: ldarx 12, 0, 11 101; CHECK-NEXT: addi 12, 12, 1 102; CHECK-NEXT: stdcx. 12, 0, 11 103; CHECK-NEXT: bne 0, .LBB0_13 104; CHECK-NEXT: # %bb.14: # %entry 105; CHECK-NEXT: addis 12, 2, ull@toc@ha 106; CHECK-NEXT: lwsync 107; CHECK-NEXT: sync 108; CHECK-NEXT: addi 12, 12, ull@toc@l 109; CHECK-NEXT: .LBB0_15: # %entry 110; CHECK-NEXT: # 111; CHECK-NEXT: ldarx 30, 0, 12 112; CHECK-NEXT: addi 0, 30, 1 113; CHECK-NEXT: stdcx. 0, 0, 12 114; CHECK-NEXT: bne 0, .LBB0_15 115; CHECK-NEXT: # %bb.16: # %entry 116; CHECK-NEXT: lwsync 117; CHECK-NEXT: sync 118; CHECK-NEXT: .LBB0_17: # %entry 119; CHECK-NEXT: # 120; CHECK-NEXT: lbarx 0, 0, 4 121; CHECK-NEXT: sub 0, 0, 3 122; CHECK-NEXT: stbcx. 0, 0, 4 123; CHECK-NEXT: bne 0, .LBB0_17 124; CHECK-NEXT: # %bb.18: # %entry 125; CHECK-NEXT: lwsync 126; CHECK-NEXT: sync 127; CHECK-NEXT: .LBB0_19: # %entry 128; CHECK-NEXT: # 129; CHECK-NEXT: lbarx 0, 0, 5 130; CHECK-NEXT: sub 0, 0, 3 131; CHECK-NEXT: stbcx. 0, 0, 5 132; CHECK-NEXT: bne 0, .LBB0_19 133; CHECK-NEXT: # %bb.20: # %entry 134; CHECK-NEXT: lwsync 135; CHECK-NEXT: sync 136; CHECK-NEXT: .LBB0_21: # %entry 137; CHECK-NEXT: # 138; CHECK-NEXT: lharx 0, 0, 6 139; CHECK-NEXT: sub 0, 0, 3 140; CHECK-NEXT: sthcx. 0, 0, 6 141; CHECK-NEXT: bne 0, .LBB0_21 142; CHECK-NEXT: # %bb.22: # %entry 143; CHECK-NEXT: lwsync 144; CHECK-NEXT: sync 145; CHECK-NEXT: .LBB0_23: # %entry 146; CHECK-NEXT: # 147; CHECK-NEXT: lharx 0, 0, 8 148; CHECK-NEXT: sub 0, 0, 3 149; CHECK-NEXT: sthcx. 0, 0, 8 150; CHECK-NEXT: bne 0, .LBB0_23 151; CHECK-NEXT: # %bb.24: # %entry 152; CHECK-NEXT: lwsync 153; CHECK-NEXT: sync 154; CHECK-NEXT: .LBB0_25: # %entry 155; CHECK-NEXT: # 156; CHECK-NEXT: lwarx 0, 0, 9 157; CHECK-NEXT: sub 0, 0, 3 158; CHECK-NEXT: stwcx. 0, 0, 9 159; CHECK-NEXT: bne 0, .LBB0_25 160; CHECK-NEXT: # %bb.26: # %entry 161; CHECK-NEXT: lwsync 162; CHECK-NEXT: sync 163; CHECK-NEXT: .LBB0_27: # %entry 164; CHECK-NEXT: # 165; CHECK-NEXT: lwarx 0, 0, 10 166; CHECK-NEXT: sub 0, 0, 3 167; CHECK-NEXT: stwcx. 0, 0, 10 168; CHECK-NEXT: bne 0, .LBB0_27 169; CHECK-NEXT: # %bb.28: # %entry 170; CHECK-NEXT: lwsync 171; CHECK-NEXT: sync 172; CHECK-NEXT: .LBB0_29: # %entry 173; CHECK-NEXT: # 174; CHECK-NEXT: ldarx 0, 0, 11 175; CHECK-NEXT: sub 0, 0, 7 176; CHECK-NEXT: stdcx. 0, 0, 11 177; CHECK-NEXT: bne 0, .LBB0_29 178; CHECK-NEXT: # %bb.30: # %entry 179; CHECK-NEXT: lwsync 180; CHECK-NEXT: sync 181; CHECK-NEXT: .LBB0_31: # %entry 182; CHECK-NEXT: # 183; CHECK-NEXT: ldarx 0, 0, 12 184; CHECK-NEXT: sub 0, 0, 7 185; CHECK-NEXT: stdcx. 0, 0, 12 186; CHECK-NEXT: bne 0, .LBB0_31 187; CHECK-NEXT: # %bb.32: # %entry 188; CHECK-NEXT: lwsync 189; CHECK-NEXT: sync 190; CHECK-NEXT: .LBB0_33: # %entry 191; CHECK-NEXT: # 192; CHECK-NEXT: lbarx 0, 0, 4 193; CHECK-NEXT: ori 0, 0, 1 194; CHECK-NEXT: stbcx. 0, 0, 4 195; CHECK-NEXT: bne 0, .LBB0_33 196; CHECK-NEXT: # %bb.34: # %entry 197; CHECK-NEXT: lwsync 198; CHECK-NEXT: sync 199; CHECK-NEXT: .LBB0_35: # %entry 200; CHECK-NEXT: # 201; CHECK-NEXT: lbarx 0, 0, 5 202; CHECK-NEXT: ori 0, 0, 1 203; CHECK-NEXT: stbcx. 0, 0, 5 204; CHECK-NEXT: bne 0, .LBB0_35 205; CHECK-NEXT: # %bb.36: # %entry 206; CHECK-NEXT: lwsync 207; CHECK-NEXT: sync 208; CHECK-NEXT: .LBB0_37: # %entry 209; CHECK-NEXT: # 210; CHECK-NEXT: lharx 0, 0, 6 211; CHECK-NEXT: ori 0, 0, 1 212; CHECK-NEXT: sthcx. 0, 0, 6 213; CHECK-NEXT: bne 0, .LBB0_37 214; CHECK-NEXT: # %bb.38: # %entry 215; CHECK-NEXT: lwsync 216; CHECK-NEXT: sync 217; CHECK-NEXT: .LBB0_39: # %entry 218; CHECK-NEXT: # 219; CHECK-NEXT: lharx 0, 0, 8 220; CHECK-NEXT: ori 0, 0, 1 221; CHECK-NEXT: sthcx. 0, 0, 8 222; CHECK-NEXT: bne 0, .LBB0_39 223; CHECK-NEXT: # %bb.40: # %entry 224; CHECK-NEXT: lwsync 225; CHECK-NEXT: sync 226; CHECK-NEXT: .LBB0_41: # %entry 227; CHECK-NEXT: # 228; CHECK-NEXT: lwarx 0, 0, 9 229; CHECK-NEXT: ori 0, 0, 1 230; CHECK-NEXT: stwcx. 0, 0, 9 231; CHECK-NEXT: bne 0, .LBB0_41 232; CHECK-NEXT: # %bb.42: # %entry 233; CHECK-NEXT: lwsync 234; CHECK-NEXT: sync 235; CHECK-NEXT: .LBB0_43: # %entry 236; CHECK-NEXT: # 237; CHECK-NEXT: lwarx 0, 0, 10 238; CHECK-NEXT: ori 0, 0, 1 239; CHECK-NEXT: stwcx. 0, 0, 10 240; CHECK-NEXT: bne 0, .LBB0_43 241; CHECK-NEXT: # %bb.44: # %entry 242; CHECK-NEXT: lwsync 243; CHECK-NEXT: sync 244; CHECK-NEXT: .LBB0_45: # %entry 245; CHECK-NEXT: # 246; CHECK-NEXT: ldarx 0, 0, 11 247; CHECK-NEXT: ori 0, 0, 1 248; CHECK-NEXT: stdcx. 0, 0, 11 249; CHECK-NEXT: bne 0, .LBB0_45 250; CHECK-NEXT: # %bb.46: # %entry 251; CHECK-NEXT: lwsync 252; CHECK-NEXT: sync 253; CHECK-NEXT: .LBB0_47: # %entry 254; CHECK-NEXT: # 255; CHECK-NEXT: ldarx 0, 0, 12 256; CHECK-NEXT: ori 0, 0, 1 257; CHECK-NEXT: stdcx. 0, 0, 12 258; CHECK-NEXT: bne 0, .LBB0_47 259; CHECK-NEXT: # %bb.48: # %entry 260; CHECK-NEXT: lwsync 261; CHECK-NEXT: sync 262; CHECK-NEXT: .LBB0_49: # %entry 263; CHECK-NEXT: # 264; CHECK-NEXT: lbarx 0, 0, 4 265; CHECK-NEXT: xori 0, 0, 1 266; CHECK-NEXT: stbcx. 0, 0, 4 267; CHECK-NEXT: bne 0, .LBB0_49 268; CHECK-NEXT: # %bb.50: # %entry 269; CHECK-NEXT: lwsync 270; CHECK-NEXT: sync 271; CHECK-NEXT: .LBB0_51: # %entry 272; CHECK-NEXT: # 273; CHECK-NEXT: lbarx 0, 0, 5 274; CHECK-NEXT: xori 0, 0, 1 275; CHECK-NEXT: stbcx. 0, 0, 5 276; CHECK-NEXT: bne 0, .LBB0_51 277; CHECK-NEXT: # %bb.52: # %entry 278; CHECK-NEXT: lwsync 279; CHECK-NEXT: sync 280; CHECK-NEXT: .LBB0_53: # %entry 281; CHECK-NEXT: # 282; CHECK-NEXT: lharx 0, 0, 6 283; CHECK-NEXT: xori 0, 0, 1 284; CHECK-NEXT: sthcx. 0, 0, 6 285; CHECK-NEXT: bne 0, .LBB0_53 286; CHECK-NEXT: # %bb.54: # %entry 287; CHECK-NEXT: lwsync 288; CHECK-NEXT: sync 289; CHECK-NEXT: .LBB0_55: # %entry 290; CHECK-NEXT: # 291; CHECK-NEXT: lharx 0, 0, 8 292; CHECK-NEXT: xori 0, 0, 1 293; CHECK-NEXT: sthcx. 0, 0, 8 294; CHECK-NEXT: bne 0, .LBB0_55 295; CHECK-NEXT: # %bb.56: # %entry 296; CHECK-NEXT: lwsync 297; CHECK-NEXT: sync 298; CHECK-NEXT: .LBB0_57: # %entry 299; CHECK-NEXT: # 300; CHECK-NEXT: lwarx 0, 0, 9 301; CHECK-NEXT: xori 0, 0, 1 302; CHECK-NEXT: stwcx. 0, 0, 9 303; CHECK-NEXT: bne 0, .LBB0_57 304; CHECK-NEXT: # %bb.58: # %entry 305; CHECK-NEXT: lwsync 306; CHECK-NEXT: sync 307; CHECK-NEXT: .LBB0_59: # %entry 308; CHECK-NEXT: # 309; CHECK-NEXT: lwarx 0, 0, 10 310; CHECK-NEXT: xori 0, 0, 1 311; CHECK-NEXT: stwcx. 0, 0, 10 312; CHECK-NEXT: bne 0, .LBB0_59 313; CHECK-NEXT: # %bb.60: # %entry 314; CHECK-NEXT: lwsync 315; CHECK-NEXT: sync 316; CHECK-NEXT: .LBB0_61: # %entry 317; CHECK-NEXT: # 318; CHECK-NEXT: ldarx 0, 0, 11 319; CHECK-NEXT: xori 0, 0, 1 320; CHECK-NEXT: stdcx. 0, 0, 11 321; CHECK-NEXT: bne 0, .LBB0_61 322; CHECK-NEXT: # %bb.62: # %entry 323; CHECK-NEXT: lwsync 324; CHECK-NEXT: sync 325; CHECK-NEXT: .LBB0_63: # %entry 326; CHECK-NEXT: # 327; CHECK-NEXT: ldarx 0, 0, 12 328; CHECK-NEXT: xori 0, 0, 1 329; CHECK-NEXT: stdcx. 0, 0, 12 330; CHECK-NEXT: bne 0, .LBB0_63 331; CHECK-NEXT: # %bb.64: # %entry 332; CHECK-NEXT: addis 30, 2, u128@toc@ha 333; CHECK-NEXT: lwsync 334; CHECK-NEXT: sync 335; CHECK-NEXT: addi 0, 30, u128@toc@l 336; CHECK-NEXT: li 30, 0 337; CHECK-NEXT: .LBB0_65: # %entry 338; CHECK-NEXT: # 339; CHECK-NEXT: lqarx 28, 0, 0 340; CHECK-NEXT: xor 27, 7, 29 341; CHECK-NEXT: xor 26, 30, 28 342; CHECK-NEXT: stqcx. 26, 0, 0 343; CHECK-NEXT: bne 0, .LBB0_65 344; CHECK-NEXT: # %bb.66: # %entry 345; CHECK-NEXT: addis 29, 2, s128@toc@ha 346; CHECK-NEXT: lwsync 347; CHECK-NEXT: addi 0, 29, s128@toc@l 348; CHECK-NEXT: sync 349; CHECK-NEXT: .LBB0_67: # %entry 350; CHECK-NEXT: # 351; CHECK-NEXT: lqarx 28, 0, 0 352; CHECK-NEXT: xor 27, 7, 29 353; CHECK-NEXT: xor 26, 30, 28 354; CHECK-NEXT: stqcx. 26, 0, 0 355; CHECK-NEXT: bne 0, .LBB0_67 356; CHECK-NEXT: # %bb.68: # %entry 357; CHECK-NEXT: lwsync 358; CHECK-NEXT: sync 359; CHECK-NEXT: .LBB0_69: # %entry 360; CHECK-NEXT: # 361; CHECK-NEXT: lbarx 0, 0, 4 362; CHECK-NEXT: nand 0, 3, 0 363; CHECK-NEXT: stbcx. 0, 0, 4 364; CHECK-NEXT: bne 0, .LBB0_69 365; CHECK-NEXT: # %bb.70: # %entry 366; CHECK-NEXT: lwsync 367; CHECK-NEXT: sync 368; CHECK-NEXT: .LBB0_71: # %entry 369; CHECK-NEXT: # 370; CHECK-NEXT: lbarx 0, 0, 5 371; CHECK-NEXT: nand 0, 3, 0 372; CHECK-NEXT: stbcx. 0, 0, 5 373; CHECK-NEXT: bne 0, .LBB0_71 374; CHECK-NEXT: # %bb.72: # %entry 375; CHECK-NEXT: lwsync 376; CHECK-NEXT: sync 377; CHECK-NEXT: .LBB0_73: # %entry 378; CHECK-NEXT: # 379; CHECK-NEXT: lharx 0, 0, 6 380; CHECK-NEXT: nand 0, 3, 0 381; CHECK-NEXT: sthcx. 0, 0, 6 382; CHECK-NEXT: bne 0, .LBB0_73 383; CHECK-NEXT: # %bb.74: # %entry 384; CHECK-NEXT: lwsync 385; CHECK-NEXT: sync 386; CHECK-NEXT: .LBB0_75: # %entry 387; CHECK-NEXT: # 388; CHECK-NEXT: lharx 0, 0, 8 389; CHECK-NEXT: nand 0, 3, 0 390; CHECK-NEXT: sthcx. 0, 0, 8 391; CHECK-NEXT: bne 0, .LBB0_75 392; CHECK-NEXT: # %bb.76: # %entry 393; CHECK-NEXT: lwsync 394; CHECK-NEXT: sync 395; CHECK-NEXT: .LBB0_77: # %entry 396; CHECK-NEXT: # 397; CHECK-NEXT: lwarx 0, 0, 9 398; CHECK-NEXT: nand 0, 3, 0 399; CHECK-NEXT: stwcx. 0, 0, 9 400; CHECK-NEXT: bne 0, .LBB0_77 401; CHECK-NEXT: # %bb.78: # %entry 402; CHECK-NEXT: lwsync 403; CHECK-NEXT: sync 404; CHECK-NEXT: .LBB0_79: # %entry 405; CHECK-NEXT: # 406; CHECK-NEXT: lwarx 0, 0, 10 407; CHECK-NEXT: nand 0, 3, 0 408; CHECK-NEXT: stwcx. 0, 0, 10 409; CHECK-NEXT: bne 0, .LBB0_79 410; CHECK-NEXT: # %bb.80: # %entry 411; CHECK-NEXT: lwsync 412; CHECK-NEXT: sync 413; CHECK-NEXT: .LBB0_81: # %entry 414; CHECK-NEXT: # 415; CHECK-NEXT: ldarx 0, 0, 11 416; CHECK-NEXT: nand 0, 7, 0 417; CHECK-NEXT: stdcx. 0, 0, 11 418; CHECK-NEXT: bne 0, .LBB0_81 419; CHECK-NEXT: # %bb.82: # %entry 420; CHECK-NEXT: lwsync 421; CHECK-NEXT: sync 422; CHECK-NEXT: .LBB0_83: # %entry 423; CHECK-NEXT: # 424; CHECK-NEXT: ldarx 0, 0, 12 425; CHECK-NEXT: nand 0, 7, 0 426; CHECK-NEXT: stdcx. 0, 0, 12 427; CHECK-NEXT: bne 0, .LBB0_83 428; CHECK-NEXT: # %bb.84: # %entry 429; CHECK-NEXT: lwsync 430; CHECK-NEXT: sync 431; CHECK-NEXT: .LBB0_85: # %entry 432; CHECK-NEXT: # 433; CHECK-NEXT: lbarx 0, 0, 4 434; CHECK-NEXT: and 0, 3, 0 435; CHECK-NEXT: stbcx. 0, 0, 4 436; CHECK-NEXT: bne 0, .LBB0_85 437; CHECK-NEXT: # %bb.86: # %entry 438; CHECK-NEXT: lwsync 439; CHECK-NEXT: sync 440; CHECK-NEXT: .LBB0_87: # %entry 441; CHECK-NEXT: # 442; CHECK-NEXT: lbarx 4, 0, 5 443; CHECK-NEXT: and 4, 3, 4 444; CHECK-NEXT: stbcx. 4, 0, 5 445; CHECK-NEXT: bne 0, .LBB0_87 446; CHECK-NEXT: # %bb.88: # %entry 447; CHECK-NEXT: lwsync 448; CHECK-NEXT: sync 449; CHECK-NEXT: .LBB0_89: # %entry 450; CHECK-NEXT: # 451; CHECK-NEXT: lharx 4, 0, 6 452; CHECK-NEXT: and 4, 3, 4 453; CHECK-NEXT: sthcx. 4, 0, 6 454; CHECK-NEXT: bne 0, .LBB0_89 455; CHECK-NEXT: # %bb.90: # %entry 456; CHECK-NEXT: lwsync 457; CHECK-NEXT: sync 458; CHECK-NEXT: .LBB0_91: # %entry 459; CHECK-NEXT: # 460; CHECK-NEXT: lharx 4, 0, 8 461; CHECK-NEXT: and 4, 3, 4 462; CHECK-NEXT: sthcx. 4, 0, 8 463; CHECK-NEXT: bne 0, .LBB0_91 464; CHECK-NEXT: # %bb.92: # %entry 465; CHECK-NEXT: lwsync 466; CHECK-NEXT: sync 467; CHECK-NEXT: .LBB0_93: # %entry 468; CHECK-NEXT: # 469; CHECK-NEXT: lwarx 4, 0, 9 470; CHECK-NEXT: and 4, 3, 4 471; CHECK-NEXT: stwcx. 4, 0, 9 472; CHECK-NEXT: bne 0, .LBB0_93 473; CHECK-NEXT: # %bb.94: # %entry 474; CHECK-NEXT: lwsync 475; CHECK-NEXT: sync 476; CHECK-NEXT: .LBB0_95: # %entry 477; CHECK-NEXT: # 478; CHECK-NEXT: lwarx 4, 0, 10 479; CHECK-NEXT: and 4, 3, 4 480; CHECK-NEXT: stwcx. 4, 0, 10 481; CHECK-NEXT: bne 0, .LBB0_95 482; CHECK-NEXT: # %bb.96: # %entry 483; CHECK-NEXT: lwsync 484; CHECK-NEXT: sync 485; CHECK-NEXT: .LBB0_97: # %entry 486; CHECK-NEXT: # 487; CHECK-NEXT: ldarx 3, 0, 11 488; CHECK-NEXT: and 3, 7, 3 489; CHECK-NEXT: stdcx. 3, 0, 11 490; CHECK-NEXT: bne 0, .LBB0_97 491; CHECK-NEXT: # %bb.98: # %entry 492; CHECK-NEXT: lwsync 493; CHECK-NEXT: sync 494; CHECK-NEXT: .LBB0_99: # %entry 495; CHECK-NEXT: # 496; CHECK-NEXT: ldarx 3, 0, 12 497; CHECK-NEXT: and 3, 7, 3 498; CHECK-NEXT: stdcx. 3, 0, 12 499; CHECK-NEXT: bne 0, .LBB0_99 500; CHECK-NEXT: # %bb.100: # %entry 501; CHECK-NEXT: lwsync 502; CHECK-NEXT: ld 30, -16(1) # 8-byte Folded Reload 503; CHECK-NEXT: ld 29, -24(1) # 8-byte Folded Reload 504; CHECK-NEXT: ld 28, -32(1) # 8-byte Folded Reload 505; CHECK-NEXT: ld 27, -40(1) # 8-byte Folded Reload 506; CHECK-NEXT: ld 26, -48(1) # 8-byte Folded Reload 507; CHECK-NEXT: blr 508; 509; AIX32-LABEL: test_op_ignore: 510; AIX32: # %bb.0: # %entry 511; AIX32-NEXT: mflr 0 512; AIX32-NEXT: stwu 1, -160(1) 513; AIX32-NEXT: lwz 3, L..C0(2) # @sc 514; AIX32-NEXT: stw 0, 168(1) 515; AIX32-NEXT: rlwinm 4, 3, 3, 27, 28 516; AIX32-NEXT: stw 15, 92(1) # 4-byte Folded Spill 517; AIX32-NEXT: stw 26, 136(1) # 4-byte Folded Spill 518; AIX32-NEXT: stw 28, 144(1) # 4-byte Folded Spill 519; AIX32-NEXT: li 15, 1 520; AIX32-NEXT: rlwinm 28, 3, 0, 0, 29 521; AIX32-NEXT: li 3, 255 522; AIX32-NEXT: xori 26, 4, 24 523; AIX32-NEXT: stw 16, 96(1) # 4-byte Folded Spill 524; AIX32-NEXT: stw 17, 100(1) # 4-byte Folded Spill 525; AIX32-NEXT: stw 18, 104(1) # 4-byte Folded Spill 526; AIX32-NEXT: stw 19, 108(1) # 4-byte Folded Spill 527; AIX32-NEXT: stw 20, 112(1) # 4-byte Folded Spill 528; AIX32-NEXT: stw 21, 116(1) # 4-byte Folded Spill 529; AIX32-NEXT: stw 22, 120(1) # 4-byte Folded Spill 530; AIX32-NEXT: stw 23, 124(1) # 4-byte Folded Spill 531; AIX32-NEXT: stw 24, 128(1) # 4-byte Folded Spill 532; AIX32-NEXT: stw 25, 132(1) # 4-byte Folded Spill 533; AIX32-NEXT: stw 27, 140(1) # 4-byte Folded Spill 534; AIX32-NEXT: stw 29, 148(1) # 4-byte Folded Spill 535; AIX32-NEXT: stw 30, 152(1) # 4-byte Folded Spill 536; AIX32-NEXT: stw 31, 156(1) # 4-byte Folded Spill 537; AIX32-NEXT: sync 538; AIX32-NEXT: slw 29, 15, 26 539; AIX32-NEXT: slw 3, 3, 26 540; AIX32-NEXT: L..BB0_1: # %entry 541; AIX32-NEXT: # 542; AIX32-NEXT: lwarx 4, 0, 28 543; AIX32-NEXT: add 5, 29, 4 544; AIX32-NEXT: andc 4, 4, 3 545; AIX32-NEXT: and 5, 5, 3 546; AIX32-NEXT: or 4, 5, 4 547; AIX32-NEXT: stwcx. 4, 0, 28 548; AIX32-NEXT: bne 0, L..BB0_1 549; AIX32-NEXT: # %bb.2: # %entry 550; AIX32-NEXT: lwz 3, L..C1(2) # @uc 551; AIX32-NEXT: lwsync 552; AIX32-NEXT: sync 553; AIX32-NEXT: rlwinm 4, 3, 3, 27, 28 554; AIX32-NEXT: rlwinm 27, 3, 0, 0, 29 555; AIX32-NEXT: li 3, 255 556; AIX32-NEXT: xori 24, 4, 24 557; AIX32-NEXT: slw 18, 15, 24 558; AIX32-NEXT: slw 3, 3, 24 559; AIX32-NEXT: L..BB0_3: # %entry 560; AIX32-NEXT: # 561; AIX32-NEXT: lwarx 4, 0, 27 562; AIX32-NEXT: add 5, 18, 4 563; AIX32-NEXT: andc 4, 4, 3 564; AIX32-NEXT: and 5, 5, 3 565; AIX32-NEXT: or 4, 5, 4 566; AIX32-NEXT: stwcx. 4, 0, 27 567; AIX32-NEXT: bne 0, L..BB0_3 568; AIX32-NEXT: # %bb.4: # %entry 569; AIX32-NEXT: lwz 3, L..C2(2) # @ss 570; AIX32-NEXT: lwsync 571; AIX32-NEXT: sync 572; AIX32-NEXT: rlwinm 4, 3, 3, 27, 27 573; AIX32-NEXT: rlwinm 25, 3, 0, 0, 29 574; AIX32-NEXT: li 3, 0 575; AIX32-NEXT: xori 22, 4, 16 576; AIX32-NEXT: ori 3, 3, 65535 577; AIX32-NEXT: slw 17, 15, 22 578; AIX32-NEXT: slw 3, 3, 22 579; AIX32-NEXT: L..BB0_5: # %entry 580; AIX32-NEXT: # 581; AIX32-NEXT: lwarx 4, 0, 25 582; AIX32-NEXT: add 5, 17, 4 583; AIX32-NEXT: andc 4, 4, 3 584; AIX32-NEXT: and 5, 5, 3 585; AIX32-NEXT: or 4, 5, 4 586; AIX32-NEXT: stwcx. 4, 0, 25 587; AIX32-NEXT: bne 0, L..BB0_5 588; AIX32-NEXT: # %bb.6: # %entry 589; AIX32-NEXT: lwz 3, L..C3(2) # @us 590; AIX32-NEXT: lwsync 591; AIX32-NEXT: sync 592; AIX32-NEXT: rlwinm 4, 3, 3, 27, 27 593; AIX32-NEXT: rlwinm 23, 3, 0, 0, 29 594; AIX32-NEXT: li 3, 0 595; AIX32-NEXT: xori 21, 4, 16 596; AIX32-NEXT: ori 3, 3, 65535 597; AIX32-NEXT: slw 16, 15, 21 598; AIX32-NEXT: slw 3, 3, 21 599; AIX32-NEXT: L..BB0_7: # %entry 600; AIX32-NEXT: # 601; AIX32-NEXT: lwarx 4, 0, 23 602; AIX32-NEXT: add 5, 16, 4 603; AIX32-NEXT: andc 4, 4, 3 604; AIX32-NEXT: and 5, 5, 3 605; AIX32-NEXT: or 4, 5, 4 606; AIX32-NEXT: stwcx. 4, 0, 23 607; AIX32-NEXT: bne 0, L..BB0_7 608; AIX32-NEXT: # %bb.8: # %entry 609; AIX32-NEXT: lwsync 610; AIX32-NEXT: lwz 20, L..C4(2) # @si 611; AIX32-NEXT: sync 612; AIX32-NEXT: L..BB0_9: # %entry 613; AIX32-NEXT: # 614; AIX32-NEXT: lwarx 3, 0, 20 615; AIX32-NEXT: addi 3, 3, 1 616; AIX32-NEXT: stwcx. 3, 0, 20 617; AIX32-NEXT: bne 0, L..BB0_9 618; AIX32-NEXT: # %bb.10: # %entry 619; AIX32-NEXT: lwsync 620; AIX32-NEXT: lwz 19, L..C5(2) # @ui 621; AIX32-NEXT: sync 622; AIX32-NEXT: L..BB0_11: # %entry 623; AIX32-NEXT: # 624; AIX32-NEXT: lwarx 3, 0, 19 625; AIX32-NEXT: addi 3, 3, 1 626; AIX32-NEXT: stwcx. 3, 0, 19 627; AIX32-NEXT: bne 0, L..BB0_11 628; AIX32-NEXT: # %bb.12: # %entry 629; AIX32-NEXT: lwz 31, L..C6(2) # @sll 630; AIX32-NEXT: lwsync 631; AIX32-NEXT: li 4, 0 632; AIX32-NEXT: li 5, 1 633; AIX32-NEXT: li 6, 5 634; AIX32-NEXT: mr 3, 31 635; AIX32-NEXT: bl .__atomic_fetch_add_8[PR] 636; AIX32-NEXT: nop 637; AIX32-NEXT: lwz 30, L..C7(2) # @ull 638; AIX32-NEXT: li 4, 0 639; AIX32-NEXT: li 5, 1 640; AIX32-NEXT: mr 3, 30 641; AIX32-NEXT: li 6, 5 642; AIX32-NEXT: bl .__atomic_fetch_add_8[PR] 643; AIX32-NEXT: nop 644; AIX32-NEXT: li 3, 255 645; AIX32-NEXT: sync 646; AIX32-NEXT: slw 3, 3, 26 647; AIX32-NEXT: L..BB0_13: # %entry 648; AIX32-NEXT: # 649; AIX32-NEXT: lwarx 4, 0, 28 650; AIX32-NEXT: sub 5, 4, 29 651; AIX32-NEXT: andc 4, 4, 3 652; AIX32-NEXT: and 5, 5, 3 653; AIX32-NEXT: or 4, 5, 4 654; AIX32-NEXT: stwcx. 4, 0, 28 655; AIX32-NEXT: bne 0, L..BB0_13 656; AIX32-NEXT: # %bb.14: # %entry 657; AIX32-NEXT: li 3, 255 658; AIX32-NEXT: lwsync 659; AIX32-NEXT: sync 660; AIX32-NEXT: slw 3, 3, 24 661; AIX32-NEXT: L..BB0_15: # %entry 662; AIX32-NEXT: # 663; AIX32-NEXT: lwarx 4, 0, 27 664; AIX32-NEXT: sub 5, 4, 18 665; AIX32-NEXT: andc 4, 4, 3 666; AIX32-NEXT: and 5, 5, 3 667; AIX32-NEXT: or 4, 5, 4 668; AIX32-NEXT: stwcx. 4, 0, 27 669; AIX32-NEXT: bne 0, L..BB0_15 670; AIX32-NEXT: # %bb.16: # %entry 671; AIX32-NEXT: li 3, 0 672; AIX32-NEXT: lwsync 673; AIX32-NEXT: sync 674; AIX32-NEXT: ori 3, 3, 65535 675; AIX32-NEXT: slw 3, 3, 22 676; AIX32-NEXT: L..BB0_17: # %entry 677; AIX32-NEXT: # 678; AIX32-NEXT: lwarx 4, 0, 25 679; AIX32-NEXT: sub 5, 4, 17 680; AIX32-NEXT: andc 4, 4, 3 681; AIX32-NEXT: and 5, 5, 3 682; AIX32-NEXT: or 4, 5, 4 683; AIX32-NEXT: stwcx. 4, 0, 25 684; AIX32-NEXT: bne 0, L..BB0_17 685; AIX32-NEXT: # %bb.18: # %entry 686; AIX32-NEXT: li 3, 0 687; AIX32-NEXT: lwsync 688; AIX32-NEXT: sync 689; AIX32-NEXT: ori 3, 3, 65535 690; AIX32-NEXT: slw 3, 3, 21 691; AIX32-NEXT: L..BB0_19: # %entry 692; AIX32-NEXT: # 693; AIX32-NEXT: lwarx 4, 0, 23 694; AIX32-NEXT: sub 5, 4, 16 695; AIX32-NEXT: andc 4, 4, 3 696; AIX32-NEXT: and 5, 5, 3 697; AIX32-NEXT: or 4, 5, 4 698; AIX32-NEXT: stwcx. 4, 0, 23 699; AIX32-NEXT: bne 0, L..BB0_19 700; AIX32-NEXT: # %bb.20: # %entry 701; AIX32-NEXT: lwsync 702; AIX32-NEXT: sync 703; AIX32-NEXT: L..BB0_21: # %entry 704; AIX32-NEXT: # 705; AIX32-NEXT: lwarx 3, 0, 20 706; AIX32-NEXT: sub 3, 3, 15 707; AIX32-NEXT: stwcx. 3, 0, 20 708; AIX32-NEXT: bne 0, L..BB0_21 709; AIX32-NEXT: # %bb.22: # %entry 710; AIX32-NEXT: lwsync 711; AIX32-NEXT: sync 712; AIX32-NEXT: L..BB0_23: # %entry 713; AIX32-NEXT: # 714; AIX32-NEXT: lwarx 3, 0, 19 715; AIX32-NEXT: sub 3, 3, 15 716; AIX32-NEXT: stwcx. 3, 0, 19 717; AIX32-NEXT: bne 0, L..BB0_23 718; AIX32-NEXT: # %bb.24: # %entry 719; AIX32-NEXT: lwsync 720; AIX32-NEXT: li 4, 0 721; AIX32-NEXT: li 5, 1 722; AIX32-NEXT: mr 3, 31 723; AIX32-NEXT: li 6, 5 724; AIX32-NEXT: bl .__atomic_fetch_sub_8[PR] 725; AIX32-NEXT: nop 726; AIX32-NEXT: li 4, 0 727; AIX32-NEXT: li 5, 1 728; AIX32-NEXT: mr 3, 30 729; AIX32-NEXT: li 6, 5 730; AIX32-NEXT: bl .__atomic_fetch_sub_8[PR] 731; AIX32-NEXT: nop 732; AIX32-NEXT: li 3, 255 733; AIX32-NEXT: sync 734; AIX32-NEXT: slw 3, 3, 26 735; AIX32-NEXT: L..BB0_25: # %entry 736; AIX32-NEXT: # 737; AIX32-NEXT: lwarx 4, 0, 28 738; AIX32-NEXT: or 5, 29, 4 739; AIX32-NEXT: andc 4, 4, 3 740; AIX32-NEXT: and 5, 5, 3 741; AIX32-NEXT: or 4, 5, 4 742; AIX32-NEXT: stwcx. 4, 0, 28 743; AIX32-NEXT: bne 0, L..BB0_25 744; AIX32-NEXT: # %bb.26: # %entry 745; AIX32-NEXT: li 3, 255 746; AIX32-NEXT: lwsync 747; AIX32-NEXT: sync 748; AIX32-NEXT: slw 3, 3, 24 749; AIX32-NEXT: L..BB0_27: # %entry 750; AIX32-NEXT: # 751; AIX32-NEXT: lwarx 4, 0, 27 752; AIX32-NEXT: or 5, 18, 4 753; AIX32-NEXT: andc 4, 4, 3 754; AIX32-NEXT: and 5, 5, 3 755; AIX32-NEXT: or 4, 5, 4 756; AIX32-NEXT: stwcx. 4, 0, 27 757; AIX32-NEXT: bne 0, L..BB0_27 758; AIX32-NEXT: # %bb.28: # %entry 759; AIX32-NEXT: li 3, 0 760; AIX32-NEXT: lwsync 761; AIX32-NEXT: sync 762; AIX32-NEXT: ori 3, 3, 65535 763; AIX32-NEXT: slw 3, 3, 22 764; AIX32-NEXT: L..BB0_29: # %entry 765; AIX32-NEXT: # 766; AIX32-NEXT: lwarx 4, 0, 25 767; AIX32-NEXT: or 5, 17, 4 768; AIX32-NEXT: andc 4, 4, 3 769; AIX32-NEXT: and 5, 5, 3 770; AIX32-NEXT: or 4, 5, 4 771; AIX32-NEXT: stwcx. 4, 0, 25 772; AIX32-NEXT: bne 0, L..BB0_29 773; AIX32-NEXT: # %bb.30: # %entry 774; AIX32-NEXT: li 3, 0 775; AIX32-NEXT: lwsync 776; AIX32-NEXT: sync 777; AIX32-NEXT: ori 3, 3, 65535 778; AIX32-NEXT: slw 3, 3, 21 779; AIX32-NEXT: L..BB0_31: # %entry 780; AIX32-NEXT: # 781; AIX32-NEXT: lwarx 4, 0, 23 782; AIX32-NEXT: or 5, 16, 4 783; AIX32-NEXT: andc 4, 4, 3 784; AIX32-NEXT: and 5, 5, 3 785; AIX32-NEXT: or 4, 5, 4 786; AIX32-NEXT: stwcx. 4, 0, 23 787; AIX32-NEXT: bne 0, L..BB0_31 788; AIX32-NEXT: # %bb.32: # %entry 789; AIX32-NEXT: lwsync 790; AIX32-NEXT: sync 791; AIX32-NEXT: L..BB0_33: # %entry 792; AIX32-NEXT: # 793; AIX32-NEXT: lwarx 3, 0, 20 794; AIX32-NEXT: ori 3, 3, 1 795; AIX32-NEXT: stwcx. 3, 0, 20 796; AIX32-NEXT: bne 0, L..BB0_33 797; AIX32-NEXT: # %bb.34: # %entry 798; AIX32-NEXT: lwsync 799; AIX32-NEXT: sync 800; AIX32-NEXT: L..BB0_35: # %entry 801; AIX32-NEXT: # 802; AIX32-NEXT: lwarx 3, 0, 19 803; AIX32-NEXT: ori 3, 3, 1 804; AIX32-NEXT: stwcx. 3, 0, 19 805; AIX32-NEXT: bne 0, L..BB0_35 806; AIX32-NEXT: # %bb.36: # %entry 807; AIX32-NEXT: lwsync 808; AIX32-NEXT: li 4, 0 809; AIX32-NEXT: li 5, 1 810; AIX32-NEXT: mr 3, 31 811; AIX32-NEXT: li 6, 5 812; AIX32-NEXT: bl .__atomic_fetch_or_8[PR] 813; AIX32-NEXT: nop 814; AIX32-NEXT: li 4, 0 815; AIX32-NEXT: li 5, 1 816; AIX32-NEXT: mr 3, 30 817; AIX32-NEXT: li 6, 5 818; AIX32-NEXT: bl .__atomic_fetch_or_8[PR] 819; AIX32-NEXT: nop 820; AIX32-NEXT: li 3, 255 821; AIX32-NEXT: sync 822; AIX32-NEXT: slw 3, 3, 26 823; AIX32-NEXT: L..BB0_37: # %entry 824; AIX32-NEXT: # 825; AIX32-NEXT: lwarx 4, 0, 28 826; AIX32-NEXT: xor 5, 29, 4 827; AIX32-NEXT: andc 4, 4, 3 828; AIX32-NEXT: and 5, 5, 3 829; AIX32-NEXT: or 4, 5, 4 830; AIX32-NEXT: stwcx. 4, 0, 28 831; AIX32-NEXT: bne 0, L..BB0_37 832; AIX32-NEXT: # %bb.38: # %entry 833; AIX32-NEXT: li 3, 255 834; AIX32-NEXT: lwsync 835; AIX32-NEXT: sync 836; AIX32-NEXT: slw 3, 3, 24 837; AIX32-NEXT: L..BB0_39: # %entry 838; AIX32-NEXT: # 839; AIX32-NEXT: lwarx 4, 0, 27 840; AIX32-NEXT: xor 5, 18, 4 841; AIX32-NEXT: andc 4, 4, 3 842; AIX32-NEXT: and 5, 5, 3 843; AIX32-NEXT: or 4, 5, 4 844; AIX32-NEXT: stwcx. 4, 0, 27 845; AIX32-NEXT: bne 0, L..BB0_39 846; AIX32-NEXT: # %bb.40: # %entry 847; AIX32-NEXT: li 3, 0 848; AIX32-NEXT: lwsync 849; AIX32-NEXT: sync 850; AIX32-NEXT: ori 3, 3, 65535 851; AIX32-NEXT: slw 3, 3, 22 852; AIX32-NEXT: L..BB0_41: # %entry 853; AIX32-NEXT: # 854; AIX32-NEXT: lwarx 4, 0, 25 855; AIX32-NEXT: xor 5, 17, 4 856; AIX32-NEXT: andc 4, 4, 3 857; AIX32-NEXT: and 5, 5, 3 858; AIX32-NEXT: or 4, 5, 4 859; AIX32-NEXT: stwcx. 4, 0, 25 860; AIX32-NEXT: bne 0, L..BB0_41 861; AIX32-NEXT: # %bb.42: # %entry 862; AIX32-NEXT: li 3, 0 863; AIX32-NEXT: lwsync 864; AIX32-NEXT: sync 865; AIX32-NEXT: ori 3, 3, 65535 866; AIX32-NEXT: slw 3, 3, 21 867; AIX32-NEXT: L..BB0_43: # %entry 868; AIX32-NEXT: # 869; AIX32-NEXT: lwarx 4, 0, 23 870; AIX32-NEXT: xor 5, 16, 4 871; AIX32-NEXT: andc 4, 4, 3 872; AIX32-NEXT: and 5, 5, 3 873; AIX32-NEXT: or 4, 5, 4 874; AIX32-NEXT: stwcx. 4, 0, 23 875; AIX32-NEXT: bne 0, L..BB0_43 876; AIX32-NEXT: # %bb.44: # %entry 877; AIX32-NEXT: lwsync 878; AIX32-NEXT: sync 879; AIX32-NEXT: L..BB0_45: # %entry 880; AIX32-NEXT: # 881; AIX32-NEXT: lwarx 3, 0, 20 882; AIX32-NEXT: xori 3, 3, 1 883; AIX32-NEXT: stwcx. 3, 0, 20 884; AIX32-NEXT: bne 0, L..BB0_45 885; AIX32-NEXT: # %bb.46: # %entry 886; AIX32-NEXT: lwsync 887; AIX32-NEXT: sync 888; AIX32-NEXT: L..BB0_47: # %entry 889; AIX32-NEXT: # 890; AIX32-NEXT: lwarx 3, 0, 19 891; AIX32-NEXT: xori 3, 3, 1 892; AIX32-NEXT: stwcx. 3, 0, 19 893; AIX32-NEXT: bne 0, L..BB0_47 894; AIX32-NEXT: # %bb.48: # %entry 895; AIX32-NEXT: lwsync 896; AIX32-NEXT: li 4, 0 897; AIX32-NEXT: li 5, 1 898; AIX32-NEXT: mr 3, 31 899; AIX32-NEXT: li 6, 5 900; AIX32-NEXT: bl .__atomic_fetch_xor_8[PR] 901; AIX32-NEXT: nop 902; AIX32-NEXT: li 4, 0 903; AIX32-NEXT: li 5, 1 904; AIX32-NEXT: mr 3, 30 905; AIX32-NEXT: li 6, 5 906; AIX32-NEXT: bl .__atomic_fetch_xor_8[PR] 907; AIX32-NEXT: nop 908; AIX32-NEXT: lwz 31, L..C8(2) # @u128 909; AIX32-NEXT: addi 30, 1, 72 910; AIX32-NEXT: addi 29, 1, 56 911; AIX32-NEXT: lwz 5, 12(31) 912; AIX32-NEXT: lwz 4, 8(31) 913; AIX32-NEXT: lwz 6, 4(31) 914; AIX32-NEXT: lwz 7, 0(31) 915; AIX32-NEXT: .align 4 916; AIX32-NEXT: L..BB0_49: # %atomicrmw.start2 917; AIX32-NEXT: # 918; AIX32-NEXT: xori 3, 5, 1 919; AIX32-NEXT: stw 7, 72(1) 920; AIX32-NEXT: stw 7, 56(1) 921; AIX32-NEXT: li 7, 5 922; AIX32-NEXT: stw 3, 68(1) 923; AIX32-NEXT: li 3, 16 924; AIX32-NEXT: li 8, 5 925; AIX32-NEXT: stw 6, 76(1) 926; AIX32-NEXT: stw 4, 80(1) 927; AIX32-NEXT: stw 5, 84(1) 928; AIX32-NEXT: stw 4, 64(1) 929; AIX32-NEXT: stw 6, 60(1) 930; AIX32-NEXT: mr 4, 31 931; AIX32-NEXT: mr 5, 30 932; AIX32-NEXT: mr 6, 29 933; AIX32-NEXT: bl .__atomic_compare_exchange[PR] 934; AIX32-NEXT: nop 935; AIX32-NEXT: lwz 5, 84(1) 936; AIX32-NEXT: lwz 4, 80(1) 937; AIX32-NEXT: lwz 6, 76(1) 938; AIX32-NEXT: lwz 7, 72(1) 939; AIX32-NEXT: cmplwi 3, 0 940; AIX32-NEXT: beq 0, L..BB0_49 941; AIX32-NEXT: # %bb.50: # %atomicrmw.end1 942; AIX32-NEXT: lwz 31, L..C9(2) # @s128 943; AIX32-NEXT: addi 30, 1, 72 944; AIX32-NEXT: addi 29, 1, 56 945; AIX32-NEXT: lwz 5, 12(31) 946; AIX32-NEXT: lwz 4, 8(31) 947; AIX32-NEXT: lwz 6, 4(31) 948; AIX32-NEXT: lwz 7, 0(31) 949; AIX32-NEXT: .align 4 950; AIX32-NEXT: L..BB0_51: # %atomicrmw.start 951; AIX32-NEXT: # 952; AIX32-NEXT: xori 3, 5, 1 953; AIX32-NEXT: stw 7, 72(1) 954; AIX32-NEXT: stw 7, 56(1) 955; AIX32-NEXT: li 7, 5 956; AIX32-NEXT: stw 3, 68(1) 957; AIX32-NEXT: li 3, 16 958; AIX32-NEXT: li 8, 5 959; AIX32-NEXT: stw 6, 76(1) 960; AIX32-NEXT: stw 4, 80(1) 961; AIX32-NEXT: stw 5, 84(1) 962; AIX32-NEXT: stw 4, 64(1) 963; AIX32-NEXT: stw 6, 60(1) 964; AIX32-NEXT: mr 4, 31 965; AIX32-NEXT: mr 5, 30 966; AIX32-NEXT: mr 6, 29 967; AIX32-NEXT: bl .__atomic_compare_exchange[PR] 968; AIX32-NEXT: nop 969; AIX32-NEXT: lwz 5, 84(1) 970; AIX32-NEXT: lwz 4, 80(1) 971; AIX32-NEXT: lwz 6, 76(1) 972; AIX32-NEXT: lwz 7, 72(1) 973; AIX32-NEXT: cmplwi 3, 0 974; AIX32-NEXT: beq 0, L..BB0_51 975; AIX32-NEXT: # %bb.52: # %atomicrmw.end 976; AIX32-NEXT: li 29, 1 977; AIX32-NEXT: li 3, 255 978; AIX32-NEXT: sync 979; AIX32-NEXT: slw 18, 29, 26 980; AIX32-NEXT: slw 3, 3, 26 981; AIX32-NEXT: L..BB0_53: # %atomicrmw.end 982; AIX32-NEXT: # 983; AIX32-NEXT: lwarx 4, 0, 28 984; AIX32-NEXT: nand 5, 18, 4 985; AIX32-NEXT: andc 4, 4, 3 986; AIX32-NEXT: and 5, 5, 3 987; AIX32-NEXT: or 4, 5, 4 988; AIX32-NEXT: stwcx. 4, 0, 28 989; AIX32-NEXT: bne 0, L..BB0_53 990; AIX32-NEXT: # %bb.54: # %atomicrmw.end 991; AIX32-NEXT: li 3, 255 992; AIX32-NEXT: lwsync 993; AIX32-NEXT: slw 17, 29, 24 994; AIX32-NEXT: sync 995; AIX32-NEXT: slw 3, 3, 24 996; AIX32-NEXT: L..BB0_55: # %atomicrmw.end 997; AIX32-NEXT: # 998; AIX32-NEXT: lwarx 4, 0, 27 999; AIX32-NEXT: nand 5, 17, 4 1000; AIX32-NEXT: andc 4, 4, 3 1001; AIX32-NEXT: and 5, 5, 3 1002; AIX32-NEXT: or 4, 5, 4 1003; AIX32-NEXT: stwcx. 4, 0, 27 1004; AIX32-NEXT: bne 0, L..BB0_55 1005; AIX32-NEXT: # %bb.56: # %atomicrmw.end 1006; AIX32-NEXT: li 3, 0 1007; AIX32-NEXT: lwsync 1008; AIX32-NEXT: slw 16, 29, 22 1009; AIX32-NEXT: sync 1010; AIX32-NEXT: ori 3, 3, 65535 1011; AIX32-NEXT: slw 3, 3, 22 1012; AIX32-NEXT: L..BB0_57: # %atomicrmw.end 1013; AIX32-NEXT: # 1014; AIX32-NEXT: lwarx 4, 0, 25 1015; AIX32-NEXT: nand 5, 16, 4 1016; AIX32-NEXT: andc 4, 4, 3 1017; AIX32-NEXT: and 5, 5, 3 1018; AIX32-NEXT: or 4, 5, 4 1019; AIX32-NEXT: stwcx. 4, 0, 25 1020; AIX32-NEXT: bne 0, L..BB0_57 1021; AIX32-NEXT: # %bb.58: # %atomicrmw.end 1022; AIX32-NEXT: li 3, 0 1023; AIX32-NEXT: lwsync 1024; AIX32-NEXT: slw 15, 29, 21 1025; AIX32-NEXT: sync 1026; AIX32-NEXT: ori 3, 3, 65535 1027; AIX32-NEXT: slw 3, 3, 21 1028; AIX32-NEXT: L..BB0_59: # %atomicrmw.end 1029; AIX32-NEXT: # 1030; AIX32-NEXT: lwarx 4, 0, 23 1031; AIX32-NEXT: nand 5, 15, 4 1032; AIX32-NEXT: andc 4, 4, 3 1033; AIX32-NEXT: and 5, 5, 3 1034; AIX32-NEXT: or 4, 5, 4 1035; AIX32-NEXT: stwcx. 4, 0, 23 1036; AIX32-NEXT: bne 0, L..BB0_59 1037; AIX32-NEXT: # %bb.60: # %atomicrmw.end 1038; AIX32-NEXT: lwsync 1039; AIX32-NEXT: sync 1040; AIX32-NEXT: L..BB0_61: # %atomicrmw.end 1041; AIX32-NEXT: # 1042; AIX32-NEXT: lwarx 3, 0, 20 1043; AIX32-NEXT: nand 3, 29, 3 1044; AIX32-NEXT: stwcx. 3, 0, 20 1045; AIX32-NEXT: bne 0, L..BB0_61 1046; AIX32-NEXT: # %bb.62: # %atomicrmw.end 1047; AIX32-NEXT: lwsync 1048; AIX32-NEXT: sync 1049; AIX32-NEXT: L..BB0_63: # %atomicrmw.end 1050; AIX32-NEXT: # 1051; AIX32-NEXT: lwarx 3, 0, 19 1052; AIX32-NEXT: nand 3, 29, 3 1053; AIX32-NEXT: stwcx. 3, 0, 19 1054; AIX32-NEXT: bne 0, L..BB0_63 1055; AIX32-NEXT: # %bb.64: # %atomicrmw.end 1056; AIX32-NEXT: lwz 31, L..C6(2) # @sll 1057; AIX32-NEXT: lwsync 1058; AIX32-NEXT: li 4, 0 1059; AIX32-NEXT: li 5, 1 1060; AIX32-NEXT: li 6, 5 1061; AIX32-NEXT: mr 3, 31 1062; AIX32-NEXT: bl .__atomic_fetch_nand_8[PR] 1063; AIX32-NEXT: nop 1064; AIX32-NEXT: lwz 30, L..C7(2) # @ull 1065; AIX32-NEXT: li 4, 0 1066; AIX32-NEXT: li 5, 1 1067; AIX32-NEXT: mr 3, 30 1068; AIX32-NEXT: li 6, 5 1069; AIX32-NEXT: bl .__atomic_fetch_nand_8[PR] 1070; AIX32-NEXT: nop 1071; AIX32-NEXT: li 3, 255 1072; AIX32-NEXT: sync 1073; AIX32-NEXT: slw 3, 3, 26 1074; AIX32-NEXT: L..BB0_65: # %atomicrmw.end 1075; AIX32-NEXT: # 1076; AIX32-NEXT: lwarx 4, 0, 28 1077; AIX32-NEXT: and 5, 18, 4 1078; AIX32-NEXT: andc 4, 4, 3 1079; AIX32-NEXT: and 5, 5, 3 1080; AIX32-NEXT: or 4, 5, 4 1081; AIX32-NEXT: stwcx. 4, 0, 28 1082; AIX32-NEXT: bne 0, L..BB0_65 1083; AIX32-NEXT: # %bb.66: # %atomicrmw.end 1084; AIX32-NEXT: li 3, 255 1085; AIX32-NEXT: lwsync 1086; AIX32-NEXT: sync 1087; AIX32-NEXT: slw 3, 3, 24 1088; AIX32-NEXT: L..BB0_67: # %atomicrmw.end 1089; AIX32-NEXT: # 1090; AIX32-NEXT: lwarx 4, 0, 27 1091; AIX32-NEXT: and 5, 17, 4 1092; AIX32-NEXT: andc 4, 4, 3 1093; AIX32-NEXT: and 5, 5, 3 1094; AIX32-NEXT: or 4, 5, 4 1095; AIX32-NEXT: stwcx. 4, 0, 27 1096; AIX32-NEXT: bne 0, L..BB0_67 1097; AIX32-NEXT: # %bb.68: # %atomicrmw.end 1098; AIX32-NEXT: li 3, 0 1099; AIX32-NEXT: lwsync 1100; AIX32-NEXT: sync 1101; AIX32-NEXT: ori 3, 3, 65535 1102; AIX32-NEXT: slw 3, 3, 22 1103; AIX32-NEXT: L..BB0_69: # %atomicrmw.end 1104; AIX32-NEXT: # 1105; AIX32-NEXT: lwarx 4, 0, 25 1106; AIX32-NEXT: and 5, 16, 4 1107; AIX32-NEXT: andc 4, 4, 3 1108; AIX32-NEXT: and 5, 5, 3 1109; AIX32-NEXT: or 4, 5, 4 1110; AIX32-NEXT: stwcx. 4, 0, 25 1111; AIX32-NEXT: bne 0, L..BB0_69 1112; AIX32-NEXT: # %bb.70: # %atomicrmw.end 1113; AIX32-NEXT: li 3, 0 1114; AIX32-NEXT: lwsync 1115; AIX32-NEXT: sync 1116; AIX32-NEXT: ori 3, 3, 65535 1117; AIX32-NEXT: slw 3, 3, 21 1118; AIX32-NEXT: L..BB0_71: # %atomicrmw.end 1119; AIX32-NEXT: # 1120; AIX32-NEXT: lwarx 4, 0, 23 1121; AIX32-NEXT: and 5, 15, 4 1122; AIX32-NEXT: andc 4, 4, 3 1123; AIX32-NEXT: and 5, 5, 3 1124; AIX32-NEXT: or 4, 5, 4 1125; AIX32-NEXT: stwcx. 4, 0, 23 1126; AIX32-NEXT: bne 0, L..BB0_71 1127; AIX32-NEXT: # %bb.72: # %atomicrmw.end 1128; AIX32-NEXT: lwsync 1129; AIX32-NEXT: sync 1130; AIX32-NEXT: L..BB0_73: # %atomicrmw.end 1131; AIX32-NEXT: # 1132; AIX32-NEXT: lwarx 3, 0, 20 1133; AIX32-NEXT: and 3, 29, 3 1134; AIX32-NEXT: stwcx. 3, 0, 20 1135; AIX32-NEXT: bne 0, L..BB0_73 1136; AIX32-NEXT: # %bb.74: # %atomicrmw.end 1137; AIX32-NEXT: lwsync 1138; AIX32-NEXT: sync 1139; AIX32-NEXT: L..BB0_75: # %atomicrmw.end 1140; AIX32-NEXT: # 1141; AIX32-NEXT: lwarx 3, 0, 19 1142; AIX32-NEXT: and 3, 29, 3 1143; AIX32-NEXT: stwcx. 3, 0, 19 1144; AIX32-NEXT: bne 0, L..BB0_75 1145; AIX32-NEXT: # %bb.76: # %atomicrmw.end 1146; AIX32-NEXT: lwsync 1147; AIX32-NEXT: li 4, 0 1148; AIX32-NEXT: li 5, 1 1149; AIX32-NEXT: mr 3, 31 1150; AIX32-NEXT: li 6, 5 1151; AIX32-NEXT: bl .__atomic_fetch_and_8[PR] 1152; AIX32-NEXT: nop 1153; AIX32-NEXT: li 4, 0 1154; AIX32-NEXT: li 5, 1 1155; AIX32-NEXT: mr 3, 30 1156; AIX32-NEXT: li 6, 5 1157; AIX32-NEXT: bl .__atomic_fetch_and_8[PR] 1158; AIX32-NEXT: nop 1159; AIX32-NEXT: lwz 31, 156(1) # 4-byte Folded Reload 1160; AIX32-NEXT: lwz 30, 152(1) # 4-byte Folded Reload 1161; AIX32-NEXT: lwz 29, 148(1) # 4-byte Folded Reload 1162; AIX32-NEXT: lwz 28, 144(1) # 4-byte Folded Reload 1163; AIX32-NEXT: lwz 27, 140(1) # 4-byte Folded Reload 1164; AIX32-NEXT: lwz 26, 136(1) # 4-byte Folded Reload 1165; AIX32-NEXT: lwz 25, 132(1) # 4-byte Folded Reload 1166; AIX32-NEXT: lwz 24, 128(1) # 4-byte Folded Reload 1167; AIX32-NEXT: lwz 23, 124(1) # 4-byte Folded Reload 1168; AIX32-NEXT: lwz 22, 120(1) # 4-byte Folded Reload 1169; AIX32-NEXT: lwz 21, 116(1) # 4-byte Folded Reload 1170; AIX32-NEXT: lwz 20, 112(1) # 4-byte Folded Reload 1171; AIX32-NEXT: lwz 19, 108(1) # 4-byte Folded Reload 1172; AIX32-NEXT: lwz 18, 104(1) # 4-byte Folded Reload 1173; AIX32-NEXT: lwz 17, 100(1) # 4-byte Folded Reload 1174; AIX32-NEXT: lwz 16, 96(1) # 4-byte Folded Reload 1175; AIX32-NEXT: lwz 15, 92(1) # 4-byte Folded Reload 1176; AIX32-NEXT: addi 1, 1, 160 1177; AIX32-NEXT: lwz 0, 8(1) 1178; AIX32-NEXT: mtlr 0 1179; AIX32-NEXT: blr 1180entry: 1181 %0 = atomicrmw add ptr @sc, i8 1 seq_cst, align 1 1182 %1 = atomicrmw add ptr @uc, i8 1 seq_cst, align 1 1183 %2 = atomicrmw add ptr @ss, i16 1 seq_cst, align 2 1184 %3 = atomicrmw add ptr @us, i16 1 seq_cst, align 2 1185 %4 = atomicrmw add ptr @si, i32 1 seq_cst, align 4 1186 %5 = atomicrmw add ptr @ui, i32 1 seq_cst, align 4 1187 %6 = atomicrmw add ptr @sll, i64 1 seq_cst, align 8 1188 %7 = atomicrmw add ptr @ull, i64 1 seq_cst, align 8 1189 %8 = atomicrmw sub ptr @sc, i8 1 seq_cst, align 1 1190 %9 = atomicrmw sub ptr @uc, i8 1 seq_cst, align 1 1191 %10 = atomicrmw sub ptr @ss, i16 1 seq_cst, align 2 1192 %11 = atomicrmw sub ptr @us, i16 1 seq_cst, align 2 1193 %12 = atomicrmw sub ptr @si, i32 1 seq_cst, align 4 1194 %13 = atomicrmw sub ptr @ui, i32 1 seq_cst, align 4 1195 %14 = atomicrmw sub ptr @sll, i64 1 seq_cst, align 8 1196 %15 = atomicrmw sub ptr @ull, i64 1 seq_cst, align 8 1197 %16 = atomicrmw or ptr @sc, i8 1 seq_cst, align 1 1198 %17 = atomicrmw or ptr @uc, i8 1 seq_cst, align 1 1199 %18 = atomicrmw or ptr @ss, i16 1 seq_cst, align 2 1200 %19 = atomicrmw or ptr @us, i16 1 seq_cst, align 2 1201 %20 = atomicrmw or ptr @si, i32 1 seq_cst, align 4 1202 %21 = atomicrmw or ptr @ui, i32 1 seq_cst, align 4 1203 %22 = atomicrmw or ptr @sll, i64 1 seq_cst, align 8 1204 %23 = atomicrmw or ptr @ull, i64 1 seq_cst, align 8 1205 %24 = atomicrmw xor ptr @sc, i8 1 seq_cst, align 1 1206 %25 = atomicrmw xor ptr @uc, i8 1 seq_cst, align 1 1207 %26 = atomicrmw xor ptr @ss, i16 1 seq_cst, align 2 1208 %27 = atomicrmw xor ptr @us, i16 1 seq_cst, align 2 1209 %28 = atomicrmw xor ptr @si, i32 1 seq_cst, align 4 1210 %29 = atomicrmw xor ptr @ui, i32 1 seq_cst, align 4 1211 %30 = atomicrmw xor ptr @sll, i64 1 seq_cst, align 8 1212 %31 = atomicrmw xor ptr @ull, i64 1 seq_cst, align 8 1213 %32 = atomicrmw xor ptr @u128, i128 1 seq_cst, align 16 1214 %33 = atomicrmw xor ptr @s128, i128 1 seq_cst, align 16 1215 %34 = atomicrmw nand ptr @sc, i8 1 seq_cst, align 1 1216 %35 = atomicrmw nand ptr @uc, i8 1 seq_cst, align 1 1217 %36 = atomicrmw nand ptr @ss, i16 1 seq_cst, align 2 1218 %37 = atomicrmw nand ptr @us, i16 1 seq_cst, align 2 1219 %38 = atomicrmw nand ptr @si, i32 1 seq_cst, align 4 1220 %39 = atomicrmw nand ptr @ui, i32 1 seq_cst, align 4 1221 %40 = atomicrmw nand ptr @sll, i64 1 seq_cst, align 8 1222 %41 = atomicrmw nand ptr @ull, i64 1 seq_cst, align 8 1223 %42 = atomicrmw and ptr @sc, i8 1 seq_cst, align 1 1224 %43 = atomicrmw and ptr @uc, i8 1 seq_cst, align 1 1225 %44 = atomicrmw and ptr @ss, i16 1 seq_cst, align 2 1226 %45 = atomicrmw and ptr @us, i16 1 seq_cst, align 2 1227 %46 = atomicrmw and ptr @si, i32 1 seq_cst, align 4 1228 %47 = atomicrmw and ptr @ui, i32 1 seq_cst, align 4 1229 %48 = atomicrmw and ptr @sll, i64 1 seq_cst, align 8 1230 %49 = atomicrmw and ptr @ull, i64 1 seq_cst, align 8 1231 ret void 1232} 1233 1234define dso_local void @test_fetch_and_op() local_unnamed_addr #0 { 1235; CHECK-LABEL: test_fetch_and_op: 1236; CHECK: # %bb.0: # %entry 1237; CHECK-NEXT: addis 4, 2, sc@toc@ha 1238; CHECK-NEXT: std 22, -80(1) # 8-byte Folded Spill 1239; CHECK-NEXT: std 23, -72(1) # 8-byte Folded Spill 1240; CHECK-NEXT: li 3, 11 1241; CHECK-NEXT: std 24, -64(1) # 8-byte Folded Spill 1242; CHECK-NEXT: std 25, -56(1) # 8-byte Folded Spill 1243; CHECK-NEXT: addi 6, 4, sc@toc@l 1244; CHECK-NEXT: std 26, -48(1) # 8-byte Folded Spill 1245; CHECK-NEXT: std 27, -40(1) # 8-byte Folded Spill 1246; CHECK-NEXT: std 28, -32(1) # 8-byte Folded Spill 1247; CHECK-NEXT: std 29, -24(1) # 8-byte Folded Spill 1248; CHECK-NEXT: std 30, -16(1) # 8-byte Folded Spill 1249; CHECK-NEXT: sync 1250; CHECK-NEXT: .LBB1_1: # %entry 1251; CHECK-NEXT: # 1252; CHECK-NEXT: lbarx 5, 0, 6 1253; CHECK-NEXT: addi 7, 5, 11 1254; CHECK-NEXT: stbcx. 7, 0, 6 1255; CHECK-NEXT: bne 0, .LBB1_1 1256; CHECK-NEXT: # %bb.2: # %entry 1257; CHECK-NEXT: lwsync 1258; CHECK-NEXT: stb 5, sc@toc@l(4) 1259; CHECK-NEXT: addis 5, 2, uc@toc@ha 1260; CHECK-NEXT: sync 1261; CHECK-NEXT: addi 8, 5, uc@toc@l 1262; CHECK-NEXT: .LBB1_3: # %entry 1263; CHECK-NEXT: # 1264; CHECK-NEXT: lbarx 7, 0, 8 1265; CHECK-NEXT: addi 9, 7, 11 1266; CHECK-NEXT: stbcx. 9, 0, 8 1267; CHECK-NEXT: bne 0, .LBB1_3 1268; CHECK-NEXT: # %bb.4: # %entry 1269; CHECK-NEXT: lwsync 1270; CHECK-NEXT: stb 7, uc@toc@l(5) 1271; CHECK-NEXT: addis 7, 2, ss@toc@ha 1272; CHECK-NEXT: sync 1273; CHECK-NEXT: addi 10, 7, ss@toc@l 1274; CHECK-NEXT: .LBB1_5: # %entry 1275; CHECK-NEXT: # 1276; CHECK-NEXT: lharx 9, 0, 10 1277; CHECK-NEXT: addi 11, 9, 11 1278; CHECK-NEXT: sthcx. 11, 0, 10 1279; CHECK-NEXT: bne 0, .LBB1_5 1280; CHECK-NEXT: # %bb.6: # %entry 1281; CHECK-NEXT: lwsync 1282; CHECK-NEXT: sth 9, ss@toc@l(7) 1283; CHECK-NEXT: addis 9, 2, us@toc@ha 1284; CHECK-NEXT: sync 1285; CHECK-NEXT: addi 0, 9, us@toc@l 1286; CHECK-NEXT: .LBB1_7: # %entry 1287; CHECK-NEXT: # 1288; CHECK-NEXT: lharx 11, 0, 0 1289; CHECK-NEXT: addi 12, 11, 11 1290; CHECK-NEXT: sthcx. 12, 0, 0 1291; CHECK-NEXT: bne 0, .LBB1_7 1292; CHECK-NEXT: # %bb.8: # %entry 1293; CHECK-NEXT: addis 12, 2, si@toc@ha 1294; CHECK-NEXT: lwsync 1295; CHECK-NEXT: sth 11, us@toc@l(9) 1296; CHECK-NEXT: sync 1297; CHECK-NEXT: addi 29, 12, si@toc@l 1298; CHECK-NEXT: .LBB1_9: # %entry 1299; CHECK-NEXT: # 1300; CHECK-NEXT: lwarx 11, 0, 29 1301; CHECK-NEXT: addi 30, 11, 11 1302; CHECK-NEXT: stwcx. 30, 0, 29 1303; CHECK-NEXT: bne 0, .LBB1_9 1304; CHECK-NEXT: # %bb.10: # %entry 1305; CHECK-NEXT: addis 30, 2, ui@toc@ha 1306; CHECK-NEXT: lwsync 1307; CHECK-NEXT: stw 11, si@toc@l(12) 1308; CHECK-NEXT: sync 1309; CHECK-NEXT: addi 27, 30, ui@toc@l 1310; CHECK-NEXT: .LBB1_11: # %entry 1311; CHECK-NEXT: # 1312; CHECK-NEXT: lwarx 11, 0, 27 1313; CHECK-NEXT: addi 28, 11, 11 1314; CHECK-NEXT: stwcx. 28, 0, 27 1315; CHECK-NEXT: bne 0, .LBB1_11 1316; CHECK-NEXT: # %bb.12: # %entry 1317; CHECK-NEXT: addis 28, 2, sll@toc@ha 1318; CHECK-NEXT: lwsync 1319; CHECK-NEXT: stw 11, ui@toc@l(30) 1320; CHECK-NEXT: li 11, 11 1321; CHECK-NEXT: sync 1322; CHECK-NEXT: addi 25, 28, sll@toc@l 1323; CHECK-NEXT: .LBB1_13: # %entry 1324; CHECK-NEXT: # 1325; CHECK-NEXT: ldarx 26, 0, 25 1326; CHECK-NEXT: addi 24, 26, 11 1327; CHECK-NEXT: stdcx. 24, 0, 25 1328; CHECK-NEXT: bne 0, .LBB1_13 1329; CHECK-NEXT: # %bb.14: # %entry 1330; CHECK-NEXT: lwsync 1331; CHECK-NEXT: std 26, sll@toc@l(28) 1332; CHECK-NEXT: addis 26, 2, ull@toc@ha 1333; CHECK-NEXT: sync 1334; CHECK-NEXT: addi 24, 26, ull@toc@l 1335; CHECK-NEXT: .LBB1_15: # %entry 1336; CHECK-NEXT: # 1337; CHECK-NEXT: ldarx 23, 0, 24 1338; CHECK-NEXT: addi 22, 23, 11 1339; CHECK-NEXT: stdcx. 22, 0, 24 1340; CHECK-NEXT: bne 0, .LBB1_15 1341; CHECK-NEXT: # %bb.16: # %entry 1342; CHECK-NEXT: lwsync 1343; CHECK-NEXT: std 23, ull@toc@l(26) 1344; CHECK-NEXT: sync 1345; CHECK-NEXT: .LBB1_17: # %entry 1346; CHECK-NEXT: # 1347; CHECK-NEXT: lbarx 23, 0, 6 1348; CHECK-NEXT: sub 22, 23, 3 1349; CHECK-NEXT: stbcx. 22, 0, 6 1350; CHECK-NEXT: bne 0, .LBB1_17 1351; CHECK-NEXT: # %bb.18: # %entry 1352; CHECK-NEXT: lwsync 1353; CHECK-NEXT: stb 23, sc@toc@l(4) 1354; CHECK-NEXT: sync 1355; CHECK-NEXT: .LBB1_19: # %entry 1356; CHECK-NEXT: # 1357; CHECK-NEXT: lbarx 23, 0, 8 1358; CHECK-NEXT: sub 22, 23, 3 1359; CHECK-NEXT: stbcx. 22, 0, 8 1360; CHECK-NEXT: bne 0, .LBB1_19 1361; CHECK-NEXT: # %bb.20: # %entry 1362; CHECK-NEXT: lwsync 1363; CHECK-NEXT: stb 23, uc@toc@l(5) 1364; CHECK-NEXT: sync 1365; CHECK-NEXT: .LBB1_21: # %entry 1366; CHECK-NEXT: # 1367; CHECK-NEXT: lharx 23, 0, 10 1368; CHECK-NEXT: sub 22, 23, 3 1369; CHECK-NEXT: sthcx. 22, 0, 10 1370; CHECK-NEXT: bne 0, .LBB1_21 1371; CHECK-NEXT: # %bb.22: # %entry 1372; CHECK-NEXT: lwsync 1373; CHECK-NEXT: sth 23, ss@toc@l(7) 1374; CHECK-NEXT: sync 1375; CHECK-NEXT: .LBB1_23: # %entry 1376; CHECK-NEXT: # 1377; CHECK-NEXT: lharx 23, 0, 0 1378; CHECK-NEXT: sub 22, 23, 3 1379; CHECK-NEXT: sthcx. 22, 0, 0 1380; CHECK-NEXT: bne 0, .LBB1_23 1381; CHECK-NEXT: # %bb.24: # %entry 1382; CHECK-NEXT: lwsync 1383; CHECK-NEXT: sth 23, us@toc@l(9) 1384; CHECK-NEXT: sync 1385; CHECK-NEXT: .LBB1_25: # %entry 1386; CHECK-NEXT: # 1387; CHECK-NEXT: lwarx 23, 0, 29 1388; CHECK-NEXT: sub 22, 23, 3 1389; CHECK-NEXT: stwcx. 22, 0, 29 1390; CHECK-NEXT: bne 0, .LBB1_25 1391; CHECK-NEXT: # %bb.26: # %entry 1392; CHECK-NEXT: lwsync 1393; CHECK-NEXT: stw 23, si@toc@l(12) 1394; CHECK-NEXT: sync 1395; CHECK-NEXT: .LBB1_27: # %entry 1396; CHECK-NEXT: # 1397; CHECK-NEXT: lwarx 23, 0, 27 1398; CHECK-NEXT: sub 22, 23, 3 1399; CHECK-NEXT: stwcx. 22, 0, 27 1400; CHECK-NEXT: bne 0, .LBB1_27 1401; CHECK-NEXT: # %bb.28: # %entry 1402; CHECK-NEXT: lwsync 1403; CHECK-NEXT: stw 23, ui@toc@l(30) 1404; CHECK-NEXT: sync 1405; CHECK-NEXT: .LBB1_29: # %entry 1406; CHECK-NEXT: # 1407; CHECK-NEXT: ldarx 23, 0, 25 1408; CHECK-NEXT: sub 22, 23, 11 1409; CHECK-NEXT: stdcx. 22, 0, 25 1410; CHECK-NEXT: bne 0, .LBB1_29 1411; CHECK-NEXT: # %bb.30: # %entry 1412; CHECK-NEXT: lwsync 1413; CHECK-NEXT: std 23, sll@toc@l(28) 1414; CHECK-NEXT: sync 1415; CHECK-NEXT: .LBB1_31: # %entry 1416; CHECK-NEXT: # 1417; CHECK-NEXT: ldarx 23, 0, 24 1418; CHECK-NEXT: sub 22, 23, 11 1419; CHECK-NEXT: stdcx. 22, 0, 24 1420; CHECK-NEXT: bne 0, .LBB1_31 1421; CHECK-NEXT: # %bb.32: # %entry 1422; CHECK-NEXT: lwsync 1423; CHECK-NEXT: std 23, ull@toc@l(26) 1424; CHECK-NEXT: sync 1425; CHECK-NEXT: .LBB1_33: # %entry 1426; CHECK-NEXT: # 1427; CHECK-NEXT: lbarx 23, 0, 6 1428; CHECK-NEXT: ori 22, 23, 11 1429; CHECK-NEXT: stbcx. 22, 0, 6 1430; CHECK-NEXT: bne 0, .LBB1_33 1431; CHECK-NEXT: # %bb.34: # %entry 1432; CHECK-NEXT: lwsync 1433; CHECK-NEXT: stb 23, sc@toc@l(4) 1434; CHECK-NEXT: sync 1435; CHECK-NEXT: .LBB1_35: # %entry 1436; CHECK-NEXT: # 1437; CHECK-NEXT: lbarx 23, 0, 8 1438; CHECK-NEXT: ori 22, 23, 11 1439; CHECK-NEXT: stbcx. 22, 0, 8 1440; CHECK-NEXT: bne 0, .LBB1_35 1441; CHECK-NEXT: # %bb.36: # %entry 1442; CHECK-NEXT: lwsync 1443; CHECK-NEXT: stb 23, uc@toc@l(5) 1444; CHECK-NEXT: sync 1445; CHECK-NEXT: .LBB1_37: # %entry 1446; CHECK-NEXT: # 1447; CHECK-NEXT: lharx 23, 0, 10 1448; CHECK-NEXT: ori 22, 23, 11 1449; CHECK-NEXT: sthcx. 22, 0, 10 1450; CHECK-NEXT: bne 0, .LBB1_37 1451; CHECK-NEXT: # %bb.38: # %entry 1452; CHECK-NEXT: lwsync 1453; CHECK-NEXT: sth 23, ss@toc@l(7) 1454; CHECK-NEXT: sync 1455; CHECK-NEXT: .LBB1_39: # %entry 1456; CHECK-NEXT: # 1457; CHECK-NEXT: lharx 23, 0, 0 1458; CHECK-NEXT: ori 22, 23, 11 1459; CHECK-NEXT: sthcx. 22, 0, 0 1460; CHECK-NEXT: bne 0, .LBB1_39 1461; CHECK-NEXT: # %bb.40: # %entry 1462; CHECK-NEXT: lwsync 1463; CHECK-NEXT: sth 23, us@toc@l(9) 1464; CHECK-NEXT: sync 1465; CHECK-NEXT: .LBB1_41: # %entry 1466; CHECK-NEXT: # 1467; CHECK-NEXT: lwarx 23, 0, 29 1468; CHECK-NEXT: ori 22, 23, 11 1469; CHECK-NEXT: stwcx. 22, 0, 29 1470; CHECK-NEXT: bne 0, .LBB1_41 1471; CHECK-NEXT: # %bb.42: # %entry 1472; CHECK-NEXT: lwsync 1473; CHECK-NEXT: stw 23, si@toc@l(12) 1474; CHECK-NEXT: sync 1475; CHECK-NEXT: .LBB1_43: # %entry 1476; CHECK-NEXT: # 1477; CHECK-NEXT: lwarx 23, 0, 27 1478; CHECK-NEXT: ori 22, 23, 11 1479; CHECK-NEXT: stwcx. 22, 0, 27 1480; CHECK-NEXT: bne 0, .LBB1_43 1481; CHECK-NEXT: # %bb.44: # %entry 1482; CHECK-NEXT: lwsync 1483; CHECK-NEXT: stw 23, ui@toc@l(30) 1484; CHECK-NEXT: sync 1485; CHECK-NEXT: .LBB1_45: # %entry 1486; CHECK-NEXT: # 1487; CHECK-NEXT: ldarx 23, 0, 25 1488; CHECK-NEXT: ori 22, 23, 11 1489; CHECK-NEXT: stdcx. 22, 0, 25 1490; CHECK-NEXT: bne 0, .LBB1_45 1491; CHECK-NEXT: # %bb.46: # %entry 1492; CHECK-NEXT: lwsync 1493; CHECK-NEXT: std 23, sll@toc@l(28) 1494; CHECK-NEXT: sync 1495; CHECK-NEXT: .LBB1_47: # %entry 1496; CHECK-NEXT: # 1497; CHECK-NEXT: ldarx 23, 0, 24 1498; CHECK-NEXT: ori 22, 23, 11 1499; CHECK-NEXT: stdcx. 22, 0, 24 1500; CHECK-NEXT: bne 0, .LBB1_47 1501; CHECK-NEXT: # %bb.48: # %entry 1502; CHECK-NEXT: lwsync 1503; CHECK-NEXT: std 23, ull@toc@l(26) 1504; CHECK-NEXT: sync 1505; CHECK-NEXT: .LBB1_49: # %entry 1506; CHECK-NEXT: # 1507; CHECK-NEXT: lbarx 23, 0, 6 1508; CHECK-NEXT: xori 22, 23, 11 1509; CHECK-NEXT: stbcx. 22, 0, 6 1510; CHECK-NEXT: bne 0, .LBB1_49 1511; CHECK-NEXT: # %bb.50: # %entry 1512; CHECK-NEXT: lwsync 1513; CHECK-NEXT: stb 23, sc@toc@l(4) 1514; CHECK-NEXT: sync 1515; CHECK-NEXT: .LBB1_51: # %entry 1516; CHECK-NEXT: # 1517; CHECK-NEXT: lbarx 23, 0, 8 1518; CHECK-NEXT: xori 22, 23, 11 1519; CHECK-NEXT: stbcx. 22, 0, 8 1520; CHECK-NEXT: bne 0, .LBB1_51 1521; CHECK-NEXT: # %bb.52: # %entry 1522; CHECK-NEXT: lwsync 1523; CHECK-NEXT: stb 23, uc@toc@l(5) 1524; CHECK-NEXT: sync 1525; CHECK-NEXT: .LBB1_53: # %entry 1526; CHECK-NEXT: # 1527; CHECK-NEXT: lharx 23, 0, 10 1528; CHECK-NEXT: xori 22, 23, 11 1529; CHECK-NEXT: sthcx. 22, 0, 10 1530; CHECK-NEXT: bne 0, .LBB1_53 1531; CHECK-NEXT: # %bb.54: # %entry 1532; CHECK-NEXT: lwsync 1533; CHECK-NEXT: sth 23, ss@toc@l(7) 1534; CHECK-NEXT: sync 1535; CHECK-NEXT: .LBB1_55: # %entry 1536; CHECK-NEXT: # 1537; CHECK-NEXT: lharx 23, 0, 0 1538; CHECK-NEXT: xori 22, 23, 11 1539; CHECK-NEXT: sthcx. 22, 0, 0 1540; CHECK-NEXT: bne 0, .LBB1_55 1541; CHECK-NEXT: # %bb.56: # %entry 1542; CHECK-NEXT: lwsync 1543; CHECK-NEXT: sth 23, us@toc@l(9) 1544; CHECK-NEXT: sync 1545; CHECK-NEXT: .LBB1_57: # %entry 1546; CHECK-NEXT: # 1547; CHECK-NEXT: lwarx 23, 0, 29 1548; CHECK-NEXT: xori 22, 23, 11 1549; CHECK-NEXT: stwcx. 22, 0, 29 1550; CHECK-NEXT: bne 0, .LBB1_57 1551; CHECK-NEXT: # %bb.58: # %entry 1552; CHECK-NEXT: lwsync 1553; CHECK-NEXT: stw 23, si@toc@l(12) 1554; CHECK-NEXT: sync 1555; CHECK-NEXT: .LBB1_59: # %entry 1556; CHECK-NEXT: # 1557; CHECK-NEXT: lwarx 23, 0, 27 1558; CHECK-NEXT: xori 22, 23, 11 1559; CHECK-NEXT: stwcx. 22, 0, 27 1560; CHECK-NEXT: bne 0, .LBB1_59 1561; CHECK-NEXT: # %bb.60: # %entry 1562; CHECK-NEXT: lwsync 1563; CHECK-NEXT: stw 23, ui@toc@l(30) 1564; CHECK-NEXT: sync 1565; CHECK-NEXT: .LBB1_61: # %entry 1566; CHECK-NEXT: # 1567; CHECK-NEXT: ldarx 23, 0, 25 1568; CHECK-NEXT: xori 22, 23, 11 1569; CHECK-NEXT: stdcx. 22, 0, 25 1570; CHECK-NEXT: bne 0, .LBB1_61 1571; CHECK-NEXT: # %bb.62: # %entry 1572; CHECK-NEXT: lwsync 1573; CHECK-NEXT: std 23, sll@toc@l(28) 1574; CHECK-NEXT: sync 1575; CHECK-NEXT: .LBB1_63: # %entry 1576; CHECK-NEXT: # 1577; CHECK-NEXT: ldarx 23, 0, 24 1578; CHECK-NEXT: xori 22, 23, 11 1579; CHECK-NEXT: stdcx. 22, 0, 24 1580; CHECK-NEXT: bne 0, .LBB1_63 1581; CHECK-NEXT: # %bb.64: # %entry 1582; CHECK-NEXT: lwsync 1583; CHECK-NEXT: std 23, ull@toc@l(26) 1584; CHECK-NEXT: sync 1585; CHECK-NEXT: .LBB1_65: # %entry 1586; CHECK-NEXT: # 1587; CHECK-NEXT: lbarx 23, 0, 6 1588; CHECK-NEXT: nand 22, 3, 23 1589; CHECK-NEXT: stbcx. 22, 0, 6 1590; CHECK-NEXT: bne 0, .LBB1_65 1591; CHECK-NEXT: # %bb.66: # %entry 1592; CHECK-NEXT: lwsync 1593; CHECK-NEXT: stb 23, sc@toc@l(4) 1594; CHECK-NEXT: sync 1595; CHECK-NEXT: .LBB1_67: # %entry 1596; CHECK-NEXT: # 1597; CHECK-NEXT: lbarx 23, 0, 8 1598; CHECK-NEXT: nand 22, 3, 23 1599; CHECK-NEXT: stbcx. 22, 0, 8 1600; CHECK-NEXT: bne 0, .LBB1_67 1601; CHECK-NEXT: # %bb.68: # %entry 1602; CHECK-NEXT: lwsync 1603; CHECK-NEXT: stb 23, uc@toc@l(5) 1604; CHECK-NEXT: sync 1605; CHECK-NEXT: .LBB1_69: # %entry 1606; CHECK-NEXT: # 1607; CHECK-NEXT: lharx 23, 0, 10 1608; CHECK-NEXT: nand 22, 3, 23 1609; CHECK-NEXT: sthcx. 22, 0, 10 1610; CHECK-NEXT: bne 0, .LBB1_69 1611; CHECK-NEXT: # %bb.70: # %entry 1612; CHECK-NEXT: lwsync 1613; CHECK-NEXT: sth 23, ss@toc@l(7) 1614; CHECK-NEXT: sync 1615; CHECK-NEXT: .LBB1_71: # %entry 1616; CHECK-NEXT: # 1617; CHECK-NEXT: lharx 23, 0, 0 1618; CHECK-NEXT: nand 22, 3, 23 1619; CHECK-NEXT: sthcx. 22, 0, 0 1620; CHECK-NEXT: bne 0, .LBB1_71 1621; CHECK-NEXT: # %bb.72: # %entry 1622; CHECK-NEXT: lwsync 1623; CHECK-NEXT: sth 23, us@toc@l(9) 1624; CHECK-NEXT: sync 1625; CHECK-NEXT: .LBB1_73: # %entry 1626; CHECK-NEXT: # 1627; CHECK-NEXT: lwarx 23, 0, 29 1628; CHECK-NEXT: nand 22, 3, 23 1629; CHECK-NEXT: stwcx. 22, 0, 29 1630; CHECK-NEXT: bne 0, .LBB1_73 1631; CHECK-NEXT: # %bb.74: # %entry 1632; CHECK-NEXT: lwsync 1633; CHECK-NEXT: stw 23, si@toc@l(12) 1634; CHECK-NEXT: sync 1635; CHECK-NEXT: .LBB1_75: # %entry 1636; CHECK-NEXT: # 1637; CHECK-NEXT: lwarx 23, 0, 27 1638; CHECK-NEXT: nand 22, 3, 23 1639; CHECK-NEXT: stwcx. 22, 0, 27 1640; CHECK-NEXT: bne 0, .LBB1_75 1641; CHECK-NEXT: # %bb.76: # %entry 1642; CHECK-NEXT: lwsync 1643; CHECK-NEXT: stw 23, ui@toc@l(30) 1644; CHECK-NEXT: sync 1645; CHECK-NEXT: .LBB1_77: # %entry 1646; CHECK-NEXT: # 1647; CHECK-NEXT: ldarx 23, 0, 25 1648; CHECK-NEXT: nand 22, 11, 23 1649; CHECK-NEXT: stdcx. 22, 0, 25 1650; CHECK-NEXT: bne 0, .LBB1_77 1651; CHECK-NEXT: # %bb.78: # %entry 1652; CHECK-NEXT: lwsync 1653; CHECK-NEXT: std 23, sll@toc@l(28) 1654; CHECK-NEXT: sync 1655; CHECK-NEXT: .LBB1_79: # %entry 1656; CHECK-NEXT: # 1657; CHECK-NEXT: ldarx 23, 0, 24 1658; CHECK-NEXT: nand 22, 11, 23 1659; CHECK-NEXT: stdcx. 22, 0, 24 1660; CHECK-NEXT: bne 0, .LBB1_79 1661; CHECK-NEXT: # %bb.80: # %entry 1662; CHECK-NEXT: lwsync 1663; CHECK-NEXT: std 23, ull@toc@l(26) 1664; CHECK-NEXT: sync 1665; CHECK-NEXT: .LBB1_81: # %entry 1666; CHECK-NEXT: # 1667; CHECK-NEXT: lbarx 23, 0, 6 1668; CHECK-NEXT: and 22, 3, 23 1669; CHECK-NEXT: stbcx. 22, 0, 6 1670; CHECK-NEXT: bne 0, .LBB1_81 1671; CHECK-NEXT: # %bb.82: # %entry 1672; CHECK-NEXT: lwsync 1673; CHECK-NEXT: stb 23, sc@toc@l(4) 1674; CHECK-NEXT: sync 1675; CHECK-NEXT: .LBB1_83: # %entry 1676; CHECK-NEXT: # 1677; CHECK-NEXT: lbarx 4, 0, 8 1678; CHECK-NEXT: and 6, 3, 4 1679; CHECK-NEXT: stbcx. 6, 0, 8 1680; CHECK-NEXT: bne 0, .LBB1_83 1681; CHECK-NEXT: # %bb.84: # %entry 1682; CHECK-NEXT: lwsync 1683; CHECK-NEXT: stb 4, uc@toc@l(5) 1684; CHECK-NEXT: sync 1685; CHECK-NEXT: .LBB1_85: # %entry 1686; CHECK-NEXT: # 1687; CHECK-NEXT: lharx 4, 0, 10 1688; CHECK-NEXT: and 5, 3, 4 1689; CHECK-NEXT: sthcx. 5, 0, 10 1690; CHECK-NEXT: bne 0, .LBB1_85 1691; CHECK-NEXT: # %bb.86: # %entry 1692; CHECK-NEXT: lwsync 1693; CHECK-NEXT: sth 4, ss@toc@l(7) 1694; CHECK-NEXT: sync 1695; CHECK-NEXT: .LBB1_87: # %entry 1696; CHECK-NEXT: # 1697; CHECK-NEXT: lharx 4, 0, 0 1698; CHECK-NEXT: and 5, 3, 4 1699; CHECK-NEXT: sthcx. 5, 0, 0 1700; CHECK-NEXT: bne 0, .LBB1_87 1701; CHECK-NEXT: # %bb.88: # %entry 1702; CHECK-NEXT: lwsync 1703; CHECK-NEXT: sth 4, us@toc@l(9) 1704; CHECK-NEXT: sync 1705; CHECK-NEXT: .LBB1_89: # %entry 1706; CHECK-NEXT: # 1707; CHECK-NEXT: lwarx 4, 0, 29 1708; CHECK-NEXT: and 5, 3, 4 1709; CHECK-NEXT: stwcx. 5, 0, 29 1710; CHECK-NEXT: bne 0, .LBB1_89 1711; CHECK-NEXT: # %bb.90: # %entry 1712; CHECK-NEXT: lwsync 1713; CHECK-NEXT: stw 4, si@toc@l(12) 1714; CHECK-NEXT: sync 1715; CHECK-NEXT: .LBB1_91: # %entry 1716; CHECK-NEXT: # 1717; CHECK-NEXT: lwarx 4, 0, 27 1718; CHECK-NEXT: and 5, 3, 4 1719; CHECK-NEXT: stwcx. 5, 0, 27 1720; CHECK-NEXT: bne 0, .LBB1_91 1721; CHECK-NEXT: # %bb.92: # %entry 1722; CHECK-NEXT: lwsync 1723; CHECK-NEXT: stw 4, ui@toc@l(30) 1724; CHECK-NEXT: sync 1725; CHECK-NEXT: .LBB1_93: # %entry 1726; CHECK-NEXT: # 1727; CHECK-NEXT: ldarx 3, 0, 25 1728; CHECK-NEXT: and 4, 11, 3 1729; CHECK-NEXT: stdcx. 4, 0, 25 1730; CHECK-NEXT: bne 0, .LBB1_93 1731; CHECK-NEXT: # %bb.94: # %entry 1732; CHECK-NEXT: lwsync 1733; CHECK-NEXT: std 3, sll@toc@l(28) 1734; CHECK-NEXT: sync 1735; CHECK-NEXT: .LBB1_95: # %entry 1736; CHECK-NEXT: # 1737; CHECK-NEXT: ldarx 3, 0, 24 1738; CHECK-NEXT: and 4, 11, 3 1739; CHECK-NEXT: stdcx. 4, 0, 24 1740; CHECK-NEXT: bne 0, .LBB1_95 1741; CHECK-NEXT: # %bb.96: # %entry 1742; CHECK-NEXT: lwsync 1743; CHECK-NEXT: std 3, ull@toc@l(26) 1744; CHECK-NEXT: ld 30, -16(1) # 8-byte Folded Reload 1745; CHECK-NEXT: ld 29, -24(1) # 8-byte Folded Reload 1746; CHECK-NEXT: ld 28, -32(1) # 8-byte Folded Reload 1747; CHECK-NEXT: ld 27, -40(1) # 8-byte Folded Reload 1748; CHECK-NEXT: ld 26, -48(1) # 8-byte Folded Reload 1749; CHECK-NEXT: ld 25, -56(1) # 8-byte Folded Reload 1750; CHECK-NEXT: ld 24, -64(1) # 8-byte Folded Reload 1751; CHECK-NEXT: ld 23, -72(1) # 8-byte Folded Reload 1752; CHECK-NEXT: ld 22, -80(1) # 8-byte Folded Reload 1753; CHECK-NEXT: blr 1754; 1755; AIX32-LABEL: test_fetch_and_op: 1756; AIX32: # %bb.0: # %entry 1757; AIX32-NEXT: mflr 0 1758; AIX32-NEXT: stwu 1, -144(1) 1759; AIX32-NEXT: lwz 4, L..C0(2) # @sc 1760; AIX32-NEXT: stw 0, 152(1) 1761; AIX32-NEXT: li 7, 11 1762; AIX32-NEXT: stw 26, 120(1) # 4-byte Folded Spill 1763; AIX32-NEXT: stw 13, 68(1) # 4-byte Folded Spill 1764; AIX32-NEXT: stw 14, 72(1) # 4-byte Folded Spill 1765; AIX32-NEXT: stw 15, 76(1) # 4-byte Folded Spill 1766; AIX32-NEXT: rlwinm 3, 4, 3, 27, 28 1767; AIX32-NEXT: stw 16, 80(1) # 4-byte Folded Spill 1768; AIX32-NEXT: stw 17, 84(1) # 4-byte Folded Spill 1769; AIX32-NEXT: stw 18, 88(1) # 4-byte Folded Spill 1770; AIX32-NEXT: xori 26, 3, 24 1771; AIX32-NEXT: li 3, 255 1772; AIX32-NEXT: slw 3, 3, 26 1773; AIX32-NEXT: stw 19, 92(1) # 4-byte Folded Spill 1774; AIX32-NEXT: stw 20, 96(1) # 4-byte Folded Spill 1775; AIX32-NEXT: stw 21, 100(1) # 4-byte Folded Spill 1776; AIX32-NEXT: stw 22, 104(1) # 4-byte Folded Spill 1777; AIX32-NEXT: stw 23, 108(1) # 4-byte Folded Spill 1778; AIX32-NEXT: stw 24, 112(1) # 4-byte Folded Spill 1779; AIX32-NEXT: stw 25, 116(1) # 4-byte Folded Spill 1780; AIX32-NEXT: stw 27, 124(1) # 4-byte Folded Spill 1781; AIX32-NEXT: stw 28, 128(1) # 4-byte Folded Spill 1782; AIX32-NEXT: stw 29, 132(1) # 4-byte Folded Spill 1783; AIX32-NEXT: stw 30, 136(1) # 4-byte Folded Spill 1784; AIX32-NEXT: stw 31, 140(1) # 4-byte Folded Spill 1785; AIX32-NEXT: sync 1786; AIX32-NEXT: rlwinm 25, 4, 0, 0, 29 1787; AIX32-NEXT: slw 24, 7, 26 1788; AIX32-NEXT: stw 4, 64(1) # 4-byte Folded Spill 1789; AIX32-NEXT: L..BB1_1: # %entry 1790; AIX32-NEXT: # 1791; AIX32-NEXT: lwarx 4, 0, 25 1792; AIX32-NEXT: add 5, 24, 4 1793; AIX32-NEXT: andc 6, 4, 3 1794; AIX32-NEXT: and 5, 5, 3 1795; AIX32-NEXT: or 5, 5, 6 1796; AIX32-NEXT: stwcx. 5, 0, 25 1797; AIX32-NEXT: bne 0, L..BB1_1 1798; AIX32-NEXT: # %bb.2: # %entry 1799; AIX32-NEXT: srw 3, 4, 26 1800; AIX32-NEXT: lwsync 1801; AIX32-NEXT: lwz 27, L..C1(2) # @uc 1802; AIX32-NEXT: lwz 4, 64(1) # 4-byte Folded Reload 1803; AIX32-NEXT: clrlwi 3, 3, 24 1804; AIX32-NEXT: rlwinm 21, 27, 0, 0, 29 1805; AIX32-NEXT: stb 3, 0(4) 1806; AIX32-NEXT: rlwinm 3, 27, 3, 27, 28 1807; AIX32-NEXT: sync 1808; AIX32-NEXT: xori 22, 3, 24 1809; AIX32-NEXT: li 3, 255 1810; AIX32-NEXT: slw 20, 7, 22 1811; AIX32-NEXT: slw 3, 3, 22 1812; AIX32-NEXT: L..BB1_3: # %entry 1813; AIX32-NEXT: # 1814; AIX32-NEXT: lwarx 4, 0, 21 1815; AIX32-NEXT: add 5, 20, 4 1816; AIX32-NEXT: andc 6, 4, 3 1817; AIX32-NEXT: and 5, 5, 3 1818; AIX32-NEXT: or 5, 5, 6 1819; AIX32-NEXT: stwcx. 5, 0, 21 1820; AIX32-NEXT: bne 0, L..BB1_3 1821; AIX32-NEXT: # %bb.4: # %entry 1822; AIX32-NEXT: srw 3, 4, 22 1823; AIX32-NEXT: lwz 23, L..C2(2) # @ss 1824; AIX32-NEXT: lwsync 1825; AIX32-NEXT: clrlwi 3, 3, 24 1826; AIX32-NEXT: rlwinm 17, 23, 0, 0, 29 1827; AIX32-NEXT: stb 3, 0(27) 1828; AIX32-NEXT: sync 1829; AIX32-NEXT: rlwinm 3, 23, 3, 27, 27 1830; AIX32-NEXT: xori 18, 3, 16 1831; AIX32-NEXT: li 3, 0 1832; AIX32-NEXT: ori 3, 3, 65535 1833; AIX32-NEXT: slw 16, 7, 18 1834; AIX32-NEXT: slw 3, 3, 18 1835; AIX32-NEXT: L..BB1_5: # %entry 1836; AIX32-NEXT: # 1837; AIX32-NEXT: lwarx 4, 0, 17 1838; AIX32-NEXT: add 5, 16, 4 1839; AIX32-NEXT: andc 6, 4, 3 1840; AIX32-NEXT: and 5, 5, 3 1841; AIX32-NEXT: or 5, 5, 6 1842; AIX32-NEXT: stwcx. 5, 0, 17 1843; AIX32-NEXT: bne 0, L..BB1_5 1844; AIX32-NEXT: # %bb.6: # %entry 1845; AIX32-NEXT: srw 3, 4, 18 1846; AIX32-NEXT: lwz 19, L..C3(2) # @us 1847; AIX32-NEXT: lwsync 1848; AIX32-NEXT: clrlwi 3, 3, 16 1849; AIX32-NEXT: rlwinm 14, 19, 0, 0, 29 1850; AIX32-NEXT: sth 3, 0(23) 1851; AIX32-NEXT: sync 1852; AIX32-NEXT: rlwinm 3, 19, 3, 27, 27 1853; AIX32-NEXT: xori 15, 3, 16 1854; AIX32-NEXT: li 3, 0 1855; AIX32-NEXT: ori 3, 3, 65535 1856; AIX32-NEXT: slw 13, 7, 15 1857; AIX32-NEXT: slw 3, 3, 15 1858; AIX32-NEXT: L..BB1_7: # %entry 1859; AIX32-NEXT: # 1860; AIX32-NEXT: lwarx 4, 0, 14 1861; AIX32-NEXT: add 5, 13, 4 1862; AIX32-NEXT: andc 6, 4, 3 1863; AIX32-NEXT: and 5, 5, 3 1864; AIX32-NEXT: or 5, 5, 6 1865; AIX32-NEXT: stwcx. 5, 0, 14 1866; AIX32-NEXT: bne 0, L..BB1_7 1867; AIX32-NEXT: # %bb.8: # %entry 1868; AIX32-NEXT: srw 3, 4, 15 1869; AIX32-NEXT: lwsync 1870; AIX32-NEXT: lwz 29, L..C4(2) # @si 1871; AIX32-NEXT: clrlwi 3, 3, 16 1872; AIX32-NEXT: sth 3, 0(19) 1873; AIX32-NEXT: sync 1874; AIX32-NEXT: L..BB1_9: # %entry 1875; AIX32-NEXT: # 1876; AIX32-NEXT: lwarx 3, 0, 29 1877; AIX32-NEXT: addi 4, 3, 11 1878; AIX32-NEXT: stwcx. 4, 0, 29 1879; AIX32-NEXT: bne 0, L..BB1_9 1880; AIX32-NEXT: # %bb.10: # %entry 1881; AIX32-NEXT: lwsync 1882; AIX32-NEXT: stw 3, 0(29) 1883; AIX32-NEXT: lwz 28, L..C5(2) # @ui 1884; AIX32-NEXT: sync 1885; AIX32-NEXT: L..BB1_11: # %entry 1886; AIX32-NEXT: # 1887; AIX32-NEXT: lwarx 3, 0, 28 1888; AIX32-NEXT: addi 4, 3, 11 1889; AIX32-NEXT: stwcx. 4, 0, 28 1890; AIX32-NEXT: bne 0, L..BB1_11 1891; AIX32-NEXT: # %bb.12: # %entry 1892; AIX32-NEXT: lwz 31, L..C6(2) # @sll 1893; AIX32-NEXT: lwsync 1894; AIX32-NEXT: li 4, 0 1895; AIX32-NEXT: li 5, 11 1896; AIX32-NEXT: li 6, 5 1897; AIX32-NEXT: stw 3, 0(28) 1898; AIX32-NEXT: mr 3, 31 1899; AIX32-NEXT: bl .__atomic_fetch_add_8[PR] 1900; AIX32-NEXT: nop 1901; AIX32-NEXT: lwz 30, L..C7(2) # @ull 1902; AIX32-NEXT: stw 4, 4(31) 1903; AIX32-NEXT: li 4, 0 1904; AIX32-NEXT: li 5, 11 1905; AIX32-NEXT: li 6, 5 1906; AIX32-NEXT: stw 3, 0(31) 1907; AIX32-NEXT: mr 3, 30 1908; AIX32-NEXT: bl .__atomic_fetch_add_8[PR] 1909; AIX32-NEXT: nop 1910; AIX32-NEXT: stw 3, 0(30) 1911; AIX32-NEXT: li 3, 255 1912; AIX32-NEXT: stw 4, 4(30) 1913; AIX32-NEXT: sync 1914; AIX32-NEXT: slw 3, 3, 26 1915; AIX32-NEXT: L..BB1_13: # %entry 1916; AIX32-NEXT: # 1917; AIX32-NEXT: lwarx 4, 0, 25 1918; AIX32-NEXT: sub 5, 4, 24 1919; AIX32-NEXT: andc 6, 4, 3 1920; AIX32-NEXT: and 5, 5, 3 1921; AIX32-NEXT: or 5, 5, 6 1922; AIX32-NEXT: stwcx. 5, 0, 25 1923; AIX32-NEXT: bne 0, L..BB1_13 1924; AIX32-NEXT: # %bb.14: # %entry 1925; AIX32-NEXT: srw 3, 4, 26 1926; AIX32-NEXT: lwsync 1927; AIX32-NEXT: lwz 4, 64(1) # 4-byte Folded Reload 1928; AIX32-NEXT: clrlwi 3, 3, 24 1929; AIX32-NEXT: stb 3, 0(4) 1930; AIX32-NEXT: li 3, 255 1931; AIX32-NEXT: sync 1932; AIX32-NEXT: slw 3, 3, 22 1933; AIX32-NEXT: L..BB1_15: # %entry 1934; AIX32-NEXT: # 1935; AIX32-NEXT: lwarx 4, 0, 21 1936; AIX32-NEXT: sub 5, 4, 20 1937; AIX32-NEXT: andc 6, 4, 3 1938; AIX32-NEXT: and 5, 5, 3 1939; AIX32-NEXT: or 5, 5, 6 1940; AIX32-NEXT: stwcx. 5, 0, 21 1941; AIX32-NEXT: bne 0, L..BB1_15 1942; AIX32-NEXT: # %bb.16: # %entry 1943; AIX32-NEXT: srw 3, 4, 22 1944; AIX32-NEXT: lwsync 1945; AIX32-NEXT: li 7, 11 1946; AIX32-NEXT: clrlwi 3, 3, 24 1947; AIX32-NEXT: stb 3, 0(27) 1948; AIX32-NEXT: sync 1949; AIX32-NEXT: li 3, 0 1950; AIX32-NEXT: ori 3, 3, 65535 1951; AIX32-NEXT: slw 3, 3, 18 1952; AIX32-NEXT: L..BB1_17: # %entry 1953; AIX32-NEXT: # 1954; AIX32-NEXT: lwarx 4, 0, 17 1955; AIX32-NEXT: sub 5, 4, 16 1956; AIX32-NEXT: andc 6, 4, 3 1957; AIX32-NEXT: and 5, 5, 3 1958; AIX32-NEXT: or 5, 5, 6 1959; AIX32-NEXT: stwcx. 5, 0, 17 1960; AIX32-NEXT: bne 0, L..BB1_17 1961; AIX32-NEXT: # %bb.18: # %entry 1962; AIX32-NEXT: srw 3, 4, 18 1963; AIX32-NEXT: lwsync 1964; AIX32-NEXT: clrlwi 3, 3, 16 1965; AIX32-NEXT: sth 3, 0(23) 1966; AIX32-NEXT: li 3, 0 1967; AIX32-NEXT: sync 1968; AIX32-NEXT: ori 3, 3, 65535 1969; AIX32-NEXT: slw 3, 3, 15 1970; AIX32-NEXT: L..BB1_19: # %entry 1971; AIX32-NEXT: # 1972; AIX32-NEXT: lwarx 4, 0, 14 1973; AIX32-NEXT: sub 5, 4, 13 1974; AIX32-NEXT: andc 6, 4, 3 1975; AIX32-NEXT: and 5, 5, 3 1976; AIX32-NEXT: or 5, 5, 6 1977; AIX32-NEXT: stwcx. 5, 0, 14 1978; AIX32-NEXT: bne 0, L..BB1_19 1979; AIX32-NEXT: # %bb.20: # %entry 1980; AIX32-NEXT: srw 3, 4, 15 1981; AIX32-NEXT: lwsync 1982; AIX32-NEXT: clrlwi 3, 3, 16 1983; AIX32-NEXT: sth 3, 0(19) 1984; AIX32-NEXT: sync 1985; AIX32-NEXT: L..BB1_21: # %entry 1986; AIX32-NEXT: # 1987; AIX32-NEXT: lwarx 3, 0, 29 1988; AIX32-NEXT: sub 4, 3, 7 1989; AIX32-NEXT: stwcx. 4, 0, 29 1990; AIX32-NEXT: bne 0, L..BB1_21 1991; AIX32-NEXT: # %bb.22: # %entry 1992; AIX32-NEXT: lwsync 1993; AIX32-NEXT: stw 3, 0(29) 1994; AIX32-NEXT: sync 1995; AIX32-NEXT: L..BB1_23: # %entry 1996; AIX32-NEXT: # 1997; AIX32-NEXT: lwarx 3, 0, 28 1998; AIX32-NEXT: sub 4, 3, 7 1999; AIX32-NEXT: stwcx. 4, 0, 28 2000; AIX32-NEXT: bne 0, L..BB1_23 2001; AIX32-NEXT: # %bb.24: # %entry 2002; AIX32-NEXT: lwsync 2003; AIX32-NEXT: li 4, 0 2004; AIX32-NEXT: li 5, 11 2005; AIX32-NEXT: li 6, 5 2006; AIX32-NEXT: stw 3, 0(28) 2007; AIX32-NEXT: mr 3, 31 2008; AIX32-NEXT: bl .__atomic_fetch_sub_8[PR] 2009; AIX32-NEXT: nop 2010; AIX32-NEXT: stw 4, 4(31) 2011; AIX32-NEXT: li 4, 0 2012; AIX32-NEXT: li 5, 11 2013; AIX32-NEXT: li 6, 5 2014; AIX32-NEXT: stw 3, 0(31) 2015; AIX32-NEXT: mr 3, 30 2016; AIX32-NEXT: bl .__atomic_fetch_sub_8[PR] 2017; AIX32-NEXT: nop 2018; AIX32-NEXT: stw 3, 0(30) 2019; AIX32-NEXT: li 3, 255 2020; AIX32-NEXT: stw 4, 4(30) 2021; AIX32-NEXT: sync 2022; AIX32-NEXT: slw 3, 3, 26 2023; AIX32-NEXT: L..BB1_25: # %entry 2024; AIX32-NEXT: # 2025; AIX32-NEXT: lwarx 4, 0, 25 2026; AIX32-NEXT: or 5, 24, 4 2027; AIX32-NEXT: andc 6, 4, 3 2028; AIX32-NEXT: and 5, 5, 3 2029; AIX32-NEXT: or 5, 5, 6 2030; AIX32-NEXT: stwcx. 5, 0, 25 2031; AIX32-NEXT: bne 0, L..BB1_25 2032; AIX32-NEXT: # %bb.26: # %entry 2033; AIX32-NEXT: srw 3, 4, 26 2034; AIX32-NEXT: lwsync 2035; AIX32-NEXT: lwz 4, 64(1) # 4-byte Folded Reload 2036; AIX32-NEXT: clrlwi 3, 3, 24 2037; AIX32-NEXT: stb 3, 0(4) 2038; AIX32-NEXT: li 3, 255 2039; AIX32-NEXT: sync 2040; AIX32-NEXT: slw 3, 3, 22 2041; AIX32-NEXT: L..BB1_27: # %entry 2042; AIX32-NEXT: # 2043; AIX32-NEXT: lwarx 4, 0, 21 2044; AIX32-NEXT: or 5, 20, 4 2045; AIX32-NEXT: andc 6, 4, 3 2046; AIX32-NEXT: and 5, 5, 3 2047; AIX32-NEXT: or 5, 5, 6 2048; AIX32-NEXT: stwcx. 5, 0, 21 2049; AIX32-NEXT: bne 0, L..BB1_27 2050; AIX32-NEXT: # %bb.28: # %entry 2051; AIX32-NEXT: srw 3, 4, 22 2052; AIX32-NEXT: lwsync 2053; AIX32-NEXT: clrlwi 3, 3, 24 2054; AIX32-NEXT: stb 3, 0(27) 2055; AIX32-NEXT: li 3, 0 2056; AIX32-NEXT: sync 2057; AIX32-NEXT: ori 3, 3, 65535 2058; AIX32-NEXT: slw 3, 3, 18 2059; AIX32-NEXT: L..BB1_29: # %entry 2060; AIX32-NEXT: # 2061; AIX32-NEXT: lwarx 4, 0, 17 2062; AIX32-NEXT: or 5, 16, 4 2063; AIX32-NEXT: andc 6, 4, 3 2064; AIX32-NEXT: and 5, 5, 3 2065; AIX32-NEXT: or 5, 5, 6 2066; AIX32-NEXT: stwcx. 5, 0, 17 2067; AIX32-NEXT: bne 0, L..BB1_29 2068; AIX32-NEXT: # %bb.30: # %entry 2069; AIX32-NEXT: srw 3, 4, 18 2070; AIX32-NEXT: lwsync 2071; AIX32-NEXT: clrlwi 3, 3, 16 2072; AIX32-NEXT: sth 3, 0(23) 2073; AIX32-NEXT: li 3, 0 2074; AIX32-NEXT: sync 2075; AIX32-NEXT: ori 3, 3, 65535 2076; AIX32-NEXT: slw 3, 3, 15 2077; AIX32-NEXT: L..BB1_31: # %entry 2078; AIX32-NEXT: # 2079; AIX32-NEXT: lwarx 4, 0, 14 2080; AIX32-NEXT: or 5, 13, 4 2081; AIX32-NEXT: andc 6, 4, 3 2082; AIX32-NEXT: and 5, 5, 3 2083; AIX32-NEXT: or 5, 5, 6 2084; AIX32-NEXT: stwcx. 5, 0, 14 2085; AIX32-NEXT: bne 0, L..BB1_31 2086; AIX32-NEXT: # %bb.32: # %entry 2087; AIX32-NEXT: srw 3, 4, 15 2088; AIX32-NEXT: lwsync 2089; AIX32-NEXT: clrlwi 3, 3, 16 2090; AIX32-NEXT: sth 3, 0(19) 2091; AIX32-NEXT: sync 2092; AIX32-NEXT: L..BB1_33: # %entry 2093; AIX32-NEXT: # 2094; AIX32-NEXT: lwarx 3, 0, 29 2095; AIX32-NEXT: ori 4, 3, 11 2096; AIX32-NEXT: stwcx. 4, 0, 29 2097; AIX32-NEXT: bne 0, L..BB1_33 2098; AIX32-NEXT: # %bb.34: # %entry 2099; AIX32-NEXT: lwsync 2100; AIX32-NEXT: stw 3, 0(29) 2101; AIX32-NEXT: sync 2102; AIX32-NEXT: L..BB1_35: # %entry 2103; AIX32-NEXT: # 2104; AIX32-NEXT: lwarx 3, 0, 28 2105; AIX32-NEXT: ori 4, 3, 11 2106; AIX32-NEXT: stwcx. 4, 0, 28 2107; AIX32-NEXT: bne 0, L..BB1_35 2108; AIX32-NEXT: # %bb.36: # %entry 2109; AIX32-NEXT: lwsync 2110; AIX32-NEXT: li 4, 0 2111; AIX32-NEXT: li 5, 11 2112; AIX32-NEXT: li 6, 5 2113; AIX32-NEXT: stw 3, 0(28) 2114; AIX32-NEXT: mr 3, 31 2115; AIX32-NEXT: bl .__atomic_fetch_or_8[PR] 2116; AIX32-NEXT: nop 2117; AIX32-NEXT: stw 4, 4(31) 2118; AIX32-NEXT: li 4, 0 2119; AIX32-NEXT: li 5, 11 2120; AIX32-NEXT: li 6, 5 2121; AIX32-NEXT: stw 3, 0(31) 2122; AIX32-NEXT: mr 3, 30 2123; AIX32-NEXT: bl .__atomic_fetch_or_8[PR] 2124; AIX32-NEXT: nop 2125; AIX32-NEXT: stw 3, 0(30) 2126; AIX32-NEXT: li 3, 255 2127; AIX32-NEXT: stw 4, 4(30) 2128; AIX32-NEXT: sync 2129; AIX32-NEXT: slw 3, 3, 26 2130; AIX32-NEXT: L..BB1_37: # %entry 2131; AIX32-NEXT: # 2132; AIX32-NEXT: lwarx 4, 0, 25 2133; AIX32-NEXT: xor 5, 24, 4 2134; AIX32-NEXT: andc 6, 4, 3 2135; AIX32-NEXT: and 5, 5, 3 2136; AIX32-NEXT: or 5, 5, 6 2137; AIX32-NEXT: stwcx. 5, 0, 25 2138; AIX32-NEXT: bne 0, L..BB1_37 2139; AIX32-NEXT: # %bb.38: # %entry 2140; AIX32-NEXT: srw 3, 4, 26 2141; AIX32-NEXT: lwsync 2142; AIX32-NEXT: lwz 4, 64(1) # 4-byte Folded Reload 2143; AIX32-NEXT: clrlwi 3, 3, 24 2144; AIX32-NEXT: stb 3, 0(4) 2145; AIX32-NEXT: li 3, 255 2146; AIX32-NEXT: sync 2147; AIX32-NEXT: slw 3, 3, 22 2148; AIX32-NEXT: L..BB1_39: # %entry 2149; AIX32-NEXT: # 2150; AIX32-NEXT: lwarx 4, 0, 21 2151; AIX32-NEXT: xor 5, 20, 4 2152; AIX32-NEXT: andc 6, 4, 3 2153; AIX32-NEXT: and 5, 5, 3 2154; AIX32-NEXT: or 5, 5, 6 2155; AIX32-NEXT: stwcx. 5, 0, 21 2156; AIX32-NEXT: bne 0, L..BB1_39 2157; AIX32-NEXT: # %bb.40: # %entry 2158; AIX32-NEXT: srw 3, 4, 22 2159; AIX32-NEXT: lwsync 2160; AIX32-NEXT: clrlwi 3, 3, 24 2161; AIX32-NEXT: stb 3, 0(27) 2162; AIX32-NEXT: li 3, 0 2163; AIX32-NEXT: sync 2164; AIX32-NEXT: ori 3, 3, 65535 2165; AIX32-NEXT: slw 3, 3, 18 2166; AIX32-NEXT: L..BB1_41: # %entry 2167; AIX32-NEXT: # 2168; AIX32-NEXT: lwarx 4, 0, 17 2169; AIX32-NEXT: xor 5, 16, 4 2170; AIX32-NEXT: andc 6, 4, 3 2171; AIX32-NEXT: and 5, 5, 3 2172; AIX32-NEXT: or 5, 5, 6 2173; AIX32-NEXT: stwcx. 5, 0, 17 2174; AIX32-NEXT: bne 0, L..BB1_41 2175; AIX32-NEXT: # %bb.42: # %entry 2176; AIX32-NEXT: srw 3, 4, 18 2177; AIX32-NEXT: lwsync 2178; AIX32-NEXT: clrlwi 3, 3, 16 2179; AIX32-NEXT: sth 3, 0(23) 2180; AIX32-NEXT: li 3, 0 2181; AIX32-NEXT: sync 2182; AIX32-NEXT: ori 3, 3, 65535 2183; AIX32-NEXT: slw 3, 3, 15 2184; AIX32-NEXT: L..BB1_43: # %entry 2185; AIX32-NEXT: # 2186; AIX32-NEXT: lwarx 4, 0, 14 2187; AIX32-NEXT: xor 5, 13, 4 2188; AIX32-NEXT: andc 6, 4, 3 2189; AIX32-NEXT: and 5, 5, 3 2190; AIX32-NEXT: or 5, 5, 6 2191; AIX32-NEXT: stwcx. 5, 0, 14 2192; AIX32-NEXT: bne 0, L..BB1_43 2193; AIX32-NEXT: # %bb.44: # %entry 2194; AIX32-NEXT: srw 3, 4, 15 2195; AIX32-NEXT: lwsync 2196; AIX32-NEXT: clrlwi 3, 3, 16 2197; AIX32-NEXT: sth 3, 0(19) 2198; AIX32-NEXT: sync 2199; AIX32-NEXT: L..BB1_45: # %entry 2200; AIX32-NEXT: # 2201; AIX32-NEXT: lwarx 3, 0, 29 2202; AIX32-NEXT: xori 4, 3, 11 2203; AIX32-NEXT: stwcx. 4, 0, 29 2204; AIX32-NEXT: bne 0, L..BB1_45 2205; AIX32-NEXT: # %bb.46: # %entry 2206; AIX32-NEXT: lwsync 2207; AIX32-NEXT: stw 3, 0(29) 2208; AIX32-NEXT: sync 2209; AIX32-NEXT: L..BB1_47: # %entry 2210; AIX32-NEXT: # 2211; AIX32-NEXT: lwarx 3, 0, 28 2212; AIX32-NEXT: xori 4, 3, 11 2213; AIX32-NEXT: stwcx. 4, 0, 28 2214; AIX32-NEXT: bne 0, L..BB1_47 2215; AIX32-NEXT: # %bb.48: # %entry 2216; AIX32-NEXT: lwsync 2217; AIX32-NEXT: li 4, 0 2218; AIX32-NEXT: li 5, 11 2219; AIX32-NEXT: li 6, 5 2220; AIX32-NEXT: stw 3, 0(28) 2221; AIX32-NEXT: mr 3, 31 2222; AIX32-NEXT: bl .__atomic_fetch_xor_8[PR] 2223; AIX32-NEXT: nop 2224; AIX32-NEXT: stw 4, 4(31) 2225; AIX32-NEXT: li 4, 0 2226; AIX32-NEXT: li 5, 11 2227; AIX32-NEXT: li 6, 5 2228; AIX32-NEXT: stw 3, 0(31) 2229; AIX32-NEXT: mr 3, 30 2230; AIX32-NEXT: bl .__atomic_fetch_xor_8[PR] 2231; AIX32-NEXT: nop 2232; AIX32-NEXT: stw 3, 0(30) 2233; AIX32-NEXT: li 3, 255 2234; AIX32-NEXT: stw 4, 4(30) 2235; AIX32-NEXT: sync 2236; AIX32-NEXT: slw 3, 3, 26 2237; AIX32-NEXT: L..BB1_49: # %entry 2238; AIX32-NEXT: # 2239; AIX32-NEXT: lwarx 4, 0, 25 2240; AIX32-NEXT: nand 5, 24, 4 2241; AIX32-NEXT: andc 6, 4, 3 2242; AIX32-NEXT: and 5, 5, 3 2243; AIX32-NEXT: or 5, 5, 6 2244; AIX32-NEXT: stwcx. 5, 0, 25 2245; AIX32-NEXT: bne 0, L..BB1_49 2246; AIX32-NEXT: # %bb.50: # %entry 2247; AIX32-NEXT: srw 3, 4, 26 2248; AIX32-NEXT: lwsync 2249; AIX32-NEXT: li 7, 11 2250; AIX32-NEXT: lwz 4, 64(1) # 4-byte Folded Reload 2251; AIX32-NEXT: clrlwi 3, 3, 24 2252; AIX32-NEXT: stb 3, 0(4) 2253; AIX32-NEXT: sync 2254; AIX32-NEXT: li 3, 255 2255; AIX32-NEXT: slw 3, 3, 22 2256; AIX32-NEXT: L..BB1_51: # %entry 2257; AIX32-NEXT: # 2258; AIX32-NEXT: lwarx 4, 0, 21 2259; AIX32-NEXT: nand 5, 20, 4 2260; AIX32-NEXT: andc 6, 4, 3 2261; AIX32-NEXT: and 5, 5, 3 2262; AIX32-NEXT: or 5, 5, 6 2263; AIX32-NEXT: stwcx. 5, 0, 21 2264; AIX32-NEXT: bne 0, L..BB1_51 2265; AIX32-NEXT: # %bb.52: # %entry 2266; AIX32-NEXT: srw 3, 4, 22 2267; AIX32-NEXT: lwsync 2268; AIX32-NEXT: clrlwi 3, 3, 24 2269; AIX32-NEXT: stb 3, 0(27) 2270; AIX32-NEXT: li 3, 0 2271; AIX32-NEXT: sync 2272; AIX32-NEXT: ori 3, 3, 65535 2273; AIX32-NEXT: slw 3, 3, 18 2274; AIX32-NEXT: L..BB1_53: # %entry 2275; AIX32-NEXT: # 2276; AIX32-NEXT: lwarx 4, 0, 17 2277; AIX32-NEXT: nand 5, 16, 4 2278; AIX32-NEXT: andc 6, 4, 3 2279; AIX32-NEXT: and 5, 5, 3 2280; AIX32-NEXT: or 5, 5, 6 2281; AIX32-NEXT: stwcx. 5, 0, 17 2282; AIX32-NEXT: bne 0, L..BB1_53 2283; AIX32-NEXT: # %bb.54: # %entry 2284; AIX32-NEXT: srw 3, 4, 18 2285; AIX32-NEXT: lwsync 2286; AIX32-NEXT: clrlwi 3, 3, 16 2287; AIX32-NEXT: sth 3, 0(23) 2288; AIX32-NEXT: li 3, 0 2289; AIX32-NEXT: sync 2290; AIX32-NEXT: ori 3, 3, 65535 2291; AIX32-NEXT: slw 3, 3, 15 2292; AIX32-NEXT: L..BB1_55: # %entry 2293; AIX32-NEXT: # 2294; AIX32-NEXT: lwarx 4, 0, 14 2295; AIX32-NEXT: nand 5, 13, 4 2296; AIX32-NEXT: andc 6, 4, 3 2297; AIX32-NEXT: and 5, 5, 3 2298; AIX32-NEXT: or 5, 5, 6 2299; AIX32-NEXT: stwcx. 5, 0, 14 2300; AIX32-NEXT: bne 0, L..BB1_55 2301; AIX32-NEXT: # %bb.56: # %entry 2302; AIX32-NEXT: srw 3, 4, 15 2303; AIX32-NEXT: lwsync 2304; AIX32-NEXT: clrlwi 3, 3, 16 2305; AIX32-NEXT: sth 3, 0(19) 2306; AIX32-NEXT: sync 2307; AIX32-NEXT: L..BB1_57: # %entry 2308; AIX32-NEXT: # 2309; AIX32-NEXT: lwarx 3, 0, 29 2310; AIX32-NEXT: nand 4, 7, 3 2311; AIX32-NEXT: stwcx. 4, 0, 29 2312; AIX32-NEXT: bne 0, L..BB1_57 2313; AIX32-NEXT: # %bb.58: # %entry 2314; AIX32-NEXT: lwsync 2315; AIX32-NEXT: stw 3, 0(29) 2316; AIX32-NEXT: sync 2317; AIX32-NEXT: L..BB1_59: # %entry 2318; AIX32-NEXT: # 2319; AIX32-NEXT: lwarx 3, 0, 28 2320; AIX32-NEXT: nand 4, 7, 3 2321; AIX32-NEXT: stwcx. 4, 0, 28 2322; AIX32-NEXT: bne 0, L..BB1_59 2323; AIX32-NEXT: # %bb.60: # %entry 2324; AIX32-NEXT: lwsync 2325; AIX32-NEXT: li 4, 0 2326; AIX32-NEXT: li 5, 11 2327; AIX32-NEXT: li 6, 5 2328; AIX32-NEXT: stw 3, 0(28) 2329; AIX32-NEXT: mr 3, 31 2330; AIX32-NEXT: bl .__atomic_fetch_nand_8[PR] 2331; AIX32-NEXT: nop 2332; AIX32-NEXT: stw 4, 4(31) 2333; AIX32-NEXT: li 4, 0 2334; AIX32-NEXT: li 5, 11 2335; AIX32-NEXT: li 6, 5 2336; AIX32-NEXT: stw 3, 0(31) 2337; AIX32-NEXT: mr 3, 30 2338; AIX32-NEXT: bl .__atomic_fetch_nand_8[PR] 2339; AIX32-NEXT: nop 2340; AIX32-NEXT: stw 3, 0(30) 2341; AIX32-NEXT: li 3, 255 2342; AIX32-NEXT: stw 4, 4(30) 2343; AIX32-NEXT: sync 2344; AIX32-NEXT: slw 3, 3, 26 2345; AIX32-NEXT: L..BB1_61: # %entry 2346; AIX32-NEXT: # 2347; AIX32-NEXT: lwarx 4, 0, 25 2348; AIX32-NEXT: and 5, 24, 4 2349; AIX32-NEXT: andc 6, 4, 3 2350; AIX32-NEXT: and 5, 5, 3 2351; AIX32-NEXT: or 5, 5, 6 2352; AIX32-NEXT: stwcx. 5, 0, 25 2353; AIX32-NEXT: bne 0, L..BB1_61 2354; AIX32-NEXT: # %bb.62: # %entry 2355; AIX32-NEXT: srw 3, 4, 26 2356; AIX32-NEXT: lwsync 2357; AIX32-NEXT: lwz 4, 64(1) # 4-byte Folded Reload 2358; AIX32-NEXT: clrlwi 3, 3, 24 2359; AIX32-NEXT: stb 3, 0(4) 2360; AIX32-NEXT: li 3, 255 2361; AIX32-NEXT: sync 2362; AIX32-NEXT: slw 3, 3, 22 2363; AIX32-NEXT: L..BB1_63: # %entry 2364; AIX32-NEXT: # 2365; AIX32-NEXT: lwarx 4, 0, 21 2366; AIX32-NEXT: and 5, 20, 4 2367; AIX32-NEXT: andc 6, 4, 3 2368; AIX32-NEXT: and 5, 5, 3 2369; AIX32-NEXT: or 5, 5, 6 2370; AIX32-NEXT: stwcx. 5, 0, 21 2371; AIX32-NEXT: bne 0, L..BB1_63 2372; AIX32-NEXT: # %bb.64: # %entry 2373; AIX32-NEXT: srw 3, 4, 22 2374; AIX32-NEXT: lwsync 2375; AIX32-NEXT: li 7, 11 2376; AIX32-NEXT: clrlwi 3, 3, 24 2377; AIX32-NEXT: stb 3, 0(27) 2378; AIX32-NEXT: sync 2379; AIX32-NEXT: li 3, 0 2380; AIX32-NEXT: ori 3, 3, 65535 2381; AIX32-NEXT: slw 3, 3, 18 2382; AIX32-NEXT: L..BB1_65: # %entry 2383; AIX32-NEXT: # 2384; AIX32-NEXT: lwarx 4, 0, 17 2385; AIX32-NEXT: and 5, 16, 4 2386; AIX32-NEXT: andc 6, 4, 3 2387; AIX32-NEXT: and 5, 5, 3 2388; AIX32-NEXT: or 5, 5, 6 2389; AIX32-NEXT: stwcx. 5, 0, 17 2390; AIX32-NEXT: bne 0, L..BB1_65 2391; AIX32-NEXT: # %bb.66: # %entry 2392; AIX32-NEXT: srw 3, 4, 18 2393; AIX32-NEXT: lwsync 2394; AIX32-NEXT: clrlwi 3, 3, 16 2395; AIX32-NEXT: sth 3, 0(23) 2396; AIX32-NEXT: li 3, 0 2397; AIX32-NEXT: sync 2398; AIX32-NEXT: ori 3, 3, 65535 2399; AIX32-NEXT: slw 3, 3, 15 2400; AIX32-NEXT: L..BB1_67: # %entry 2401; AIX32-NEXT: # 2402; AIX32-NEXT: lwarx 4, 0, 14 2403; AIX32-NEXT: and 5, 13, 4 2404; AIX32-NEXT: andc 6, 4, 3 2405; AIX32-NEXT: and 5, 5, 3 2406; AIX32-NEXT: or 5, 5, 6 2407; AIX32-NEXT: stwcx. 5, 0, 14 2408; AIX32-NEXT: bne 0, L..BB1_67 2409; AIX32-NEXT: # %bb.68: # %entry 2410; AIX32-NEXT: srw 3, 4, 15 2411; AIX32-NEXT: lwsync 2412; AIX32-NEXT: clrlwi 3, 3, 16 2413; AIX32-NEXT: sth 3, 0(19) 2414; AIX32-NEXT: sync 2415; AIX32-NEXT: L..BB1_69: # %entry 2416; AIX32-NEXT: # 2417; AIX32-NEXT: lwarx 3, 0, 29 2418; AIX32-NEXT: and 4, 7, 3 2419; AIX32-NEXT: stwcx. 4, 0, 29 2420; AIX32-NEXT: bne 0, L..BB1_69 2421; AIX32-NEXT: # %bb.70: # %entry 2422; AIX32-NEXT: lwsync 2423; AIX32-NEXT: stw 3, 0(29) 2424; AIX32-NEXT: sync 2425; AIX32-NEXT: L..BB1_71: # %entry 2426; AIX32-NEXT: # 2427; AIX32-NEXT: lwarx 3, 0, 28 2428; AIX32-NEXT: and 4, 7, 3 2429; AIX32-NEXT: stwcx. 4, 0, 28 2430; AIX32-NEXT: bne 0, L..BB1_71 2431; AIX32-NEXT: # %bb.72: # %entry 2432; AIX32-NEXT: lwsync 2433; AIX32-NEXT: li 4, 0 2434; AIX32-NEXT: li 5, 11 2435; AIX32-NEXT: li 6, 5 2436; AIX32-NEXT: stw 3, 0(28) 2437; AIX32-NEXT: mr 3, 31 2438; AIX32-NEXT: bl .__atomic_fetch_and_8[PR] 2439; AIX32-NEXT: nop 2440; AIX32-NEXT: stw 4, 4(31) 2441; AIX32-NEXT: li 4, 0 2442; AIX32-NEXT: li 5, 11 2443; AIX32-NEXT: li 6, 5 2444; AIX32-NEXT: stw 3, 0(31) 2445; AIX32-NEXT: mr 3, 30 2446; AIX32-NEXT: bl .__atomic_fetch_and_8[PR] 2447; AIX32-NEXT: nop 2448; AIX32-NEXT: stw 4, 4(30) 2449; AIX32-NEXT: stw 3, 0(30) 2450; AIX32-NEXT: lwz 31, 140(1) # 4-byte Folded Reload 2451; AIX32-NEXT: lwz 30, 136(1) # 4-byte Folded Reload 2452; AIX32-NEXT: lwz 29, 132(1) # 4-byte Folded Reload 2453; AIX32-NEXT: lwz 28, 128(1) # 4-byte Folded Reload 2454; AIX32-NEXT: lwz 27, 124(1) # 4-byte Folded Reload 2455; AIX32-NEXT: lwz 26, 120(1) # 4-byte Folded Reload 2456; AIX32-NEXT: lwz 25, 116(1) # 4-byte Folded Reload 2457; AIX32-NEXT: lwz 24, 112(1) # 4-byte Folded Reload 2458; AIX32-NEXT: lwz 23, 108(1) # 4-byte Folded Reload 2459; AIX32-NEXT: lwz 22, 104(1) # 4-byte Folded Reload 2460; AIX32-NEXT: lwz 21, 100(1) # 4-byte Folded Reload 2461; AIX32-NEXT: lwz 20, 96(1) # 4-byte Folded Reload 2462; AIX32-NEXT: lwz 19, 92(1) # 4-byte Folded Reload 2463; AIX32-NEXT: lwz 18, 88(1) # 4-byte Folded Reload 2464; AIX32-NEXT: lwz 17, 84(1) # 4-byte Folded Reload 2465; AIX32-NEXT: lwz 16, 80(1) # 4-byte Folded Reload 2466; AIX32-NEXT: lwz 15, 76(1) # 4-byte Folded Reload 2467; AIX32-NEXT: lwz 14, 72(1) # 4-byte Folded Reload 2468; AIX32-NEXT: lwz 13, 68(1) # 4-byte Folded Reload 2469; AIX32-NEXT: addi 1, 1, 144 2470; AIX32-NEXT: lwz 0, 8(1) 2471; AIX32-NEXT: mtlr 0 2472; AIX32-NEXT: blr 2473entry: 2474 %0 = atomicrmw add ptr @sc, i8 11 seq_cst, align 1 2475 store i8 %0, ptr @sc, align 1 2476 %1 = atomicrmw add ptr @uc, i8 11 seq_cst, align 1 2477 store i8 %1, ptr @uc, align 1 2478 %2 = atomicrmw add ptr @ss, i16 11 seq_cst, align 2 2479 store i16 %2, ptr @ss, align 2 2480 %3 = atomicrmw add ptr @us, i16 11 seq_cst, align 2 2481 store i16 %3, ptr @us, align 2 2482 %4 = atomicrmw add ptr @si, i32 11 seq_cst, align 4 2483 store i32 %4, ptr @si, align 4 2484 %5 = atomicrmw add ptr @ui, i32 11 seq_cst, align 4 2485 store i32 %5, ptr @ui, align 4 2486 %6 = atomicrmw add ptr @sll, i64 11 seq_cst, align 8 2487 store i64 %6, ptr @sll, align 8 2488 %7 = atomicrmw add ptr @ull, i64 11 seq_cst, align 8 2489 store i64 %7, ptr @ull, align 8 2490 %8 = atomicrmw sub ptr @sc, i8 11 seq_cst, align 1 2491 store i8 %8, ptr @sc, align 1 2492 %9 = atomicrmw sub ptr @uc, i8 11 seq_cst, align 1 2493 store i8 %9, ptr @uc, align 1 2494 %10 = atomicrmw sub ptr @ss, i16 11 seq_cst, align 2 2495 store i16 %10, ptr @ss, align 2 2496 %11 = atomicrmw sub ptr @us, i16 11 seq_cst, align 2 2497 store i16 %11, ptr @us, align 2 2498 %12 = atomicrmw sub ptr @si, i32 11 seq_cst, align 4 2499 store i32 %12, ptr @si, align 4 2500 %13 = atomicrmw sub ptr @ui, i32 11 seq_cst, align 4 2501 store i32 %13, ptr @ui, align 4 2502 %14 = atomicrmw sub ptr @sll, i64 11 seq_cst, align 8 2503 store i64 %14, ptr @sll, align 8 2504 %15 = atomicrmw sub ptr @ull, i64 11 seq_cst, align 8 2505 store i64 %15, ptr @ull, align 8 2506 %16 = atomicrmw or ptr @sc, i8 11 seq_cst, align 1 2507 store i8 %16, ptr @sc, align 1 2508 %17 = atomicrmw or ptr @uc, i8 11 seq_cst, align 1 2509 store i8 %17, ptr @uc, align 1 2510 %18 = atomicrmw or ptr @ss, i16 11 seq_cst, align 2 2511 store i16 %18, ptr @ss, align 2 2512 %19 = atomicrmw or ptr @us, i16 11 seq_cst, align 2 2513 store i16 %19, ptr @us, align 2 2514 %20 = atomicrmw or ptr @si, i32 11 seq_cst, align 4 2515 store i32 %20, ptr @si, align 4 2516 %21 = atomicrmw or ptr @ui, i32 11 seq_cst, align 4 2517 store i32 %21, ptr @ui, align 4 2518 %22 = atomicrmw or ptr @sll, i64 11 seq_cst, align 8 2519 store i64 %22, ptr @sll, align 8 2520 %23 = atomicrmw or ptr @ull, i64 11 seq_cst, align 8 2521 store i64 %23, ptr @ull, align 8 2522 %24 = atomicrmw xor ptr @sc, i8 11 seq_cst, align 1 2523 store i8 %24, ptr @sc, align 1 2524 %25 = atomicrmw xor ptr @uc, i8 11 seq_cst, align 1 2525 store i8 %25, ptr @uc, align 1 2526 %26 = atomicrmw xor ptr @ss, i16 11 seq_cst, align 2 2527 store i16 %26, ptr @ss, align 2 2528 %27 = atomicrmw xor ptr @us, i16 11 seq_cst, align 2 2529 store i16 %27, ptr @us, align 2 2530 %28 = atomicrmw xor ptr @si, i32 11 seq_cst, align 4 2531 store i32 %28, ptr @si, align 4 2532 %29 = atomicrmw xor ptr @ui, i32 11 seq_cst, align 4 2533 store i32 %29, ptr @ui, align 4 2534 %30 = atomicrmw xor ptr @sll, i64 11 seq_cst, align 8 2535 store i64 %30, ptr @sll, align 8 2536 %31 = atomicrmw xor ptr @ull, i64 11 seq_cst, align 8 2537 store i64 %31, ptr @ull, align 8 2538 %32 = atomicrmw nand ptr @sc, i8 11 seq_cst, align 1 2539 store i8 %32, ptr @sc, align 1 2540 %33 = atomicrmw nand ptr @uc, i8 11 seq_cst, align 1 2541 store i8 %33, ptr @uc, align 1 2542 %34 = atomicrmw nand ptr @ss, i16 11 seq_cst, align 2 2543 store i16 %34, ptr @ss, align 2 2544 %35 = atomicrmw nand ptr @us, i16 11 seq_cst, align 2 2545 store i16 %35, ptr @us, align 2 2546 %36 = atomicrmw nand ptr @si, i32 11 seq_cst, align 4 2547 store i32 %36, ptr @si, align 4 2548 %37 = atomicrmw nand ptr @ui, i32 11 seq_cst, align 4 2549 store i32 %37, ptr @ui, align 4 2550 %38 = atomicrmw nand ptr @sll, i64 11 seq_cst, align 8 2551 store i64 %38, ptr @sll, align 8 2552 %39 = atomicrmw nand ptr @ull, i64 11 seq_cst, align 8 2553 store i64 %39, ptr @ull, align 8 2554 %40 = atomicrmw and ptr @sc, i8 11 seq_cst, align 1 2555 store i8 %40, ptr @sc, align 1 2556 %41 = atomicrmw and ptr @uc, i8 11 seq_cst, align 1 2557 store i8 %41, ptr @uc, align 1 2558 %42 = atomicrmw and ptr @ss, i16 11 seq_cst, align 2 2559 store i16 %42, ptr @ss, align 2 2560 %43 = atomicrmw and ptr @us, i16 11 seq_cst, align 2 2561 store i16 %43, ptr @us, align 2 2562 %44 = atomicrmw and ptr @si, i32 11 seq_cst, align 4 2563 store i32 %44, ptr @si, align 4 2564 %45 = atomicrmw and ptr @ui, i32 11 seq_cst, align 4 2565 store i32 %45, ptr @ui, align 4 2566 %46 = atomicrmw and ptr @sll, i64 11 seq_cst, align 8 2567 store i64 %46, ptr @sll, align 8 2568 %47 = atomicrmw and ptr @ull, i64 11 seq_cst, align 8 2569 store i64 %47, ptr @ull, align 8 2570 ret void 2571} 2572 2573define dso_local void @test_op_and_fetch() local_unnamed_addr #0 { 2574; CHECK-LABEL: test_op_and_fetch: 2575; CHECK: # %bb.0: # %entry 2576; CHECK-NEXT: addis 3, 2, uc@toc@ha 2577; CHECK-NEXT: addis 5, 2, sc@toc@ha 2578; CHECK-NEXT: std 16, -128(1) # 8-byte Folded Spill 2579; CHECK-NEXT: std 17, -120(1) # 8-byte Folded Spill 2580; CHECK-NEXT: std 18, -112(1) # 8-byte Folded Spill 2581; CHECK-NEXT: std 19, -104(1) # 8-byte Folded Spill 2582; CHECK-NEXT: lbz 6, uc@toc@l(3) 2583; CHECK-NEXT: std 20, -96(1) # 8-byte Folded Spill 2584; CHECK-NEXT: std 21, -88(1) # 8-byte Folded Spill 2585; CHECK-NEXT: addi 4, 3, uc@toc@l 2586; CHECK-NEXT: addi 7, 5, sc@toc@l 2587; CHECK-NEXT: std 22, -80(1) # 8-byte Folded Spill 2588; CHECK-NEXT: std 23, -72(1) # 8-byte Folded Spill 2589; CHECK-NEXT: std 24, -64(1) # 8-byte Folded Spill 2590; CHECK-NEXT: std 25, -56(1) # 8-byte Folded Spill 2591; CHECK-NEXT: std 26, -48(1) # 8-byte Folded Spill 2592; CHECK-NEXT: std 27, -40(1) # 8-byte Folded Spill 2593; CHECK-NEXT: std 28, -32(1) # 8-byte Folded Spill 2594; CHECK-NEXT: std 29, -24(1) # 8-byte Folded Spill 2595; CHECK-NEXT: std 30, -16(1) # 8-byte Folded Spill 2596; CHECK-NEXT: sync 2597; CHECK-NEXT: .LBB2_1: # %entry 2598; CHECK-NEXT: # 2599; CHECK-NEXT: lbarx 8, 0, 7 2600; CHECK-NEXT: add 8, 6, 8 2601; CHECK-NEXT: stbcx. 8, 0, 7 2602; CHECK-NEXT: bne 0, .LBB2_1 2603; CHECK-NEXT: # %bb.2: # %entry 2604; CHECK-NEXT: lwsync 2605; CHECK-NEXT: stb 8, sc@toc@l(5) 2606; CHECK-NEXT: lbz 6, uc@toc@l(3) 2607; CHECK-NEXT: sync 2608; CHECK-NEXT: .LBB2_3: # %entry 2609; CHECK-NEXT: # 2610; CHECK-NEXT: lbarx 8, 0, 4 2611; CHECK-NEXT: add 8, 6, 8 2612; CHECK-NEXT: stbcx. 8, 0, 4 2613; CHECK-NEXT: bne 0, .LBB2_3 2614; CHECK-NEXT: # %bb.4: # %entry 2615; CHECK-NEXT: addis 6, 2, ss@toc@ha 2616; CHECK-NEXT: lwsync 2617; CHECK-NEXT: stb 8, uc@toc@l(3) 2618; CHECK-NEXT: clrlwi 8, 8, 24 2619; CHECK-NEXT: sync 2620; CHECK-NEXT: addi 9, 6, ss@toc@l 2621; CHECK-NEXT: .LBB2_5: # %entry 2622; CHECK-NEXT: # 2623; CHECK-NEXT: lharx 10, 0, 9 2624; CHECK-NEXT: add 10, 8, 10 2625; CHECK-NEXT: sthcx. 10, 0, 9 2626; CHECK-NEXT: bne 0, .LBB2_5 2627; CHECK-NEXT: # %bb.6: # %entry 2628; CHECK-NEXT: lwsync 2629; CHECK-NEXT: addis 8, 2, us@toc@ha 2630; CHECK-NEXT: sth 10, ss@toc@l(6) 2631; CHECK-NEXT: lbz 10, uc@toc@l(3) 2632; CHECK-NEXT: sync 2633; CHECK-NEXT: addi 11, 8, us@toc@l 2634; CHECK-NEXT: .LBB2_7: # %entry 2635; CHECK-NEXT: # 2636; CHECK-NEXT: lharx 12, 0, 11 2637; CHECK-NEXT: add 12, 10, 12 2638; CHECK-NEXT: sthcx. 12, 0, 11 2639; CHECK-NEXT: bne 0, .LBB2_7 2640; CHECK-NEXT: # %bb.8: # %entry 2641; CHECK-NEXT: lwsync 2642; CHECK-NEXT: addis 10, 2, si@toc@ha 2643; CHECK-NEXT: sth 12, us@toc@l(8) 2644; CHECK-NEXT: lbz 12, uc@toc@l(3) 2645; CHECK-NEXT: sync 2646; CHECK-NEXT: addi 0, 10, si@toc@l 2647; CHECK-NEXT: .LBB2_9: # %entry 2648; CHECK-NEXT: # 2649; CHECK-NEXT: lwarx 30, 0, 0 2650; CHECK-NEXT: add 30, 12, 30 2651; CHECK-NEXT: stwcx. 30, 0, 0 2652; CHECK-NEXT: bne 0, .LBB2_9 2653; CHECK-NEXT: # %bb.10: # %entry 2654; CHECK-NEXT: lwsync 2655; CHECK-NEXT: addis 12, 2, ui@toc@ha 2656; CHECK-NEXT: stw 30, si@toc@l(10) 2657; CHECK-NEXT: lbz 30, uc@toc@l(3) 2658; CHECK-NEXT: sync 2659; CHECK-NEXT: addi 29, 12, ui@toc@l 2660; CHECK-NEXT: .LBB2_11: # %entry 2661; CHECK-NEXT: # 2662; CHECK-NEXT: lwarx 28, 0, 29 2663; CHECK-NEXT: add 28, 30, 28 2664; CHECK-NEXT: stwcx. 28, 0, 29 2665; CHECK-NEXT: bne 0, .LBB2_11 2666; CHECK-NEXT: # %bb.12: # %entry 2667; CHECK-NEXT: lwsync 2668; CHECK-NEXT: addis 30, 2, sll@toc@ha 2669; CHECK-NEXT: stw 28, ui@toc@l(12) 2670; CHECK-NEXT: lbz 28, uc@toc@l(3) 2671; CHECK-NEXT: sync 2672; CHECK-NEXT: addi 27, 30, sll@toc@l 2673; CHECK-NEXT: .LBB2_13: # %entry 2674; CHECK-NEXT: # 2675; CHECK-NEXT: ldarx 26, 0, 27 2676; CHECK-NEXT: add 26, 28, 26 2677; CHECK-NEXT: stdcx. 26, 0, 27 2678; CHECK-NEXT: bne 0, .LBB2_13 2679; CHECK-NEXT: # %bb.14: # %entry 2680; CHECK-NEXT: lwsync 2681; CHECK-NEXT: addis 28, 2, ull@toc@ha 2682; CHECK-NEXT: std 26, sll@toc@l(30) 2683; CHECK-NEXT: lbz 25, uc@toc@l(3) 2684; CHECK-NEXT: sync 2685; CHECK-NEXT: addi 26, 28, ull@toc@l 2686; CHECK-NEXT: .LBB2_15: # %entry 2687; CHECK-NEXT: # 2688; CHECK-NEXT: ldarx 24, 0, 26 2689; CHECK-NEXT: add 24, 25, 24 2690; CHECK-NEXT: stdcx. 24, 0, 26 2691; CHECK-NEXT: bne 0, .LBB2_15 2692; CHECK-NEXT: # %bb.16: # %entry 2693; CHECK-NEXT: lwsync 2694; CHECK-NEXT: std 24, ull@toc@l(28) 2695; CHECK-NEXT: lbz 25, uc@toc@l(3) 2696; CHECK-NEXT: sync 2697; CHECK-NEXT: .LBB2_17: # %entry 2698; CHECK-NEXT: # 2699; CHECK-NEXT: lbarx 24, 0, 7 2700; CHECK-NEXT: sub 24, 24, 25 2701; CHECK-NEXT: stbcx. 24, 0, 7 2702; CHECK-NEXT: bne 0, .LBB2_17 2703; CHECK-NEXT: # %bb.18: # %entry 2704; CHECK-NEXT: lwsync 2705; CHECK-NEXT: stb 24, sc@toc@l(5) 2706; CHECK-NEXT: lbz 25, uc@toc@l(3) 2707; CHECK-NEXT: sync 2708; CHECK-NEXT: .LBB2_19: # %entry 2709; CHECK-NEXT: # 2710; CHECK-NEXT: lbarx 24, 0, 4 2711; CHECK-NEXT: sub 24, 24, 25 2712; CHECK-NEXT: stbcx. 24, 0, 4 2713; CHECK-NEXT: bne 0, .LBB2_19 2714; CHECK-NEXT: # %bb.20: # %entry 2715; CHECK-NEXT: lwsync 2716; CHECK-NEXT: stb 24, uc@toc@l(3) 2717; CHECK-NEXT: clrlwi 25, 24, 24 2718; CHECK-NEXT: sync 2719; CHECK-NEXT: .LBB2_21: # %entry 2720; CHECK-NEXT: # 2721; CHECK-NEXT: lharx 24, 0, 9 2722; CHECK-NEXT: sub 24, 24, 25 2723; CHECK-NEXT: sthcx. 24, 0, 9 2724; CHECK-NEXT: bne 0, .LBB2_21 2725; CHECK-NEXT: # %bb.22: # %entry 2726; CHECK-NEXT: lwsync 2727; CHECK-NEXT: sth 24, ss@toc@l(6) 2728; CHECK-NEXT: lbz 25, uc@toc@l(3) 2729; CHECK-NEXT: sync 2730; CHECK-NEXT: .LBB2_23: # %entry 2731; CHECK-NEXT: # 2732; CHECK-NEXT: lharx 24, 0, 11 2733; CHECK-NEXT: sub 24, 24, 25 2734; CHECK-NEXT: sthcx. 24, 0, 11 2735; CHECK-NEXT: bne 0, .LBB2_23 2736; CHECK-NEXT: # %bb.24: # %entry 2737; CHECK-NEXT: lwsync 2738; CHECK-NEXT: sth 24, us@toc@l(8) 2739; CHECK-NEXT: lbz 25, uc@toc@l(3) 2740; CHECK-NEXT: sync 2741; CHECK-NEXT: .LBB2_25: # %entry 2742; CHECK-NEXT: # 2743; CHECK-NEXT: lwarx 24, 0, 0 2744; CHECK-NEXT: sub 24, 24, 25 2745; CHECK-NEXT: stwcx. 24, 0, 0 2746; CHECK-NEXT: bne 0, .LBB2_25 2747; CHECK-NEXT: # %bb.26: # %entry 2748; CHECK-NEXT: lwsync 2749; CHECK-NEXT: stw 24, si@toc@l(10) 2750; CHECK-NEXT: lbz 25, uc@toc@l(3) 2751; CHECK-NEXT: sync 2752; CHECK-NEXT: .LBB2_27: # %entry 2753; CHECK-NEXT: # 2754; CHECK-NEXT: lwarx 24, 0, 29 2755; CHECK-NEXT: sub 24, 24, 25 2756; CHECK-NEXT: stwcx. 24, 0, 29 2757; CHECK-NEXT: bne 0, .LBB2_27 2758; CHECK-NEXT: # %bb.28: # %entry 2759; CHECK-NEXT: lwsync 2760; CHECK-NEXT: stw 24, ui@toc@l(12) 2761; CHECK-NEXT: lbz 25, uc@toc@l(3) 2762; CHECK-NEXT: sync 2763; CHECK-NEXT: .LBB2_29: # %entry 2764; CHECK-NEXT: # 2765; CHECK-NEXT: ldarx 24, 0, 27 2766; CHECK-NEXT: sub 24, 24, 25 2767; CHECK-NEXT: stdcx. 24, 0, 27 2768; CHECK-NEXT: bne 0, .LBB2_29 2769; CHECK-NEXT: # %bb.30: # %entry 2770; CHECK-NEXT: lwsync 2771; CHECK-NEXT: std 24, sll@toc@l(30) 2772; CHECK-NEXT: lbz 25, uc@toc@l(3) 2773; CHECK-NEXT: sync 2774; CHECK-NEXT: .LBB2_31: # %entry 2775; CHECK-NEXT: # 2776; CHECK-NEXT: ldarx 24, 0, 26 2777; CHECK-NEXT: sub 24, 24, 25 2778; CHECK-NEXT: stdcx. 24, 0, 26 2779; CHECK-NEXT: bne 0, .LBB2_31 2780; CHECK-NEXT: # %bb.32: # %entry 2781; CHECK-NEXT: lwsync 2782; CHECK-NEXT: std 24, ull@toc@l(28) 2783; CHECK-NEXT: lbz 25, uc@toc@l(3) 2784; CHECK-NEXT: sync 2785; CHECK-NEXT: .LBB2_33: # %entry 2786; CHECK-NEXT: # 2787; CHECK-NEXT: lbarx 24, 0, 7 2788; CHECK-NEXT: or 24, 25, 24 2789; CHECK-NEXT: stbcx. 24, 0, 7 2790; CHECK-NEXT: bne 0, .LBB2_33 2791; CHECK-NEXT: # %bb.34: # %entry 2792; CHECK-NEXT: lwsync 2793; CHECK-NEXT: stb 24, sc@toc@l(5) 2794; CHECK-NEXT: lbz 25, uc@toc@l(3) 2795; CHECK-NEXT: sync 2796; CHECK-NEXT: .LBB2_35: # %entry 2797; CHECK-NEXT: # 2798; CHECK-NEXT: lbarx 24, 0, 4 2799; CHECK-NEXT: or 24, 25, 24 2800; CHECK-NEXT: stbcx. 24, 0, 4 2801; CHECK-NEXT: bne 0, .LBB2_35 2802; CHECK-NEXT: # %bb.36: # %entry 2803; CHECK-NEXT: lwsync 2804; CHECK-NEXT: stb 24, uc@toc@l(3) 2805; CHECK-NEXT: clrlwi 25, 24, 24 2806; CHECK-NEXT: sync 2807; CHECK-NEXT: .LBB2_37: # %entry 2808; CHECK-NEXT: # 2809; CHECK-NEXT: lharx 24, 0, 9 2810; CHECK-NEXT: or 24, 25, 24 2811; CHECK-NEXT: sthcx. 24, 0, 9 2812; CHECK-NEXT: bne 0, .LBB2_37 2813; CHECK-NEXT: # %bb.38: # %entry 2814; CHECK-NEXT: lwsync 2815; CHECK-NEXT: sth 24, ss@toc@l(6) 2816; CHECK-NEXT: lbz 25, uc@toc@l(3) 2817; CHECK-NEXT: sync 2818; CHECK-NEXT: .LBB2_39: # %entry 2819; CHECK-NEXT: # 2820; CHECK-NEXT: lharx 24, 0, 11 2821; CHECK-NEXT: or 24, 25, 24 2822; CHECK-NEXT: sthcx. 24, 0, 11 2823; CHECK-NEXT: bne 0, .LBB2_39 2824; CHECK-NEXT: # %bb.40: # %entry 2825; CHECK-NEXT: lwsync 2826; CHECK-NEXT: sth 24, us@toc@l(8) 2827; CHECK-NEXT: lbz 25, uc@toc@l(3) 2828; CHECK-NEXT: sync 2829; CHECK-NEXT: .LBB2_41: # %entry 2830; CHECK-NEXT: # 2831; CHECK-NEXT: lwarx 24, 0, 0 2832; CHECK-NEXT: or 24, 25, 24 2833; CHECK-NEXT: stwcx. 24, 0, 0 2834; CHECK-NEXT: bne 0, .LBB2_41 2835; CHECK-NEXT: # %bb.42: # %entry 2836; CHECK-NEXT: lwsync 2837; CHECK-NEXT: stw 24, si@toc@l(10) 2838; CHECK-NEXT: lbz 25, uc@toc@l(3) 2839; CHECK-NEXT: sync 2840; CHECK-NEXT: .LBB2_43: # %entry 2841; CHECK-NEXT: # 2842; CHECK-NEXT: lwarx 24, 0, 29 2843; CHECK-NEXT: or 24, 25, 24 2844; CHECK-NEXT: stwcx. 24, 0, 29 2845; CHECK-NEXT: bne 0, .LBB2_43 2846; CHECK-NEXT: # %bb.44: # %entry 2847; CHECK-NEXT: lwsync 2848; CHECK-NEXT: stw 24, ui@toc@l(12) 2849; CHECK-NEXT: lbz 25, uc@toc@l(3) 2850; CHECK-NEXT: sync 2851; CHECK-NEXT: .LBB2_45: # %entry 2852; CHECK-NEXT: # 2853; CHECK-NEXT: ldarx 24, 0, 27 2854; CHECK-NEXT: or 24, 25, 24 2855; CHECK-NEXT: stdcx. 24, 0, 27 2856; CHECK-NEXT: bne 0, .LBB2_45 2857; CHECK-NEXT: # %bb.46: # %entry 2858; CHECK-NEXT: lwsync 2859; CHECK-NEXT: std 24, sll@toc@l(30) 2860; CHECK-NEXT: lbz 25, uc@toc@l(3) 2861; CHECK-NEXT: sync 2862; CHECK-NEXT: .LBB2_47: # %entry 2863; CHECK-NEXT: # 2864; CHECK-NEXT: ldarx 24, 0, 26 2865; CHECK-NEXT: or 24, 25, 24 2866; CHECK-NEXT: stdcx. 24, 0, 26 2867; CHECK-NEXT: bne 0, .LBB2_47 2868; CHECK-NEXT: # %bb.48: # %entry 2869; CHECK-NEXT: lwsync 2870; CHECK-NEXT: std 24, ull@toc@l(28) 2871; CHECK-NEXT: lbz 25, uc@toc@l(3) 2872; CHECK-NEXT: sync 2873; CHECK-NEXT: .LBB2_49: # %entry 2874; CHECK-NEXT: # 2875; CHECK-NEXT: lbarx 24, 0, 7 2876; CHECK-NEXT: xor 24, 25, 24 2877; CHECK-NEXT: stbcx. 24, 0, 7 2878; CHECK-NEXT: bne 0, .LBB2_49 2879; CHECK-NEXT: # %bb.50: # %entry 2880; CHECK-NEXT: lwsync 2881; CHECK-NEXT: stb 24, sc@toc@l(5) 2882; CHECK-NEXT: lbz 25, uc@toc@l(3) 2883; CHECK-NEXT: sync 2884; CHECK-NEXT: .LBB2_51: # %entry 2885; CHECK-NEXT: # 2886; CHECK-NEXT: lbarx 24, 0, 4 2887; CHECK-NEXT: xor 24, 25, 24 2888; CHECK-NEXT: stbcx. 24, 0, 4 2889; CHECK-NEXT: bne 0, .LBB2_51 2890; CHECK-NEXT: # %bb.52: # %entry 2891; CHECK-NEXT: lwsync 2892; CHECK-NEXT: stb 24, uc@toc@l(3) 2893; CHECK-NEXT: clrlwi 25, 24, 24 2894; CHECK-NEXT: sync 2895; CHECK-NEXT: .LBB2_53: # %entry 2896; CHECK-NEXT: # 2897; CHECK-NEXT: lharx 24, 0, 9 2898; CHECK-NEXT: xor 24, 25, 24 2899; CHECK-NEXT: sthcx. 24, 0, 9 2900; CHECK-NEXT: bne 0, .LBB2_53 2901; CHECK-NEXT: # %bb.54: # %entry 2902; CHECK-NEXT: lwsync 2903; CHECK-NEXT: sth 24, ss@toc@l(6) 2904; CHECK-NEXT: lbz 25, uc@toc@l(3) 2905; CHECK-NEXT: sync 2906; CHECK-NEXT: .LBB2_55: # %entry 2907; CHECK-NEXT: # 2908; CHECK-NEXT: lharx 24, 0, 11 2909; CHECK-NEXT: xor 24, 25, 24 2910; CHECK-NEXT: sthcx. 24, 0, 11 2911; CHECK-NEXT: bne 0, .LBB2_55 2912; CHECK-NEXT: # %bb.56: # %entry 2913; CHECK-NEXT: lwsync 2914; CHECK-NEXT: sth 24, us@toc@l(8) 2915; CHECK-NEXT: lbz 25, uc@toc@l(3) 2916; CHECK-NEXT: sync 2917; CHECK-NEXT: .LBB2_57: # %entry 2918; CHECK-NEXT: # 2919; CHECK-NEXT: lwarx 24, 0, 0 2920; CHECK-NEXT: xor 24, 25, 24 2921; CHECK-NEXT: stwcx. 24, 0, 0 2922; CHECK-NEXT: bne 0, .LBB2_57 2923; CHECK-NEXT: # %bb.58: # %entry 2924; CHECK-NEXT: lwsync 2925; CHECK-NEXT: stw 24, si@toc@l(10) 2926; CHECK-NEXT: lbz 25, uc@toc@l(3) 2927; CHECK-NEXT: sync 2928; CHECK-NEXT: .LBB2_59: # %entry 2929; CHECK-NEXT: # 2930; CHECK-NEXT: lwarx 24, 0, 29 2931; CHECK-NEXT: xor 24, 25, 24 2932; CHECK-NEXT: stwcx. 24, 0, 29 2933; CHECK-NEXT: bne 0, .LBB2_59 2934; CHECK-NEXT: # %bb.60: # %entry 2935; CHECK-NEXT: lwsync 2936; CHECK-NEXT: stw 24, ui@toc@l(12) 2937; CHECK-NEXT: lbz 25, uc@toc@l(3) 2938; CHECK-NEXT: sync 2939; CHECK-NEXT: .LBB2_61: # %entry 2940; CHECK-NEXT: # 2941; CHECK-NEXT: ldarx 24, 0, 27 2942; CHECK-NEXT: xor 24, 25, 24 2943; CHECK-NEXT: stdcx. 24, 0, 27 2944; CHECK-NEXT: bne 0, .LBB2_61 2945; CHECK-NEXT: # %bb.62: # %entry 2946; CHECK-NEXT: lwsync 2947; CHECK-NEXT: std 24, sll@toc@l(30) 2948; CHECK-NEXT: lbz 25, uc@toc@l(3) 2949; CHECK-NEXT: sync 2950; CHECK-NEXT: .LBB2_63: # %entry 2951; CHECK-NEXT: # 2952; CHECK-NEXT: ldarx 24, 0, 26 2953; CHECK-NEXT: xor 24, 25, 24 2954; CHECK-NEXT: stdcx. 24, 0, 26 2955; CHECK-NEXT: bne 0, .LBB2_63 2956; CHECK-NEXT: # %bb.64: # %entry 2957; CHECK-NEXT: lwsync 2958; CHECK-NEXT: std 24, ull@toc@l(28) 2959; CHECK-NEXT: lbz 25, uc@toc@l(3) 2960; CHECK-NEXT: sync 2961; CHECK-NEXT: .LBB2_65: # %entry 2962; CHECK-NEXT: # 2963; CHECK-NEXT: lbarx 24, 0, 7 2964; CHECK-NEXT: nand 24, 25, 24 2965; CHECK-NEXT: stbcx. 24, 0, 7 2966; CHECK-NEXT: bne 0, .LBB2_65 2967; CHECK-NEXT: # %bb.66: # %entry 2968; CHECK-NEXT: lwsync 2969; CHECK-NEXT: stb 24, sc@toc@l(5) 2970; CHECK-NEXT: lbz 25, uc@toc@l(3) 2971; CHECK-NEXT: sync 2972; CHECK-NEXT: .LBB2_67: # %entry 2973; CHECK-NEXT: # 2974; CHECK-NEXT: lbarx 24, 0, 4 2975; CHECK-NEXT: nand 24, 25, 24 2976; CHECK-NEXT: stbcx. 24, 0, 4 2977; CHECK-NEXT: bne 0, .LBB2_67 2978; CHECK-NEXT: # %bb.68: # %entry 2979; CHECK-NEXT: lwsync 2980; CHECK-NEXT: stb 24, uc@toc@l(3) 2981; CHECK-NEXT: clrlwi 25, 24, 24 2982; CHECK-NEXT: sync 2983; CHECK-NEXT: .LBB2_69: # %entry 2984; CHECK-NEXT: # 2985; CHECK-NEXT: lharx 24, 0, 9 2986; CHECK-NEXT: nand 24, 25, 24 2987; CHECK-NEXT: sthcx. 24, 0, 9 2988; CHECK-NEXT: bne 0, .LBB2_69 2989; CHECK-NEXT: # %bb.70: # %entry 2990; CHECK-NEXT: lwsync 2991; CHECK-NEXT: sth 24, ss@toc@l(6) 2992; CHECK-NEXT: lbz 25, uc@toc@l(3) 2993; CHECK-NEXT: sync 2994; CHECK-NEXT: .LBB2_71: # %entry 2995; CHECK-NEXT: # 2996; CHECK-NEXT: lharx 24, 0, 11 2997; CHECK-NEXT: nand 24, 25, 24 2998; CHECK-NEXT: sthcx. 24, 0, 11 2999; CHECK-NEXT: bne 0, .LBB2_71 3000; CHECK-NEXT: # %bb.72: # %entry 3001; CHECK-NEXT: lwsync 3002; CHECK-NEXT: sth 24, us@toc@l(8) 3003; CHECK-NEXT: lbz 25, uc@toc@l(3) 3004; CHECK-NEXT: sync 3005; CHECK-NEXT: .LBB2_73: # %entry 3006; CHECK-NEXT: # 3007; CHECK-NEXT: lwarx 24, 0, 0 3008; CHECK-NEXT: nand 24, 25, 24 3009; CHECK-NEXT: stwcx. 24, 0, 0 3010; CHECK-NEXT: bne 0, .LBB2_73 3011; CHECK-NEXT: # %bb.74: # %entry 3012; CHECK-NEXT: lwsync 3013; CHECK-NEXT: stw 24, si@toc@l(10) 3014; CHECK-NEXT: lbz 25, uc@toc@l(3) 3015; CHECK-NEXT: sync 3016; CHECK-NEXT: .LBB2_75: # %entry 3017; CHECK-NEXT: # 3018; CHECK-NEXT: lwarx 24, 0, 29 3019; CHECK-NEXT: nand 24, 25, 24 3020; CHECK-NEXT: stwcx. 24, 0, 29 3021; CHECK-NEXT: bne 0, .LBB2_75 3022; CHECK-NEXT: # %bb.76: # %entry 3023; CHECK-NEXT: lwsync 3024; CHECK-NEXT: stw 24, ui@toc@l(12) 3025; CHECK-NEXT: lbz 25, uc@toc@l(3) 3026; CHECK-NEXT: sync 3027; CHECK-NEXT: .LBB2_77: # %entry 3028; CHECK-NEXT: # 3029; CHECK-NEXT: ldarx 24, 0, 27 3030; CHECK-NEXT: nand 24, 25, 24 3031; CHECK-NEXT: stdcx. 24, 0, 27 3032; CHECK-NEXT: bne 0, .LBB2_77 3033; CHECK-NEXT: # %bb.78: # %entry 3034; CHECK-NEXT: lwsync 3035; CHECK-NEXT: std 24, sll@toc@l(30) 3036; CHECK-NEXT: lbz 25, uc@toc@l(3) 3037; CHECK-NEXT: sync 3038; CHECK-NEXT: .LBB2_79: # %entry 3039; CHECK-NEXT: # 3040; CHECK-NEXT: ldarx 24, 0, 26 3041; CHECK-NEXT: nand 24, 25, 24 3042; CHECK-NEXT: stdcx. 24, 0, 26 3043; CHECK-NEXT: bne 0, .LBB2_79 3044; CHECK-NEXT: # %bb.80: # %entry 3045; CHECK-NEXT: lwsync 3046; CHECK-NEXT: std 24, ull@toc@l(28) 3047; CHECK-NEXT: addis 24, 2, u128@toc@ha 3048; CHECK-NEXT: li 22, 0 3049; CHECK-NEXT: lbz 25, uc@toc@l(3) 3050; CHECK-NEXT: sync 3051; CHECK-NEXT: addi 23, 24, u128@toc@l 3052; CHECK-NEXT: .LBB2_81: # %entry 3053; CHECK-NEXT: # 3054; CHECK-NEXT: lqarx 20, 0, 23 3055; CHECK-NEXT: nand 19, 25, 21 3056; CHECK-NEXT: nand 18, 22, 20 3057; CHECK-NEXT: stqcx. 18, 0, 23 3058; CHECK-NEXT: bne 0, .LBB2_81 3059; CHECK-NEXT: # %bb.82: # %entry 3060; CHECK-NEXT: lwsync 3061; CHECK-NEXT: nand 25, 21, 25 3062; CHECK-NEXT: li 21, -1 3063; CHECK-NEXT: std 25, u128@toc@l(24) 3064; CHECK-NEXT: addis 24, 2, s128@toc@ha 3065; CHECK-NEXT: lbz 25, uc@toc@l(3) 3066; CHECK-NEXT: std 21, 8(23) 3067; CHECK-NEXT: sync 3068; CHECK-NEXT: addi 23, 24, s128@toc@l 3069; CHECK-NEXT: .LBB2_83: # %entry 3070; CHECK-NEXT: # 3071; CHECK-NEXT: lqarx 18, 0, 23 3072; CHECK-NEXT: nand 17, 25, 19 3073; CHECK-NEXT: nand 16, 22, 18 3074; CHECK-NEXT: stqcx. 16, 0, 23 3075; CHECK-NEXT: bne 0, .LBB2_83 3076; CHECK-NEXT: # %bb.84: # %entry 3077; CHECK-NEXT: lwsync 3078; CHECK-NEXT: std 21, 8(23) 3079; CHECK-NEXT: nand 25, 19, 25 3080; CHECK-NEXT: std 25, s128@toc@l(24) 3081; CHECK-NEXT: lbz 25, uc@toc@l(3) 3082; CHECK-NEXT: sync 3083; CHECK-NEXT: .LBB2_85: # %entry 3084; CHECK-NEXT: # 3085; CHECK-NEXT: lbarx 24, 0, 7 3086; CHECK-NEXT: and 24, 25, 24 3087; CHECK-NEXT: stbcx. 24, 0, 7 3088; CHECK-NEXT: bne 0, .LBB2_85 3089; CHECK-NEXT: # %bb.86: # %entry 3090; CHECK-NEXT: lwsync 3091; CHECK-NEXT: stb 24, sc@toc@l(5) 3092; CHECK-NEXT: lbz 7, uc@toc@l(3) 3093; CHECK-NEXT: sync 3094; CHECK-NEXT: .LBB2_87: # %entry 3095; CHECK-NEXT: # 3096; CHECK-NEXT: lbarx 5, 0, 4 3097; CHECK-NEXT: and 5, 7, 5 3098; CHECK-NEXT: stbcx. 5, 0, 4 3099; CHECK-NEXT: bne 0, .LBB2_87 3100; CHECK-NEXT: # %bb.88: # %entry 3101; CHECK-NEXT: lwsync 3102; CHECK-NEXT: stb 5, uc@toc@l(3) 3103; CHECK-NEXT: sync 3104; CHECK-NEXT: .LBB2_89: # %entry 3105; CHECK-NEXT: # 3106; CHECK-NEXT: lharx 4, 0, 9 3107; CHECK-NEXT: and 4, 5, 4 3108; CHECK-NEXT: sthcx. 4, 0, 9 3109; CHECK-NEXT: bne 0, .LBB2_89 3110; CHECK-NEXT: # %bb.90: # %entry 3111; CHECK-NEXT: lwsync 3112; CHECK-NEXT: sth 4, ss@toc@l(6) 3113; CHECK-NEXT: lbz 4, uc@toc@l(3) 3114; CHECK-NEXT: sync 3115; CHECK-NEXT: .LBB2_91: # %entry 3116; CHECK-NEXT: # 3117; CHECK-NEXT: lharx 5, 0, 11 3118; CHECK-NEXT: and 5, 4, 5 3119; CHECK-NEXT: sthcx. 5, 0, 11 3120; CHECK-NEXT: bne 0, .LBB2_91 3121; CHECK-NEXT: # %bb.92: # %entry 3122; CHECK-NEXT: lwsync 3123; CHECK-NEXT: sth 5, us@toc@l(8) 3124; CHECK-NEXT: lbz 4, uc@toc@l(3) 3125; CHECK-NEXT: sync 3126; CHECK-NEXT: .LBB2_93: # %entry 3127; CHECK-NEXT: # 3128; CHECK-NEXT: lwarx 5, 0, 0 3129; CHECK-NEXT: and 5, 4, 5 3130; CHECK-NEXT: stwcx. 5, 0, 0 3131; CHECK-NEXT: bne 0, .LBB2_93 3132; CHECK-NEXT: # %bb.94: # %entry 3133; CHECK-NEXT: lwsync 3134; CHECK-NEXT: stw 5, si@toc@l(10) 3135; CHECK-NEXT: lbz 4, uc@toc@l(3) 3136; CHECK-NEXT: sync 3137; CHECK-NEXT: .LBB2_95: # %entry 3138; CHECK-NEXT: # 3139; CHECK-NEXT: lwarx 5, 0, 29 3140; CHECK-NEXT: and 5, 4, 5 3141; CHECK-NEXT: stwcx. 5, 0, 29 3142; CHECK-NEXT: bne 0, .LBB2_95 3143; CHECK-NEXT: # %bb.96: # %entry 3144; CHECK-NEXT: lwsync 3145; CHECK-NEXT: stw 5, ui@toc@l(12) 3146; CHECK-NEXT: lbz 4, uc@toc@l(3) 3147; CHECK-NEXT: sync 3148; CHECK-NEXT: .LBB2_97: # %entry 3149; CHECK-NEXT: # 3150; CHECK-NEXT: ldarx 5, 0, 27 3151; CHECK-NEXT: and 5, 4, 5 3152; CHECK-NEXT: stdcx. 5, 0, 27 3153; CHECK-NEXT: bne 0, .LBB2_97 3154; CHECK-NEXT: # %bb.98: # %entry 3155; CHECK-NEXT: lwsync 3156; CHECK-NEXT: std 5, sll@toc@l(30) 3157; CHECK-NEXT: lbz 3, uc@toc@l(3) 3158; CHECK-NEXT: sync 3159; CHECK-NEXT: .LBB2_99: # %entry 3160; CHECK-NEXT: # 3161; CHECK-NEXT: ldarx 4, 0, 26 3162; CHECK-NEXT: and 4, 3, 4 3163; CHECK-NEXT: stdcx. 4, 0, 26 3164; CHECK-NEXT: bne 0, .LBB2_99 3165; CHECK-NEXT: # %bb.100: # %entry 3166; CHECK-NEXT: lwsync 3167; CHECK-NEXT: std 4, ull@toc@l(28) 3168; CHECK-NEXT: ld 30, -16(1) # 8-byte Folded Reload 3169; CHECK-NEXT: ld 29, -24(1) # 8-byte Folded Reload 3170; CHECK-NEXT: ld 28, -32(1) # 8-byte Folded Reload 3171; CHECK-NEXT: ld 27, -40(1) # 8-byte Folded Reload 3172; CHECK-NEXT: ld 26, -48(1) # 8-byte Folded Reload 3173; CHECK-NEXT: ld 25, -56(1) # 8-byte Folded Reload 3174; CHECK-NEXT: ld 24, -64(1) # 8-byte Folded Reload 3175; CHECK-NEXT: ld 23, -72(1) # 8-byte Folded Reload 3176; CHECK-NEXT: ld 22, -80(1) # 8-byte Folded Reload 3177; CHECK-NEXT: ld 21, -88(1) # 8-byte Folded Reload 3178; CHECK-NEXT: ld 20, -96(1) # 8-byte Folded Reload 3179; CHECK-NEXT: ld 19, -104(1) # 8-byte Folded Reload 3180; CHECK-NEXT: ld 18, -112(1) # 8-byte Folded Reload 3181; CHECK-NEXT: ld 17, -120(1) # 8-byte Folded Reload 3182; CHECK-NEXT: ld 16, -128(1) # 8-byte Folded Reload 3183; CHECK-NEXT: blr 3184; 3185; AIX32-LABEL: test_op_and_fetch: 3186; AIX32: # %bb.0: # %entry 3187; AIX32-NEXT: mflr 0 3188; AIX32-NEXT: stwu 1, -176(1) 3189; AIX32-NEXT: stw 0, 184(1) 3190; AIX32-NEXT: stw 27, 156(1) # 4-byte Folded Spill 3191; AIX32-NEXT: lwz 27, L..C0(2) # @sc 3192; AIX32-NEXT: stw 26, 152(1) # 4-byte Folded Spill 3193; AIX32-NEXT: lwz 26, L..C1(2) # @uc 3194; AIX32-NEXT: lbz 3, 0(26) 3195; AIX32-NEXT: rlwinm 4, 27, 3, 27, 28 3196; AIX32-NEXT: stw 24, 144(1) # 4-byte Folded Spill 3197; AIX32-NEXT: li 5, 255 3198; AIX32-NEXT: stw 13, 100(1) # 4-byte Folded Spill 3199; AIX32-NEXT: stw 14, 104(1) # 4-byte Folded Spill 3200; AIX32-NEXT: stw 15, 108(1) # 4-byte Folded Spill 3201; AIX32-NEXT: xori 24, 4, 24 3202; AIX32-NEXT: stw 16, 112(1) # 4-byte Folded Spill 3203; AIX32-NEXT: stw 17, 116(1) # 4-byte Folded Spill 3204; AIX32-NEXT: stw 18, 120(1) # 4-byte Folded Spill 3205; AIX32-NEXT: stw 19, 124(1) # 4-byte Folded Spill 3206; AIX32-NEXT: stw 20, 128(1) # 4-byte Folded Spill 3207; AIX32-NEXT: stw 21, 132(1) # 4-byte Folded Spill 3208; AIX32-NEXT: stw 22, 136(1) # 4-byte Folded Spill 3209; AIX32-NEXT: stw 23, 140(1) # 4-byte Folded Spill 3210; AIX32-NEXT: stw 25, 148(1) # 4-byte Folded Spill 3211; AIX32-NEXT: stw 28, 160(1) # 4-byte Folded Spill 3212; AIX32-NEXT: stw 29, 164(1) # 4-byte Folded Spill 3213; AIX32-NEXT: stw 30, 168(1) # 4-byte Folded Spill 3214; AIX32-NEXT: stw 31, 172(1) # 4-byte Folded Spill 3215; AIX32-NEXT: li 17, -1 3216; AIX32-NEXT: sync 3217; AIX32-NEXT: rlwinm 22, 27, 0, 0, 29 3218; AIX32-NEXT: slw 4, 3, 24 3219; AIX32-NEXT: slw 5, 5, 24 3220; AIX32-NEXT: L..BB2_1: # %entry 3221; AIX32-NEXT: # 3222; AIX32-NEXT: lwarx 6, 0, 22 3223; AIX32-NEXT: add 7, 4, 6 3224; AIX32-NEXT: andc 8, 6, 5 3225; AIX32-NEXT: and 7, 7, 5 3226; AIX32-NEXT: or 7, 7, 8 3227; AIX32-NEXT: stwcx. 7, 0, 22 3228; AIX32-NEXT: bne 0, L..BB2_1 3229; AIX32-NEXT: # %bb.2: # %entry 3230; AIX32-NEXT: srw 4, 6, 24 3231; AIX32-NEXT: lwsync 3232; AIX32-NEXT: li 5, 255 3233; AIX32-NEXT: rlwinm 19, 26, 0, 0, 29 3234; AIX32-NEXT: clrlwi 4, 4, 24 3235; AIX32-NEXT: add 3, 4, 3 3236; AIX32-NEXT: rlwinm 4, 26, 3, 27, 28 3237; AIX32-NEXT: stb 3, 0(27) 3238; AIX32-NEXT: lbz 3, 0(26) 3239; AIX32-NEXT: xori 21, 4, 24 3240; AIX32-NEXT: sync 3241; AIX32-NEXT: slw 5, 5, 21 3242; AIX32-NEXT: slw 4, 3, 21 3243; AIX32-NEXT: L..BB2_3: # %entry 3244; AIX32-NEXT: # 3245; AIX32-NEXT: lwarx 6, 0, 19 3246; AIX32-NEXT: add 7, 4, 6 3247; AIX32-NEXT: andc 8, 6, 5 3248; AIX32-NEXT: and 7, 7, 5 3249; AIX32-NEXT: or 7, 7, 8 3250; AIX32-NEXT: stwcx. 7, 0, 19 3251; AIX32-NEXT: bne 0, L..BB2_3 3252; AIX32-NEXT: # %bb.4: # %entry 3253; AIX32-NEXT: srw 4, 6, 21 3254; AIX32-NEXT: lwz 23, L..C2(2) # @ss 3255; AIX32-NEXT: li 5, 0 3256; AIX32-NEXT: lwsync 3257; AIX32-NEXT: clrlwi 4, 4, 24 3258; AIX32-NEXT: ori 5, 5, 65535 3259; AIX32-NEXT: rlwinm 16, 23, 0, 0, 29 3260; AIX32-NEXT: add 3, 4, 3 3261; AIX32-NEXT: rlwinm 4, 23, 3, 27, 27 3262; AIX32-NEXT: xori 18, 4, 16 3263; AIX32-NEXT: stb 3, 0(26) 3264; AIX32-NEXT: clrlwi 3, 3, 24 3265; AIX32-NEXT: sync 3266; AIX32-NEXT: slw 4, 3, 18 3267; AIX32-NEXT: slw 5, 5, 18 3268; AIX32-NEXT: L..BB2_5: # %entry 3269; AIX32-NEXT: # 3270; AIX32-NEXT: lwarx 6, 0, 16 3271; AIX32-NEXT: add 7, 4, 6 3272; AIX32-NEXT: andc 8, 6, 5 3273; AIX32-NEXT: and 7, 7, 5 3274; AIX32-NEXT: or 7, 7, 8 3275; AIX32-NEXT: stwcx. 7, 0, 16 3276; AIX32-NEXT: bne 0, L..BB2_5 3277; AIX32-NEXT: # %bb.6: # %entry 3278; AIX32-NEXT: srw 4, 6, 18 3279; AIX32-NEXT: lwz 20, L..C3(2) # @us 3280; AIX32-NEXT: lwsync 3281; AIX32-NEXT: li 5, 0 3282; AIX32-NEXT: clrlwi 4, 4, 16 3283; AIX32-NEXT: ori 5, 5, 65535 3284; AIX32-NEXT: rlwinm 14, 20, 0, 0, 29 3285; AIX32-NEXT: add 3, 4, 3 3286; AIX32-NEXT: rlwinm 4, 20, 3, 27, 27 3287; AIX32-NEXT: xori 15, 4, 16 3288; AIX32-NEXT: sth 3, 0(23) 3289; AIX32-NEXT: lbz 3, 0(26) 3290; AIX32-NEXT: sync 3291; AIX32-NEXT: slw 5, 5, 15 3292; AIX32-NEXT: slw 4, 3, 15 3293; AIX32-NEXT: L..BB2_7: # %entry 3294; AIX32-NEXT: # 3295; AIX32-NEXT: lwarx 6, 0, 14 3296; AIX32-NEXT: add 7, 4, 6 3297; AIX32-NEXT: andc 8, 6, 5 3298; AIX32-NEXT: and 7, 7, 5 3299; AIX32-NEXT: or 7, 7, 8 3300; AIX32-NEXT: stwcx. 7, 0, 14 3301; AIX32-NEXT: bne 0, L..BB2_7 3302; AIX32-NEXT: # %bb.8: # %entry 3303; AIX32-NEXT: srw 4, 6, 15 3304; AIX32-NEXT: lwsync 3305; AIX32-NEXT: lwz 13, L..C4(2) # @si 3306; AIX32-NEXT: clrlwi 4, 4, 16 3307; AIX32-NEXT: add 3, 4, 3 3308; AIX32-NEXT: sth 3, 0(20) 3309; AIX32-NEXT: lbz 3, 0(26) 3310; AIX32-NEXT: sync 3311; AIX32-NEXT: L..BB2_9: # %entry 3312; AIX32-NEXT: # 3313; AIX32-NEXT: lwarx 4, 0, 13 3314; AIX32-NEXT: add 4, 3, 4 3315; AIX32-NEXT: stwcx. 4, 0, 13 3316; AIX32-NEXT: bne 0, L..BB2_9 3317; AIX32-NEXT: # %bb.10: # %entry 3318; AIX32-NEXT: lwsync 3319; AIX32-NEXT: stw 4, 0(13) 3320; AIX32-NEXT: lwz 25, L..C5(2) # @ui 3321; AIX32-NEXT: lbz 3, 0(26) 3322; AIX32-NEXT: sync 3323; AIX32-NEXT: L..BB2_11: # %entry 3324; AIX32-NEXT: # 3325; AIX32-NEXT: lwarx 4, 0, 25 3326; AIX32-NEXT: add 4, 3, 4 3327; AIX32-NEXT: stwcx. 4, 0, 25 3328; AIX32-NEXT: bne 0, L..BB2_11 3329; AIX32-NEXT: # %bb.12: # %entry 3330; AIX32-NEXT: lwsync 3331; AIX32-NEXT: lwz 31, L..C6(2) # @sll 3332; AIX32-NEXT: stw 4, 0(25) 3333; AIX32-NEXT: lbz 30, 0(26) 3334; AIX32-NEXT: li 4, 0 3335; AIX32-NEXT: li 6, 5 3336; AIX32-NEXT: li 28, 0 3337; AIX32-NEXT: mr 3, 31 3338; AIX32-NEXT: mr 5, 30 3339; AIX32-NEXT: bl .__atomic_fetch_add_8[PR] 3340; AIX32-NEXT: nop 3341; AIX32-NEXT: addc 4, 4, 30 3342; AIX32-NEXT: lbz 29, 0(26) 3343; AIX32-NEXT: lwz 30, L..C7(2) # @ull 3344; AIX32-NEXT: li 6, 5 3345; AIX32-NEXT: addze 3, 3 3346; AIX32-NEXT: stw 4, 4(31) 3347; AIX32-NEXT: li 4, 0 3348; AIX32-NEXT: stw 3, 0(31) 3349; AIX32-NEXT: mr 3, 30 3350; AIX32-NEXT: mr 5, 29 3351; AIX32-NEXT: bl .__atomic_fetch_add_8[PR] 3352; AIX32-NEXT: nop 3353; AIX32-NEXT: addc 4, 4, 29 3354; AIX32-NEXT: li 5, 255 3355; AIX32-NEXT: addze 3, 3 3356; AIX32-NEXT: stw 3, 0(30) 3357; AIX32-NEXT: lbz 3, 0(26) 3358; AIX32-NEXT: slw 5, 5, 24 3359; AIX32-NEXT: stw 4, 4(30) 3360; AIX32-NEXT: sync 3361; AIX32-NEXT: slw 4, 3, 24 3362; AIX32-NEXT: L..BB2_13: # %entry 3363; AIX32-NEXT: # 3364; AIX32-NEXT: lwarx 6, 0, 22 3365; AIX32-NEXT: sub 7, 6, 4 3366; AIX32-NEXT: andc 8, 6, 5 3367; AIX32-NEXT: and 7, 7, 5 3368; AIX32-NEXT: or 7, 7, 8 3369; AIX32-NEXT: stwcx. 7, 0, 22 3370; AIX32-NEXT: bne 0, L..BB2_13 3371; AIX32-NEXT: # %bb.14: # %entry 3372; AIX32-NEXT: srw 4, 6, 24 3373; AIX32-NEXT: lwsync 3374; AIX32-NEXT: li 5, 255 3375; AIX32-NEXT: clrlwi 4, 4, 24 3376; AIX32-NEXT: slw 5, 5, 21 3377; AIX32-NEXT: sub 3, 4, 3 3378; AIX32-NEXT: stb 3, 0(27) 3379; AIX32-NEXT: lbz 3, 0(26) 3380; AIX32-NEXT: sync 3381; AIX32-NEXT: slw 4, 3, 21 3382; AIX32-NEXT: L..BB2_15: # %entry 3383; AIX32-NEXT: # 3384; AIX32-NEXT: lwarx 6, 0, 19 3385; AIX32-NEXT: sub 7, 6, 4 3386; AIX32-NEXT: andc 8, 6, 5 3387; AIX32-NEXT: and 7, 7, 5 3388; AIX32-NEXT: or 7, 7, 8 3389; AIX32-NEXT: stwcx. 7, 0, 19 3390; AIX32-NEXT: bne 0, L..BB2_15 3391; AIX32-NEXT: # %bb.16: # %entry 3392; AIX32-NEXT: srw 4, 6, 21 3393; AIX32-NEXT: li 5, 0 3394; AIX32-NEXT: lwsync 3395; AIX32-NEXT: clrlwi 4, 4, 24 3396; AIX32-NEXT: ori 5, 5, 65535 3397; AIX32-NEXT: sub 3, 4, 3 3398; AIX32-NEXT: slw 5, 5, 18 3399; AIX32-NEXT: stb 3, 0(26) 3400; AIX32-NEXT: sync 3401; AIX32-NEXT: clrlwi 3, 3, 24 3402; AIX32-NEXT: slw 4, 3, 18 3403; AIX32-NEXT: L..BB2_17: # %entry 3404; AIX32-NEXT: # 3405; AIX32-NEXT: lwarx 6, 0, 16 3406; AIX32-NEXT: sub 7, 6, 4 3407; AIX32-NEXT: andc 8, 6, 5 3408; AIX32-NEXT: and 7, 7, 5 3409; AIX32-NEXT: or 7, 7, 8 3410; AIX32-NEXT: stwcx. 7, 0, 16 3411; AIX32-NEXT: bne 0, L..BB2_17 3412; AIX32-NEXT: # %bb.18: # %entry 3413; AIX32-NEXT: srw 4, 6, 18 3414; AIX32-NEXT: lwsync 3415; AIX32-NEXT: li 5, 0 3416; AIX32-NEXT: clrlwi 4, 4, 16 3417; AIX32-NEXT: ori 5, 5, 65535 3418; AIX32-NEXT: sub 3, 4, 3 3419; AIX32-NEXT: slw 5, 5, 15 3420; AIX32-NEXT: sth 3, 0(23) 3421; AIX32-NEXT: lbz 3, 0(26) 3422; AIX32-NEXT: sync 3423; AIX32-NEXT: slw 4, 3, 15 3424; AIX32-NEXT: L..BB2_19: # %entry 3425; AIX32-NEXT: # 3426; AIX32-NEXT: lwarx 6, 0, 14 3427; AIX32-NEXT: sub 7, 6, 4 3428; AIX32-NEXT: andc 8, 6, 5 3429; AIX32-NEXT: and 7, 7, 5 3430; AIX32-NEXT: or 7, 7, 8 3431; AIX32-NEXT: stwcx. 7, 0, 14 3432; AIX32-NEXT: bne 0, L..BB2_19 3433; AIX32-NEXT: # %bb.20: # %entry 3434; AIX32-NEXT: srw 4, 6, 15 3435; AIX32-NEXT: lwsync 3436; AIX32-NEXT: clrlwi 4, 4, 16 3437; AIX32-NEXT: sub 3, 4, 3 3438; AIX32-NEXT: sth 3, 0(20) 3439; AIX32-NEXT: lbz 3, 0(26) 3440; AIX32-NEXT: sync 3441; AIX32-NEXT: L..BB2_21: # %entry 3442; AIX32-NEXT: # 3443; AIX32-NEXT: lwarx 4, 0, 13 3444; AIX32-NEXT: sub 4, 4, 3 3445; AIX32-NEXT: stwcx. 4, 0, 13 3446; AIX32-NEXT: bne 0, L..BB2_21 3447; AIX32-NEXT: # %bb.22: # %entry 3448; AIX32-NEXT: lwsync 3449; AIX32-NEXT: stw 4, 0(13) 3450; AIX32-NEXT: lbz 3, 0(26) 3451; AIX32-NEXT: sync 3452; AIX32-NEXT: L..BB2_23: # %entry 3453; AIX32-NEXT: # 3454; AIX32-NEXT: lwarx 4, 0, 25 3455; AIX32-NEXT: sub 4, 4, 3 3456; AIX32-NEXT: stwcx. 4, 0, 25 3457; AIX32-NEXT: bne 0, L..BB2_23 3458; AIX32-NEXT: # %bb.24: # %entry 3459; AIX32-NEXT: lwsync 3460; AIX32-NEXT: stw 4, 0(25) 3461; AIX32-NEXT: li 4, 0 3462; AIX32-NEXT: lbz 29, 0(26) 3463; AIX32-NEXT: li 6, 5 3464; AIX32-NEXT: mr 3, 31 3465; AIX32-NEXT: mr 5, 29 3466; AIX32-NEXT: bl .__atomic_fetch_sub_8[PR] 3467; AIX32-NEXT: nop 3468; AIX32-NEXT: subc 4, 4, 29 3469; AIX32-NEXT: lbz 29, 0(26) 3470; AIX32-NEXT: li 6, 5 3471; AIX32-NEXT: mr 5, 29 3472; AIX32-NEXT: subfe 3, 28, 3 3473; AIX32-NEXT: stw 4, 4(31) 3474; AIX32-NEXT: li 4, 0 3475; AIX32-NEXT: stw 3, 0(31) 3476; AIX32-NEXT: mr 3, 30 3477; AIX32-NEXT: bl .__atomic_fetch_sub_8[PR] 3478; AIX32-NEXT: nop 3479; AIX32-NEXT: subc 4, 4, 29 3480; AIX32-NEXT: li 5, 255 3481; AIX32-NEXT: subfe 3, 28, 3 3482; AIX32-NEXT: stw 4, 4(30) 3483; AIX32-NEXT: slw 5, 5, 24 3484; AIX32-NEXT: stw 3, 0(30) 3485; AIX32-NEXT: lbz 3, 0(26) 3486; AIX32-NEXT: sync 3487; AIX32-NEXT: slw 4, 3, 24 3488; AIX32-NEXT: L..BB2_25: # %entry 3489; AIX32-NEXT: # 3490; AIX32-NEXT: lwarx 6, 0, 22 3491; AIX32-NEXT: or 7, 4, 6 3492; AIX32-NEXT: andc 8, 6, 5 3493; AIX32-NEXT: and 7, 7, 5 3494; AIX32-NEXT: or 7, 7, 8 3495; AIX32-NEXT: stwcx. 7, 0, 22 3496; AIX32-NEXT: bne 0, L..BB2_25 3497; AIX32-NEXT: # %bb.26: # %entry 3498; AIX32-NEXT: srw 4, 6, 24 3499; AIX32-NEXT: lwsync 3500; AIX32-NEXT: li 5, 255 3501; AIX32-NEXT: clrlwi 4, 4, 24 3502; AIX32-NEXT: slw 5, 5, 21 3503; AIX32-NEXT: or 3, 4, 3 3504; AIX32-NEXT: stb 3, 0(27) 3505; AIX32-NEXT: lbz 3, 0(26) 3506; AIX32-NEXT: sync 3507; AIX32-NEXT: slw 4, 3, 21 3508; AIX32-NEXT: L..BB2_27: # %entry 3509; AIX32-NEXT: # 3510; AIX32-NEXT: lwarx 6, 0, 19 3511; AIX32-NEXT: or 7, 4, 6 3512; AIX32-NEXT: andc 8, 6, 5 3513; AIX32-NEXT: and 7, 7, 5 3514; AIX32-NEXT: or 7, 7, 8 3515; AIX32-NEXT: stwcx. 7, 0, 19 3516; AIX32-NEXT: bne 0, L..BB2_27 3517; AIX32-NEXT: # %bb.28: # %entry 3518; AIX32-NEXT: srw 4, 6, 21 3519; AIX32-NEXT: li 5, 0 3520; AIX32-NEXT: lwsync 3521; AIX32-NEXT: clrlwi 4, 4, 24 3522; AIX32-NEXT: ori 5, 5, 65535 3523; AIX32-NEXT: or 3, 4, 3 3524; AIX32-NEXT: slw 5, 5, 18 3525; AIX32-NEXT: stb 3, 0(26) 3526; AIX32-NEXT: sync 3527; AIX32-NEXT: clrlwi 3, 3, 24 3528; AIX32-NEXT: slw 4, 3, 18 3529; AIX32-NEXT: L..BB2_29: # %entry 3530; AIX32-NEXT: # 3531; AIX32-NEXT: lwarx 6, 0, 16 3532; AIX32-NEXT: or 7, 4, 6 3533; AIX32-NEXT: andc 8, 6, 5 3534; AIX32-NEXT: and 7, 7, 5 3535; AIX32-NEXT: or 7, 7, 8 3536; AIX32-NEXT: stwcx. 7, 0, 16 3537; AIX32-NEXT: bne 0, L..BB2_29 3538; AIX32-NEXT: # %bb.30: # %entry 3539; AIX32-NEXT: srw 4, 6, 18 3540; AIX32-NEXT: lwsync 3541; AIX32-NEXT: li 5, 0 3542; AIX32-NEXT: clrlwi 4, 4, 16 3543; AIX32-NEXT: ori 5, 5, 65535 3544; AIX32-NEXT: or 3, 4, 3 3545; AIX32-NEXT: slw 5, 5, 15 3546; AIX32-NEXT: sth 3, 0(23) 3547; AIX32-NEXT: lbz 3, 0(26) 3548; AIX32-NEXT: sync 3549; AIX32-NEXT: slw 4, 3, 15 3550; AIX32-NEXT: L..BB2_31: # %entry 3551; AIX32-NEXT: # 3552; AIX32-NEXT: lwarx 6, 0, 14 3553; AIX32-NEXT: or 7, 4, 6 3554; AIX32-NEXT: andc 8, 6, 5 3555; AIX32-NEXT: and 7, 7, 5 3556; AIX32-NEXT: or 7, 7, 8 3557; AIX32-NEXT: stwcx. 7, 0, 14 3558; AIX32-NEXT: bne 0, L..BB2_31 3559; AIX32-NEXT: # %bb.32: # %entry 3560; AIX32-NEXT: srw 4, 6, 15 3561; AIX32-NEXT: lwsync 3562; AIX32-NEXT: clrlwi 4, 4, 16 3563; AIX32-NEXT: or 3, 4, 3 3564; AIX32-NEXT: sth 3, 0(20) 3565; AIX32-NEXT: lbz 3, 0(26) 3566; AIX32-NEXT: sync 3567; AIX32-NEXT: L..BB2_33: # %entry 3568; AIX32-NEXT: # 3569; AIX32-NEXT: lwarx 4, 0, 13 3570; AIX32-NEXT: or 4, 3, 4 3571; AIX32-NEXT: stwcx. 4, 0, 13 3572; AIX32-NEXT: bne 0, L..BB2_33 3573; AIX32-NEXT: # %bb.34: # %entry 3574; AIX32-NEXT: lwsync 3575; AIX32-NEXT: stw 4, 0(13) 3576; AIX32-NEXT: lbz 3, 0(26) 3577; AIX32-NEXT: sync 3578; AIX32-NEXT: L..BB2_35: # %entry 3579; AIX32-NEXT: # 3580; AIX32-NEXT: lwarx 4, 0, 25 3581; AIX32-NEXT: or 4, 3, 4 3582; AIX32-NEXT: stwcx. 4, 0, 25 3583; AIX32-NEXT: bne 0, L..BB2_35 3584; AIX32-NEXT: # %bb.36: # %entry 3585; AIX32-NEXT: lwsync 3586; AIX32-NEXT: stw 4, 0(25) 3587; AIX32-NEXT: li 4, 0 3588; AIX32-NEXT: lbz 29, 0(26) 3589; AIX32-NEXT: li 6, 5 3590; AIX32-NEXT: mr 3, 31 3591; AIX32-NEXT: mr 5, 29 3592; AIX32-NEXT: bl .__atomic_fetch_or_8[PR] 3593; AIX32-NEXT: nop 3594; AIX32-NEXT: or 4, 4, 29 3595; AIX32-NEXT: lbz 29, 0(26) 3596; AIX32-NEXT: li 6, 5 3597; AIX32-NEXT: mr 5, 29 3598; AIX32-NEXT: stw 4, 4(31) 3599; AIX32-NEXT: li 4, 0 3600; AIX32-NEXT: stw 3, 0(31) 3601; AIX32-NEXT: mr 3, 30 3602; AIX32-NEXT: bl .__atomic_fetch_or_8[PR] 3603; AIX32-NEXT: nop 3604; AIX32-NEXT: stw 3, 0(30) 3605; AIX32-NEXT: or 3, 4, 29 3606; AIX32-NEXT: li 5, 255 3607; AIX32-NEXT: stw 3, 4(30) 3608; AIX32-NEXT: lbz 3, 0(26) 3609; AIX32-NEXT: sync 3610; AIX32-NEXT: slw 5, 5, 24 3611; AIX32-NEXT: slw 4, 3, 24 3612; AIX32-NEXT: L..BB2_37: # %entry 3613; AIX32-NEXT: # 3614; AIX32-NEXT: lwarx 6, 0, 22 3615; AIX32-NEXT: xor 7, 4, 6 3616; AIX32-NEXT: andc 8, 6, 5 3617; AIX32-NEXT: and 7, 7, 5 3618; AIX32-NEXT: or 7, 7, 8 3619; AIX32-NEXT: stwcx. 7, 0, 22 3620; AIX32-NEXT: bne 0, L..BB2_37 3621; AIX32-NEXT: # %bb.38: # %entry 3622; AIX32-NEXT: srw 4, 6, 24 3623; AIX32-NEXT: lwsync 3624; AIX32-NEXT: li 5, 255 3625; AIX32-NEXT: clrlwi 4, 4, 24 3626; AIX32-NEXT: slw 5, 5, 21 3627; AIX32-NEXT: xor 3, 4, 3 3628; AIX32-NEXT: stb 3, 0(27) 3629; AIX32-NEXT: lbz 3, 0(26) 3630; AIX32-NEXT: sync 3631; AIX32-NEXT: slw 4, 3, 21 3632; AIX32-NEXT: L..BB2_39: # %entry 3633; AIX32-NEXT: # 3634; AIX32-NEXT: lwarx 6, 0, 19 3635; AIX32-NEXT: xor 7, 4, 6 3636; AIX32-NEXT: andc 8, 6, 5 3637; AIX32-NEXT: and 7, 7, 5 3638; AIX32-NEXT: or 7, 7, 8 3639; AIX32-NEXT: stwcx. 7, 0, 19 3640; AIX32-NEXT: bne 0, L..BB2_39 3641; AIX32-NEXT: # %bb.40: # %entry 3642; AIX32-NEXT: srw 4, 6, 21 3643; AIX32-NEXT: li 5, 0 3644; AIX32-NEXT: lwsync 3645; AIX32-NEXT: clrlwi 4, 4, 24 3646; AIX32-NEXT: ori 5, 5, 65535 3647; AIX32-NEXT: xor 3, 4, 3 3648; AIX32-NEXT: slw 5, 5, 18 3649; AIX32-NEXT: stb 3, 0(26) 3650; AIX32-NEXT: sync 3651; AIX32-NEXT: clrlwi 3, 3, 24 3652; AIX32-NEXT: slw 4, 3, 18 3653; AIX32-NEXT: L..BB2_41: # %entry 3654; AIX32-NEXT: # 3655; AIX32-NEXT: lwarx 6, 0, 16 3656; AIX32-NEXT: xor 7, 4, 6 3657; AIX32-NEXT: andc 8, 6, 5 3658; AIX32-NEXT: and 7, 7, 5 3659; AIX32-NEXT: or 7, 7, 8 3660; AIX32-NEXT: stwcx. 7, 0, 16 3661; AIX32-NEXT: bne 0, L..BB2_41 3662; AIX32-NEXT: # %bb.42: # %entry 3663; AIX32-NEXT: srw 4, 6, 18 3664; AIX32-NEXT: lwsync 3665; AIX32-NEXT: li 5, 0 3666; AIX32-NEXT: clrlwi 4, 4, 16 3667; AIX32-NEXT: ori 5, 5, 65535 3668; AIX32-NEXT: xor 3, 4, 3 3669; AIX32-NEXT: slw 5, 5, 15 3670; AIX32-NEXT: sth 3, 0(23) 3671; AIX32-NEXT: lbz 3, 0(26) 3672; AIX32-NEXT: sync 3673; AIX32-NEXT: slw 4, 3, 15 3674; AIX32-NEXT: L..BB2_43: # %entry 3675; AIX32-NEXT: # 3676; AIX32-NEXT: lwarx 6, 0, 14 3677; AIX32-NEXT: xor 7, 4, 6 3678; AIX32-NEXT: andc 8, 6, 5 3679; AIX32-NEXT: and 7, 7, 5 3680; AIX32-NEXT: or 7, 7, 8 3681; AIX32-NEXT: stwcx. 7, 0, 14 3682; AIX32-NEXT: bne 0, L..BB2_43 3683; AIX32-NEXT: # %bb.44: # %entry 3684; AIX32-NEXT: srw 4, 6, 15 3685; AIX32-NEXT: lwsync 3686; AIX32-NEXT: clrlwi 4, 4, 16 3687; AIX32-NEXT: xor 3, 4, 3 3688; AIX32-NEXT: sth 3, 0(20) 3689; AIX32-NEXT: lbz 3, 0(26) 3690; AIX32-NEXT: sync 3691; AIX32-NEXT: L..BB2_45: # %entry 3692; AIX32-NEXT: # 3693; AIX32-NEXT: lwarx 4, 0, 13 3694; AIX32-NEXT: xor 4, 3, 4 3695; AIX32-NEXT: stwcx. 4, 0, 13 3696; AIX32-NEXT: bne 0, L..BB2_45 3697; AIX32-NEXT: # %bb.46: # %entry 3698; AIX32-NEXT: lwsync 3699; AIX32-NEXT: stw 4, 0(13) 3700; AIX32-NEXT: lbz 3, 0(26) 3701; AIX32-NEXT: sync 3702; AIX32-NEXT: L..BB2_47: # %entry 3703; AIX32-NEXT: # 3704; AIX32-NEXT: lwarx 4, 0, 25 3705; AIX32-NEXT: xor 4, 3, 4 3706; AIX32-NEXT: stwcx. 4, 0, 25 3707; AIX32-NEXT: bne 0, L..BB2_47 3708; AIX32-NEXT: # %bb.48: # %entry 3709; AIX32-NEXT: lwsync 3710; AIX32-NEXT: stw 4, 0(25) 3711; AIX32-NEXT: li 4, 0 3712; AIX32-NEXT: lbz 29, 0(26) 3713; AIX32-NEXT: li 6, 5 3714; AIX32-NEXT: mr 3, 31 3715; AIX32-NEXT: mr 5, 29 3716; AIX32-NEXT: bl .__atomic_fetch_xor_8[PR] 3717; AIX32-NEXT: nop 3718; AIX32-NEXT: xor 4, 4, 29 3719; AIX32-NEXT: lbz 29, 0(26) 3720; AIX32-NEXT: li 6, 5 3721; AIX32-NEXT: mr 5, 29 3722; AIX32-NEXT: stw 4, 4(31) 3723; AIX32-NEXT: li 4, 0 3724; AIX32-NEXT: stw 3, 0(31) 3725; AIX32-NEXT: mr 3, 30 3726; AIX32-NEXT: bl .__atomic_fetch_xor_8[PR] 3727; AIX32-NEXT: nop 3728; AIX32-NEXT: xor 4, 4, 29 3729; AIX32-NEXT: stw 3, 0(30) 3730; AIX32-NEXT: lbz 3, 0(26) 3731; AIX32-NEXT: li 5, 255 3732; AIX32-NEXT: stw 4, 4(30) 3733; AIX32-NEXT: sync 3734; AIX32-NEXT: slw 4, 3, 24 3735; AIX32-NEXT: slw 5, 5, 24 3736; AIX32-NEXT: L..BB2_49: # %entry 3737; AIX32-NEXT: # 3738; AIX32-NEXT: lwarx 6, 0, 22 3739; AIX32-NEXT: nand 7, 4, 6 3740; AIX32-NEXT: andc 8, 6, 5 3741; AIX32-NEXT: and 7, 7, 5 3742; AIX32-NEXT: or 7, 7, 8 3743; AIX32-NEXT: stwcx. 7, 0, 22 3744; AIX32-NEXT: bne 0, L..BB2_49 3745; AIX32-NEXT: # %bb.50: # %entry 3746; AIX32-NEXT: srw 4, 6, 24 3747; AIX32-NEXT: lwsync 3748; AIX32-NEXT: li 5, 255 3749; AIX32-NEXT: clrlwi 4, 4, 24 3750; AIX32-NEXT: slw 5, 5, 21 3751; AIX32-NEXT: nand 3, 4, 3 3752; AIX32-NEXT: stb 3, 0(27) 3753; AIX32-NEXT: lbz 3, 0(26) 3754; AIX32-NEXT: sync 3755; AIX32-NEXT: slw 4, 3, 21 3756; AIX32-NEXT: L..BB2_51: # %entry 3757; AIX32-NEXT: # 3758; AIX32-NEXT: lwarx 6, 0, 19 3759; AIX32-NEXT: nand 7, 4, 6 3760; AIX32-NEXT: andc 8, 6, 5 3761; AIX32-NEXT: and 7, 7, 5 3762; AIX32-NEXT: or 7, 7, 8 3763; AIX32-NEXT: stwcx. 7, 0, 19 3764; AIX32-NEXT: bne 0, L..BB2_51 3765; AIX32-NEXT: # %bb.52: # %entry 3766; AIX32-NEXT: srw 4, 6, 21 3767; AIX32-NEXT: li 5, 0 3768; AIX32-NEXT: lwsync 3769; AIX32-NEXT: clrlwi 4, 4, 24 3770; AIX32-NEXT: ori 5, 5, 65535 3771; AIX32-NEXT: nand 3, 4, 3 3772; AIX32-NEXT: slw 5, 5, 18 3773; AIX32-NEXT: stb 3, 0(26) 3774; AIX32-NEXT: sync 3775; AIX32-NEXT: clrlwi 3, 3, 24 3776; AIX32-NEXT: slw 4, 3, 18 3777; AIX32-NEXT: L..BB2_53: # %entry 3778; AIX32-NEXT: # 3779; AIX32-NEXT: lwarx 6, 0, 16 3780; AIX32-NEXT: nand 7, 4, 6 3781; AIX32-NEXT: andc 8, 6, 5 3782; AIX32-NEXT: and 7, 7, 5 3783; AIX32-NEXT: or 7, 7, 8 3784; AIX32-NEXT: stwcx. 7, 0, 16 3785; AIX32-NEXT: bne 0, L..BB2_53 3786; AIX32-NEXT: # %bb.54: # %entry 3787; AIX32-NEXT: srw 4, 6, 18 3788; AIX32-NEXT: lwsync 3789; AIX32-NEXT: li 5, 0 3790; AIX32-NEXT: clrlwi 4, 4, 16 3791; AIX32-NEXT: ori 5, 5, 65535 3792; AIX32-NEXT: nand 3, 4, 3 3793; AIX32-NEXT: slw 5, 5, 15 3794; AIX32-NEXT: sth 3, 0(23) 3795; AIX32-NEXT: lbz 3, 0(26) 3796; AIX32-NEXT: sync 3797; AIX32-NEXT: slw 4, 3, 15 3798; AIX32-NEXT: L..BB2_55: # %entry 3799; AIX32-NEXT: # 3800; AIX32-NEXT: lwarx 6, 0, 14 3801; AIX32-NEXT: nand 7, 4, 6 3802; AIX32-NEXT: andc 8, 6, 5 3803; AIX32-NEXT: and 7, 7, 5 3804; AIX32-NEXT: or 7, 7, 8 3805; AIX32-NEXT: stwcx. 7, 0, 14 3806; AIX32-NEXT: bne 0, L..BB2_55 3807; AIX32-NEXT: # %bb.56: # %entry 3808; AIX32-NEXT: srw 4, 6, 15 3809; AIX32-NEXT: lwsync 3810; AIX32-NEXT: clrlwi 4, 4, 16 3811; AIX32-NEXT: nand 3, 4, 3 3812; AIX32-NEXT: sth 3, 0(20) 3813; AIX32-NEXT: lbz 3, 0(26) 3814; AIX32-NEXT: sync 3815; AIX32-NEXT: L..BB2_57: # %entry 3816; AIX32-NEXT: # 3817; AIX32-NEXT: lwarx 4, 0, 13 3818; AIX32-NEXT: nand 4, 3, 4 3819; AIX32-NEXT: stwcx. 4, 0, 13 3820; AIX32-NEXT: bne 0, L..BB2_57 3821; AIX32-NEXT: # %bb.58: # %entry 3822; AIX32-NEXT: stw 23, 56(1) # 4-byte Folded Spill 3823; AIX32-NEXT: stw 27, 60(1) # 4-byte Folded Spill 3824; AIX32-NEXT: lwsync 3825; AIX32-NEXT: stw 4, 0(13) 3826; AIX32-NEXT: lbz 3, 0(26) 3827; AIX32-NEXT: sync 3828; AIX32-NEXT: L..BB2_59: # %entry 3829; AIX32-NEXT: # 3830; AIX32-NEXT: lwarx 4, 0, 25 3831; AIX32-NEXT: nand 4, 3, 4 3832; AIX32-NEXT: stwcx. 4, 0, 25 3833; AIX32-NEXT: bne 0, L..BB2_59 3834; AIX32-NEXT: # %bb.60: # %entry 3835; AIX32-NEXT: lwsync 3836; AIX32-NEXT: stw 4, 0(25) 3837; AIX32-NEXT: li 4, 0 3838; AIX32-NEXT: lbz 29, 0(26) 3839; AIX32-NEXT: li 6, 5 3840; AIX32-NEXT: mr 3, 31 3841; AIX32-NEXT: mr 5, 29 3842; AIX32-NEXT: bl .__atomic_fetch_nand_8[PR] 3843; AIX32-NEXT: nop 3844; AIX32-NEXT: nand 3, 4, 29 3845; AIX32-NEXT: lbz 29, 0(26) 3846; AIX32-NEXT: li 4, 0 3847; AIX32-NEXT: mr 5, 29 3848; AIX32-NEXT: li 6, 5 3849; AIX32-NEXT: stw 3, 4(31) 3850; AIX32-NEXT: mr 3, 30 3851; AIX32-NEXT: stw 17, 0(31) 3852; AIX32-NEXT: bl .__atomic_fetch_nand_8[PR] 3853; AIX32-NEXT: nop 3854; AIX32-NEXT: nand 3, 4, 29 3855; AIX32-NEXT: lwz 29, L..C8(2) # @u128 3856; AIX32-NEXT: lbz 23, 0(26) 3857; AIX32-NEXT: addi 28, 1, 80 3858; AIX32-NEXT: addi 27, 1, 64 3859; AIX32-NEXT: stw 17, 0(30) 3860; AIX32-NEXT: lwz 4, 12(29) 3861; AIX32-NEXT: lwz 5, 8(29) 3862; AIX32-NEXT: lwz 6, 4(29) 3863; AIX32-NEXT: lwz 7, 0(29) 3864; AIX32-NEXT: stw 3, 4(30) 3865; AIX32-NEXT: .align 4 3866; AIX32-NEXT: L..BB2_61: # %atomicrmw.start2 3867; AIX32-NEXT: # 3868; AIX32-NEXT: and 3, 4, 23 3869; AIX32-NEXT: stw 7, 80(1) 3870; AIX32-NEXT: li 7, 5 3871; AIX32-NEXT: li 8, 5 3872; AIX32-NEXT: xor 3, 3, 17 3873; AIX32-NEXT: stw 6, 84(1) 3874; AIX32-NEXT: stw 5, 88(1) 3875; AIX32-NEXT: stw 4, 92(1) 3876; AIX32-NEXT: mr 4, 29 3877; AIX32-NEXT: mr 5, 28 3878; AIX32-NEXT: mr 6, 27 3879; AIX32-NEXT: stw 3, 76(1) 3880; AIX32-NEXT: li 3, 16 3881; AIX32-NEXT: stw 17, 72(1) 3882; AIX32-NEXT: stw 17, 68(1) 3883; AIX32-NEXT: stw 17, 64(1) 3884; AIX32-NEXT: bl .__atomic_compare_exchange[PR] 3885; AIX32-NEXT: nop 3886; AIX32-NEXT: lwz 4, 92(1) 3887; AIX32-NEXT: lwz 5, 88(1) 3888; AIX32-NEXT: lwz 6, 84(1) 3889; AIX32-NEXT: lwz 7, 80(1) 3890; AIX32-NEXT: cmplwi 3, 0 3891; AIX32-NEXT: beq 0, L..BB2_61 3892; AIX32-NEXT: # %bb.62: # %atomicrmw.end1 3893; AIX32-NEXT: and 3, 4, 23 3894; AIX32-NEXT: stw 17, 0(29) 3895; AIX32-NEXT: lbz 23, 0(26) 3896; AIX32-NEXT: stw 17, 4(29) 3897; AIX32-NEXT: stw 17, 8(29) 3898; AIX32-NEXT: xor 3, 3, 17 3899; AIX32-NEXT: addi 28, 1, 80 3900; AIX32-NEXT: addi 27, 1, 64 3901; AIX32-NEXT: stw 3, 12(29) 3902; AIX32-NEXT: lwz 29, L..C9(2) # @s128 3903; AIX32-NEXT: lwz 4, 12(29) 3904; AIX32-NEXT: lwz 5, 8(29) 3905; AIX32-NEXT: lwz 6, 4(29) 3906; AIX32-NEXT: lwz 7, 0(29) 3907; AIX32-NEXT: .align 4 3908; AIX32-NEXT: L..BB2_63: # %atomicrmw.start 3909; AIX32-NEXT: # 3910; AIX32-NEXT: and 3, 4, 23 3911; AIX32-NEXT: stw 7, 80(1) 3912; AIX32-NEXT: li 7, 5 3913; AIX32-NEXT: li 8, 5 3914; AIX32-NEXT: xor 3, 3, 17 3915; AIX32-NEXT: stw 6, 84(1) 3916; AIX32-NEXT: stw 5, 88(1) 3917; AIX32-NEXT: stw 4, 92(1) 3918; AIX32-NEXT: mr 4, 29 3919; AIX32-NEXT: mr 5, 28 3920; AIX32-NEXT: mr 6, 27 3921; AIX32-NEXT: stw 3, 76(1) 3922; AIX32-NEXT: li 3, 16 3923; AIX32-NEXT: stw 17, 72(1) 3924; AIX32-NEXT: stw 17, 68(1) 3925; AIX32-NEXT: stw 17, 64(1) 3926; AIX32-NEXT: bl .__atomic_compare_exchange[PR] 3927; AIX32-NEXT: nop 3928; AIX32-NEXT: lwz 4, 92(1) 3929; AIX32-NEXT: lwz 5, 88(1) 3930; AIX32-NEXT: lwz 6, 84(1) 3931; AIX32-NEXT: lwz 7, 80(1) 3932; AIX32-NEXT: cmplwi 3, 0 3933; AIX32-NEXT: beq 0, L..BB2_63 3934; AIX32-NEXT: # %bb.64: # %atomicrmw.end 3935; AIX32-NEXT: and 3, 4, 23 3936; AIX32-NEXT: li 5, 255 3937; AIX32-NEXT: xor 3, 3, 17 3938; AIX32-NEXT: stw 17, 0(29) 3939; AIX32-NEXT: stw 17, 4(29) 3940; AIX32-NEXT: stw 17, 8(29) 3941; AIX32-NEXT: slw 5, 5, 24 3942; AIX32-NEXT: stw 3, 12(29) 3943; AIX32-NEXT: lbz 3, 0(26) 3944; AIX32-NEXT: sync 3945; AIX32-NEXT: slw 4, 3, 24 3946; AIX32-NEXT: L..BB2_65: # %atomicrmw.end 3947; AIX32-NEXT: # 3948; AIX32-NEXT: lwarx 6, 0, 22 3949; AIX32-NEXT: and 7, 4, 6 3950; AIX32-NEXT: andc 8, 6, 5 3951; AIX32-NEXT: and 7, 7, 5 3952; AIX32-NEXT: or 7, 7, 8 3953; AIX32-NEXT: stwcx. 7, 0, 22 3954; AIX32-NEXT: bne 0, L..BB2_65 3955; AIX32-NEXT: # %bb.66: # %atomicrmw.end 3956; AIX32-NEXT: srw 4, 6, 24 3957; AIX32-NEXT: lwsync 3958; AIX32-NEXT: li 5, 255 3959; AIX32-NEXT: clrlwi 4, 4, 24 3960; AIX32-NEXT: slw 5, 5, 21 3961; AIX32-NEXT: and 3, 4, 3 3962; AIX32-NEXT: lwz 4, 60(1) # 4-byte Folded Reload 3963; AIX32-NEXT: stb 3, 0(4) 3964; AIX32-NEXT: lbz 3, 0(26) 3965; AIX32-NEXT: sync 3966; AIX32-NEXT: lwz 9, 56(1) # 4-byte Folded Reload 3967; AIX32-NEXT: slw 4, 3, 21 3968; AIX32-NEXT: L..BB2_67: # %atomicrmw.end 3969; AIX32-NEXT: # 3970; AIX32-NEXT: lwarx 6, 0, 19 3971; AIX32-NEXT: and 7, 4, 6 3972; AIX32-NEXT: andc 8, 6, 5 3973; AIX32-NEXT: and 7, 7, 5 3974; AIX32-NEXT: or 7, 7, 8 3975; AIX32-NEXT: stwcx. 7, 0, 19 3976; AIX32-NEXT: bne 0, L..BB2_67 3977; AIX32-NEXT: # %bb.68: # %atomicrmw.end 3978; AIX32-NEXT: srw 4, 6, 21 3979; AIX32-NEXT: li 5, 0 3980; AIX32-NEXT: lwsync 3981; AIX32-NEXT: clrlwi 4, 4, 24 3982; AIX32-NEXT: ori 5, 5, 65535 3983; AIX32-NEXT: and 3, 4, 3 3984; AIX32-NEXT: slw 5, 5, 18 3985; AIX32-NEXT: stb 3, 0(26) 3986; AIX32-NEXT: sync 3987; AIX32-NEXT: slw 4, 3, 18 3988; AIX32-NEXT: L..BB2_69: # %atomicrmw.end 3989; AIX32-NEXT: # 3990; AIX32-NEXT: lwarx 6, 0, 16 3991; AIX32-NEXT: and 7, 4, 6 3992; AIX32-NEXT: andc 8, 6, 5 3993; AIX32-NEXT: and 7, 7, 5 3994; AIX32-NEXT: or 7, 7, 8 3995; AIX32-NEXT: stwcx. 7, 0, 16 3996; AIX32-NEXT: bne 0, L..BB2_69 3997; AIX32-NEXT: # %bb.70: # %atomicrmw.end 3998; AIX32-NEXT: srw 4, 6, 18 3999; AIX32-NEXT: lwsync 4000; AIX32-NEXT: li 5, 0 4001; AIX32-NEXT: clrlwi 4, 4, 16 4002; AIX32-NEXT: ori 5, 5, 65535 4003; AIX32-NEXT: and 3, 4, 3 4004; AIX32-NEXT: slw 5, 5, 15 4005; AIX32-NEXT: sth 3, 0(9) 4006; AIX32-NEXT: lbz 3, 0(26) 4007; AIX32-NEXT: sync 4008; AIX32-NEXT: slw 4, 3, 15 4009; AIX32-NEXT: L..BB2_71: # %atomicrmw.end 4010; AIX32-NEXT: # 4011; AIX32-NEXT: lwarx 6, 0, 14 4012; AIX32-NEXT: and 7, 4, 6 4013; AIX32-NEXT: andc 8, 6, 5 4014; AIX32-NEXT: and 7, 7, 5 4015; AIX32-NEXT: or 7, 7, 8 4016; AIX32-NEXT: stwcx. 7, 0, 14 4017; AIX32-NEXT: bne 0, L..BB2_71 4018; AIX32-NEXT: # %bb.72: # %atomicrmw.end 4019; AIX32-NEXT: srw 4, 6, 15 4020; AIX32-NEXT: lwsync 4021; AIX32-NEXT: clrlwi 4, 4, 16 4022; AIX32-NEXT: and 3, 4, 3 4023; AIX32-NEXT: sth 3, 0(20) 4024; AIX32-NEXT: lbz 3, 0(26) 4025; AIX32-NEXT: sync 4026; AIX32-NEXT: L..BB2_73: # %atomicrmw.end 4027; AIX32-NEXT: # 4028; AIX32-NEXT: lwarx 4, 0, 13 4029; AIX32-NEXT: and 4, 3, 4 4030; AIX32-NEXT: stwcx. 4, 0, 13 4031; AIX32-NEXT: bne 0, L..BB2_73 4032; AIX32-NEXT: # %bb.74: # %atomicrmw.end 4033; AIX32-NEXT: lwsync 4034; AIX32-NEXT: stw 4, 0(13) 4035; AIX32-NEXT: lbz 3, 0(26) 4036; AIX32-NEXT: sync 4037; AIX32-NEXT: L..BB2_75: # %atomicrmw.end 4038; AIX32-NEXT: # 4039; AIX32-NEXT: lwarx 4, 0, 25 4040; AIX32-NEXT: and 4, 3, 4 4041; AIX32-NEXT: stwcx. 4, 0, 25 4042; AIX32-NEXT: bne 0, L..BB2_75 4043; AIX32-NEXT: # %bb.76: # %atomicrmw.end 4044; AIX32-NEXT: lwsync 4045; AIX32-NEXT: stw 4, 0(25) 4046; AIX32-NEXT: li 4, 0 4047; AIX32-NEXT: lbz 29, 0(26) 4048; AIX32-NEXT: li 6, 5 4049; AIX32-NEXT: mr 3, 31 4050; AIX32-NEXT: li 28, 0 4051; AIX32-NEXT: mr 5, 29 4052; AIX32-NEXT: bl .__atomic_fetch_and_8[PR] 4053; AIX32-NEXT: nop 4054; AIX32-NEXT: and 3, 4, 29 4055; AIX32-NEXT: stw 28, 0(31) 4056; AIX32-NEXT: li 4, 0 4057; AIX32-NEXT: li 6, 5 4058; AIX32-NEXT: stw 3, 4(31) 4059; AIX32-NEXT: lbz 31, 0(26) 4060; AIX32-NEXT: mr 3, 30 4061; AIX32-NEXT: mr 5, 31 4062; AIX32-NEXT: bl .__atomic_fetch_and_8[PR] 4063; AIX32-NEXT: nop 4064; AIX32-NEXT: and 3, 4, 31 4065; AIX32-NEXT: stw 28, 0(30) 4066; AIX32-NEXT: lwz 31, 172(1) # 4-byte Folded Reload 4067; AIX32-NEXT: lwz 29, 164(1) # 4-byte Folded Reload 4068; AIX32-NEXT: lwz 28, 160(1) # 4-byte Folded Reload 4069; AIX32-NEXT: lwz 27, 156(1) # 4-byte Folded Reload 4070; AIX32-NEXT: lwz 26, 152(1) # 4-byte Folded Reload 4071; AIX32-NEXT: lwz 25, 148(1) # 4-byte Folded Reload 4072; AIX32-NEXT: lwz 24, 144(1) # 4-byte Folded Reload 4073; AIX32-NEXT: stw 3, 4(30) 4074; AIX32-NEXT: lwz 30, 168(1) # 4-byte Folded Reload 4075; AIX32-NEXT: lwz 23, 140(1) # 4-byte Folded Reload 4076; AIX32-NEXT: lwz 22, 136(1) # 4-byte Folded Reload 4077; AIX32-NEXT: lwz 21, 132(1) # 4-byte Folded Reload 4078; AIX32-NEXT: lwz 20, 128(1) # 4-byte Folded Reload 4079; AIX32-NEXT: lwz 19, 124(1) # 4-byte Folded Reload 4080; AIX32-NEXT: lwz 18, 120(1) # 4-byte Folded Reload 4081; AIX32-NEXT: lwz 17, 116(1) # 4-byte Folded Reload 4082; AIX32-NEXT: lwz 16, 112(1) # 4-byte Folded Reload 4083; AIX32-NEXT: lwz 15, 108(1) # 4-byte Folded Reload 4084; AIX32-NEXT: lwz 14, 104(1) # 4-byte Folded Reload 4085; AIX32-NEXT: lwz 13, 100(1) # 4-byte Folded Reload 4086; AIX32-NEXT: addi 1, 1, 176 4087; AIX32-NEXT: lwz 0, 8(1) 4088; AIX32-NEXT: mtlr 0 4089; AIX32-NEXT: blr 4090entry: 4091 %0 = load i8, ptr @uc, align 1 4092 %1 = atomicrmw add ptr @sc, i8 %0 seq_cst, align 1 4093 %2 = add i8 %1, %0 4094 store i8 %2, ptr @sc, align 1 4095 %3 = load i8, ptr @uc, align 1 4096 %4 = atomicrmw add ptr @uc, i8 %3 seq_cst, align 1 4097 %5 = add i8 %4, %3 4098 store i8 %5, ptr @uc, align 1 4099 %conv = zext i8 %5 to i16 4100 %6 = atomicrmw add ptr @ss, i16 %conv seq_cst, align 2 4101 %7 = add i16 %6, %conv 4102 store i16 %7, ptr @ss, align 2 4103 %8 = load i8, ptr @uc, align 1 4104 %conv1 = zext i8 %8 to i16 4105 %9 = atomicrmw add ptr @us, i16 %conv1 seq_cst, align 2 4106 %10 = add i16 %9, %conv1 4107 store i16 %10, ptr @us, align 2 4108 %11 = load i8, ptr @uc, align 1 4109 %conv2 = zext i8 %11 to i32 4110 %12 = atomicrmw add ptr @si, i32 %conv2 seq_cst, align 4 4111 %13 = add i32 %12, %conv2 4112 store i32 %13, ptr @si, align 4 4113 %14 = load i8, ptr @uc, align 1 4114 %conv3 = zext i8 %14 to i32 4115 %15 = atomicrmw add ptr @ui, i32 %conv3 seq_cst, align 4 4116 %16 = add i32 %15, %conv3 4117 store i32 %16, ptr @ui, align 4 4118 %17 = load i8, ptr @uc, align 1 4119 %conv4 = zext i8 %17 to i64 4120 %18 = atomicrmw add ptr @sll, i64 %conv4 seq_cst, align 8 4121 %19 = add i64 %18, %conv4 4122 store i64 %19, ptr @sll, align 8 4123 %20 = load i8, ptr @uc, align 1 4124 %conv5 = zext i8 %20 to i64 4125 %21 = atomicrmw add ptr @ull, i64 %conv5 seq_cst, align 8 4126 %22 = add i64 %21, %conv5 4127 store i64 %22, ptr @ull, align 8 4128 %23 = load i8, ptr @uc, align 1 4129 %24 = atomicrmw sub ptr @sc, i8 %23 seq_cst, align 1 4130 %25 = sub i8 %24, %23 4131 store i8 %25, ptr @sc, align 1 4132 %26 = load i8, ptr @uc, align 1 4133 %27 = atomicrmw sub ptr @uc, i8 %26 seq_cst, align 1 4134 %28 = sub i8 %27, %26 4135 store i8 %28, ptr @uc, align 1 4136 %conv6 = zext i8 %28 to i16 4137 %29 = atomicrmw sub ptr @ss, i16 %conv6 seq_cst, align 2 4138 %30 = sub i16 %29, %conv6 4139 store i16 %30, ptr @ss, align 2 4140 %31 = load i8, ptr @uc, align 1 4141 %conv7 = zext i8 %31 to i16 4142 %32 = atomicrmw sub ptr @us, i16 %conv7 seq_cst, align 2 4143 %33 = sub i16 %32, %conv7 4144 store i16 %33, ptr @us, align 2 4145 %34 = load i8, ptr @uc, align 1 4146 %conv8 = zext i8 %34 to i32 4147 %35 = atomicrmw sub ptr @si, i32 %conv8 seq_cst, align 4 4148 %36 = sub i32 %35, %conv8 4149 store i32 %36, ptr @si, align 4 4150 %37 = load i8, ptr @uc, align 1 4151 %conv9 = zext i8 %37 to i32 4152 %38 = atomicrmw sub ptr @ui, i32 %conv9 seq_cst, align 4 4153 %39 = sub i32 %38, %conv9 4154 store i32 %39, ptr @ui, align 4 4155 %40 = load i8, ptr @uc, align 1 4156 %conv10 = zext i8 %40 to i64 4157 %41 = atomicrmw sub ptr @sll, i64 %conv10 seq_cst, align 8 4158 %42 = sub i64 %41, %conv10 4159 store i64 %42, ptr @sll, align 8 4160 %43 = load i8, ptr @uc, align 1 4161 %conv11 = zext i8 %43 to i64 4162 %44 = atomicrmw sub ptr @ull, i64 %conv11 seq_cst, align 8 4163 %45 = sub i64 %44, %conv11 4164 store i64 %45, ptr @ull, align 8 4165 %46 = load i8, ptr @uc, align 1 4166 %47 = atomicrmw or ptr @sc, i8 %46 seq_cst, align 1 4167 %48 = or i8 %47, %46 4168 store i8 %48, ptr @sc, align 1 4169 %49 = load i8, ptr @uc, align 1 4170 %50 = atomicrmw or ptr @uc, i8 %49 seq_cst, align 1 4171 %51 = or i8 %50, %49 4172 store i8 %51, ptr @uc, align 1 4173 %conv12 = zext i8 %51 to i16 4174 %52 = atomicrmw or ptr @ss, i16 %conv12 seq_cst, align 2 4175 %53 = or i16 %52, %conv12 4176 store i16 %53, ptr @ss, align 2 4177 %54 = load i8, ptr @uc, align 1 4178 %conv13 = zext i8 %54 to i16 4179 %55 = atomicrmw or ptr @us, i16 %conv13 seq_cst, align 2 4180 %56 = or i16 %55, %conv13 4181 store i16 %56, ptr @us, align 2 4182 %57 = load i8, ptr @uc, align 1 4183 %conv14 = zext i8 %57 to i32 4184 %58 = atomicrmw or ptr @si, i32 %conv14 seq_cst, align 4 4185 %59 = or i32 %58, %conv14 4186 store i32 %59, ptr @si, align 4 4187 %60 = load i8, ptr @uc, align 1 4188 %conv15 = zext i8 %60 to i32 4189 %61 = atomicrmw or ptr @ui, i32 %conv15 seq_cst, align 4 4190 %62 = or i32 %61, %conv15 4191 store i32 %62, ptr @ui, align 4 4192 %63 = load i8, ptr @uc, align 1 4193 %conv16 = zext i8 %63 to i64 4194 %64 = atomicrmw or ptr @sll, i64 %conv16 seq_cst, align 8 4195 %65 = or i64 %64, %conv16 4196 store i64 %65, ptr @sll, align 8 4197 %66 = load i8, ptr @uc, align 1 4198 %conv17 = zext i8 %66 to i64 4199 %67 = atomicrmw or ptr @ull, i64 %conv17 seq_cst, align 8 4200 %68 = or i64 %67, %conv17 4201 store i64 %68, ptr @ull, align 8 4202 %69 = load i8, ptr @uc, align 1 4203 %70 = atomicrmw xor ptr @sc, i8 %69 seq_cst, align 1 4204 %71 = xor i8 %70, %69 4205 store i8 %71, ptr @sc, align 1 4206 %72 = load i8, ptr @uc, align 1 4207 %73 = atomicrmw xor ptr @uc, i8 %72 seq_cst, align 1 4208 %74 = xor i8 %73, %72 4209 store i8 %74, ptr @uc, align 1 4210 %conv18 = zext i8 %74 to i16 4211 %75 = atomicrmw xor ptr @ss, i16 %conv18 seq_cst, align 2 4212 %76 = xor i16 %75, %conv18 4213 store i16 %76, ptr @ss, align 2 4214 %77 = load i8, ptr @uc, align 1 4215 %conv19 = zext i8 %77 to i16 4216 %78 = atomicrmw xor ptr @us, i16 %conv19 seq_cst, align 2 4217 %79 = xor i16 %78, %conv19 4218 store i16 %79, ptr @us, align 2 4219 %80 = load i8, ptr @uc, align 1 4220 %conv20 = zext i8 %80 to i32 4221 %81 = atomicrmw xor ptr @si, i32 %conv20 seq_cst, align 4 4222 %82 = xor i32 %81, %conv20 4223 store i32 %82, ptr @si, align 4 4224 %83 = load i8, ptr @uc, align 1 4225 %conv21 = zext i8 %83 to i32 4226 %84 = atomicrmw xor ptr @ui, i32 %conv21 seq_cst, align 4 4227 %85 = xor i32 %84, %conv21 4228 store i32 %85, ptr @ui, align 4 4229 %86 = load i8, ptr @uc, align 1 4230 %conv22 = zext i8 %86 to i64 4231 %87 = atomicrmw xor ptr @sll, i64 %conv22 seq_cst, align 8 4232 %88 = xor i64 %87, %conv22 4233 store i64 %88, ptr @sll, align 8 4234 %89 = load i8, ptr @uc, align 1 4235 %conv23 = zext i8 %89 to i64 4236 %90 = atomicrmw xor ptr @ull, i64 %conv23 seq_cst, align 8 4237 %91 = xor i64 %90, %conv23 4238 store i64 %91, ptr @ull, align 8 4239 %92 = load i8, ptr @uc, align 1 4240 %93 = atomicrmw nand ptr @sc, i8 %92 seq_cst, align 1 4241 %94 = and i8 %93, %92 4242 %95 = xor i8 %94, -1 4243 store i8 %95, ptr @sc, align 1 4244 %96 = load i8, ptr @uc, align 1 4245 %97 = atomicrmw nand ptr @uc, i8 %96 seq_cst, align 1 4246 %98 = and i8 %97, %96 4247 %99 = xor i8 %98, -1 4248 store i8 %99, ptr @uc, align 1 4249 %conv24 = zext i8 %99 to i16 4250 %100 = atomicrmw nand ptr @ss, i16 %conv24 seq_cst, align 2 4251 %101 = and i16 %100, %conv24 4252 %102 = xor i16 %101, -1 4253 store i16 %102, ptr @ss, align 2 4254 %103 = load i8, ptr @uc, align 1 4255 %conv25 = zext i8 %103 to i16 4256 %104 = atomicrmw nand ptr @us, i16 %conv25 seq_cst, align 2 4257 %105 = and i16 %104, %conv25 4258 %106 = xor i16 %105, -1 4259 store i16 %106, ptr @us, align 2 4260 %107 = load i8, ptr @uc, align 1 4261 %conv26 = zext i8 %107 to i32 4262 %108 = atomicrmw nand ptr @si, i32 %conv26 seq_cst, align 4 4263 %109 = and i32 %108, %conv26 4264 %110 = xor i32 %109, -1 4265 store i32 %110, ptr @si, align 4 4266 %111 = load i8, ptr @uc, align 1 4267 %conv27 = zext i8 %111 to i32 4268 %112 = atomicrmw nand ptr @ui, i32 %conv27 seq_cst, align 4 4269 %113 = and i32 %112, %conv27 4270 %114 = xor i32 %113, -1 4271 store i32 %114, ptr @ui, align 4 4272 %115 = load i8, ptr @uc, align 1 4273 %conv28 = zext i8 %115 to i64 4274 %116 = atomicrmw nand ptr @sll, i64 %conv28 seq_cst, align 8 4275 %117 = and i64 %116, %conv28 4276 %118 = xor i64 %117, -1 4277 store i64 %118, ptr @sll, align 8 4278 %119 = load i8, ptr @uc, align 1 4279 %conv29 = zext i8 %119 to i64 4280 %120 = atomicrmw nand ptr @ull, i64 %conv29 seq_cst, align 8 4281 %121 = and i64 %120, %conv29 4282 %122 = xor i64 %121, -1 4283 store i64 %122, ptr @ull, align 8 4284 %123 = load i8, ptr @uc, align 1 4285 %conv30 = zext i8 %123 to i128 4286 %124 = atomicrmw nand ptr @u128, i128 %conv30 seq_cst, align 16 4287 %125 = and i128 %124, %conv30 4288 %126 = xor i128 %125, -1 4289 store i128 %126, ptr @u128, align 16 4290 %127 = load i8, ptr @uc, align 1 4291 %conv31 = zext i8 %127 to i128 4292 %128 = atomicrmw nand ptr @s128, i128 %conv31 seq_cst, align 16 4293 %129 = and i128 %128, %conv31 4294 %130 = xor i128 %129, -1 4295 store i128 %130, ptr @s128, align 16 4296 %131 = load i8, ptr @uc, align 1 4297 %132 = atomicrmw and ptr @sc, i8 %131 seq_cst, align 1 4298 %133 = and i8 %132, %131 4299 store i8 %133, ptr @sc, align 1 4300 %134 = load i8, ptr @uc, align 1 4301 %135 = atomicrmw and ptr @uc, i8 %134 seq_cst, align 1 4302 %136 = and i8 %135, %134 4303 store i8 %136, ptr @uc, align 1 4304 %conv32 = zext i8 %136 to i16 4305 %137 = atomicrmw and ptr @ss, i16 %conv32 seq_cst, align 2 4306 %138 = and i16 %137, %conv32 4307 store i16 %138, ptr @ss, align 2 4308 %139 = load i8, ptr @uc, align 1 4309 %conv33 = zext i8 %139 to i16 4310 %140 = atomicrmw and ptr @us, i16 %conv33 seq_cst, align 2 4311 %141 = and i16 %140, %conv33 4312 store i16 %141, ptr @us, align 2 4313 %142 = load i8, ptr @uc, align 1 4314 %conv34 = zext i8 %142 to i32 4315 %143 = atomicrmw and ptr @si, i32 %conv34 seq_cst, align 4 4316 %144 = and i32 %143, %conv34 4317 store i32 %144, ptr @si, align 4 4318 %145 = load i8, ptr @uc, align 1 4319 %conv35 = zext i8 %145 to i32 4320 %146 = atomicrmw and ptr @ui, i32 %conv35 seq_cst, align 4 4321 %147 = and i32 %146, %conv35 4322 store i32 %147, ptr @ui, align 4 4323 %148 = load i8, ptr @uc, align 1 4324 %conv36 = zext i8 %148 to i64 4325 %149 = atomicrmw and ptr @sll, i64 %conv36 seq_cst, align 8 4326 %150 = and i64 %149, %conv36 4327 store i64 %150, ptr @sll, align 8 4328 %151 = load i8, ptr @uc, align 1 4329 %conv37 = zext i8 %151 to i64 4330 %152 = atomicrmw and ptr @ull, i64 %conv37 seq_cst, align 8 4331 %153 = and i64 %152, %conv37 4332 store i64 %153, ptr @ull, align 8 4333 ret void 4334} 4335 4336define dso_local void @test_compare_and_swap() local_unnamed_addr #0 { 4337; CHECK-LABEL: test_compare_and_swap: 4338; CHECK: # %bb.0: # %entry 4339; CHECK-NEXT: addis 3, 2, uc@toc@ha 4340; CHECK-NEXT: addis 4, 2, sc@toc@ha 4341; CHECK-NEXT: std 27, -40(1) # 8-byte Folded Spill 4342; CHECK-NEXT: std 28, -32(1) # 8-byte Folded Spill 4343; CHECK-NEXT: std 29, -24(1) # 8-byte Folded Spill 4344; CHECK-NEXT: std 30, -16(1) # 8-byte Folded Spill 4345; CHECK-NEXT: lbz 5, uc@toc@l(3) 4346; CHECK-NEXT: lbz 8, sc@toc@l(4) 4347; CHECK-NEXT: addi 6, 3, uc@toc@l 4348; CHECK-NEXT: addi 0, 4, sc@toc@l 4349; CHECK-NEXT: sync 4350; CHECK-NEXT: .LBB3_1: # %entry 4351; CHECK-NEXT: # 4352; CHECK-NEXT: lbarx 7, 0, 0 4353; CHECK-NEXT: cmpw 7, 5 4354; CHECK-NEXT: bne 0, .LBB3_3 4355; CHECK-NEXT: # %bb.2: # %entry 4356; CHECK-NEXT: # 4357; CHECK-NEXT: stbcx. 8, 0, 0 4358; CHECK-NEXT: bne 0, .LBB3_1 4359; CHECK-NEXT: .LBB3_3: # %entry 4360; CHECK-NEXT: lwsync 4361; CHECK-NEXT: stb 7, sc@toc@l(4) 4362; CHECK-NEXT: lbz 8, uc@toc@l(3) 4363; CHECK-NEXT: sync 4364; CHECK-NEXT: .LBB3_4: # %entry 4365; CHECK-NEXT: # 4366; CHECK-NEXT: lbarx 5, 0, 6 4367; CHECK-NEXT: cmpw 5, 8 4368; CHECK-NEXT: bne 0, .LBB3_6 4369; CHECK-NEXT: # %bb.5: # %entry 4370; CHECK-NEXT: # 4371; CHECK-NEXT: stbcx. 7, 0, 6 4372; CHECK-NEXT: bne 0, .LBB3_4 4373; CHECK-NEXT: .LBB3_6: # %entry 4374; CHECK-NEXT: lwsync 4375; CHECK-NEXT: stb 5, uc@toc@l(3) 4376; CHECK-NEXT: lbz 7, sc@toc@l(4) 4377; CHECK-NEXT: sync 4378; CHECK-NEXT: extsb 8, 7 4379; CHECK-NEXT: addis 7, 2, ss@toc@ha 4380; CHECK-NEXT: addi 12, 7, ss@toc@l 4381; CHECK-NEXT: .LBB3_7: # %entry 4382; CHECK-NEXT: # 4383; CHECK-NEXT: lharx 9, 0, 12 4384; CHECK-NEXT: cmpw 9, 5 4385; CHECK-NEXT: bne 0, .LBB3_9 4386; CHECK-NEXT: # %bb.8: # %entry 4387; CHECK-NEXT: # 4388; CHECK-NEXT: sthcx. 8, 0, 12 4389; CHECK-NEXT: bne 0, .LBB3_7 4390; CHECK-NEXT: .LBB3_9: # %entry 4391; CHECK-NEXT: lwsync 4392; CHECK-NEXT: sth 9, ss@toc@l(7) 4393; CHECK-NEXT: lbz 7, sc@toc@l(4) 4394; CHECK-NEXT: lbz 5, uc@toc@l(3) 4395; CHECK-NEXT: sync 4396; CHECK-NEXT: extsb 8, 7 4397; CHECK-NEXT: addis 7, 2, us@toc@ha 4398; CHECK-NEXT: addi 11, 7, us@toc@l 4399; CHECK-NEXT: .LBB3_10: # %entry 4400; CHECK-NEXT: # 4401; CHECK-NEXT: lharx 9, 0, 11 4402; CHECK-NEXT: cmpw 9, 5 4403; CHECK-NEXT: bne 0, .LBB3_12 4404; CHECK-NEXT: # %bb.11: # %entry 4405; CHECK-NEXT: # 4406; CHECK-NEXT: sthcx. 8, 0, 11 4407; CHECK-NEXT: bne 0, .LBB3_10 4408; CHECK-NEXT: .LBB3_12: # %entry 4409; CHECK-NEXT: lwsync 4410; CHECK-NEXT: sth 9, us@toc@l(7) 4411; CHECK-NEXT: lbz 7, sc@toc@l(4) 4412; CHECK-NEXT: lbz 5, uc@toc@l(3) 4413; CHECK-NEXT: sync 4414; CHECK-NEXT: extsb 8, 7 4415; CHECK-NEXT: addis 7, 2, si@toc@ha 4416; CHECK-NEXT: addi 10, 7, si@toc@l 4417; CHECK-NEXT: .LBB3_13: # %entry 4418; CHECK-NEXT: # 4419; CHECK-NEXT: lwarx 9, 0, 10 4420; CHECK-NEXT: cmpw 9, 5 4421; CHECK-NEXT: bne 0, .LBB3_15 4422; CHECK-NEXT: # %bb.14: # %entry 4423; CHECK-NEXT: # 4424; CHECK-NEXT: stwcx. 8, 0, 10 4425; CHECK-NEXT: bne 0, .LBB3_13 4426; CHECK-NEXT: .LBB3_15: # %entry 4427; CHECK-NEXT: lwsync 4428; CHECK-NEXT: stw 9, si@toc@l(7) 4429; CHECK-NEXT: lbz 5, sc@toc@l(4) 4430; CHECK-NEXT: lbz 7, uc@toc@l(3) 4431; CHECK-NEXT: sync 4432; CHECK-NEXT: extsb 8, 5 4433; CHECK-NEXT: addis 5, 2, ui@toc@ha 4434; CHECK-NEXT: addi 9, 5, ui@toc@l 4435; CHECK-NEXT: .LBB3_16: # %entry 4436; CHECK-NEXT: # 4437; CHECK-NEXT: lwarx 30, 0, 9 4438; CHECK-NEXT: cmpw 30, 7 4439; CHECK-NEXT: bne 0, .LBB3_18 4440; CHECK-NEXT: # %bb.17: # %entry 4441; CHECK-NEXT: # 4442; CHECK-NEXT: stwcx. 8, 0, 9 4443; CHECK-NEXT: bne 0, .LBB3_16 4444; CHECK-NEXT: .LBB3_18: # %entry 4445; CHECK-NEXT: lwsync 4446; CHECK-NEXT: stw 30, ui@toc@l(5) 4447; CHECK-NEXT: addis 30, 2, sll@toc@ha 4448; CHECK-NEXT: lbz 8, sc@toc@l(4) 4449; CHECK-NEXT: lbz 7, uc@toc@l(3) 4450; CHECK-NEXT: sync 4451; CHECK-NEXT: extsb 29, 8 4452; CHECK-NEXT: addi 8, 30, sll@toc@l 4453; CHECK-NEXT: .LBB3_19: # %entry 4454; CHECK-NEXT: # 4455; CHECK-NEXT: ldarx 28, 0, 8 4456; CHECK-NEXT: cmpd 28, 7 4457; CHECK-NEXT: bne 0, .LBB3_21 4458; CHECK-NEXT: # %bb.20: # %entry 4459; CHECK-NEXT: # 4460; CHECK-NEXT: stdcx. 29, 0, 8 4461; CHECK-NEXT: bne 0, .LBB3_19 4462; CHECK-NEXT: .LBB3_21: # %entry 4463; CHECK-NEXT: lwsync 4464; CHECK-NEXT: addis 29, 2, ull@toc@ha 4465; CHECK-NEXT: std 28, sll@toc@l(30) 4466; CHECK-NEXT: lbz 7, sc@toc@l(4) 4467; CHECK-NEXT: lbz 30, uc@toc@l(3) 4468; CHECK-NEXT: sync 4469; CHECK-NEXT: extsb 28, 7 4470; CHECK-NEXT: addi 7, 29, ull@toc@l 4471; CHECK-NEXT: .LBB3_22: # %entry 4472; CHECK-NEXT: # 4473; CHECK-NEXT: ldarx 27, 0, 7 4474; CHECK-NEXT: cmpd 27, 30 4475; CHECK-NEXT: bne 0, .LBB3_24 4476; CHECK-NEXT: # %bb.23: # %entry 4477; CHECK-NEXT: # 4478; CHECK-NEXT: stdcx. 28, 0, 7 4479; CHECK-NEXT: bne 0, .LBB3_22 4480; CHECK-NEXT: .LBB3_24: # %entry 4481; CHECK-NEXT: lwsync 4482; CHECK-NEXT: std 27, ull@toc@l(29) 4483; CHECK-NEXT: lbz 30, uc@toc@l(3) 4484; CHECK-NEXT: lbz 29, sc@toc@l(4) 4485; CHECK-NEXT: sync 4486; CHECK-NEXT: .LBB3_25: # %entry 4487; CHECK-NEXT: # 4488; CHECK-NEXT: lbarx 28, 0, 0 4489; CHECK-NEXT: cmpw 28, 30 4490; CHECK-NEXT: bne 0, .LBB3_27 4491; CHECK-NEXT: # %bb.26: # %entry 4492; CHECK-NEXT: # 4493; CHECK-NEXT: stbcx. 29, 0, 0 4494; CHECK-NEXT: bne 0, .LBB3_25 4495; CHECK-NEXT: .LBB3_27: # %entry 4496; CHECK-NEXT: xor 0, 28, 30 4497; CHECK-NEXT: lwsync 4498; CHECK-NEXT: lbz 30, sc@toc@l(4) 4499; CHECK-NEXT: cntlzw 0, 0 4500; CHECK-NEXT: srwi 0, 0, 5 4501; CHECK-NEXT: stw 0, ui@toc@l(5) 4502; CHECK-NEXT: lbz 0, uc@toc@l(3) 4503; CHECK-NEXT: sync 4504; CHECK-NEXT: .LBB3_28: # %entry 4505; CHECK-NEXT: # 4506; CHECK-NEXT: lbarx 29, 0, 6 4507; CHECK-NEXT: cmpw 29, 0 4508; CHECK-NEXT: bne 0, .LBB3_30 4509; CHECK-NEXT: # %bb.29: # %entry 4510; CHECK-NEXT: # 4511; CHECK-NEXT: stbcx. 30, 0, 6 4512; CHECK-NEXT: bne 0, .LBB3_28 4513; CHECK-NEXT: .LBB3_30: # %entry 4514; CHECK-NEXT: xor 6, 29, 0 4515; CHECK-NEXT: lwsync 4516; CHECK-NEXT: lbz 0, sc@toc@l(4) 4517; CHECK-NEXT: cntlzw 6, 6 4518; CHECK-NEXT: extsb 0, 0 4519; CHECK-NEXT: srwi 6, 6, 5 4520; CHECK-NEXT: stw 6, ui@toc@l(5) 4521; CHECK-NEXT: lbz 6, uc@toc@l(3) 4522; CHECK-NEXT: sync 4523; CHECK-NEXT: .LBB3_31: # %entry 4524; CHECK-NEXT: # 4525; CHECK-NEXT: lharx 30, 0, 12 4526; CHECK-NEXT: cmpw 30, 6 4527; CHECK-NEXT: bne 0, .LBB3_33 4528; CHECK-NEXT: # %bb.32: # %entry 4529; CHECK-NEXT: # 4530; CHECK-NEXT: sthcx. 0, 0, 12 4531; CHECK-NEXT: bne 0, .LBB3_31 4532; CHECK-NEXT: .LBB3_33: # %entry 4533; CHECK-NEXT: xor 6, 30, 6 4534; CHECK-NEXT: lwsync 4535; CHECK-NEXT: lbz 12, sc@toc@l(4) 4536; CHECK-NEXT: cntlzw 6, 6 4537; CHECK-NEXT: extsb 12, 12 4538; CHECK-NEXT: srwi 6, 6, 5 4539; CHECK-NEXT: stw 6, ui@toc@l(5) 4540; CHECK-NEXT: lbz 6, uc@toc@l(3) 4541; CHECK-NEXT: sync 4542; CHECK-NEXT: .LBB3_34: # %entry 4543; CHECK-NEXT: # 4544; CHECK-NEXT: lharx 0, 0, 11 4545; CHECK-NEXT: cmpw 0, 6 4546; CHECK-NEXT: bne 0, .LBB3_36 4547; CHECK-NEXT: # %bb.35: # %entry 4548; CHECK-NEXT: # 4549; CHECK-NEXT: sthcx. 12, 0, 11 4550; CHECK-NEXT: bne 0, .LBB3_34 4551; CHECK-NEXT: .LBB3_36: # %entry 4552; CHECK-NEXT: xor 6, 0, 6 4553; CHECK-NEXT: lwsync 4554; CHECK-NEXT: lbz 11, sc@toc@l(4) 4555; CHECK-NEXT: cntlzw 6, 6 4556; CHECK-NEXT: extsb 11, 11 4557; CHECK-NEXT: srwi 6, 6, 5 4558; CHECK-NEXT: stw 6, ui@toc@l(5) 4559; CHECK-NEXT: lbz 6, uc@toc@l(3) 4560; CHECK-NEXT: sync 4561; CHECK-NEXT: .LBB3_37: # %entry 4562; CHECK-NEXT: # 4563; CHECK-NEXT: lwarx 12, 0, 10 4564; CHECK-NEXT: cmpw 12, 6 4565; CHECK-NEXT: bne 0, .LBB3_39 4566; CHECK-NEXT: # %bb.38: # %entry 4567; CHECK-NEXT: # 4568; CHECK-NEXT: stwcx. 11, 0, 10 4569; CHECK-NEXT: bne 0, .LBB3_37 4570; CHECK-NEXT: .LBB3_39: # %entry 4571; CHECK-NEXT: xor 6, 12, 6 4572; CHECK-NEXT: lwsync 4573; CHECK-NEXT: lbz 10, sc@toc@l(4) 4574; CHECK-NEXT: cntlzw 6, 6 4575; CHECK-NEXT: extsb 10, 10 4576; CHECK-NEXT: srwi 6, 6, 5 4577; CHECK-NEXT: stw 6, ui@toc@l(5) 4578; CHECK-NEXT: lbz 6, uc@toc@l(3) 4579; CHECK-NEXT: sync 4580; CHECK-NEXT: .LBB3_40: # %entry 4581; CHECK-NEXT: # 4582; CHECK-NEXT: lwarx 11, 0, 9 4583; CHECK-NEXT: cmpw 11, 6 4584; CHECK-NEXT: bne 0, .LBB3_42 4585; CHECK-NEXT: # %bb.41: # %entry 4586; CHECK-NEXT: # 4587; CHECK-NEXT: stwcx. 10, 0, 9 4588; CHECK-NEXT: bne 0, .LBB3_40 4589; CHECK-NEXT: .LBB3_42: # %entry 4590; CHECK-NEXT: xor 6, 11, 6 4591; CHECK-NEXT: lwsync 4592; CHECK-NEXT: lbz 9, sc@toc@l(4) 4593; CHECK-NEXT: cntlzw 6, 6 4594; CHECK-NEXT: extsb 9, 9 4595; CHECK-NEXT: srwi 6, 6, 5 4596; CHECK-NEXT: stw 6, ui@toc@l(5) 4597; CHECK-NEXT: lbz 6, uc@toc@l(3) 4598; CHECK-NEXT: sync 4599; CHECK-NEXT: .LBB3_43: # %entry 4600; CHECK-NEXT: # 4601; CHECK-NEXT: ldarx 10, 0, 8 4602; CHECK-NEXT: cmpd 10, 6 4603; CHECK-NEXT: bne 0, .LBB3_45 4604; CHECK-NEXT: # %bb.44: # %entry 4605; CHECK-NEXT: # 4606; CHECK-NEXT: stdcx. 9, 0, 8 4607; CHECK-NEXT: bne 0, .LBB3_43 4608; CHECK-NEXT: .LBB3_45: # %entry 4609; CHECK-NEXT: xor 6, 10, 6 4610; CHECK-NEXT: lwsync 4611; CHECK-NEXT: lbz 4, sc@toc@l(4) 4612; CHECK-NEXT: lbz 3, uc@toc@l(3) 4613; CHECK-NEXT: cntlzd 6, 6 4614; CHECK-NEXT: extsb 4, 4 4615; CHECK-NEXT: rldicl 6, 6, 58, 63 4616; CHECK-NEXT: stw 6, ui@toc@l(5) 4617; CHECK-NEXT: sync 4618; CHECK-NEXT: .LBB3_46: # %entry 4619; CHECK-NEXT: # 4620; CHECK-NEXT: ldarx 6, 0, 7 4621; CHECK-NEXT: cmpd 6, 3 4622; CHECK-NEXT: bne 0, .LBB3_48 4623; CHECK-NEXT: # %bb.47: # %entry 4624; CHECK-NEXT: # 4625; CHECK-NEXT: stdcx. 4, 0, 7 4626; CHECK-NEXT: bne 0, .LBB3_46 4627; CHECK-NEXT: .LBB3_48: # %entry 4628; CHECK-NEXT: xor 3, 6, 3 4629; CHECK-NEXT: lwsync 4630; CHECK-NEXT: ld 30, -16(1) # 8-byte Folded Reload 4631; CHECK-NEXT: ld 29, -24(1) # 8-byte Folded Reload 4632; CHECK-NEXT: cntlzd 3, 3 4633; CHECK-NEXT: ld 28, -32(1) # 8-byte Folded Reload 4634; CHECK-NEXT: ld 27, -40(1) # 8-byte Folded Reload 4635; CHECK-NEXT: rldicl 3, 3, 58, 63 4636; CHECK-NEXT: stw 3, ui@toc@l(5) 4637; CHECK-NEXT: blr 4638; 4639; AIX32-LABEL: test_compare_and_swap: 4640; AIX32: # %bb.0: # %entry 4641; AIX32-NEXT: mflr 0 4642; AIX32-NEXT: stwu 1, -128(1) 4643; AIX32-NEXT: stw 0, 136(1) 4644; AIX32-NEXT: stw 28, 112(1) # 4-byte Folded Spill 4645; AIX32-NEXT: lwz 28, L..C0(2) # @sc 4646; AIX32-NEXT: stw 29, 116(1) # 4-byte Folded Spill 4647; AIX32-NEXT: lwz 29, L..C1(2) # @uc 4648; AIX32-NEXT: lbz 3, 0(29) 4649; AIX32-NEXT: rlwinm 5, 28, 3, 27, 28 4650; AIX32-NEXT: stw 21, 84(1) # 4-byte Folded Spill 4651; AIX32-NEXT: lbz 4, 0(28) 4652; AIX32-NEXT: stw 17, 68(1) # 4-byte Folded Spill 4653; AIX32-NEXT: stw 18, 72(1) # 4-byte Folded Spill 4654; AIX32-NEXT: stw 19, 76(1) # 4-byte Folded Spill 4655; AIX32-NEXT: stw 20, 80(1) # 4-byte Folded Spill 4656; AIX32-NEXT: xori 21, 5, 24 4657; AIX32-NEXT: stw 22, 88(1) # 4-byte Folded Spill 4658; AIX32-NEXT: stw 23, 92(1) # 4-byte Folded Spill 4659; AIX32-NEXT: stw 24, 96(1) # 4-byte Folded Spill 4660; AIX32-NEXT: slw 5, 3, 21 4661; AIX32-NEXT: li 3, 255 4662; AIX32-NEXT: slw 4, 4, 21 4663; AIX32-NEXT: stw 25, 100(1) # 4-byte Folded Spill 4664; AIX32-NEXT: stw 26, 104(1) # 4-byte Folded Spill 4665; AIX32-NEXT: slw 3, 3, 21 4666; AIX32-NEXT: stw 27, 108(1) # 4-byte Folded Spill 4667; AIX32-NEXT: stw 30, 120(1) # 4-byte Folded Spill 4668; AIX32-NEXT: stw 31, 124(1) # 4-byte Folded Spill 4669; AIX32-NEXT: sync 4670; AIX32-NEXT: rlwinm 18, 28, 0, 0, 29 4671; AIX32-NEXT: and 4, 4, 3 4672; AIX32-NEXT: and 5, 5, 3 4673; AIX32-NEXT: L..BB3_1: # %entry 4674; AIX32-NEXT: # 4675; AIX32-NEXT: lwarx 7, 0, 18 4676; AIX32-NEXT: and 6, 7, 3 4677; AIX32-NEXT: cmpw 6, 5 4678; AIX32-NEXT: bne 0, L..BB3_3 4679; AIX32-NEXT: # %bb.2: # %entry 4680; AIX32-NEXT: # 4681; AIX32-NEXT: andc 7, 7, 3 4682; AIX32-NEXT: or 7, 7, 4 4683; AIX32-NEXT: stwcx. 7, 0, 18 4684; AIX32-NEXT: bne 0, L..BB3_1 4685; AIX32-NEXT: L..BB3_3: # %entry 4686; AIX32-NEXT: rlwinm 5, 29, 3, 27, 28 4687; AIX32-NEXT: srw 3, 6, 21 4688; AIX32-NEXT: lwsync 4689; AIX32-NEXT: lbz 4, 0(29) 4690; AIX32-NEXT: rlwinm 20, 29, 0, 0, 29 4691; AIX32-NEXT: xori 25, 5, 24 4692; AIX32-NEXT: slw 5, 3, 25 4693; AIX32-NEXT: stb 3, 0(28) 4694; AIX32-NEXT: li 3, 255 4695; AIX32-NEXT: sync 4696; AIX32-NEXT: slw 6, 4, 25 4697; AIX32-NEXT: slw 3, 3, 25 4698; AIX32-NEXT: and 4, 5, 3 4699; AIX32-NEXT: and 5, 6, 3 4700; AIX32-NEXT: L..BB3_4: # %entry 4701; AIX32-NEXT: # 4702; AIX32-NEXT: lwarx 7, 0, 20 4703; AIX32-NEXT: and 6, 7, 3 4704; AIX32-NEXT: cmpw 6, 5 4705; AIX32-NEXT: bne 0, L..BB3_6 4706; AIX32-NEXT: # %bb.5: # %entry 4707; AIX32-NEXT: # 4708; AIX32-NEXT: andc 7, 7, 3 4709; AIX32-NEXT: or 7, 7, 4 4710; AIX32-NEXT: stwcx. 7, 0, 20 4711; AIX32-NEXT: bne 0, L..BB3_4 4712; AIX32-NEXT: L..BB3_6: # %entry 4713; AIX32-NEXT: lwsync 4714; AIX32-NEXT: srw 4, 6, 25 4715; AIX32-NEXT: lbz 3, 0(28) 4716; AIX32-NEXT: extsb 5, 3 4717; AIX32-NEXT: lwz 3, L..C2(2) # @ss 4718; AIX32-NEXT: stb 4, 0(29) 4719; AIX32-NEXT: sync 4720; AIX32-NEXT: rlwinm 6, 3, 3, 27, 27 4721; AIX32-NEXT: rlwinm 22, 3, 0, 0, 29 4722; AIX32-NEXT: xori 26, 6, 16 4723; AIX32-NEXT: slw 6, 4, 26 4724; AIX32-NEXT: li 4, 0 4725; AIX32-NEXT: slw 5, 5, 26 4726; AIX32-NEXT: ori 4, 4, 65535 4727; AIX32-NEXT: slw 4, 4, 26 4728; AIX32-NEXT: and 5, 5, 4 4729; AIX32-NEXT: and 6, 6, 4 4730; AIX32-NEXT: L..BB3_7: # %entry 4731; AIX32-NEXT: # 4732; AIX32-NEXT: lwarx 8, 0, 22 4733; AIX32-NEXT: and 7, 8, 4 4734; AIX32-NEXT: cmpw 7, 6 4735; AIX32-NEXT: bne 0, L..BB3_9 4736; AIX32-NEXT: # %bb.8: # %entry 4737; AIX32-NEXT: # 4738; AIX32-NEXT: andc 8, 8, 4 4739; AIX32-NEXT: or 8, 8, 5 4740; AIX32-NEXT: stwcx. 8, 0, 22 4741; AIX32-NEXT: bne 0, L..BB3_7 4742; AIX32-NEXT: L..BB3_9: # %entry 4743; AIX32-NEXT: srw 4, 7, 26 4744; AIX32-NEXT: lwsync 4745; AIX32-NEXT: sth 4, 0(3) 4746; AIX32-NEXT: lbz 3, 0(28) 4747; AIX32-NEXT: lbz 4, 0(29) 4748; AIX32-NEXT: sync 4749; AIX32-NEXT: extsb 5, 3 4750; AIX32-NEXT: lwz 3, L..C3(2) # @us 4751; AIX32-NEXT: rlwinm 6, 3, 3, 27, 27 4752; AIX32-NEXT: rlwinm 19, 3, 0, 0, 29 4753; AIX32-NEXT: xori 24, 6, 16 4754; AIX32-NEXT: slw 6, 4, 24 4755; AIX32-NEXT: li 4, 0 4756; AIX32-NEXT: slw 5, 5, 24 4757; AIX32-NEXT: ori 4, 4, 65535 4758; AIX32-NEXT: slw 4, 4, 24 4759; AIX32-NEXT: and 5, 5, 4 4760; AIX32-NEXT: and 6, 6, 4 4761; AIX32-NEXT: L..BB3_10: # %entry 4762; AIX32-NEXT: # 4763; AIX32-NEXT: lwarx 8, 0, 19 4764; AIX32-NEXT: and 7, 8, 4 4765; AIX32-NEXT: cmpw 7, 6 4766; AIX32-NEXT: bne 0, L..BB3_12 4767; AIX32-NEXT: # %bb.11: # %entry 4768; AIX32-NEXT: # 4769; AIX32-NEXT: andc 8, 8, 4 4770; AIX32-NEXT: or 8, 8, 5 4771; AIX32-NEXT: stwcx. 8, 0, 19 4772; AIX32-NEXT: bne 0, L..BB3_10 4773; AIX32-NEXT: L..BB3_12: # %entry 4774; AIX32-NEXT: srw 4, 7, 24 4775; AIX32-NEXT: lwsync 4776; AIX32-NEXT: lwz 17, L..C4(2) # @si 4777; AIX32-NEXT: sth 4, 0(3) 4778; AIX32-NEXT: lbz 4, 0(28) 4779; AIX32-NEXT: lbz 3, 0(29) 4780; AIX32-NEXT: sync 4781; AIX32-NEXT: extsb 4, 4 4782; AIX32-NEXT: L..BB3_13: # %entry 4783; AIX32-NEXT: # 4784; AIX32-NEXT: lwarx 5, 0, 17 4785; AIX32-NEXT: cmpw 5, 3 4786; AIX32-NEXT: bne 0, L..BB3_15 4787; AIX32-NEXT: # %bb.14: # %entry 4788; AIX32-NEXT: # 4789; AIX32-NEXT: stwcx. 4, 0, 17 4790; AIX32-NEXT: bne 0, L..BB3_13 4791; AIX32-NEXT: L..BB3_15: # %entry 4792; AIX32-NEXT: lwsync 4793; AIX32-NEXT: stw 5, 0(17) 4794; AIX32-NEXT: lwz 27, L..C5(2) # @ui 4795; AIX32-NEXT: lbz 4, 0(28) 4796; AIX32-NEXT: lbz 3, 0(29) 4797; AIX32-NEXT: sync 4798; AIX32-NEXT: extsb 4, 4 4799; AIX32-NEXT: L..BB3_16: # %entry 4800; AIX32-NEXT: # 4801; AIX32-NEXT: lwarx 5, 0, 27 4802; AIX32-NEXT: cmpw 5, 3 4803; AIX32-NEXT: bne 0, L..BB3_18 4804; AIX32-NEXT: # %bb.17: # %entry 4805; AIX32-NEXT: # 4806; AIX32-NEXT: stwcx. 4, 0, 27 4807; AIX32-NEXT: bne 0, L..BB3_16 4808; AIX32-NEXT: L..BB3_18: # %entry 4809; AIX32-NEXT: lwsync 4810; AIX32-NEXT: lwz 31, L..C6(2) # @sll 4811; AIX32-NEXT: stw 5, 0(27) 4812; AIX32-NEXT: lbz 3, 0(28) 4813; AIX32-NEXT: li 23, 0 4814; AIX32-NEXT: addi 4, 1, 56 4815; AIX32-NEXT: li 7, 5 4816; AIX32-NEXT: li 8, 5 4817; AIX32-NEXT: stw 23, 56(1) 4818; AIX32-NEXT: extsb 6, 3 4819; AIX32-NEXT: lbz 3, 0(29) 4820; AIX32-NEXT: srawi 5, 6, 31 4821; AIX32-NEXT: stw 3, 60(1) 4822; AIX32-NEXT: mr 3, 31 4823; AIX32-NEXT: bl .__atomic_compare_exchange_8[PR] 4824; AIX32-NEXT: nop 4825; AIX32-NEXT: lwz 3, 60(1) 4826; AIX32-NEXT: lbz 4, 0(28) 4827; AIX32-NEXT: lwz 30, L..C7(2) # @ull 4828; AIX32-NEXT: li 7, 5 4829; AIX32-NEXT: li 8, 5 4830; AIX32-NEXT: stw 3, 4(31) 4831; AIX32-NEXT: lwz 3, 56(1) 4832; AIX32-NEXT: extsb 6, 4 4833; AIX32-NEXT: addi 4, 1, 56 4834; AIX32-NEXT: srawi 5, 6, 31 4835; AIX32-NEXT: stw 23, 56(1) 4836; AIX32-NEXT: stw 3, 0(31) 4837; AIX32-NEXT: lbz 3, 0(29) 4838; AIX32-NEXT: stw 3, 60(1) 4839; AIX32-NEXT: mr 3, 30 4840; AIX32-NEXT: bl .__atomic_compare_exchange_8[PR] 4841; AIX32-NEXT: nop 4842; AIX32-NEXT: lwz 4, 60(1) 4843; AIX32-NEXT: lwz 3, 56(1) 4844; AIX32-NEXT: stw 4, 4(30) 4845; AIX32-NEXT: lbz 4, 0(28) 4846; AIX32-NEXT: stw 3, 0(30) 4847; AIX32-NEXT: lbz 3, 0(29) 4848; AIX32-NEXT: sync 4849; AIX32-NEXT: slw 5, 4, 21 4850; AIX32-NEXT: li 4, 255 4851; AIX32-NEXT: slw 6, 3, 21 4852; AIX32-NEXT: slw 4, 4, 21 4853; AIX32-NEXT: and 5, 5, 4 4854; AIX32-NEXT: and 6, 6, 4 4855; AIX32-NEXT: L..BB3_19: # %entry 4856; AIX32-NEXT: # 4857; AIX32-NEXT: lwarx 8, 0, 18 4858; AIX32-NEXT: and 7, 8, 4 4859; AIX32-NEXT: cmpw 7, 6 4860; AIX32-NEXT: bne 0, L..BB3_21 4861; AIX32-NEXT: # %bb.20: # %entry 4862; AIX32-NEXT: # 4863; AIX32-NEXT: andc 8, 8, 4 4864; AIX32-NEXT: or 8, 8, 5 4865; AIX32-NEXT: stwcx. 8, 0, 18 4866; AIX32-NEXT: bne 0, L..BB3_19 4867; AIX32-NEXT: L..BB3_21: # %entry 4868; AIX32-NEXT: srw 4, 7, 21 4869; AIX32-NEXT: lwsync 4870; AIX32-NEXT: lbz 5, 0(28) 4871; AIX32-NEXT: cmpw 4, 3 4872; AIX32-NEXT: li 3, 1 4873; AIX32-NEXT: iseleq 4, 3, 23 4874; AIX32-NEXT: slw 6, 5, 25 4875; AIX32-NEXT: li 5, 255 4876; AIX32-NEXT: stw 4, 0(27) 4877; AIX32-NEXT: lbz 4, 0(29) 4878; AIX32-NEXT: slw 5, 5, 25 4879; AIX32-NEXT: sync 4880; AIX32-NEXT: slw 7, 4, 25 4881; AIX32-NEXT: and 6, 6, 5 4882; AIX32-NEXT: and 7, 7, 5 4883; AIX32-NEXT: L..BB3_22: # %entry 4884; AIX32-NEXT: # 4885; AIX32-NEXT: lwarx 9, 0, 20 4886; AIX32-NEXT: and 8, 9, 5 4887; AIX32-NEXT: cmpw 8, 7 4888; AIX32-NEXT: bne 0, L..BB3_24 4889; AIX32-NEXT: # %bb.23: # %entry 4890; AIX32-NEXT: # 4891; AIX32-NEXT: andc 9, 9, 5 4892; AIX32-NEXT: or 9, 9, 6 4893; AIX32-NEXT: stwcx. 9, 0, 20 4894; AIX32-NEXT: bne 0, L..BB3_22 4895; AIX32-NEXT: L..BB3_24: # %entry 4896; AIX32-NEXT: srw 5, 8, 25 4897; AIX32-NEXT: lwsync 4898; AIX32-NEXT: cmpw 5, 4 4899; AIX32-NEXT: lbz 5, 0(28) 4900; AIX32-NEXT: iseleq 4, 3, 23 4901; AIX32-NEXT: extsb 5, 5 4902; AIX32-NEXT: stw 4, 0(27) 4903; AIX32-NEXT: lbz 4, 0(29) 4904; AIX32-NEXT: sync 4905; AIX32-NEXT: slw 6, 5, 26 4906; AIX32-NEXT: li 5, 0 4907; AIX32-NEXT: slw 7, 4, 26 4908; AIX32-NEXT: ori 5, 5, 65535 4909; AIX32-NEXT: slw 5, 5, 26 4910; AIX32-NEXT: and 6, 6, 5 4911; AIX32-NEXT: and 7, 7, 5 4912; AIX32-NEXT: L..BB3_25: # %entry 4913; AIX32-NEXT: # 4914; AIX32-NEXT: lwarx 9, 0, 22 4915; AIX32-NEXT: and 8, 9, 5 4916; AIX32-NEXT: cmpw 8, 7 4917; AIX32-NEXT: bne 0, L..BB3_27 4918; AIX32-NEXT: # %bb.26: # %entry 4919; AIX32-NEXT: # 4920; AIX32-NEXT: andc 9, 9, 5 4921; AIX32-NEXT: or 9, 9, 6 4922; AIX32-NEXT: stwcx. 9, 0, 22 4923; AIX32-NEXT: bne 0, L..BB3_25 4924; AIX32-NEXT: L..BB3_27: # %entry 4925; AIX32-NEXT: srw 5, 8, 26 4926; AIX32-NEXT: lwsync 4927; AIX32-NEXT: cmpw 5, 4 4928; AIX32-NEXT: lbz 5, 0(28) 4929; AIX32-NEXT: iseleq 4, 3, 23 4930; AIX32-NEXT: extsb 5, 5 4931; AIX32-NEXT: stw 4, 0(27) 4932; AIX32-NEXT: lbz 4, 0(29) 4933; AIX32-NEXT: sync 4934; AIX32-NEXT: slw 6, 5, 24 4935; AIX32-NEXT: li 5, 0 4936; AIX32-NEXT: slw 7, 4, 24 4937; AIX32-NEXT: ori 5, 5, 65535 4938; AIX32-NEXT: slw 5, 5, 24 4939; AIX32-NEXT: and 6, 6, 5 4940; AIX32-NEXT: and 7, 7, 5 4941; AIX32-NEXT: L..BB3_28: # %entry 4942; AIX32-NEXT: # 4943; AIX32-NEXT: lwarx 9, 0, 19 4944; AIX32-NEXT: and 8, 9, 5 4945; AIX32-NEXT: cmpw 8, 7 4946; AIX32-NEXT: bne 0, L..BB3_30 4947; AIX32-NEXT: # %bb.29: # %entry 4948; AIX32-NEXT: # 4949; AIX32-NEXT: andc 9, 9, 5 4950; AIX32-NEXT: or 9, 9, 6 4951; AIX32-NEXT: stwcx. 9, 0, 19 4952; AIX32-NEXT: bne 0, L..BB3_28 4953; AIX32-NEXT: L..BB3_30: # %entry 4954; AIX32-NEXT: srw 5, 8, 24 4955; AIX32-NEXT: lwsync 4956; AIX32-NEXT: cmpw 5, 4 4957; AIX32-NEXT: lbz 5, 0(28) 4958; AIX32-NEXT: iseleq 4, 3, 23 4959; AIX32-NEXT: stw 4, 0(27) 4960; AIX32-NEXT: lbz 4, 0(29) 4961; AIX32-NEXT: sync 4962; AIX32-NEXT: extsb 5, 5 4963; AIX32-NEXT: L..BB3_31: # %entry 4964; AIX32-NEXT: # 4965; AIX32-NEXT: lwarx 6, 0, 17 4966; AIX32-NEXT: cmpw 1, 6, 4 4967; AIX32-NEXT: bne 1, L..BB3_33 4968; AIX32-NEXT: # %bb.32: # %entry 4969; AIX32-NEXT: # 4970; AIX32-NEXT: stwcx. 5, 0, 17 4971; AIX32-NEXT: bne 0, L..BB3_31 4972; AIX32-NEXT: L..BB3_33: # %entry 4973; AIX32-NEXT: lwsync 4974; AIX32-NEXT: isel 4, 3, 23, 6 4975; AIX32-NEXT: lbz 5, 0(28) 4976; AIX32-NEXT: stw 4, 0(27) 4977; AIX32-NEXT: lbz 4, 0(29) 4978; AIX32-NEXT: sync 4979; AIX32-NEXT: extsb 5, 5 4980; AIX32-NEXT: L..BB3_34: # %entry 4981; AIX32-NEXT: # 4982; AIX32-NEXT: lwarx 6, 0, 27 4983; AIX32-NEXT: cmpw 1, 6, 4 4984; AIX32-NEXT: bne 1, L..BB3_36 4985; AIX32-NEXT: # %bb.35: # %entry 4986; AIX32-NEXT: # 4987; AIX32-NEXT: stwcx. 5, 0, 27 4988; AIX32-NEXT: bne 0, L..BB3_34 4989; AIX32-NEXT: L..BB3_36: # %entry 4990; AIX32-NEXT: lwsync 4991; AIX32-NEXT: isel 3, 3, 23, 6 4992; AIX32-NEXT: li 7, 5 4993; AIX32-NEXT: li 8, 5 4994; AIX32-NEXT: lbz 4, 0(28) 4995; AIX32-NEXT: stw 3, 0(27) 4996; AIX32-NEXT: lbz 3, 0(29) 4997; AIX32-NEXT: stw 23, 56(1) 4998; AIX32-NEXT: extsb 6, 4 4999; AIX32-NEXT: addi 4, 1, 56 5000; AIX32-NEXT: stw 3, 60(1) 5001; AIX32-NEXT: mr 3, 31 5002; AIX32-NEXT: srawi 5, 6, 31 5003; AIX32-NEXT: bl .__atomic_compare_exchange_8[PR] 5004; AIX32-NEXT: nop 5005; AIX32-NEXT: lbz 4, 0(28) 5006; AIX32-NEXT: stw 3, 0(27) 5007; AIX32-NEXT: lbz 3, 0(29) 5008; AIX32-NEXT: li 7, 5 5009; AIX32-NEXT: li 8, 5 5010; AIX32-NEXT: extsb 6, 4 5011; AIX32-NEXT: addi 4, 1, 56 5012; AIX32-NEXT: stw 3, 60(1) 5013; AIX32-NEXT: mr 3, 30 5014; AIX32-NEXT: stw 23, 56(1) 5015; AIX32-NEXT: srawi 5, 6, 31 5016; AIX32-NEXT: bl .__atomic_compare_exchange_8[PR] 5017; AIX32-NEXT: nop 5018; AIX32-NEXT: stw 3, 0(27) 5019; AIX32-NEXT: lwz 31, 124(1) # 4-byte Folded Reload 5020; AIX32-NEXT: lwz 30, 120(1) # 4-byte Folded Reload 5021; AIX32-NEXT: lwz 29, 116(1) # 4-byte Folded Reload 5022; AIX32-NEXT: lwz 28, 112(1) # 4-byte Folded Reload 5023; AIX32-NEXT: lwz 27, 108(1) # 4-byte Folded Reload 5024; AIX32-NEXT: lwz 26, 104(1) # 4-byte Folded Reload 5025; AIX32-NEXT: lwz 25, 100(1) # 4-byte Folded Reload 5026; AIX32-NEXT: lwz 24, 96(1) # 4-byte Folded Reload 5027; AIX32-NEXT: lwz 23, 92(1) # 4-byte Folded Reload 5028; AIX32-NEXT: lwz 22, 88(1) # 4-byte Folded Reload 5029; AIX32-NEXT: lwz 21, 84(1) # 4-byte Folded Reload 5030; AIX32-NEXT: lwz 20, 80(1) # 4-byte Folded Reload 5031; AIX32-NEXT: lwz 19, 76(1) # 4-byte Folded Reload 5032; AIX32-NEXT: lwz 18, 72(1) # 4-byte Folded Reload 5033; AIX32-NEXT: lwz 17, 68(1) # 4-byte Folded Reload 5034; AIX32-NEXT: addi 1, 1, 128 5035; AIX32-NEXT: lwz 0, 8(1) 5036; AIX32-NEXT: mtlr 0 5037; AIX32-NEXT: blr 5038entry: 5039 %0 = load i8, ptr @uc, align 1 5040 %1 = load i8, ptr @sc, align 1 5041 %2 = cmpxchg ptr @sc, i8 %0, i8 %1 seq_cst seq_cst, align 1 5042 %3 = extractvalue { i8, i1 } %2, 0 5043 store i8 %3, ptr @sc, align 1 5044 %4 = load i8, ptr @uc, align 1 5045 %5 = cmpxchg ptr @uc, i8 %4, i8 %3 seq_cst seq_cst, align 1 5046 %6 = extractvalue { i8, i1 } %5, 0 5047 store i8 %6, ptr @uc, align 1 5048 %conv = zext i8 %6 to i16 5049 %7 = load i8, ptr @sc, align 1 5050 %conv1 = sext i8 %7 to i16 5051 %8 = cmpxchg ptr @ss, i16 %conv, i16 %conv1 seq_cst seq_cst, align 2 5052 %9 = extractvalue { i16, i1 } %8, 0 5053 store i16 %9, ptr @ss, align 2 5054 %10 = load i8, ptr @uc, align 1 5055 %conv2 = zext i8 %10 to i16 5056 %11 = load i8, ptr @sc, align 1 5057 %conv3 = sext i8 %11 to i16 5058 %12 = cmpxchg ptr @us, i16 %conv2, i16 %conv3 seq_cst seq_cst, align 2 5059 %13 = extractvalue { i16, i1 } %12, 0 5060 store i16 %13, ptr @us, align 2 5061 %14 = load i8, ptr @uc, align 1 5062 %conv4 = zext i8 %14 to i32 5063 %15 = load i8, ptr @sc, align 1 5064 %conv5 = sext i8 %15 to i32 5065 %16 = cmpxchg ptr @si, i32 %conv4, i32 %conv5 seq_cst seq_cst, align 4 5066 %17 = extractvalue { i32, i1 } %16, 0 5067 store i32 %17, ptr @si, align 4 5068 %18 = load i8, ptr @uc, align 1 5069 %conv6 = zext i8 %18 to i32 5070 %19 = load i8, ptr @sc, align 1 5071 %conv7 = sext i8 %19 to i32 5072 %20 = cmpxchg ptr @ui, i32 %conv6, i32 %conv7 seq_cst seq_cst, align 4 5073 %21 = extractvalue { i32, i1 } %20, 0 5074 store i32 %21, ptr @ui, align 4 5075 %22 = load i8, ptr @uc, align 1 5076 %conv8 = zext i8 %22 to i64 5077 %23 = load i8, ptr @sc, align 1 5078 %conv9 = sext i8 %23 to i64 5079 %24 = cmpxchg ptr @sll, i64 %conv8, i64 %conv9 seq_cst seq_cst, align 8 5080 %25 = extractvalue { i64, i1 } %24, 0 5081 store i64 %25, ptr @sll, align 8 5082 %26 = load i8, ptr @uc, align 1 5083 %conv10 = zext i8 %26 to i64 5084 %27 = load i8, ptr @sc, align 1 5085 %conv11 = sext i8 %27 to i64 5086 %28 = cmpxchg ptr @ull, i64 %conv10, i64 %conv11 seq_cst seq_cst, align 8 5087 %29 = extractvalue { i64, i1 } %28, 0 5088 store i64 %29, ptr @ull, align 8 5089 %30 = load i8, ptr @uc, align 1 5090 %31 = load i8, ptr @sc, align 1 5091 %32 = cmpxchg ptr @sc, i8 %30, i8 %31 seq_cst seq_cst, align 1 5092 %33 = extractvalue { i8, i1 } %32, 1 5093 %conv12 = zext i1 %33 to i32 5094 store i32 %conv12, ptr @ui, align 4 5095 %34 = load i8, ptr @uc, align 1 5096 %35 = load i8, ptr @sc, align 1 5097 %36 = cmpxchg ptr @uc, i8 %34, i8 %35 seq_cst seq_cst, align 1 5098 %37 = extractvalue { i8, i1 } %36, 1 5099 %conv13 = zext i1 %37 to i32 5100 store i32 %conv13, ptr @ui, align 4 5101 %38 = load i8, ptr @uc, align 1 5102 %conv14 = zext i8 %38 to i16 5103 %39 = load i8, ptr @sc, align 1 5104 %conv15 = sext i8 %39 to i16 5105 %40 = cmpxchg ptr @ss, i16 %conv14, i16 %conv15 seq_cst seq_cst, align 2 5106 %41 = extractvalue { i16, i1 } %40, 1 5107 %conv16 = zext i1 %41 to i32 5108 store i32 %conv16, ptr @ui, align 4 5109 %42 = load i8, ptr @uc, align 1 5110 %conv17 = zext i8 %42 to i16 5111 %43 = load i8, ptr @sc, align 1 5112 %conv18 = sext i8 %43 to i16 5113 %44 = cmpxchg ptr @us, i16 %conv17, i16 %conv18 seq_cst seq_cst, align 2 5114 %45 = extractvalue { i16, i1 } %44, 1 5115 %conv19 = zext i1 %45 to i32 5116 store i32 %conv19, ptr @ui, align 4 5117 %46 = load i8, ptr @uc, align 1 5118 %conv20 = zext i8 %46 to i32 5119 %47 = load i8, ptr @sc, align 1 5120 %conv21 = sext i8 %47 to i32 5121 %48 = cmpxchg ptr @si, i32 %conv20, i32 %conv21 seq_cst seq_cst, align 4 5122 %49 = extractvalue { i32, i1 } %48, 1 5123 %conv22 = zext i1 %49 to i32 5124 store i32 %conv22, ptr @ui, align 4 5125 %50 = load i8, ptr @uc, align 1 5126 %conv23 = zext i8 %50 to i32 5127 %51 = load i8, ptr @sc, align 1 5128 %conv24 = sext i8 %51 to i32 5129 %52 = cmpxchg ptr @ui, i32 %conv23, i32 %conv24 seq_cst seq_cst, align 4 5130 %53 = extractvalue { i32, i1 } %52, 1 5131 %conv25 = zext i1 %53 to i32 5132 store i32 %conv25, ptr @ui, align 4 5133 %54 = load i8, ptr @uc, align 1 5134 %conv26 = zext i8 %54 to i64 5135 %55 = load i8, ptr @sc, align 1 5136 %conv27 = sext i8 %55 to i64 5137 %56 = cmpxchg ptr @sll, i64 %conv26, i64 %conv27 seq_cst seq_cst, align 8 5138 %57 = extractvalue { i64, i1 } %56, 1 5139 %conv28 = zext i1 %57 to i32 5140 store i32 %conv28, ptr @ui, align 4 5141 %58 = load i8, ptr @uc, align 1 5142 %conv29 = zext i8 %58 to i64 5143 %59 = load i8, ptr @sc, align 1 5144 %conv30 = sext i8 %59 to i64 5145 %60 = cmpxchg ptr @ull, i64 %conv29, i64 %conv30 seq_cst seq_cst, align 8 5146 %61 = extractvalue { i64, i1 } %60, 1 5147 %conv31 = zext i1 %61 to i32 5148 store i32 %conv31, ptr @ui, align 4 5149 ret void 5150} 5151 5152define dso_local void @test_lock() local_unnamed_addr #0 { 5153; CHECK-LABEL: test_lock: 5154; CHECK: # %bb.0: # %entry 5155; CHECK-NEXT: addis 3, 2, sc@toc@ha 5156; CHECK-NEXT: sync 5157; CHECK-NEXT: li 7, 1 5158; CHECK-NEXT: addi 4, 3, sc@toc@l 5159; CHECK-NEXT: .LBB4_1: # %entry 5160; CHECK-NEXT: # 5161; CHECK-NEXT: lbarx 5, 0, 4 5162; CHECK-NEXT: stbcx. 7, 0, 4 5163; CHECK-NEXT: bne 0, .LBB4_1 5164; CHECK-NEXT: # %bb.2: # %entry 5165; CHECK-NEXT: addis 4, 2, uc@toc@ha 5166; CHECK-NEXT: lwsync 5167; CHECK-NEXT: stb 5, sc@toc@l(3) 5168; CHECK-NEXT: sync 5169; CHECK-NEXT: addi 6, 4, uc@toc@l 5170; CHECK-NEXT: .LBB4_3: # %entry 5171; CHECK-NEXT: # 5172; CHECK-NEXT: lbarx 5, 0, 6 5173; CHECK-NEXT: stbcx. 7, 0, 6 5174; CHECK-NEXT: bne 0, .LBB4_3 5175; CHECK-NEXT: # %bb.4: # %entry 5176; CHECK-NEXT: lwsync 5177; CHECK-NEXT: stb 5, uc@toc@l(4) 5178; CHECK-NEXT: addis 5, 2, ss@toc@ha 5179; CHECK-NEXT: sync 5180; CHECK-NEXT: addi 8, 5, ss@toc@l 5181; CHECK-NEXT: .LBB4_5: # %entry 5182; CHECK-NEXT: # 5183; CHECK-NEXT: lharx 6, 0, 8 5184; CHECK-NEXT: sthcx. 7, 0, 8 5185; CHECK-NEXT: bne 0, .LBB4_5 5186; CHECK-NEXT: # %bb.6: # %entry 5187; CHECK-NEXT: lwsync 5188; CHECK-NEXT: sth 6, ss@toc@l(5) 5189; CHECK-NEXT: addis 6, 2, us@toc@ha 5190; CHECK-NEXT: sync 5191; CHECK-NEXT: addi 9, 6, us@toc@l 5192; CHECK-NEXT: .LBB4_7: # %entry 5193; CHECK-NEXT: # 5194; CHECK-NEXT: lharx 8, 0, 9 5195; CHECK-NEXT: sthcx. 7, 0, 9 5196; CHECK-NEXT: bne 0, .LBB4_7 5197; CHECK-NEXT: # %bb.8: # %entry 5198; CHECK-NEXT: lwsync 5199; CHECK-NEXT: sth 8, us@toc@l(6) 5200; CHECK-NEXT: addis 8, 2, si@toc@ha 5201; CHECK-NEXT: sync 5202; CHECK-NEXT: addi 10, 8, si@toc@l 5203; CHECK-NEXT: .LBB4_9: # %entry 5204; CHECK-NEXT: # 5205; CHECK-NEXT: lwarx 9, 0, 10 5206; CHECK-NEXT: stwcx. 7, 0, 10 5207; CHECK-NEXT: bne 0, .LBB4_9 5208; CHECK-NEXT: # %bb.10: # %entry 5209; CHECK-NEXT: lwsync 5210; CHECK-NEXT: stw 9, si@toc@l(8) 5211; CHECK-NEXT: addis 9, 2, ui@toc@ha 5212; CHECK-NEXT: sync 5213; CHECK-NEXT: addi 11, 9, ui@toc@l 5214; CHECK-NEXT: .LBB4_11: # %entry 5215; CHECK-NEXT: # 5216; CHECK-NEXT: lwarx 10, 0, 11 5217; CHECK-NEXT: stwcx. 7, 0, 11 5218; CHECK-NEXT: bne 0, .LBB4_11 5219; CHECK-NEXT: # %bb.12: # %entry 5220; CHECK-NEXT: addis 7, 2, sll@toc@ha 5221; CHECK-NEXT: lwsync 5222; CHECK-NEXT: stw 10, ui@toc@l(9) 5223; CHECK-NEXT: li 11, 1 5224; CHECK-NEXT: sync 5225; CHECK-NEXT: addi 10, 7, sll@toc@l 5226; CHECK-NEXT: .LBB4_13: # %entry 5227; CHECK-NEXT: # 5228; CHECK-NEXT: ldarx 12, 0, 10 5229; CHECK-NEXT: stdcx. 11, 0, 10 5230; CHECK-NEXT: bne 0, .LBB4_13 5231; CHECK-NEXT: # %bb.14: # %entry 5232; CHECK-NEXT: addis 10, 2, ull@toc@ha 5233; CHECK-NEXT: lwsync 5234; CHECK-NEXT: std 12, sll@toc@l(7) 5235; CHECK-NEXT: sync 5236; CHECK-NEXT: addi 0, 10, ull@toc@l 5237; CHECK-NEXT: .LBB4_15: # %entry 5238; CHECK-NEXT: # 5239; CHECK-NEXT: ldarx 12, 0, 0 5240; CHECK-NEXT: stdcx. 11, 0, 0 5241; CHECK-NEXT: bne 0, .LBB4_15 5242; CHECK-NEXT: # %bb.16: # %entry 5243; CHECK-NEXT: lwsync 5244; CHECK-NEXT: std 12, ull@toc@l(10) 5245; CHECK-NEXT: li 11, 0 5246; CHECK-NEXT: sync 5247; CHECK-NEXT: lwsync 5248; CHECK-NEXT: stb 11, sc@toc@l(3) 5249; CHECK-NEXT: li 3, 0 5250; CHECK-NEXT: lwsync 5251; CHECK-NEXT: stb 11, uc@toc@l(4) 5252; CHECK-NEXT: lwsync 5253; CHECK-NEXT: sth 11, ss@toc@l(5) 5254; CHECK-NEXT: lwsync 5255; CHECK-NEXT: sth 11, us@toc@l(6) 5256; CHECK-NEXT: lwsync 5257; CHECK-NEXT: stw 11, si@toc@l(8) 5258; CHECK-NEXT: lwsync 5259; CHECK-NEXT: stw 11, ui@toc@l(9) 5260; CHECK-NEXT: lwsync 5261; CHECK-NEXT: std 3, sll@toc@l(7) 5262; CHECK-NEXT: lwsync 5263; CHECK-NEXT: std 3, ull@toc@l(10) 5264; CHECK-NEXT: blr 5265; 5266; AIX32-LABEL: test_lock: 5267; AIX32: # %bb.0: # %entry 5268; AIX32-NEXT: mflr 0 5269; AIX32-NEXT: stwu 1, -96(1) 5270; AIX32-NEXT: stw 0, 104(1) 5271; AIX32-NEXT: stw 29, 84(1) # 4-byte Folded Spill 5272; AIX32-NEXT: lwz 29, L..C0(2) # @sc 5273; AIX32-NEXT: li 3, 1 5274; AIX32-NEXT: li 6, 255 5275; AIX32-NEXT: stw 23, 60(1) # 4-byte Folded Spill 5276; AIX32-NEXT: stw 24, 64(1) # 4-byte Folded Spill 5277; AIX32-NEXT: rlwinm 4, 29, 3, 27, 28 5278; AIX32-NEXT: stw 25, 68(1) # 4-byte Folded Spill 5279; AIX32-NEXT: stw 26, 72(1) # 4-byte Folded Spill 5280; AIX32-NEXT: stw 27, 76(1) # 4-byte Folded Spill 5281; AIX32-NEXT: xori 4, 4, 24 5282; AIX32-NEXT: stw 28, 80(1) # 4-byte Folded Spill 5283; AIX32-NEXT: stw 30, 88(1) # 4-byte Folded Spill 5284; AIX32-NEXT: stw 31, 92(1) # 4-byte Folded Spill 5285; AIX32-NEXT: slw 7, 3, 4 5286; AIX32-NEXT: slw 6, 6, 4 5287; AIX32-NEXT: sync 5288; AIX32-NEXT: rlwinm 5, 29, 0, 0, 29 5289; AIX32-NEXT: and 7, 7, 6 5290; AIX32-NEXT: L..BB4_1: # %entry 5291; AIX32-NEXT: # 5292; AIX32-NEXT: lwarx 8, 0, 5 5293; AIX32-NEXT: andc 9, 8, 6 5294; AIX32-NEXT: or 9, 7, 9 5295; AIX32-NEXT: stwcx. 9, 0, 5 5296; AIX32-NEXT: bne 0, L..BB4_1 5297; AIX32-NEXT: # %bb.2: # %entry 5298; AIX32-NEXT: srw 4, 8, 4 5299; AIX32-NEXT: lwz 28, L..C1(2) # @uc 5300; AIX32-NEXT: lwsync 5301; AIX32-NEXT: li 6, 255 5302; AIX32-NEXT: clrlwi 4, 4, 24 5303; AIX32-NEXT: rlwinm 5, 28, 0, 0, 29 5304; AIX32-NEXT: stb 4, 0(29) 5305; AIX32-NEXT: rlwinm 4, 28, 3, 27, 28 5306; AIX32-NEXT: sync 5307; AIX32-NEXT: xori 4, 4, 24 5308; AIX32-NEXT: slw 7, 3, 4 5309; AIX32-NEXT: slw 6, 6, 4 5310; AIX32-NEXT: and 7, 7, 6 5311; AIX32-NEXT: L..BB4_3: # %entry 5312; AIX32-NEXT: # 5313; AIX32-NEXT: lwarx 8, 0, 5 5314; AIX32-NEXT: andc 9, 8, 6 5315; AIX32-NEXT: or 9, 7, 9 5316; AIX32-NEXT: stwcx. 9, 0, 5 5317; AIX32-NEXT: bne 0, L..BB4_3 5318; AIX32-NEXT: # %bb.4: # %entry 5319; AIX32-NEXT: srw 4, 8, 4 5320; AIX32-NEXT: lwz 27, L..C2(2) # @ss 5321; AIX32-NEXT: lwsync 5322; AIX32-NEXT: li 6, 0 5323; AIX32-NEXT: clrlwi 4, 4, 24 5324; AIX32-NEXT: ori 6, 6, 65535 5325; AIX32-NEXT: rlwinm 5, 27, 0, 0, 29 5326; AIX32-NEXT: stb 4, 0(28) 5327; AIX32-NEXT: rlwinm 4, 27, 3, 27, 27 5328; AIX32-NEXT: sync 5329; AIX32-NEXT: xori 4, 4, 16 5330; AIX32-NEXT: slw 7, 3, 4 5331; AIX32-NEXT: slw 6, 6, 4 5332; AIX32-NEXT: and 7, 7, 6 5333; AIX32-NEXT: L..BB4_5: # %entry 5334; AIX32-NEXT: # 5335; AIX32-NEXT: lwarx 8, 0, 5 5336; AIX32-NEXT: andc 9, 8, 6 5337; AIX32-NEXT: or 9, 7, 9 5338; AIX32-NEXT: stwcx. 9, 0, 5 5339; AIX32-NEXT: bne 0, L..BB4_5 5340; AIX32-NEXT: # %bb.6: # %entry 5341; AIX32-NEXT: srw 4, 8, 4 5342; AIX32-NEXT: lwz 26, L..C3(2) # @us 5343; AIX32-NEXT: lwsync 5344; AIX32-NEXT: li 6, 0 5345; AIX32-NEXT: clrlwi 4, 4, 16 5346; AIX32-NEXT: ori 6, 6, 65535 5347; AIX32-NEXT: rlwinm 5, 26, 0, 0, 29 5348; AIX32-NEXT: sth 4, 0(27) 5349; AIX32-NEXT: rlwinm 4, 26, 3, 27, 27 5350; AIX32-NEXT: sync 5351; AIX32-NEXT: xori 4, 4, 16 5352; AIX32-NEXT: slw 7, 3, 4 5353; AIX32-NEXT: slw 6, 6, 4 5354; AIX32-NEXT: and 7, 7, 6 5355; AIX32-NEXT: L..BB4_7: # %entry 5356; AIX32-NEXT: # 5357; AIX32-NEXT: lwarx 8, 0, 5 5358; AIX32-NEXT: andc 9, 8, 6 5359; AIX32-NEXT: or 9, 7, 9 5360; AIX32-NEXT: stwcx. 9, 0, 5 5361; AIX32-NEXT: bne 0, L..BB4_7 5362; AIX32-NEXT: # %bb.8: # %entry 5363; AIX32-NEXT: srw 4, 8, 4 5364; AIX32-NEXT: lwsync 5365; AIX32-NEXT: lwz 25, L..C4(2) # @si 5366; AIX32-NEXT: clrlwi 4, 4, 16 5367; AIX32-NEXT: sth 4, 0(26) 5368; AIX32-NEXT: sync 5369; AIX32-NEXT: L..BB4_9: # %entry 5370; AIX32-NEXT: # 5371; AIX32-NEXT: lwarx 4, 0, 25 5372; AIX32-NEXT: stwcx. 3, 0, 25 5373; AIX32-NEXT: bne 0, L..BB4_9 5374; AIX32-NEXT: # %bb.10: # %entry 5375; AIX32-NEXT: lwsync 5376; AIX32-NEXT: stw 4, 0(25) 5377; AIX32-NEXT: lwz 24, L..C5(2) # @ui 5378; AIX32-NEXT: sync 5379; AIX32-NEXT: L..BB4_11: # %entry 5380; AIX32-NEXT: # 5381; AIX32-NEXT: lwarx 4, 0, 24 5382; AIX32-NEXT: stwcx. 3, 0, 24 5383; AIX32-NEXT: bne 0, L..BB4_11 5384; AIX32-NEXT: # %bb.12: # %entry 5385; AIX32-NEXT: lwz 31, L..C6(2) # @sll 5386; AIX32-NEXT: lwsync 5387; AIX32-NEXT: stw 4, 0(24) 5388; AIX32-NEXT: mr 3, 31 5389; AIX32-NEXT: li 4, 0 5390; AIX32-NEXT: li 5, 1 5391; AIX32-NEXT: li 6, 5 5392; AIX32-NEXT: li 23, 0 5393; AIX32-NEXT: bl .__atomic_exchange_8[PR] 5394; AIX32-NEXT: nop 5395; AIX32-NEXT: lwz 30, L..C7(2) # @ull 5396; AIX32-NEXT: stw 4, 4(31) 5397; AIX32-NEXT: li 4, 0 5398; AIX32-NEXT: li 5, 1 5399; AIX32-NEXT: li 6, 5 5400; AIX32-NEXT: stw 3, 0(31) 5401; AIX32-NEXT: mr 3, 30 5402; AIX32-NEXT: bl .__atomic_exchange_8[PR] 5403; AIX32-NEXT: nop 5404; AIX32-NEXT: stw 4, 4(30) 5405; AIX32-NEXT: stw 3, 0(30) 5406; AIX32-NEXT: sync 5407; AIX32-NEXT: li 4, 0 5408; AIX32-NEXT: li 5, 0 5409; AIX32-NEXT: mr 3, 31 5410; AIX32-NEXT: lwsync 5411; AIX32-NEXT: stb 23, 0(29) 5412; AIX32-NEXT: li 6, 3 5413; AIX32-NEXT: lwsync 5414; AIX32-NEXT: stb 23, 0(28) 5415; AIX32-NEXT: lwsync 5416; AIX32-NEXT: sth 23, 0(27) 5417; AIX32-NEXT: lwsync 5418; AIX32-NEXT: sth 23, 0(26) 5419; AIX32-NEXT: lwsync 5420; AIX32-NEXT: stw 23, 0(25) 5421; AIX32-NEXT: lwsync 5422; AIX32-NEXT: stw 23, 0(24) 5423; AIX32-NEXT: bl .__atomic_store_8[PR] 5424; AIX32-NEXT: nop 5425; AIX32-NEXT: li 4, 0 5426; AIX32-NEXT: li 5, 0 5427; AIX32-NEXT: mr 3, 30 5428; AIX32-NEXT: li 6, 3 5429; AIX32-NEXT: bl .__atomic_store_8[PR] 5430; AIX32-NEXT: nop 5431; AIX32-NEXT: lwz 31, 92(1) # 4-byte Folded Reload 5432; AIX32-NEXT: lwz 30, 88(1) # 4-byte Folded Reload 5433; AIX32-NEXT: lwz 29, 84(1) # 4-byte Folded Reload 5434; AIX32-NEXT: lwz 28, 80(1) # 4-byte Folded Reload 5435; AIX32-NEXT: lwz 27, 76(1) # 4-byte Folded Reload 5436; AIX32-NEXT: lwz 26, 72(1) # 4-byte Folded Reload 5437; AIX32-NEXT: lwz 25, 68(1) # 4-byte Folded Reload 5438; AIX32-NEXT: lwz 24, 64(1) # 4-byte Folded Reload 5439; AIX32-NEXT: lwz 23, 60(1) # 4-byte Folded Reload 5440; AIX32-NEXT: addi 1, 1, 96 5441; AIX32-NEXT: lwz 0, 8(1) 5442; AIX32-NEXT: mtlr 0 5443; AIX32-NEXT: blr 5444entry: 5445 %0 = atomicrmw xchg ptr @sc, i8 1 seq_cst, align 1 5446 store i8 %0, ptr @sc, align 1 5447 %1 = atomicrmw xchg ptr @uc, i8 1 seq_cst, align 1 5448 store i8 %1, ptr @uc, align 1 5449 %2 = atomicrmw xchg ptr @ss, i16 1 seq_cst, align 2 5450 store i16 %2, ptr @ss, align 2 5451 %3 = atomicrmw xchg ptr @us, i16 1 seq_cst, align 2 5452 store i16 %3, ptr @us, align 2 5453 %4 = atomicrmw xchg ptr @si, i32 1 seq_cst, align 4 5454 store i32 %4, ptr @si, align 4 5455 %5 = atomicrmw xchg ptr @ui, i32 1 seq_cst, align 4 5456 store i32 %5, ptr @ui, align 4 5457 %6 = atomicrmw xchg ptr @sll, i64 1 seq_cst, align 8 5458 store i64 %6, ptr @sll, align 8 5459 %7 = atomicrmw xchg ptr @ull, i64 1 seq_cst, align 8 5460 store i64 %7, ptr @ull, align 8 5461 fence seq_cst 5462 store atomic i8 0, ptr @sc release, align 1 5463 store atomic i8 0, ptr @uc release, align 1 5464 store atomic i16 0, ptr @ss release, align 2 5465 store atomic i16 0, ptr @us release, align 2 5466 store atomic i32 0, ptr @si release, align 4 5467 store atomic i32 0, ptr @ui release, align 4 5468 store atomic i64 0, ptr @sll release, align 8 5469 store atomic i64 0, ptr @ull release, align 8 5470 ret void 5471} 5472 5473define dso_local void @test_atomic() local_unnamed_addr #0 { 5474; CHECK-LABEL: test_atomic: 5475; CHECK: # %bb.0: # %entry 5476; CHECK-NEXT: addis 4, 2, ui@toc@ha 5477; CHECK-NEXT: li 3, 5 5478; CHECK-NEXT: addi 6, 4, ui@toc@l 5479; CHECK-NEXT: .LBB5_1: # %entry 5480; CHECK-NEXT: # 5481; CHECK-NEXT: lwarx 5, 0, 6 5482; CHECK-NEXT: cmplwi 5, 5 5483; CHECK-NEXT: blt 0, .LBB5_3 5484; CHECK-NEXT: # %bb.2: # %entry 5485; CHECK-NEXT: # 5486; CHECK-NEXT: stwcx. 3, 0, 6 5487; CHECK-NEXT: bne 0, .LBB5_1 5488; CHECK-NEXT: .LBB5_3: # %entry 5489; CHECK-NEXT: stw 5, ui@toc@l(4) 5490; CHECK-NEXT: addis 5, 2, si@toc@ha 5491; CHECK-NEXT: sync 5492; CHECK-NEXT: addi 7, 5, si@toc@l 5493; CHECK-NEXT: .LBB5_4: # %entry 5494; CHECK-NEXT: # 5495; CHECK-NEXT: lwarx 8, 0, 7 5496; CHECK-NEXT: cmpwi 8, 5 5497; CHECK-NEXT: blt 0, .LBB5_6 5498; CHECK-NEXT: # %bb.5: # %entry 5499; CHECK-NEXT: # 5500; CHECK-NEXT: stwcx. 3, 0, 7 5501; CHECK-NEXT: bne 0, .LBB5_4 5502; CHECK-NEXT: .LBB5_6: # %entry 5503; CHECK-NEXT: lwsync 5504; CHECK-NEXT: stw 8, si@toc@l(5) 5505; CHECK-NEXT: .LBB5_7: # %entry 5506; CHECK-NEXT: # 5507; CHECK-NEXT: lwarx 8, 0, 6 5508; CHECK-NEXT: cmplwi 8, 5 5509; CHECK-NEXT: bgt 0, .LBB5_9 5510; CHECK-NEXT: # %bb.8: # %entry 5511; CHECK-NEXT: # 5512; CHECK-NEXT: stwcx. 3, 0, 6 5513; CHECK-NEXT: bne 0, .LBB5_7 5514; CHECK-NEXT: .LBB5_9: # %entry 5515; CHECK-NEXT: lwsync 5516; CHECK-NEXT: stw 8, ui@toc@l(4) 5517; CHECK-NEXT: lwsync 5518; CHECK-NEXT: .LBB5_10: # %entry 5519; CHECK-NEXT: # 5520; CHECK-NEXT: lwarx 4, 0, 7 5521; CHECK-NEXT: cmpwi 4, 5 5522; CHECK-NEXT: bgt 0, .LBB5_12 5523; CHECK-NEXT: # %bb.11: # %entry 5524; CHECK-NEXT: # 5525; CHECK-NEXT: stwcx. 3, 0, 7 5526; CHECK-NEXT: bne 0, .LBB5_10 5527; CHECK-NEXT: .LBB5_12: # %entry 5528; CHECK-NEXT: stw 4, si@toc@l(5) 5529; CHECK-NEXT: blr 5530; 5531; AIX32-LABEL: test_atomic: 5532; AIX32: # %bb.0: # %entry 5533; AIX32-NEXT: lwz 4, L..C5(2) # @ui 5534; AIX32-NEXT: li 3, 5 5535; AIX32-NEXT: L..BB5_1: # %entry 5536; AIX32-NEXT: # 5537; AIX32-NEXT: lwarx 5, 0, 4 5538; AIX32-NEXT: cmplwi 5, 5 5539; AIX32-NEXT: blt 0, L..BB5_3 5540; AIX32-NEXT: # %bb.2: # %entry 5541; AIX32-NEXT: # 5542; AIX32-NEXT: stwcx. 3, 0, 4 5543; AIX32-NEXT: bne 0, L..BB5_1 5544; AIX32-NEXT: L..BB5_3: # %entry 5545; AIX32-NEXT: stw 5, 0(4) 5546; AIX32-NEXT: lwz 5, L..C4(2) # @si 5547; AIX32-NEXT: sync 5548; AIX32-NEXT: L..BB5_4: # %entry 5549; AIX32-NEXT: # 5550; AIX32-NEXT: lwarx 6, 0, 5 5551; AIX32-NEXT: cmpwi 6, 5 5552; AIX32-NEXT: blt 0, L..BB5_6 5553; AIX32-NEXT: # %bb.5: # %entry 5554; AIX32-NEXT: # 5555; AIX32-NEXT: stwcx. 3, 0, 5 5556; AIX32-NEXT: bne 0, L..BB5_4 5557; AIX32-NEXT: L..BB5_6: # %entry 5558; AIX32-NEXT: lwsync 5559; AIX32-NEXT: stw 6, 0(5) 5560; AIX32-NEXT: L..BB5_7: # %entry 5561; AIX32-NEXT: # 5562; AIX32-NEXT: lwarx 6, 0, 4 5563; AIX32-NEXT: cmplwi 6, 5 5564; AIX32-NEXT: bgt 0, L..BB5_9 5565; AIX32-NEXT: # %bb.8: # %entry 5566; AIX32-NEXT: # 5567; AIX32-NEXT: stwcx. 3, 0, 4 5568; AIX32-NEXT: bne 0, L..BB5_7 5569; AIX32-NEXT: L..BB5_9: # %entry 5570; AIX32-NEXT: lwsync 5571; AIX32-NEXT: stw 6, 0(4) 5572; AIX32-NEXT: lwsync 5573; AIX32-NEXT: L..BB5_10: # %entry 5574; AIX32-NEXT: # 5575; AIX32-NEXT: lwarx 4, 0, 5 5576; AIX32-NEXT: cmpwi 4, 5 5577; AIX32-NEXT: bgt 0, L..BB5_12 5578; AIX32-NEXT: # %bb.11: # %entry 5579; AIX32-NEXT: # 5580; AIX32-NEXT: stwcx. 3, 0, 5 5581; AIX32-NEXT: bne 0, L..BB5_10 5582; AIX32-NEXT: L..BB5_12: # %entry 5583; AIX32-NEXT: stw 4, 0(5) 5584; AIX32-NEXT: blr 5585entry: 5586 %0 = atomicrmw umin ptr @ui, i32 5 monotonic, align 4 5587 store i32 %0, ptr @ui, align 4 5588 %1 = atomicrmw min ptr @si, i32 5 seq_cst, align 4 5589 store i32 %1, ptr @si, align 4 5590 %2 = atomicrmw umax ptr @ui, i32 5 acquire, align 4 5591 store i32 %2, ptr @ui, align 4 5592 %3 = atomicrmw max ptr @si, i32 5 release, align 4 5593 store i32 %3, ptr @si, align 4 5594 ret void 5595} 5596 5597define dso_local i64 @cmpswplp(ptr noundef %ptr, ptr nocapture noundef readnone %oldval, i64 noundef %newval) local_unnamed_addr #0 { 5598; CHECK-LABEL: cmpswplp: 5599; CHECK: # %bb.0: # %entry 5600; CHECK-NEXT: addi 4, 5, 1 5601; CHECK-NEXT: .LBB6_1: # %entry 5602; CHECK-NEXT: # 5603; CHECK-NEXT: ldarx 6, 0, 3 5604; CHECK-NEXT: cmpd 1, 6, 5 5605; CHECK-NEXT: bne 1, .LBB6_3 5606; CHECK-NEXT: # %bb.2: # %entry 5607; CHECK-NEXT: # 5608; CHECK-NEXT: stdcx. 4, 0, 3 5609; CHECK-NEXT: bne 0, .LBB6_1 5610; CHECK-NEXT: .LBB6_3: # %entry 5611; CHECK-NEXT: li 3, 66 5612; CHECK-NEXT: li 4, 55 5613; CHECK-NEXT: isel 3, 4, 3, 6 5614; CHECK-NEXT: blr 5615; 5616; AIX32-LABEL: cmpswplp: 5617; AIX32: # %bb.0: # %entry 5618; AIX32-NEXT: mflr 0 5619; AIX32-NEXT: stwu 1, -64(1) 5620; AIX32-NEXT: addic 7, 6, 1 5621; AIX32-NEXT: stw 0, 72(1) 5622; AIX32-NEXT: addze 8, 5 5623; AIX32-NEXT: stw 6, 60(1) 5624; AIX32-NEXT: stw 5, 56(1) 5625; AIX32-NEXT: addi 4, 1, 56 5626; AIX32-NEXT: mr 5, 8 5627; AIX32-NEXT: mr 6, 7 5628; AIX32-NEXT: li 7, 0 5629; AIX32-NEXT: li 8, 0 5630; AIX32-NEXT: bl .__atomic_compare_exchange_8[PR] 5631; AIX32-NEXT: nop 5632; AIX32-NEXT: andi. 3, 3, 1 5633; AIX32-NEXT: li 3, 66 5634; AIX32-NEXT: li 4, 55 5635; AIX32-NEXT: iselgt 4, 4, 3 5636; AIX32-NEXT: li 3, 0 5637; AIX32-NEXT: addi 1, 1, 64 5638; AIX32-NEXT: lwz 0, 8(1) 5639; AIX32-NEXT: mtlr 0 5640; AIX32-NEXT: blr 5641entry: 5642 %add = add nsw i64 %newval, 1 5643 %0 = cmpxchg weak volatile ptr %ptr, i64 %newval, i64 %add monotonic monotonic, align 8 5644 %1 = extractvalue { i64, i1 } %0, 1 5645 %conv = select i1 %1, i64 55, i64 66 5646 ret i64 %conv 5647} 5648 5649define dso_local i64 @atommax8(ptr nocapture noundef %ptr, i64 noundef %val) local_unnamed_addr #0 { 5650; CHECK-LABEL: atommax8: 5651; CHECK: # %bb.0: # %entry 5652; CHECK-NEXT: sync 5653; CHECK-NEXT: .LBB7_1: # %entry 5654; CHECK-NEXT: # 5655; CHECK-NEXT: ldarx 5, 0, 3 5656; CHECK-NEXT: cmpd 1, 5, 4 5657; CHECK-NEXT: bgt 1, .LBB7_3 5658; CHECK-NEXT: # %bb.2: # %entry 5659; CHECK-NEXT: # 5660; CHECK-NEXT: stdcx. 4, 0, 3 5661; CHECK-NEXT: bne 0, .LBB7_1 5662; CHECK-NEXT: .LBB7_3: # %entry 5663; CHECK-NEXT: li 3, 55 5664; CHECK-NEXT: li 4, 66 5665; CHECK-NEXT: lwsync 5666; CHECK-NEXT: isel 3, 4, 3, 5 5667; CHECK-NEXT: blr 5668; 5669; AIX32-LABEL: atommax8: 5670; AIX32: # %bb.0: # %entry 5671; AIX32-NEXT: mflr 0 5672; AIX32-NEXT: stwu 1, -80(1) 5673; AIX32-NEXT: stw 0, 88(1) 5674; AIX32-NEXT: stw 30, 72(1) # 4-byte Folded Spill 5675; AIX32-NEXT: stw 31, 76(1) # 4-byte Folded Spill 5676; AIX32-NEXT: mr 31, 5 5677; AIX32-NEXT: mr 30, 4 5678; AIX32-NEXT: lwz 4, 4(3) 5679; AIX32-NEXT: lwz 5, 0(3) 5680; AIX32-NEXT: stw 28, 64(1) # 4-byte Folded Spill 5681; AIX32-NEXT: addi 28, 1, 56 5682; AIX32-NEXT: stw 29, 68(1) # 4-byte Folded Spill 5683; AIX32-NEXT: mr 29, 3 5684; AIX32-NEXT: .align 4 5685; AIX32-NEXT: L..BB7_1: # %atomicrmw.start 5686; AIX32-NEXT: # 5687; AIX32-NEXT: cmplw 5, 30 5688; AIX32-NEXT: cmpw 1, 5, 30 5689; AIX32-NEXT: li 7, 5 5690; AIX32-NEXT: li 8, 5 5691; AIX32-NEXT: stw 5, 56(1) 5692; AIX32-NEXT: mr 3, 29 5693; AIX32-NEXT: crandc 20, 5, 2 5694; AIX32-NEXT: cmplw 1, 4, 31 5695; AIX32-NEXT: crand 21, 2, 5 5696; AIX32-NEXT: stw 4, 60(1) 5697; AIX32-NEXT: cror 20, 21, 20 5698; AIX32-NEXT: isel 5, 5, 30, 20 5699; AIX32-NEXT: isel 6, 4, 31, 20 5700; AIX32-NEXT: mr 4, 28 5701; AIX32-NEXT: bl .__atomic_compare_exchange_8[PR] 5702; AIX32-NEXT: nop 5703; AIX32-NEXT: lwz 4, 60(1) 5704; AIX32-NEXT: lwz 5, 56(1) 5705; AIX32-NEXT: cmplwi 3, 0 5706; AIX32-NEXT: beq 0, L..BB7_1 5707; AIX32-NEXT: # %bb.2: # %atomicrmw.end 5708; AIX32-NEXT: cmplw 5, 30 5709; AIX32-NEXT: cmpw 1, 5, 30 5710; AIX32-NEXT: li 3, 55 5711; AIX32-NEXT: lwz 30, 72(1) # 4-byte Folded Reload 5712; AIX32-NEXT: lwz 29, 68(1) # 4-byte Folded Reload 5713; AIX32-NEXT: lwz 28, 64(1) # 4-byte Folded Reload 5714; AIX32-NEXT: crandc 20, 5, 2 5715; AIX32-NEXT: cmplw 1, 4, 31 5716; AIX32-NEXT: li 4, 66 5717; AIX32-NEXT: lwz 31, 76(1) # 4-byte Folded Reload 5718; AIX32-NEXT: crand 21, 2, 5 5719; AIX32-NEXT: cror 20, 21, 20 5720; AIX32-NEXT: isel 4, 4, 3, 20 5721; AIX32-NEXT: li 3, 0 5722; AIX32-NEXT: addi 1, 1, 80 5723; AIX32-NEXT: lwz 0, 8(1) 5724; AIX32-NEXT: mtlr 0 5725; AIX32-NEXT: blr 5726entry: 5727 %0 = atomicrmw max ptr %ptr, i64 %val seq_cst, align 8 5728 %cmp.not = icmp sgt i64 %0, %val 5729 %conv = select i1 %cmp.not, i64 66, i64 55 5730 ret i64 %conv 5731} 5732 5733define dso_local signext i32 @atommax4(ptr nocapture noundef %ptr, i32 noundef signext %val) local_unnamed_addr #0 { 5734; CHECK-LABEL: atommax4: 5735; CHECK: # %bb.0: # %entry 5736; CHECK-NEXT: sync 5737; CHECK-NEXT: .LBB8_1: # %entry 5738; CHECK-NEXT: # 5739; CHECK-NEXT: lwarx 5, 0, 3 5740; CHECK-NEXT: cmpw 1, 5, 4 5741; CHECK-NEXT: bgt 1, .LBB8_3 5742; CHECK-NEXT: # %bb.2: # %entry 5743; CHECK-NEXT: # 5744; CHECK-NEXT: stwcx. 4, 0, 3 5745; CHECK-NEXT: bne 0, .LBB8_1 5746; CHECK-NEXT: .LBB8_3: # %entry 5747; CHECK-NEXT: li 3, 55 5748; CHECK-NEXT: li 4, 66 5749; CHECK-NEXT: lwsync 5750; CHECK-NEXT: isel 3, 4, 3, 5 5751; CHECK-NEXT: blr 5752; 5753; AIX32-LABEL: atommax4: 5754; AIX32: # %bb.0: # %entry 5755; AIX32-NEXT: sync 5756; AIX32-NEXT: L..BB8_1: # %entry 5757; AIX32-NEXT: # 5758; AIX32-NEXT: lwarx 5, 0, 3 5759; AIX32-NEXT: cmpw 1, 5, 4 5760; AIX32-NEXT: bgt 1, L..BB8_3 5761; AIX32-NEXT: # %bb.2: # %entry 5762; AIX32-NEXT: # 5763; AIX32-NEXT: stwcx. 4, 0, 3 5764; AIX32-NEXT: bne 0, L..BB8_1 5765; AIX32-NEXT: L..BB8_3: # %entry 5766; AIX32-NEXT: li 3, 55 5767; AIX32-NEXT: li 4, 66 5768; AIX32-NEXT: lwsync 5769; AIX32-NEXT: isel 3, 4, 3, 5 5770; AIX32-NEXT: blr 5771entry: 5772 %0 = atomicrmw max ptr %ptr, i32 %val seq_cst, align 4 5773 %cmp.not = icmp sgt i32 %0, %val 5774 %cond = select i1 %cmp.not, i32 66, i32 55 5775 ret i32 %cond 5776} 5777 5778define dso_local signext i16 @atommax2(ptr nocapture noundef %ptr, i16 noundef signext %val) local_unnamed_addr #0 { 5779; CHECK-LABEL: atommax2: 5780; CHECK: # %bb.0: # %entry 5781; CHECK-NEXT: sync 5782; CHECK-NEXT: .LBB9_1: # %entry 5783; CHECK-NEXT: # 5784; CHECK-NEXT: lharx 5, 0, 3 5785; CHECK-NEXT: extsh 5, 5 5786; CHECK-NEXT: cmpw 1, 5, 4 5787; CHECK-NEXT: bgt 1, .LBB9_3 5788; CHECK-NEXT: # %bb.2: # %entry 5789; CHECK-NEXT: # 5790; CHECK-NEXT: sthcx. 4, 0, 3 5791; CHECK-NEXT: bne 0, .LBB9_1 5792; CHECK-NEXT: .LBB9_3: # %entry 5793; CHECK-NEXT: li 3, 55 5794; CHECK-NEXT: li 4, 66 5795; CHECK-NEXT: lwsync 5796; CHECK-NEXT: isel 3, 4, 3, 5 5797; CHECK-NEXT: blr 5798; 5799; AIX32-LABEL: atommax2: 5800; AIX32: # %bb.0: # %entry 5801; AIX32-NEXT: rlwinm 6, 3, 3, 27, 27 5802; AIX32-NEXT: li 7, 0 5803; AIX32-NEXT: sync 5804; AIX32-NEXT: extsh 5, 4 5805; AIX32-NEXT: rlwinm 3, 3, 0, 0, 29 5806; AIX32-NEXT: xori 6, 6, 16 5807; AIX32-NEXT: ori 7, 7, 65535 5808; AIX32-NEXT: slw 8, 5, 6 5809; AIX32-NEXT: slw 7, 7, 6 5810; AIX32-NEXT: and 8, 8, 7 5811; AIX32-NEXT: L..BB9_1: # %entry 5812; AIX32-NEXT: # 5813; AIX32-NEXT: lwarx 9, 0, 3 5814; AIX32-NEXT: and 10, 9, 7 5815; AIX32-NEXT: srw 10, 10, 6 5816; AIX32-NEXT: extsh 10, 10 5817; AIX32-NEXT: cmpw 10, 5 5818; AIX32-NEXT: bgt 0, L..BB9_3 5819; AIX32-NEXT: # %bb.2: # %entry 5820; AIX32-NEXT: # 5821; AIX32-NEXT: andc 10, 9, 7 5822; AIX32-NEXT: or 10, 8, 10 5823; AIX32-NEXT: stwcx. 10, 0, 3 5824; AIX32-NEXT: bne 0, L..BB9_1 5825; AIX32-NEXT: L..BB9_3: # %entry 5826; AIX32-NEXT: srw 3, 9, 6 5827; AIX32-NEXT: lwsync 5828; AIX32-NEXT: clrlwi 3, 3, 16 5829; AIX32-NEXT: extsh 3, 3 5830; AIX32-NEXT: cmpw 3, 4 5831; AIX32-NEXT: li 3, 55 5832; AIX32-NEXT: li 4, 66 5833; AIX32-NEXT: iselgt 3, 4, 3 5834; AIX32-NEXT: blr 5835entry: 5836 %0 = atomicrmw max ptr %ptr, i16 %val seq_cst, align 2 5837 %cmp.not = icmp sgt i16 %0, %val 5838 %conv3 = select i1 %cmp.not, i16 66, i16 55 5839 ret i16 %conv3 5840} 5841 5842define dso_local zeroext i8 @atommax1(ptr nocapture noundef %ptr, i8 noundef zeroext %val) local_unnamed_addr #0 { 5843; CHECK-LABEL: atommax1: 5844; CHECK: # %bb.0: # %entry 5845; CHECK-NEXT: sync 5846; CHECK-NEXT: .LBB10_1: # %entry 5847; CHECK-NEXT: # 5848; CHECK-NEXT: lbarx 5, 0, 3 5849; CHECK-NEXT: cmplw 1, 5, 4 5850; CHECK-NEXT: bgt 1, .LBB10_3 5851; CHECK-NEXT: # %bb.2: # %entry 5852; CHECK-NEXT: # 5853; CHECK-NEXT: stbcx. 4, 0, 3 5854; CHECK-NEXT: bne 0, .LBB10_1 5855; CHECK-NEXT: .LBB10_3: # %entry 5856; CHECK-NEXT: li 3, 55 5857; CHECK-NEXT: li 4, 66 5858; CHECK-NEXT: lwsync 5859; CHECK-NEXT: isel 3, 4, 3, 5 5860; CHECK-NEXT: blr 5861; 5862; AIX32-LABEL: atommax1: 5863; AIX32: # %bb.0: # %entry 5864; AIX32-NEXT: rlwinm 5, 3, 3, 27, 28 5865; AIX32-NEXT: li 7, 255 5866; AIX32-NEXT: sync 5867; AIX32-NEXT: rlwinm 3, 3, 0, 0, 29 5868; AIX32-NEXT: xori 5, 5, 24 5869; AIX32-NEXT: slw 6, 4, 5 5870; AIX32-NEXT: slw 7, 7, 5 5871; AIX32-NEXT: and 8, 6, 7 5872; AIX32-NEXT: L..BB10_1: # %entry 5873; AIX32-NEXT: # 5874; AIX32-NEXT: lwarx 9, 0, 3 5875; AIX32-NEXT: and 10, 9, 7 5876; AIX32-NEXT: cmplw 10, 6 5877; AIX32-NEXT: bgt 0, L..BB10_3 5878; AIX32-NEXT: # %bb.2: # %entry 5879; AIX32-NEXT: # 5880; AIX32-NEXT: andc 10, 9, 7 5881; AIX32-NEXT: or 10, 8, 10 5882; AIX32-NEXT: stwcx. 10, 0, 3 5883; AIX32-NEXT: bne 0, L..BB10_1 5884; AIX32-NEXT: L..BB10_3: # %entry 5885; AIX32-NEXT: srw 3, 9, 5 5886; AIX32-NEXT: lwsync 5887; AIX32-NEXT: clrlwi 3, 3, 24 5888; AIX32-NEXT: cmplw 3, 4 5889; AIX32-NEXT: li 3, 55 5890; AIX32-NEXT: li 4, 66 5891; AIX32-NEXT: iselgt 3, 4, 3 5892; AIX32-NEXT: blr 5893entry: 5894 %0 = atomicrmw umax ptr %ptr, i8 %val seq_cst, align 1 5895 %cmp.not = icmp ugt i8 %0, %val 5896 %conv3 = select i1 %cmp.not, i8 66, i8 55 5897 ret i8 %conv3 5898} 5899