1427 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc -mtriple=xtensa -mattr=+windowed < %s | FileCheck %s --check-prefixes=XTENSA3; RUN: llc -mtriple=xtensa -mattr=+windowed,s32c1i -mattr=+forced-atomics < %s | FileCheck %s --check-prefixes=XTENSA-ATOMIC4 5define i8 @load8(ptr %p) nounwind {6; XTENSA-LABEL: load8:7; XTENSA: # %bb.0:8; XTENSA-NEXT: entry a1, 329; XTENSA-NEXT: or a10, a2, a210; XTENSA-NEXT: movi a11, 511; XTENSA-NEXT: l32r a8, .LCPI0_012; XTENSA-NEXT: callx8 a813; XTENSA-NEXT: or a2, a10, a1014; XTENSA-NEXT: retw15;16; XTENSA-ATOMIC-LABEL: load8:17; XTENSA-ATOMIC: # %bb.0:18; XTENSA-ATOMIC-NEXT: entry a1, 3219; XTENSA-ATOMIC-NEXT: l8ui a2, a2, 020; XTENSA-ATOMIC-NEXT: memw21; XTENSA-ATOMIC-NEXT: retw22 %v = load atomic i8, ptr %p seq_cst, align 123 ret i8 %v24}25 26define void @store8(ptr %p) nounwind {27; XTENSA-LABEL: store8:28; XTENSA: # %bb.0:29; XTENSA-NEXT: entry a1, 3230; XTENSA-NEXT: or a10, a2, a231; XTENSA-NEXT: movi a11, 032; XTENSA-NEXT: movi a12, 533; XTENSA-NEXT: l32r a8, .LCPI1_034; XTENSA-NEXT: callx8 a835; XTENSA-NEXT: retw36;37; XTENSA-ATOMIC-LABEL: store8:38; XTENSA-ATOMIC: # %bb.0:39; XTENSA-ATOMIC-NEXT: entry a1, 3240; XTENSA-ATOMIC-NEXT: memw41; XTENSA-ATOMIC-NEXT: movi a8, 042; XTENSA-ATOMIC-NEXT: s8i a8, a2, 043; XTENSA-ATOMIC-NEXT: memw44; XTENSA-ATOMIC-NEXT: retw45 store atomic i8 0, ptr %p seq_cst, align 146 ret void47}48 49define i8 @rmw8(ptr %p) nounwind {50; XTENSA-LABEL: rmw8:51; XTENSA: # %bb.0:52; XTENSA-NEXT: entry a1, 3253; XTENSA-NEXT: or a10, a2, a254; XTENSA-NEXT: movi a11, 155; XTENSA-NEXT: movi a12, 556; XTENSA-NEXT: l32r a8, .LCPI2_057; XTENSA-NEXT: callx8 a858; XTENSA-NEXT: or a2, a10, a1059; XTENSA-NEXT: retw60;61; XTENSA-ATOMIC-LABEL: rmw8:62; XTENSA-ATOMIC: # %bb.0:63; XTENSA-ATOMIC-NEXT: entry a1, 3264; XTENSA-ATOMIC-NEXT: slli a8, a2, 365; XTENSA-ATOMIC-NEXT: movi a9, 2466; XTENSA-ATOMIC-NEXT: and a8, a8, a967; XTENSA-ATOMIC-NEXT: movi a9, 168; XTENSA-ATOMIC-NEXT: ssl a869; XTENSA-ATOMIC-NEXT: sll a10, a970; XTENSA-ATOMIC-NEXT: movi a11, 25571; XTENSA-ATOMIC-NEXT: ssl a872; XTENSA-ATOMIC-NEXT: sll a11, a1173; XTENSA-ATOMIC-NEXT: movi a12, -174; XTENSA-ATOMIC-NEXT: xor a12, a11, a1275; XTENSA-ATOMIC-NEXT: movi a13, -476; XTENSA-ATOMIC-NEXT: and a13, a2, a1377; XTENSA-ATOMIC-NEXT: memw78; XTENSA-ATOMIC-NEXT: l32i a15, a13, 079; XTENSA-ATOMIC-NEXT: movi a14, 080; XTENSA-ATOMIC-NEXT: j .LBB2_281; XTENSA-ATOMIC-NEXT: .LBB2_1: # %atomicrmw.start82; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB2_2 Depth=183; XTENSA-ATOMIC-NEXT: or a15, a7, a784; XTENSA-ATOMIC-NEXT: beqi a6, 1, .LBB2_485; XTENSA-ATOMIC-NEXT: .LBB2_2: # %atomicrmw.start86; XTENSA-ATOMIC-NEXT: # =>This Inner Loop Header: Depth=187; XTENSA-ATOMIC-NEXT: and a7, a15, a1288; XTENSA-ATOMIC-NEXT: add a6, a15, a1089; XTENSA-ATOMIC-NEXT: and a6, a6, a1190; XTENSA-ATOMIC-NEXT: or a7, a7, a691; XTENSA-ATOMIC-NEXT: wsr a15, scompare192; XTENSA-ATOMIC-NEXT: s32c1i a7, a13, 093; XTENSA-ATOMIC-NEXT: or a6, a9, a994; XTENSA-ATOMIC-NEXT: beq a7, a15, .LBB2_195; XTENSA-ATOMIC-NEXT: # %bb.3: # %atomicrmw.start96; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB2_2 Depth=197; XTENSA-ATOMIC-NEXT: or a6, a14, a1498; XTENSA-ATOMIC-NEXT: j .LBB2_199; XTENSA-ATOMIC-NEXT: .LBB2_4: # %atomicrmw.end100; XTENSA-ATOMIC-NEXT: ssr a8101; XTENSA-ATOMIC-NEXT: srl a2, a7102; XTENSA-ATOMIC-NEXT: memw103; XTENSA-ATOMIC-NEXT: retw104 %v = atomicrmw add ptr %p, i8 1 seq_cst, align 1105 ret i8 %v106}107 108define i8 @cmpxchg8(ptr %p) nounwind {109; XTENSA-LABEL: cmpxchg8:110; XTENSA: # %bb.0:111; XTENSA-NEXT: entry a1, 48112; XTENSA-NEXT: or a10, a2, a2113; XTENSA-NEXT: movi a8, 0114; XTENSA-NEXT: s8i a8, a1, 0115; XTENSA-NEXT: addi a11, a1, 0116; XTENSA-NEXT: movi a12, 1117; XTENSA-NEXT: movi a13, 5118; XTENSA-NEXT: l32r a8, .LCPI3_0119; XTENSA-NEXT: or a14, a13, a13120; XTENSA-NEXT: callx8 a8121; XTENSA-NEXT: l8ui a2, a1, 0122; XTENSA-NEXT: retw123;124; XTENSA-ATOMIC-LABEL: cmpxchg8:125; XTENSA-ATOMIC: # %bb.0:126; XTENSA-ATOMIC-NEXT: entry a1, 32127; XTENSA-ATOMIC-NEXT: slli a8, a2, 3128; XTENSA-ATOMIC-NEXT: movi a9, 24129; XTENSA-ATOMIC-NEXT: and a8, a8, a9130; XTENSA-ATOMIC-NEXT: movi a9, 255131; XTENSA-ATOMIC-NEXT: ssl a8132; XTENSA-ATOMIC-NEXT: sll a9, a9133; XTENSA-ATOMIC-NEXT: movi a10, -1134; XTENSA-ATOMIC-NEXT: xor a9, a9, a10135; XTENSA-ATOMIC-NEXT: movi a10, -4136; XTENSA-ATOMIC-NEXT: and a10, a2, a10137; XTENSA-ATOMIC-NEXT: memw138; XTENSA-ATOMIC-NEXT: l32i a11, a10, 0139; XTENSA-ATOMIC-NEXT: and a7, a11, a9140; XTENSA-ATOMIC-NEXT: movi a11, 1141; XTENSA-ATOMIC-NEXT: ssl a8142; XTENSA-ATOMIC-NEXT: sll a12, a11143; XTENSA-ATOMIC-NEXT: movi a13, 0144; XTENSA-ATOMIC-NEXT: .LBB3_1: # %partword.cmpxchg.loop145; XTENSA-ATOMIC-NEXT: # =>This Inner Loop Header: Depth=1146; XTENSA-ATOMIC-NEXT: or a15, a7, a7147; XTENSA-ATOMIC-NEXT: or a14, a15, a12148; XTENSA-ATOMIC-NEXT: wsr a15, scompare1149; XTENSA-ATOMIC-NEXT: s32c1i a14, a10, 0150; XTENSA-ATOMIC-NEXT: or a7, a11, a11151; XTENSA-ATOMIC-NEXT: beq a14, a15, .LBB3_3152; XTENSA-ATOMIC-NEXT: # %bb.2: # %partword.cmpxchg.loop153; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB3_1 Depth=1154; XTENSA-ATOMIC-NEXT: or a7, a13, a13155; XTENSA-ATOMIC-NEXT: .LBB3_3: # %partword.cmpxchg.loop156; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB3_1 Depth=1157; XTENSA-ATOMIC-NEXT: bnez a7, .LBB3_5158; XTENSA-ATOMIC-NEXT: # %bb.4: # %partword.cmpxchg.failure159; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB3_1 Depth=1160; XTENSA-ATOMIC-NEXT: and a7, a14, a9161; XTENSA-ATOMIC-NEXT: bne a15, a7, .LBB3_1162; XTENSA-ATOMIC-NEXT: .LBB3_5: # %partword.cmpxchg.end163; XTENSA-ATOMIC-NEXT: ssr a8164; XTENSA-ATOMIC-NEXT: srl a2, a14165; XTENSA-ATOMIC-NEXT: memw166; XTENSA-ATOMIC-NEXT: retw167 %res = cmpxchg ptr %p, i8 0, i8 1 seq_cst seq_cst168 %res.0 = extractvalue { i8, i1 } %res, 0169 ret i8 %res.0170}171 172define i16 @load16(ptr %p) nounwind {173; XTENSA-LABEL: load16:174; XTENSA: # %bb.0:175; XTENSA-NEXT: entry a1, 32176; XTENSA-NEXT: or a10, a2, a2177; XTENSA-NEXT: movi a11, 5178; XTENSA-NEXT: l32r a8, .LCPI4_0179; XTENSA-NEXT: callx8 a8180; XTENSA-NEXT: or a2, a10, a10181; XTENSA-NEXT: retw182;183; XTENSA-ATOMIC-LABEL: load16:184; XTENSA-ATOMIC: # %bb.0:185; XTENSA-ATOMIC-NEXT: entry a1, 32186; XTENSA-ATOMIC-NEXT: l16ui a2, a2, 0187; XTENSA-ATOMIC-NEXT: memw188; XTENSA-ATOMIC-NEXT: retw189 %v = load atomic i16, ptr %p seq_cst, align 2190 ret i16 %v191}192 193define void @store16(ptr %p) nounwind {194; XTENSA-LABEL: store16:195; XTENSA: # %bb.0:196; XTENSA-NEXT: entry a1, 32197; XTENSA-NEXT: or a10, a2, a2198; XTENSA-NEXT: movi a11, 0199; XTENSA-NEXT: movi a12, 5200; XTENSA-NEXT: l32r a8, .LCPI5_0201; XTENSA-NEXT: callx8 a8202; XTENSA-NEXT: retw203;204; XTENSA-ATOMIC-LABEL: store16:205; XTENSA-ATOMIC: # %bb.0:206; XTENSA-ATOMIC-NEXT: entry a1, 32207; XTENSA-ATOMIC-NEXT: memw208; XTENSA-ATOMIC-NEXT: movi a8, 0209; XTENSA-ATOMIC-NEXT: s16i a8, a2, 0210; XTENSA-ATOMIC-NEXT: memw211; XTENSA-ATOMIC-NEXT: retw212 store atomic i16 0, ptr %p seq_cst, align 2213 ret void214}215 216define i16 @rmw16(ptr %p) nounwind {217; XTENSA-LABEL: rmw16:218; XTENSA: # %bb.0:219; XTENSA-NEXT: entry a1, 32220; XTENSA-NEXT: or a10, a2, a2221; XTENSA-NEXT: movi a11, 1222; XTENSA-NEXT: movi a12, 5223; XTENSA-NEXT: l32r a8, .LCPI6_0224; XTENSA-NEXT: callx8 a8225; XTENSA-NEXT: or a2, a10, a10226; XTENSA-NEXT: retw227;228; XTENSA-ATOMIC-LABEL: rmw16:229; XTENSA-ATOMIC: # %bb.0:230; XTENSA-ATOMIC-NEXT: entry a1, 32231; XTENSA-ATOMIC-NEXT: slli a8, a2, 3232; XTENSA-ATOMIC-NEXT: movi a9, 24233; XTENSA-ATOMIC-NEXT: and a8, a8, a9234; XTENSA-ATOMIC-NEXT: movi a9, 1235; XTENSA-ATOMIC-NEXT: ssl a8236; XTENSA-ATOMIC-NEXT: sll a10, a9237; XTENSA-ATOMIC-NEXT: l32r a11, .LCPI6_0238; XTENSA-ATOMIC-NEXT: ssl a8239; XTENSA-ATOMIC-NEXT: sll a11, a11240; XTENSA-ATOMIC-NEXT: movi a12, -1241; XTENSA-ATOMIC-NEXT: xor a12, a11, a12242; XTENSA-ATOMIC-NEXT: movi a13, -4243; XTENSA-ATOMIC-NEXT: and a13, a2, a13244; XTENSA-ATOMIC-NEXT: memw245; XTENSA-ATOMIC-NEXT: l32i a15, a13, 0246; XTENSA-ATOMIC-NEXT: movi a14, 0247; XTENSA-ATOMIC-NEXT: j .LBB6_2248; XTENSA-ATOMIC-NEXT: .LBB6_1: # %atomicrmw.start249; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB6_2 Depth=1250; XTENSA-ATOMIC-NEXT: or a15, a7, a7251; XTENSA-ATOMIC-NEXT: beqi a6, 1, .LBB6_4252; XTENSA-ATOMIC-NEXT: .LBB6_2: # %atomicrmw.start253; XTENSA-ATOMIC-NEXT: # =>This Inner Loop Header: Depth=1254; XTENSA-ATOMIC-NEXT: and a7, a15, a12255; XTENSA-ATOMIC-NEXT: add a6, a15, a10256; XTENSA-ATOMIC-NEXT: and a6, a6, a11257; XTENSA-ATOMIC-NEXT: or a7, a7, a6258; XTENSA-ATOMIC-NEXT: wsr a15, scompare1259; XTENSA-ATOMIC-NEXT: s32c1i a7, a13, 0260; XTENSA-ATOMIC-NEXT: or a6, a9, a9261; XTENSA-ATOMIC-NEXT: beq a7, a15, .LBB6_1262; XTENSA-ATOMIC-NEXT: # %bb.3: # %atomicrmw.start263; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB6_2 Depth=1264; XTENSA-ATOMIC-NEXT: or a6, a14, a14265; XTENSA-ATOMIC-NEXT: j .LBB6_1266; XTENSA-ATOMIC-NEXT: .LBB6_4: # %atomicrmw.end267; XTENSA-ATOMIC-NEXT: ssr a8268; XTENSA-ATOMIC-NEXT: srl a2, a7269; XTENSA-ATOMIC-NEXT: memw270; XTENSA-ATOMIC-NEXT: retw271 %v = atomicrmw add ptr %p, i16 1 seq_cst, align 2272 ret i16 %v273}274 275define i16 @cmpxchg16(ptr %p) nounwind {276; XTENSA-LABEL: cmpxchg16:277; XTENSA: # %bb.0:278; XTENSA-NEXT: entry a1, 48279; XTENSA-NEXT: or a10, a2, a2280; XTENSA-NEXT: movi a8, 0281; XTENSA-NEXT: s16i a8, a1, 0282; XTENSA-NEXT: addi a11, a1, 0283; XTENSA-NEXT: movi a12, 1284; XTENSA-NEXT: movi a13, 5285; XTENSA-NEXT: l32r a8, .LCPI7_0286; XTENSA-NEXT: or a14, a13, a13287; XTENSA-NEXT: callx8 a8288; XTENSA-NEXT: l16ui a2, a1, 0289; XTENSA-NEXT: retw290;291; XTENSA-ATOMIC-LABEL: cmpxchg16:292; XTENSA-ATOMIC: # %bb.0:293; XTENSA-ATOMIC-NEXT: entry a1, 32294; XTENSA-ATOMIC-NEXT: slli a8, a2, 3295; XTENSA-ATOMIC-NEXT: movi a9, 24296; XTENSA-ATOMIC-NEXT: and a8, a8, a9297; XTENSA-ATOMIC-NEXT: l32r a9, .LCPI7_0298; XTENSA-ATOMIC-NEXT: ssl a8299; XTENSA-ATOMIC-NEXT: sll a9, a9300; XTENSA-ATOMIC-NEXT: movi a10, -1301; XTENSA-ATOMIC-NEXT: xor a9, a9, a10302; XTENSA-ATOMIC-NEXT: movi a10, -4303; XTENSA-ATOMIC-NEXT: and a10, a2, a10304; XTENSA-ATOMIC-NEXT: memw305; XTENSA-ATOMIC-NEXT: l32i a11, a10, 0306; XTENSA-ATOMIC-NEXT: and a7, a11, a9307; XTENSA-ATOMIC-NEXT: movi a11, 1308; XTENSA-ATOMIC-NEXT: ssl a8309; XTENSA-ATOMIC-NEXT: sll a12, a11310; XTENSA-ATOMIC-NEXT: movi a13, 0311; XTENSA-ATOMIC-NEXT: .LBB7_1: # %partword.cmpxchg.loop312; XTENSA-ATOMIC-NEXT: # =>This Inner Loop Header: Depth=1313; XTENSA-ATOMIC-NEXT: or a15, a7, a7314; XTENSA-ATOMIC-NEXT: or a14, a15, a12315; XTENSA-ATOMIC-NEXT: wsr a15, scompare1316; XTENSA-ATOMIC-NEXT: s32c1i a14, a10, 0317; XTENSA-ATOMIC-NEXT: or a7, a11, a11318; XTENSA-ATOMIC-NEXT: beq a14, a15, .LBB7_3319; XTENSA-ATOMIC-NEXT: # %bb.2: # %partword.cmpxchg.loop320; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB7_1 Depth=1321; XTENSA-ATOMIC-NEXT: or a7, a13, a13322; XTENSA-ATOMIC-NEXT: .LBB7_3: # %partword.cmpxchg.loop323; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB7_1 Depth=1324; XTENSA-ATOMIC-NEXT: bnez a7, .LBB7_5325; XTENSA-ATOMIC-NEXT: # %bb.4: # %partword.cmpxchg.failure326; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB7_1 Depth=1327; XTENSA-ATOMIC-NEXT: and a7, a14, a9328; XTENSA-ATOMIC-NEXT: bne a15, a7, .LBB7_1329; XTENSA-ATOMIC-NEXT: .LBB7_5: # %partword.cmpxchg.end330; XTENSA-ATOMIC-NEXT: ssr a8331; XTENSA-ATOMIC-NEXT: srl a2, a14332; XTENSA-ATOMIC-NEXT: memw333; XTENSA-ATOMIC-NEXT: retw334 %res = cmpxchg ptr %p, i16 0, i16 1 seq_cst seq_cst335 %res.0 = extractvalue { i16, i1 } %res, 0336 ret i16 %res.0337}338 339define i32 @load32_unordered(ptr %p) nounwind {340; XTENSA-LABEL: load32_unordered:341; XTENSA: # %bb.0:342; XTENSA-NEXT: entry a1, 32343; XTENSA-NEXT: or a10, a2, a2344; XTENSA-NEXT: movi a11, 0345; XTENSA-NEXT: l32r a8, .LCPI8_0346; XTENSA-NEXT: callx8 a8347; XTENSA-NEXT: or a2, a10, a10348; XTENSA-NEXT: retw349;350; XTENSA-ATOMIC-LABEL: load32_unordered:351; XTENSA-ATOMIC: # %bb.0:352; XTENSA-ATOMIC-NEXT: entry a1, 32353; XTENSA-ATOMIC-NEXT: l32i a2, a2, 0354; XTENSA-ATOMIC-NEXT: retw355 %v = load atomic i32, ptr %p unordered, align 4356 ret i32 %v357}358 359define i32 @load32_monotonic(ptr %p) nounwind {360; XTENSA-LABEL: load32_monotonic:361; XTENSA: # %bb.0:362; XTENSA-NEXT: entry a1, 32363; XTENSA-NEXT: or a10, a2, a2364; XTENSA-NEXT: movi a11, 0365; XTENSA-NEXT: l32r a8, .LCPI9_0366; XTENSA-NEXT: callx8 a8367; XTENSA-NEXT: or a2, a10, a10368; XTENSA-NEXT: retw369;370; XTENSA-ATOMIC-LABEL: load32_monotonic:371; XTENSA-ATOMIC: # %bb.0:372; XTENSA-ATOMIC-NEXT: entry a1, 32373; XTENSA-ATOMIC-NEXT: l32i a2, a2, 0374; XTENSA-ATOMIC-NEXT: retw375 %v = load atomic i32, ptr %p monotonic, align 4376 ret i32 %v377}378 379define i32 @load32_acquire(ptr %p) nounwind {380; XTENSA-LABEL: load32_acquire:381; XTENSA: # %bb.0:382; XTENSA-NEXT: entry a1, 32383; XTENSA-NEXT: or a10, a2, a2384; XTENSA-NEXT: movi a11, 2385; XTENSA-NEXT: l32r a8, .LCPI10_0386; XTENSA-NEXT: callx8 a8387; XTENSA-NEXT: or a2, a10, a10388; XTENSA-NEXT: retw389;390; XTENSA-ATOMIC-LABEL: load32_acquire:391; XTENSA-ATOMIC: # %bb.0:392; XTENSA-ATOMIC-NEXT: entry a1, 32393; XTENSA-ATOMIC-NEXT: l32i a2, a2, 0394; XTENSA-ATOMIC-NEXT: memw395; XTENSA-ATOMIC-NEXT: retw396 %v = load atomic i32, ptr %p acquire, align 4397 ret i32 %v398}399 400define i32 @load32_seq_cst(ptr %p) nounwind {401; XTENSA-LABEL: load32_seq_cst:402; XTENSA: # %bb.0:403; XTENSA-NEXT: entry a1, 32404; XTENSA-NEXT: or a10, a2, a2405; XTENSA-NEXT: movi a11, 5406; XTENSA-NEXT: l32r a8, .LCPI11_0407; XTENSA-NEXT: callx8 a8408; XTENSA-NEXT: or a2, a10, a10409; XTENSA-NEXT: retw410;411; XTENSA-ATOMIC-LABEL: load32_seq_cst:412; XTENSA-ATOMIC: # %bb.0:413; XTENSA-ATOMIC-NEXT: entry a1, 32414; XTENSA-ATOMIC-NEXT: l32i a2, a2, 0415; XTENSA-ATOMIC-NEXT: memw416; XTENSA-ATOMIC-NEXT: retw417 %v = load atomic i32, ptr %p seq_cst, align 4418 ret i32 %v419}420 421define void @store32_unordered(ptr %p) nounwind {422; XTENSA-LABEL: store32_unordered:423; XTENSA: # %bb.0:424; XTENSA-NEXT: entry a1, 32425; XTENSA-NEXT: or a10, a2, a2426; XTENSA-NEXT: movi a11, 0427; XTENSA-NEXT: l32r a8, .LCPI12_0428; XTENSA-NEXT: or a12, a11, a11429; XTENSA-NEXT: callx8 a8430; XTENSA-NEXT: retw431;432; XTENSA-ATOMIC-LABEL: store32_unordered:433; XTENSA-ATOMIC: # %bb.0:434; XTENSA-ATOMIC-NEXT: entry a1, 32435; XTENSA-ATOMIC-NEXT: movi a8, 0436; XTENSA-ATOMIC-NEXT: s32i a8, a2, 0437; XTENSA-ATOMIC-NEXT: retw438 store atomic i32 0, ptr %p unordered, align 4439 ret void440}441 442define void @store32_monotonic(ptr %p) nounwind {443; XTENSA-LABEL: store32_monotonic:444; XTENSA: # %bb.0:445; XTENSA-NEXT: entry a1, 32446; XTENSA-NEXT: or a10, a2, a2447; XTENSA-NEXT: movi a11, 0448; XTENSA-NEXT: l32r a8, .LCPI13_0449; XTENSA-NEXT: or a12, a11, a11450; XTENSA-NEXT: callx8 a8451; XTENSA-NEXT: retw452;453; XTENSA-ATOMIC-LABEL: store32_monotonic:454; XTENSA-ATOMIC: # %bb.0:455; XTENSA-ATOMIC-NEXT: entry a1, 32456; XTENSA-ATOMIC-NEXT: movi a8, 0457; XTENSA-ATOMIC-NEXT: s32i a8, a2, 0458; XTENSA-ATOMIC-NEXT: retw459 store atomic i32 0, ptr %p monotonic, align 4460 ret void461}462 463define void @store32_release(ptr %p) nounwind {464; XTENSA-LABEL: store32_release:465; XTENSA: # %bb.0:466; XTENSA-NEXT: entry a1, 32467; XTENSA-NEXT: or a10, a2, a2468; XTENSA-NEXT: movi a11, 0469; XTENSA-NEXT: movi a12, 3470; XTENSA-NEXT: l32r a8, .LCPI14_0471; XTENSA-NEXT: callx8 a8472; XTENSA-NEXT: retw473;474; XTENSA-ATOMIC-LABEL: store32_release:475; XTENSA-ATOMIC: # %bb.0:476; XTENSA-ATOMIC-NEXT: entry a1, 32477; XTENSA-ATOMIC-NEXT: memw478; XTENSA-ATOMIC-NEXT: movi a8, 0479; XTENSA-ATOMIC-NEXT: s32i a8, a2, 0480; XTENSA-ATOMIC-NEXT: retw481 store atomic i32 0, ptr %p release, align 4482 ret void483}484 485define void @store32_seq_cst(ptr %p) nounwind {486; XTENSA-LABEL: store32_seq_cst:487; XTENSA: # %bb.0:488; XTENSA-NEXT: entry a1, 32489; XTENSA-NEXT: or a10, a2, a2490; XTENSA-NEXT: movi a11, 0491; XTENSA-NEXT: movi a12, 5492; XTENSA-NEXT: l32r a8, .LCPI15_0493; XTENSA-NEXT: callx8 a8494; XTENSA-NEXT: retw495;496; XTENSA-ATOMIC-LABEL: store32_seq_cst:497; XTENSA-ATOMIC: # %bb.0:498; XTENSA-ATOMIC-NEXT: entry a1, 32499; XTENSA-ATOMIC-NEXT: memw500; XTENSA-ATOMIC-NEXT: movi a8, 0501; XTENSA-ATOMIC-NEXT: s32i a8, a2, 0502; XTENSA-ATOMIC-NEXT: memw503; XTENSA-ATOMIC-NEXT: retw504 store atomic i32 0, ptr %p seq_cst, align 4505 ret void506}507 508define i32 @rmw32_add_monotonic(ptr %p) nounwind {509; XTENSA-LABEL: rmw32_add_monotonic:510; XTENSA: # %bb.0:511; XTENSA-NEXT: entry a1, 32512; XTENSA-NEXT: or a10, a2, a2513; XTENSA-NEXT: movi a11, 1514; XTENSA-NEXT: movi a12, 0515; XTENSA-NEXT: l32r a8, .LCPI16_0516; XTENSA-NEXT: callx8 a8517; XTENSA-NEXT: or a2, a10, a10518; XTENSA-NEXT: retw519;520; XTENSA-ATOMIC-LABEL: rmw32_add_monotonic:521; XTENSA-ATOMIC: # %bb.0:522; XTENSA-ATOMIC-NEXT: entry a1, 32523; XTENSA-ATOMIC-NEXT: l32i a11, a2, 0524; XTENSA-ATOMIC-NEXT: movi a9, 0525; XTENSA-ATOMIC-NEXT: movi a10, 1526; XTENSA-ATOMIC-NEXT: j .LBB16_2527; XTENSA-ATOMIC-NEXT: .LBB16_1: # %atomicrmw.start528; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB16_2 Depth=1529; XTENSA-ATOMIC-NEXT: or a11, a8, a8530; XTENSA-ATOMIC-NEXT: beqi a12, 1, .LBB16_4531; XTENSA-ATOMIC-NEXT: .LBB16_2: # %atomicrmw.start532; XTENSA-ATOMIC-NEXT: # =>This Inner Loop Header: Depth=1533; XTENSA-ATOMIC-NEXT: addi a8, a11, 1534; XTENSA-ATOMIC-NEXT: wsr a11, scompare1535; XTENSA-ATOMIC-NEXT: s32c1i a8, a2, 0536; XTENSA-ATOMIC-NEXT: or a12, a10, a10537; XTENSA-ATOMIC-NEXT: beq a8, a11, .LBB16_1538; XTENSA-ATOMIC-NEXT: # %bb.3: # %atomicrmw.start539; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB16_2 Depth=1540; XTENSA-ATOMIC-NEXT: or a12, a9, a9541; XTENSA-ATOMIC-NEXT: j .LBB16_1542; XTENSA-ATOMIC-NEXT: .LBB16_4: # %atomicrmw.end543; XTENSA-ATOMIC-NEXT: or a2, a8, a8544; XTENSA-ATOMIC-NEXT: retw545 %v = atomicrmw add ptr %p, i32 1 monotonic, align 4546 ret i32 %v547}548 549define i32 @rmw32_add_seq_cst(ptr %p) nounwind {550; XTENSA-LABEL: rmw32_add_seq_cst:551; XTENSA: # %bb.0:552; XTENSA-NEXT: entry a1, 32553; XTENSA-NEXT: or a10, a2, a2554; XTENSA-NEXT: movi a11, 1555; XTENSA-NEXT: movi a12, 5556; XTENSA-NEXT: l32r a8, .LCPI17_0557; XTENSA-NEXT: callx8 a8558; XTENSA-NEXT: or a2, a10, a10559; XTENSA-NEXT: retw560;561; XTENSA-ATOMIC-LABEL: rmw32_add_seq_cst:562; XTENSA-ATOMIC: # %bb.0:563; XTENSA-ATOMIC-NEXT: entry a1, 32564; XTENSA-ATOMIC-NEXT: memw565; XTENSA-ATOMIC-NEXT: l32i a11, a2, 0566; XTENSA-ATOMIC-NEXT: movi a9, 0567; XTENSA-ATOMIC-NEXT: movi a10, 1568; XTENSA-ATOMIC-NEXT: j .LBB17_2569; XTENSA-ATOMIC-NEXT: .LBB17_1: # %atomicrmw.start570; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB17_2 Depth=1571; XTENSA-ATOMIC-NEXT: or a11, a8, a8572; XTENSA-ATOMIC-NEXT: beqi a12, 1, .LBB17_4573; XTENSA-ATOMIC-NEXT: .LBB17_2: # %atomicrmw.start574; XTENSA-ATOMIC-NEXT: # =>This Inner Loop Header: Depth=1575; XTENSA-ATOMIC-NEXT: addi a8, a11, 1576; XTENSA-ATOMIC-NEXT: wsr a11, scompare1577; XTENSA-ATOMIC-NEXT: s32c1i a8, a2, 0578; XTENSA-ATOMIC-NEXT: or a12, a10, a10579; XTENSA-ATOMIC-NEXT: beq a8, a11, .LBB17_1580; XTENSA-ATOMIC-NEXT: # %bb.3: # %atomicrmw.start581; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB17_2 Depth=1582; XTENSA-ATOMIC-NEXT: or a12, a9, a9583; XTENSA-ATOMIC-NEXT: j .LBB17_1584; XTENSA-ATOMIC-NEXT: .LBB17_4: # %atomicrmw.end585; XTENSA-ATOMIC-NEXT: memw586; XTENSA-ATOMIC-NEXT: or a2, a8, a8587; XTENSA-ATOMIC-NEXT: retw588 %v = atomicrmw add ptr %p, i32 1 seq_cst, align 4589 ret i32 %v590}591 592define i32 @rmw32_sub_seq_cst(ptr %p) nounwind {593; XTENSA-LABEL: rmw32_sub_seq_cst:594; XTENSA: # %bb.0:595; XTENSA-NEXT: entry a1, 32596; XTENSA-NEXT: or a10, a2, a2597; XTENSA-NEXT: movi a11, 1598; XTENSA-NEXT: movi a12, 5599; XTENSA-NEXT: l32r a8, .LCPI18_0600; XTENSA-NEXT: callx8 a8601; XTENSA-NEXT: or a2, a10, a10602; XTENSA-NEXT: retw603;604; XTENSA-ATOMIC-LABEL: rmw32_sub_seq_cst:605; XTENSA-ATOMIC: # %bb.0:606; XTENSA-ATOMIC-NEXT: entry a1, 32607; XTENSA-ATOMIC-NEXT: memw608; XTENSA-ATOMIC-NEXT: l32i a11, a2, 0609; XTENSA-ATOMIC-NEXT: movi a9, 0610; XTENSA-ATOMIC-NEXT: movi a10, 1611; XTENSA-ATOMIC-NEXT: j .LBB18_2612; XTENSA-ATOMIC-NEXT: .LBB18_1: # %atomicrmw.start613; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB18_2 Depth=1614; XTENSA-ATOMIC-NEXT: or a11, a8, a8615; XTENSA-ATOMIC-NEXT: beqi a12, 1, .LBB18_4616; XTENSA-ATOMIC-NEXT: .LBB18_2: # %atomicrmw.start617; XTENSA-ATOMIC-NEXT: # =>This Inner Loop Header: Depth=1618; XTENSA-ATOMIC-NEXT: addi a8, a11, -1619; XTENSA-ATOMIC-NEXT: wsr a11, scompare1620; XTENSA-ATOMIC-NEXT: s32c1i a8, a2, 0621; XTENSA-ATOMIC-NEXT: or a12, a10, a10622; XTENSA-ATOMIC-NEXT: beq a8, a11, .LBB18_1623; XTENSA-ATOMIC-NEXT: # %bb.3: # %atomicrmw.start624; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB18_2 Depth=1625; XTENSA-ATOMIC-NEXT: or a12, a9, a9626; XTENSA-ATOMIC-NEXT: j .LBB18_1627; XTENSA-ATOMIC-NEXT: .LBB18_4: # %atomicrmw.end628; XTENSA-ATOMIC-NEXT: memw629; XTENSA-ATOMIC-NEXT: or a2, a8, a8630; XTENSA-ATOMIC-NEXT: retw631 %v = atomicrmw sub ptr %p, i32 1 seq_cst, align 4632 ret i32 %v633}634 635define i32 @rmw32_and_seq_cst(ptr %p) nounwind {636; XTENSA-LABEL: rmw32_and_seq_cst:637; XTENSA: # %bb.0:638; XTENSA-NEXT: entry a1, 32639; XTENSA-NEXT: or a10, a2, a2640; XTENSA-NEXT: movi a11, 1641; XTENSA-NEXT: movi a12, 5642; XTENSA-NEXT: l32r a8, .LCPI19_0643; XTENSA-NEXT: callx8 a8644; XTENSA-NEXT: or a2, a10, a10645; XTENSA-NEXT: retw646;647; XTENSA-ATOMIC-LABEL: rmw32_and_seq_cst:648; XTENSA-ATOMIC: # %bb.0:649; XTENSA-ATOMIC-NEXT: entry a1, 32650; XTENSA-ATOMIC-NEXT: memw651; XTENSA-ATOMIC-NEXT: l32i a11, a2, 0652; XTENSA-ATOMIC-NEXT: movi a9, 1653; XTENSA-ATOMIC-NEXT: movi a10, 0654; XTENSA-ATOMIC-NEXT: j .LBB19_2655; XTENSA-ATOMIC-NEXT: .LBB19_1: # %atomicrmw.start656; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB19_2 Depth=1657; XTENSA-ATOMIC-NEXT: or a11, a8, a8658; XTENSA-ATOMIC-NEXT: beqi a12, 1, .LBB19_4659; XTENSA-ATOMIC-NEXT: .LBB19_2: # %atomicrmw.start660; XTENSA-ATOMIC-NEXT: # =>This Inner Loop Header: Depth=1661; XTENSA-ATOMIC-NEXT: and a8, a11, a9662; XTENSA-ATOMIC-NEXT: wsr a11, scompare1663; XTENSA-ATOMIC-NEXT: s32c1i a8, a2, 0664; XTENSA-ATOMIC-NEXT: or a12, a9, a9665; XTENSA-ATOMIC-NEXT: beq a8, a11, .LBB19_1666; XTENSA-ATOMIC-NEXT: # %bb.3: # %atomicrmw.start667; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB19_2 Depth=1668; XTENSA-ATOMIC-NEXT: or a12, a10, a10669; XTENSA-ATOMIC-NEXT: j .LBB19_1670; XTENSA-ATOMIC-NEXT: .LBB19_4: # %atomicrmw.end671; XTENSA-ATOMIC-NEXT: memw672; XTENSA-ATOMIC-NEXT: or a2, a8, a8673; XTENSA-ATOMIC-NEXT: retw674 %v = atomicrmw and ptr %p, i32 1 seq_cst, align 4675 ret i32 %v676}677 678define i32 @rmw32_nand_seq_cst(ptr %p) nounwind {679; XTENSA-LABEL: rmw32_nand_seq_cst:680; XTENSA: # %bb.0:681; XTENSA-NEXT: entry a1, 32682; XTENSA-NEXT: or a10, a2, a2683; XTENSA-NEXT: movi a11, 1684; XTENSA-NEXT: movi a12, 5685; XTENSA-NEXT: l32r a8, .LCPI20_0686; XTENSA-NEXT: callx8 a8687; XTENSA-NEXT: or a2, a10, a10688; XTENSA-NEXT: retw689;690; XTENSA-ATOMIC-LABEL: rmw32_nand_seq_cst:691; XTENSA-ATOMIC: # %bb.0:692; XTENSA-ATOMIC-NEXT: entry a1, 32693; XTENSA-ATOMIC-NEXT: memw694; XTENSA-ATOMIC-NEXT: l32i a13, a2, 0695; XTENSA-ATOMIC-NEXT: movi a9, -1696; XTENSA-ATOMIC-NEXT: movi a10, -2697; XTENSA-ATOMIC-NEXT: movi a11, 0698; XTENSA-ATOMIC-NEXT: movi a12, 1699; XTENSA-ATOMIC-NEXT: j .LBB20_2700; XTENSA-ATOMIC-NEXT: .LBB20_1: # %atomicrmw.start701; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB20_2 Depth=1702; XTENSA-ATOMIC-NEXT: or a13, a8, a8703; XTENSA-ATOMIC-NEXT: beqi a14, 1, .LBB20_4704; XTENSA-ATOMIC-NEXT: .LBB20_2: # %atomicrmw.start705; XTENSA-ATOMIC-NEXT: # =>This Inner Loop Header: Depth=1706; XTENSA-ATOMIC-NEXT: xor a8, a13, a9707; XTENSA-ATOMIC-NEXT: or a8, a8, a10708; XTENSA-ATOMIC-NEXT: wsr a13, scompare1709; XTENSA-ATOMIC-NEXT: s32c1i a8, a2, 0710; XTENSA-ATOMIC-NEXT: or a14, a12, a12711; XTENSA-ATOMIC-NEXT: beq a8, a13, .LBB20_1712; XTENSA-ATOMIC-NEXT: # %bb.3: # %atomicrmw.start713; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB20_2 Depth=1714; XTENSA-ATOMIC-NEXT: or a14, a11, a11715; XTENSA-ATOMIC-NEXT: j .LBB20_1716; XTENSA-ATOMIC-NEXT: .LBB20_4: # %atomicrmw.end717; XTENSA-ATOMIC-NEXT: memw718; XTENSA-ATOMIC-NEXT: or a2, a8, a8719; XTENSA-ATOMIC-NEXT: retw720 %v = atomicrmw nand ptr %p, i32 1 seq_cst, align 4721 ret i32 %v722}723 724define i32 @rmw32_or_seq_cst(ptr %p) nounwind {725; XTENSA-LABEL: rmw32_or_seq_cst:726; XTENSA: # %bb.0:727; XTENSA-NEXT: entry a1, 32728; XTENSA-NEXT: or a10, a2, a2729; XTENSA-NEXT: movi a11, 1730; XTENSA-NEXT: movi a12, 5731; XTENSA-NEXT: l32r a8, .LCPI21_0732; XTENSA-NEXT: callx8 a8733; XTENSA-NEXT: or a2, a10, a10734; XTENSA-NEXT: retw735;736; XTENSA-ATOMIC-LABEL: rmw32_or_seq_cst:737; XTENSA-ATOMIC: # %bb.0:738; XTENSA-ATOMIC-NEXT: entry a1, 32739; XTENSA-ATOMIC-NEXT: memw740; XTENSA-ATOMIC-NEXT: l32i a11, a2, 0741; XTENSA-ATOMIC-NEXT: movi a9, 1742; XTENSA-ATOMIC-NEXT: movi a10, 0743; XTENSA-ATOMIC-NEXT: j .LBB21_2744; XTENSA-ATOMIC-NEXT: .LBB21_1: # %atomicrmw.start745; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB21_2 Depth=1746; XTENSA-ATOMIC-NEXT: or a11, a8, a8747; XTENSA-ATOMIC-NEXT: beqi a12, 1, .LBB21_4748; XTENSA-ATOMIC-NEXT: .LBB21_2: # %atomicrmw.start749; XTENSA-ATOMIC-NEXT: # =>This Inner Loop Header: Depth=1750; XTENSA-ATOMIC-NEXT: or a8, a11, a9751; XTENSA-ATOMIC-NEXT: wsr a11, scompare1752; XTENSA-ATOMIC-NEXT: s32c1i a8, a2, 0753; XTENSA-ATOMIC-NEXT: or a12, a9, a9754; XTENSA-ATOMIC-NEXT: beq a8, a11, .LBB21_1755; XTENSA-ATOMIC-NEXT: # %bb.3: # %atomicrmw.start756; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB21_2 Depth=1757; XTENSA-ATOMIC-NEXT: or a12, a10, a10758; XTENSA-ATOMIC-NEXT: j .LBB21_1759; XTENSA-ATOMIC-NEXT: .LBB21_4: # %atomicrmw.end760; XTENSA-ATOMIC-NEXT: memw761; XTENSA-ATOMIC-NEXT: or a2, a8, a8762; XTENSA-ATOMIC-NEXT: retw763 %v = atomicrmw or ptr %p, i32 1 seq_cst, align 4764 ret i32 %v765}766 767define i32 @rmw32_xor_seq_cst(ptr %p) nounwind {768; XTENSA-LABEL: rmw32_xor_seq_cst:769; XTENSA: # %bb.0:770; XTENSA-NEXT: entry a1, 32771; XTENSA-NEXT: or a10, a2, a2772; XTENSA-NEXT: movi a11, 1773; XTENSA-NEXT: movi a12, 5774; XTENSA-NEXT: l32r a8, .LCPI22_0775; XTENSA-NEXT: callx8 a8776; XTENSA-NEXT: or a2, a10, a10777; XTENSA-NEXT: retw778;779; XTENSA-ATOMIC-LABEL: rmw32_xor_seq_cst:780; XTENSA-ATOMIC: # %bb.0:781; XTENSA-ATOMIC-NEXT: entry a1, 32782; XTENSA-ATOMIC-NEXT: memw783; XTENSA-ATOMIC-NEXT: l32i a11, a2, 0784; XTENSA-ATOMIC-NEXT: movi a9, 1785; XTENSA-ATOMIC-NEXT: movi a10, 0786; XTENSA-ATOMIC-NEXT: j .LBB22_2787; XTENSA-ATOMIC-NEXT: .LBB22_1: # %atomicrmw.start788; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB22_2 Depth=1789; XTENSA-ATOMIC-NEXT: or a11, a8, a8790; XTENSA-ATOMIC-NEXT: beqi a12, 1, .LBB22_4791; XTENSA-ATOMIC-NEXT: .LBB22_2: # %atomicrmw.start792; XTENSA-ATOMIC-NEXT: # =>This Inner Loop Header: Depth=1793; XTENSA-ATOMIC-NEXT: xor a8, a11, a9794; XTENSA-ATOMIC-NEXT: wsr a11, scompare1795; XTENSA-ATOMIC-NEXT: s32c1i a8, a2, 0796; XTENSA-ATOMIC-NEXT: or a12, a9, a9797; XTENSA-ATOMIC-NEXT: beq a8, a11, .LBB22_1798; XTENSA-ATOMIC-NEXT: # %bb.3: # %atomicrmw.start799; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB22_2 Depth=1800; XTENSA-ATOMIC-NEXT: or a12, a10, a10801; XTENSA-ATOMIC-NEXT: j .LBB22_1802; XTENSA-ATOMIC-NEXT: .LBB22_4: # %atomicrmw.end803; XTENSA-ATOMIC-NEXT: memw804; XTENSA-ATOMIC-NEXT: or a2, a8, a8805; XTENSA-ATOMIC-NEXT: retw806 %v = atomicrmw xor ptr %p, i32 1 seq_cst, align 4807 ret i32 %v808}809 810define i32 @rmw32_max_seq_cst(ptr %p) nounwind {811; XTENSA-LABEL: rmw32_max_seq_cst:812; XTENSA: # %bb.0:813; XTENSA-NEXT: entry a1, 48814; XTENSA-NEXT: or a6, a2, a2815; XTENSA-NEXT: l32i a2, a6, 0816; XTENSA-NEXT: movi a5, 1817; XTENSA-NEXT: movi a7, 5818; XTENSA-NEXT: l32r a4, .LCPI23_0819; XTENSA-NEXT: j .LBB23_2820; XTENSA-NEXT: .LBB23_1: # %atomicrmw.start821; XTENSA-NEXT: # in Loop: Header=BB23_2 Depth=1822; XTENSA-NEXT: addi a11, a1, 0823; XTENSA-NEXT: or a10, a6, a6824; XTENSA-NEXT: or a13, a7, a7825; XTENSA-NEXT: or a14, a7, a7826; XTENSA-NEXT: callx8 a4827; XTENSA-NEXT: l32i a2, a1, 0828; XTENSA-NEXT: bnez a10, .LBB23_4829; XTENSA-NEXT: .LBB23_2: # %atomicrmw.start830; XTENSA-NEXT: # =>This Inner Loop Header: Depth=1831; XTENSA-NEXT: s32i a2, a1, 0832; XTENSA-NEXT: or a12, a5, a5833; XTENSA-NEXT: bge a5, a2, .LBB23_1834; XTENSA-NEXT: # %bb.3: # %atomicrmw.start835; XTENSA-NEXT: # in Loop: Header=BB23_2 Depth=1836; XTENSA-NEXT: or a12, a2, a2837; XTENSA-NEXT: j .LBB23_1838; XTENSA-NEXT: .LBB23_4: # %atomicrmw.end839; XTENSA-NEXT: retw840;841; XTENSA-ATOMIC-LABEL: rmw32_max_seq_cst:842; XTENSA-ATOMIC: # %bb.0:843; XTENSA-ATOMIC-NEXT: entry a1, 32844; XTENSA-ATOMIC-NEXT: memw845; XTENSA-ATOMIC-NEXT: l32i a11, a2, 0846; XTENSA-ATOMIC-NEXT: movi a9, 1847; XTENSA-ATOMIC-NEXT: movi a10, 0848; XTENSA-ATOMIC-NEXT: j .LBB23_2849; XTENSA-ATOMIC-NEXT: .LBB23_1: # %atomicrmw.start850; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB23_2 Depth=1851; XTENSA-ATOMIC-NEXT: or a11, a8, a8852; XTENSA-ATOMIC-NEXT: beqi a12, 1, .LBB23_6853; XTENSA-ATOMIC-NEXT: .LBB23_2: # %atomicrmw.start854; XTENSA-ATOMIC-NEXT: # =>This Inner Loop Header: Depth=1855; XTENSA-ATOMIC-NEXT: or a8, a9, a9856; XTENSA-ATOMIC-NEXT: bge a9, a11, .LBB23_4857; XTENSA-ATOMIC-NEXT: # %bb.3: # %atomicrmw.start858; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB23_2 Depth=1859; XTENSA-ATOMIC-NEXT: or a8, a11, a11860; XTENSA-ATOMIC-NEXT: .LBB23_4: # %atomicrmw.start861; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB23_2 Depth=1862; XTENSA-ATOMIC-NEXT: wsr a11, scompare1863; XTENSA-ATOMIC-NEXT: s32c1i a8, a2, 0864; XTENSA-ATOMIC-NEXT: or a12, a9, a9865; XTENSA-ATOMIC-NEXT: beq a8, a11, .LBB23_1866; XTENSA-ATOMIC-NEXT: # %bb.5: # %atomicrmw.start867; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB23_2 Depth=1868; XTENSA-ATOMIC-NEXT: or a12, a10, a10869; XTENSA-ATOMIC-NEXT: j .LBB23_1870; XTENSA-ATOMIC-NEXT: .LBB23_6: # %atomicrmw.end871; XTENSA-ATOMIC-NEXT: memw872; XTENSA-ATOMIC-NEXT: or a2, a8, a8873; XTENSA-ATOMIC-NEXT: retw874 %v = atomicrmw max ptr %p, i32 1 seq_cst, align 4875 ret i32 %v876}877 878define i32 @rmw32_min_seq_cst(ptr %p) nounwind {879; XTENSA-LABEL: rmw32_min_seq_cst:880; XTENSA: # %bb.0:881; XTENSA-NEXT: entry a1, 48882; XTENSA-NEXT: l32i a12, a2, 0883; XTENSA-NEXT: movi a6, 1884; XTENSA-NEXT: movi a5, 2885; XTENSA-NEXT: movi a7, 5886; XTENSA-NEXT: l32r a4, .LCPI24_0887; XTENSA-NEXT: j .LBB24_2888; XTENSA-NEXT: .LBB24_1: # %atomicrmw.start889; XTENSA-NEXT: # in Loop: Header=BB24_2 Depth=1890; XTENSA-NEXT: addi a11, a1, 0891; XTENSA-NEXT: or a10, a2, a2892; XTENSA-NEXT: or a13, a7, a7893; XTENSA-NEXT: or a14, a7, a7894; XTENSA-NEXT: callx8 a4895; XTENSA-NEXT: l32i a12, a1, 0896; XTENSA-NEXT: bnez a10, .LBB24_4897; XTENSA-NEXT: .LBB24_2: # %atomicrmw.start898; XTENSA-NEXT: # =>This Inner Loop Header: Depth=1899; XTENSA-NEXT: s32i a12, a1, 0900; XTENSA-NEXT: blt a12, a5, .LBB24_1901; XTENSA-NEXT: # %bb.3: # %atomicrmw.start902; XTENSA-NEXT: # in Loop: Header=BB24_2 Depth=1903; XTENSA-NEXT: or a12, a6, a6904; XTENSA-NEXT: j .LBB24_1905; XTENSA-NEXT: .LBB24_4: # %atomicrmw.end906; XTENSA-NEXT: or a2, a12, a12907; XTENSA-NEXT: retw908;909; XTENSA-ATOMIC-LABEL: rmw32_min_seq_cst:910; XTENSA-ATOMIC: # %bb.0:911; XTENSA-ATOMIC-NEXT: entry a1, 32912; XTENSA-ATOMIC-NEXT: memw913; XTENSA-ATOMIC-NEXT: l32i a12, a2, 0914; XTENSA-ATOMIC-NEXT: movi a9, 1915; XTENSA-ATOMIC-NEXT: movi a10, 2916; XTENSA-ATOMIC-NEXT: movi a11, 0917; XTENSA-ATOMIC-NEXT: or a8, a12, a12918; XTENSA-ATOMIC-NEXT: j .LBB24_2919; XTENSA-ATOMIC-NEXT: .LBB24_1: # %atomicrmw.start920; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB24_2 Depth=1921; XTENSA-ATOMIC-NEXT: or a12, a8, a8922; XTENSA-ATOMIC-NEXT: beqi a13, 1, .LBB24_6923; XTENSA-ATOMIC-NEXT: .LBB24_2: # %atomicrmw.start924; XTENSA-ATOMIC-NEXT: # =>This Inner Loop Header: Depth=1925; XTENSA-ATOMIC-NEXT: blt a12, a10, .LBB24_4926; XTENSA-ATOMIC-NEXT: # %bb.3: # %atomicrmw.start927; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB24_2 Depth=1928; XTENSA-ATOMIC-NEXT: or a8, a9, a9929; XTENSA-ATOMIC-NEXT: .LBB24_4: # %atomicrmw.start930; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB24_2 Depth=1931; XTENSA-ATOMIC-NEXT: wsr a12, scompare1932; XTENSA-ATOMIC-NEXT: s32c1i a8, a2, 0933; XTENSA-ATOMIC-NEXT: or a13, a9, a9934; XTENSA-ATOMIC-NEXT: beq a8, a12, .LBB24_1935; XTENSA-ATOMIC-NEXT: # %bb.5: # %atomicrmw.start936; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB24_2 Depth=1937; XTENSA-ATOMIC-NEXT: or a13, a11, a11938; XTENSA-ATOMIC-NEXT: j .LBB24_1939; XTENSA-ATOMIC-NEXT: .LBB24_6: # %atomicrmw.end940; XTENSA-ATOMIC-NEXT: memw941; XTENSA-ATOMIC-NEXT: or a2, a8, a8942; XTENSA-ATOMIC-NEXT: retw943 %v = atomicrmw min ptr %p, i32 1 seq_cst, align 4944 ret i32 %v945}946 947define i32 @rmw32_umax_seq_cst(ptr %p) nounwind {948; XTENSA-LABEL: rmw32_umax_seq_cst:949; XTENSA: # %bb.0:950; XTENSA-NEXT: entry a1, 48951; XTENSA-NEXT: or a6, a2, a2952; XTENSA-NEXT: l32i a2, a6, 0953; XTENSA-NEXT: movi a5, 1954; XTENSA-NEXT: movi a7, 5955; XTENSA-NEXT: l32r a4, .LCPI25_0956; XTENSA-NEXT: j .LBB25_2957; XTENSA-NEXT: .LBB25_1: # %atomicrmw.start958; XTENSA-NEXT: # in Loop: Header=BB25_2 Depth=1959; XTENSA-NEXT: addi a11, a1, 0960; XTENSA-NEXT: or a10, a6, a6961; XTENSA-NEXT: or a13, a7, a7962; XTENSA-NEXT: or a14, a7, a7963; XTENSA-NEXT: callx8 a4964; XTENSA-NEXT: l32i a2, a1, 0965; XTENSA-NEXT: bnez a10, .LBB25_4966; XTENSA-NEXT: .LBB25_2: # %atomicrmw.start967; XTENSA-NEXT: # =>This Inner Loop Header: Depth=1968; XTENSA-NEXT: s32i a2, a1, 0969; XTENSA-NEXT: or a12, a5, a5970; XTENSA-NEXT: bgeu a5, a2, .LBB25_1971; XTENSA-NEXT: # %bb.3: # %atomicrmw.start972; XTENSA-NEXT: # in Loop: Header=BB25_2 Depth=1973; XTENSA-NEXT: or a12, a2, a2974; XTENSA-NEXT: j .LBB25_1975; XTENSA-NEXT: .LBB25_4: # %atomicrmw.end976; XTENSA-NEXT: retw977;978; XTENSA-ATOMIC-LABEL: rmw32_umax_seq_cst:979; XTENSA-ATOMIC: # %bb.0:980; XTENSA-ATOMIC-NEXT: entry a1, 32981; XTENSA-ATOMIC-NEXT: memw982; XTENSA-ATOMIC-NEXT: l32i a11, a2, 0983; XTENSA-ATOMIC-NEXT: movi a9, 1984; XTENSA-ATOMIC-NEXT: movi a10, 0985; XTENSA-ATOMIC-NEXT: j .LBB25_2986; XTENSA-ATOMIC-NEXT: .LBB25_1: # %atomicrmw.start987; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB25_2 Depth=1988; XTENSA-ATOMIC-NEXT: or a11, a8, a8989; XTENSA-ATOMIC-NEXT: beqi a12, 1, .LBB25_6990; XTENSA-ATOMIC-NEXT: .LBB25_2: # %atomicrmw.start991; XTENSA-ATOMIC-NEXT: # =>This Inner Loop Header: Depth=1992; XTENSA-ATOMIC-NEXT: or a8, a9, a9993; XTENSA-ATOMIC-NEXT: bgeu a9, a11, .LBB25_4994; XTENSA-ATOMIC-NEXT: # %bb.3: # %atomicrmw.start995; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB25_2 Depth=1996; XTENSA-ATOMIC-NEXT: or a8, a11, a11997; XTENSA-ATOMIC-NEXT: .LBB25_4: # %atomicrmw.start998; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB25_2 Depth=1999; XTENSA-ATOMIC-NEXT: wsr a11, scompare11000; XTENSA-ATOMIC-NEXT: s32c1i a8, a2, 01001; XTENSA-ATOMIC-NEXT: or a12, a9, a91002; XTENSA-ATOMIC-NEXT: beq a8, a11, .LBB25_11003; XTENSA-ATOMIC-NEXT: # %bb.5: # %atomicrmw.start1004; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB25_2 Depth=11005; XTENSA-ATOMIC-NEXT: or a12, a10, a101006; XTENSA-ATOMIC-NEXT: j .LBB25_11007; XTENSA-ATOMIC-NEXT: .LBB25_6: # %atomicrmw.end1008; XTENSA-ATOMIC-NEXT: memw1009; XTENSA-ATOMIC-NEXT: or a2, a8, a81010; XTENSA-ATOMIC-NEXT: retw1011 %v = atomicrmw umax ptr %p, i32 1 seq_cst, align 41012 ret i32 %v1013}1014 1015define i32 @rmw32_umin_seq_cst(ptr %p) nounwind {1016; XTENSA-LABEL: rmw32_umin_seq_cst:1017; XTENSA: # %bb.0:1018; XTENSA-NEXT: entry a1, 481019; XTENSA-NEXT: l32i a12, a2, 01020; XTENSA-NEXT: movi a6, 11021; XTENSA-NEXT: movi a5, 21022; XTENSA-NEXT: movi a7, 51023; XTENSA-NEXT: l32r a4, .LCPI26_01024; XTENSA-NEXT: j .LBB26_21025; XTENSA-NEXT: .LBB26_1: # %atomicrmw.start1026; XTENSA-NEXT: # in Loop: Header=BB26_2 Depth=11027; XTENSA-NEXT: addi a11, a1, 01028; XTENSA-NEXT: or a10, a2, a21029; XTENSA-NEXT: or a13, a7, a71030; XTENSA-NEXT: or a14, a7, a71031; XTENSA-NEXT: callx8 a41032; XTENSA-NEXT: l32i a12, a1, 01033; XTENSA-NEXT: bnez a10, .LBB26_41034; XTENSA-NEXT: .LBB26_2: # %atomicrmw.start1035; XTENSA-NEXT: # =>This Inner Loop Header: Depth=11036; XTENSA-NEXT: s32i a12, a1, 01037; XTENSA-NEXT: bltu a12, a5, .LBB26_11038; XTENSA-NEXT: # %bb.3: # %atomicrmw.start1039; XTENSA-NEXT: # in Loop: Header=BB26_2 Depth=11040; XTENSA-NEXT: or a12, a6, a61041; XTENSA-NEXT: j .LBB26_11042; XTENSA-NEXT: .LBB26_4: # %atomicrmw.end1043; XTENSA-NEXT: or a2, a12, a121044; XTENSA-NEXT: retw1045;1046; XTENSA-ATOMIC-LABEL: rmw32_umin_seq_cst:1047; XTENSA-ATOMIC: # %bb.0:1048; XTENSA-ATOMIC-NEXT: entry a1, 321049; XTENSA-ATOMIC-NEXT: memw1050; XTENSA-ATOMIC-NEXT: l32i a12, a2, 01051; XTENSA-ATOMIC-NEXT: movi a9, 11052; XTENSA-ATOMIC-NEXT: movi a10, 21053; XTENSA-ATOMIC-NEXT: movi a11, 01054; XTENSA-ATOMIC-NEXT: or a8, a12, a121055; XTENSA-ATOMIC-NEXT: j .LBB26_21056; XTENSA-ATOMIC-NEXT: .LBB26_1: # %atomicrmw.start1057; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB26_2 Depth=11058; XTENSA-ATOMIC-NEXT: or a12, a8, a81059; XTENSA-ATOMIC-NEXT: beqi a13, 1, .LBB26_61060; XTENSA-ATOMIC-NEXT: .LBB26_2: # %atomicrmw.start1061; XTENSA-ATOMIC-NEXT: # =>This Inner Loop Header: Depth=11062; XTENSA-ATOMIC-NEXT: bltu a12, a10, .LBB26_41063; XTENSA-ATOMIC-NEXT: # %bb.3: # %atomicrmw.start1064; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB26_2 Depth=11065; XTENSA-ATOMIC-NEXT: or a8, a9, a91066; XTENSA-ATOMIC-NEXT: .LBB26_4: # %atomicrmw.start1067; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB26_2 Depth=11068; XTENSA-ATOMIC-NEXT: wsr a12, scompare11069; XTENSA-ATOMIC-NEXT: s32c1i a8, a2, 01070; XTENSA-ATOMIC-NEXT: or a13, a9, a91071; XTENSA-ATOMIC-NEXT: beq a8, a12, .LBB26_11072; XTENSA-ATOMIC-NEXT: # %bb.5: # %atomicrmw.start1073; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB26_2 Depth=11074; XTENSA-ATOMIC-NEXT: or a13, a11, a111075; XTENSA-ATOMIC-NEXT: j .LBB26_11076; XTENSA-ATOMIC-NEXT: .LBB26_6: # %atomicrmw.end1077; XTENSA-ATOMIC-NEXT: memw1078; XTENSA-ATOMIC-NEXT: or a2, a8, a81079; XTENSA-ATOMIC-NEXT: retw1080 %v = atomicrmw umin ptr %p, i32 1 seq_cst, align 41081 ret i32 %v1082}1083 1084define i32 @rmw32_xchg_seq_cst(ptr %p) nounwind {1085; XTENSA-LABEL: rmw32_xchg_seq_cst:1086; XTENSA: # %bb.0:1087; XTENSA-NEXT: entry a1, 321088; XTENSA-NEXT: or a10, a2, a21089; XTENSA-NEXT: movi a11, 11090; XTENSA-NEXT: movi a12, 51091; XTENSA-NEXT: l32r a8, .LCPI27_01092; XTENSA-NEXT: callx8 a81093; XTENSA-NEXT: or a2, a10, a101094; XTENSA-NEXT: retw1095;1096; XTENSA-ATOMIC-LABEL: rmw32_xchg_seq_cst:1097; XTENSA-ATOMIC: # %bb.0:1098; XTENSA-ATOMIC-NEXT: entry a1, 321099; XTENSA-ATOMIC-NEXT: memw1100; XTENSA-ATOMIC-NEXT: l32i a11, a2, 01101; XTENSA-ATOMIC-NEXT: movi a9, 11102; XTENSA-ATOMIC-NEXT: movi a10, 01103; XTENSA-ATOMIC-NEXT: j .LBB27_21104; XTENSA-ATOMIC-NEXT: .LBB27_1: # %atomicrmw.start1105; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB27_2 Depth=11106; XTENSA-ATOMIC-NEXT: or a11, a8, a81107; XTENSA-ATOMIC-NEXT: beqi a12, 1, .LBB27_41108; XTENSA-ATOMIC-NEXT: .LBB27_2: # %atomicrmw.start1109; XTENSA-ATOMIC-NEXT: # =>This Inner Loop Header: Depth=11110; XTENSA-ATOMIC-NEXT: wsr a11, scompare11111; XTENSA-ATOMIC-NEXT: or a8, a9, a91112; XTENSA-ATOMIC-NEXT: s32c1i a8, a2, 01113; XTENSA-ATOMIC-NEXT: or a12, a9, a91114; XTENSA-ATOMIC-NEXT: beq a8, a11, .LBB27_11115; XTENSA-ATOMIC-NEXT: # %bb.3: # %atomicrmw.start1116; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB27_2 Depth=11117; XTENSA-ATOMIC-NEXT: or a12, a10, a101118; XTENSA-ATOMIC-NEXT: j .LBB27_11119; XTENSA-ATOMIC-NEXT: .LBB27_4: # %atomicrmw.end1120; XTENSA-ATOMIC-NEXT: memw1121; XTENSA-ATOMIC-NEXT: or a2, a8, a81122; XTENSA-ATOMIC-NEXT: retw1123 %v = atomicrmw xchg ptr %p, i32 1 seq_cst, align 41124 ret i32 %v1125}1126 1127define float @rmw32_fadd_seq_cst(ptr %p) nounwind {1128; XTENSA-LABEL: rmw32_fadd_seq_cst:1129; XTENSA: # %bb.0:1130; XTENSA-NEXT: entry a1, 481131; XTENSA-NEXT: l32i a10, a2, 01132; XTENSA-NEXT: l32r a6, .LCPI28_11133; XTENSA-NEXT: movi a7, 51134; XTENSA-NEXT: l32r a5, .LCPI28_21135; XTENSA-NEXT: .LBB28_1: # %atomicrmw.start1136; XTENSA-NEXT: # =>This Inner Loop Header: Depth=11137; XTENSA-NEXT: s32i a10, a1, 01138; XTENSA-NEXT: l32r a11, .LCPI28_01139; XTENSA-NEXT: callx8 a61140; XTENSA-NEXT: or a12, a10, a101141; XTENSA-NEXT: addi a11, a1, 01142; XTENSA-NEXT: or a10, a2, a21143; XTENSA-NEXT: or a13, a7, a71144; XTENSA-NEXT: or a14, a7, a71145; XTENSA-NEXT: callx8 a51146; XTENSA-NEXT: or a8, a10, a101147; XTENSA-NEXT: l32i a10, a1, 01148; XTENSA-NEXT: beqz a8, .LBB28_11149; XTENSA-NEXT: # %bb.2: # %atomicrmw.end1150; XTENSA-NEXT: or a2, a10, a101151; XTENSA-NEXT: retw1152;1153; XTENSA-ATOMIC-LABEL: rmw32_fadd_seq_cst:1154; XTENSA-ATOMIC: # %bb.0:1155; XTENSA-ATOMIC-NEXT: entry a1, 321156; XTENSA-ATOMIC-NEXT: memw1157; XTENSA-ATOMIC-NEXT: l32i a7, a2, 01158; XTENSA-ATOMIC-NEXT: l32r a6, .LCPI28_11159; XTENSA-ATOMIC-NEXT: movi a5, 01160; XTENSA-ATOMIC-NEXT: movi a4, 11161; XTENSA-ATOMIC-NEXT: j .LBB28_21162; XTENSA-ATOMIC-NEXT: .LBB28_1: # %atomicrmw.start1163; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB28_2 Depth=11164; XTENSA-ATOMIC-NEXT: or a7, a10, a101165; XTENSA-ATOMIC-NEXT: beqi a8, 1, .LBB28_41166; XTENSA-ATOMIC-NEXT: .LBB28_2: # %atomicrmw.start1167; XTENSA-ATOMIC-NEXT: # =>This Inner Loop Header: Depth=11168; XTENSA-ATOMIC-NEXT: l32r a11, .LCPI28_01169; XTENSA-ATOMIC-NEXT: or a10, a7, a71170; XTENSA-ATOMIC-NEXT: callx8 a61171; XTENSA-ATOMIC-NEXT: wsr a7, scompare11172; XTENSA-ATOMIC-NEXT: s32c1i a10, a2, 01173; XTENSA-ATOMIC-NEXT: or a8, a4, a41174; XTENSA-ATOMIC-NEXT: beq a10, a7, .LBB28_11175; XTENSA-ATOMIC-NEXT: # %bb.3: # %atomicrmw.start1176; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB28_2 Depth=11177; XTENSA-ATOMIC-NEXT: or a8, a5, a51178; XTENSA-ATOMIC-NEXT: j .LBB28_11179; XTENSA-ATOMIC-NEXT: .LBB28_4: # %atomicrmw.end1180; XTENSA-ATOMIC-NEXT: memw1181; XTENSA-ATOMIC-NEXT: or a2, a10, a101182; XTENSA-ATOMIC-NEXT: retw1183 %v = atomicrmw fadd ptr %p, float 1.0 seq_cst, align 41184 ret float %v1185}1186 1187define float @rmw32_fsub_seq_cst(ptr %p) nounwind {1188; XTENSA-LABEL: rmw32_fsub_seq_cst:1189; XTENSA: # %bb.0:1190; XTENSA-NEXT: entry a1, 481191; XTENSA-NEXT: l32i a10, a2, 01192; XTENSA-NEXT: l32r a6, .LCPI29_11193; XTENSA-NEXT: movi a7, 51194; XTENSA-NEXT: l32r a5, .LCPI29_21195; XTENSA-NEXT: .LBB29_1: # %atomicrmw.start1196; XTENSA-NEXT: # =>This Inner Loop Header: Depth=11197; XTENSA-NEXT: s32i a10, a1, 01198; XTENSA-NEXT: l32r a11, .LCPI29_01199; XTENSA-NEXT: callx8 a61200; XTENSA-NEXT: or a12, a10, a101201; XTENSA-NEXT: addi a11, a1, 01202; XTENSA-NEXT: or a10, a2, a21203; XTENSA-NEXT: or a13, a7, a71204; XTENSA-NEXT: or a14, a7, a71205; XTENSA-NEXT: callx8 a51206; XTENSA-NEXT: or a8, a10, a101207; XTENSA-NEXT: l32i a10, a1, 01208; XTENSA-NEXT: beqz a8, .LBB29_11209; XTENSA-NEXT: # %bb.2: # %atomicrmw.end1210; XTENSA-NEXT: or a2, a10, a101211; XTENSA-NEXT: retw1212;1213; XTENSA-ATOMIC-LABEL: rmw32_fsub_seq_cst:1214; XTENSA-ATOMIC: # %bb.0:1215; XTENSA-ATOMIC-NEXT: entry a1, 321216; XTENSA-ATOMIC-NEXT: memw1217; XTENSA-ATOMIC-NEXT: l32i a7, a2, 01218; XTENSA-ATOMIC-NEXT: l32r a6, .LCPI29_11219; XTENSA-ATOMIC-NEXT: movi a5, 01220; XTENSA-ATOMIC-NEXT: movi a4, 11221; XTENSA-ATOMIC-NEXT: j .LBB29_21222; XTENSA-ATOMIC-NEXT: .LBB29_1: # %atomicrmw.start1223; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB29_2 Depth=11224; XTENSA-ATOMIC-NEXT: or a7, a10, a101225; XTENSA-ATOMIC-NEXT: beqi a8, 1, .LBB29_41226; XTENSA-ATOMIC-NEXT: .LBB29_2: # %atomicrmw.start1227; XTENSA-ATOMIC-NEXT: # =>This Inner Loop Header: Depth=11228; XTENSA-ATOMIC-NEXT: l32r a11, .LCPI29_01229; XTENSA-ATOMIC-NEXT: or a10, a7, a71230; XTENSA-ATOMIC-NEXT: callx8 a61231; XTENSA-ATOMIC-NEXT: wsr a7, scompare11232; XTENSA-ATOMIC-NEXT: s32c1i a10, a2, 01233; XTENSA-ATOMIC-NEXT: or a8, a4, a41234; XTENSA-ATOMIC-NEXT: beq a10, a7, .LBB29_11235; XTENSA-ATOMIC-NEXT: # %bb.3: # %atomicrmw.start1236; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB29_2 Depth=11237; XTENSA-ATOMIC-NEXT: or a8, a5, a51238; XTENSA-ATOMIC-NEXT: j .LBB29_11239; XTENSA-ATOMIC-NEXT: .LBB29_4: # %atomicrmw.end1240; XTENSA-ATOMIC-NEXT: memw1241; XTENSA-ATOMIC-NEXT: or a2, a10, a101242; XTENSA-ATOMIC-NEXT: retw1243 %v = atomicrmw fsub ptr %p, float 1.0 seq_cst, align 41244 ret float %v1245}1246 1247define float @rmw32_fmin_seq_cst(ptr %p) nounwind {1248; XTENSA-LABEL: rmw32_fmin_seq_cst:1249; XTENSA: # %bb.0:1250; XTENSA-NEXT: entry a1, 481251; XTENSA-NEXT: l32i a10, a2, 01252; XTENSA-NEXT: l32r a6, .LCPI30_11253; XTENSA-NEXT: movi a7, 51254; XTENSA-NEXT: l32r a5, .LCPI30_21255; XTENSA-NEXT: .LBB30_1: # %atomicrmw.start1256; XTENSA-NEXT: # =>This Inner Loop Header: Depth=11257; XTENSA-NEXT: s32i a10, a1, 01258; XTENSA-NEXT: l32r a11, .LCPI30_01259; XTENSA-NEXT: callx8 a61260; XTENSA-NEXT: or a12, a10, a101261; XTENSA-NEXT: addi a11, a1, 01262; XTENSA-NEXT: or a10, a2, a21263; XTENSA-NEXT: or a13, a7, a71264; XTENSA-NEXT: or a14, a7, a71265; XTENSA-NEXT: callx8 a51266; XTENSA-NEXT: or a8, a10, a101267; XTENSA-NEXT: l32i a10, a1, 01268; XTENSA-NEXT: beqz a8, .LBB30_11269; XTENSA-NEXT: # %bb.2: # %atomicrmw.end1270; XTENSA-NEXT: or a2, a10, a101271; XTENSA-NEXT: retw1272;1273; XTENSA-ATOMIC-LABEL: rmw32_fmin_seq_cst:1274; XTENSA-ATOMIC: # %bb.0:1275; XTENSA-ATOMIC-NEXT: entry a1, 321276; XTENSA-ATOMIC-NEXT: memw1277; XTENSA-ATOMIC-NEXT: l32i a7, a2, 01278; XTENSA-ATOMIC-NEXT: l32r a6, .LCPI30_11279; XTENSA-ATOMIC-NEXT: movi a5, 01280; XTENSA-ATOMIC-NEXT: movi a4, 11281; XTENSA-ATOMIC-NEXT: j .LBB30_21282; XTENSA-ATOMIC-NEXT: .LBB30_1: # %atomicrmw.start1283; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB30_2 Depth=11284; XTENSA-ATOMIC-NEXT: or a7, a10, a101285; XTENSA-ATOMIC-NEXT: beqi a8, 1, .LBB30_41286; XTENSA-ATOMIC-NEXT: .LBB30_2: # %atomicrmw.start1287; XTENSA-ATOMIC-NEXT: # =>This Inner Loop Header: Depth=11288; XTENSA-ATOMIC-NEXT: l32r a11, .LCPI30_01289; XTENSA-ATOMIC-NEXT: or a10, a7, a71290; XTENSA-ATOMIC-NEXT: callx8 a61291; XTENSA-ATOMIC-NEXT: wsr a7, scompare11292; XTENSA-ATOMIC-NEXT: s32c1i a10, a2, 01293; XTENSA-ATOMIC-NEXT: or a8, a4, a41294; XTENSA-ATOMIC-NEXT: beq a10, a7, .LBB30_11295; XTENSA-ATOMIC-NEXT: # %bb.3: # %atomicrmw.start1296; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB30_2 Depth=11297; XTENSA-ATOMIC-NEXT: or a8, a5, a51298; XTENSA-ATOMIC-NEXT: j .LBB30_11299; XTENSA-ATOMIC-NEXT: .LBB30_4: # %atomicrmw.end1300; XTENSA-ATOMIC-NEXT: memw1301; XTENSA-ATOMIC-NEXT: or a2, a10, a101302; XTENSA-ATOMIC-NEXT: retw1303 %v = atomicrmw fmin ptr %p, float 1.0 seq_cst, align 41304 ret float %v1305}1306 1307define float @rmw32_fmax_seq_cst(ptr %p) nounwind {1308; XTENSA-LABEL: rmw32_fmax_seq_cst:1309; XTENSA: # %bb.0:1310; XTENSA-NEXT: entry a1, 481311; XTENSA-NEXT: l32i a10, a2, 01312; XTENSA-NEXT: l32r a6, .LCPI31_11313; XTENSA-NEXT: movi a7, 51314; XTENSA-NEXT: l32r a5, .LCPI31_21315; XTENSA-NEXT: .LBB31_1: # %atomicrmw.start1316; XTENSA-NEXT: # =>This Inner Loop Header: Depth=11317; XTENSA-NEXT: s32i a10, a1, 01318; XTENSA-NEXT: l32r a11, .LCPI31_01319; XTENSA-NEXT: callx8 a61320; XTENSA-NEXT: or a12, a10, a101321; XTENSA-NEXT: addi a11, a1, 01322; XTENSA-NEXT: or a10, a2, a21323; XTENSA-NEXT: or a13, a7, a71324; XTENSA-NEXT: or a14, a7, a71325; XTENSA-NEXT: callx8 a51326; XTENSA-NEXT: or a8, a10, a101327; XTENSA-NEXT: l32i a10, a1, 01328; XTENSA-NEXT: beqz a8, .LBB31_11329; XTENSA-NEXT: # %bb.2: # %atomicrmw.end1330; XTENSA-NEXT: or a2, a10, a101331; XTENSA-NEXT: retw1332;1333; XTENSA-ATOMIC-LABEL: rmw32_fmax_seq_cst:1334; XTENSA-ATOMIC: # %bb.0:1335; XTENSA-ATOMIC-NEXT: entry a1, 321336; XTENSA-ATOMIC-NEXT: memw1337; XTENSA-ATOMIC-NEXT: l32i a7, a2, 01338; XTENSA-ATOMIC-NEXT: l32r a6, .LCPI31_11339; XTENSA-ATOMIC-NEXT: movi a5, 01340; XTENSA-ATOMIC-NEXT: movi a4, 11341; XTENSA-ATOMIC-NEXT: j .LBB31_21342; XTENSA-ATOMIC-NEXT: .LBB31_1: # %atomicrmw.start1343; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB31_2 Depth=11344; XTENSA-ATOMIC-NEXT: or a7, a10, a101345; XTENSA-ATOMIC-NEXT: beqi a8, 1, .LBB31_41346; XTENSA-ATOMIC-NEXT: .LBB31_2: # %atomicrmw.start1347; XTENSA-ATOMIC-NEXT: # =>This Inner Loop Header: Depth=11348; XTENSA-ATOMIC-NEXT: l32r a11, .LCPI31_01349; XTENSA-ATOMIC-NEXT: or a10, a7, a71350; XTENSA-ATOMIC-NEXT: callx8 a61351; XTENSA-ATOMIC-NEXT: wsr a7, scompare11352; XTENSA-ATOMIC-NEXT: s32c1i a10, a2, 01353; XTENSA-ATOMIC-NEXT: or a8, a4, a41354; XTENSA-ATOMIC-NEXT: beq a10, a7, .LBB31_11355; XTENSA-ATOMIC-NEXT: # %bb.3: # %atomicrmw.start1356; XTENSA-ATOMIC-NEXT: # in Loop: Header=BB31_2 Depth=11357; XTENSA-ATOMIC-NEXT: or a8, a5, a51358; XTENSA-ATOMIC-NEXT: j .LBB31_11359; XTENSA-ATOMIC-NEXT: .LBB31_4: # %atomicrmw.end1360; XTENSA-ATOMIC-NEXT: memw1361; XTENSA-ATOMIC-NEXT: or a2, a10, a101362; XTENSA-ATOMIC-NEXT: retw1363 %v = atomicrmw fmax ptr %p, float 1.0 seq_cst, align 41364 ret float %v1365}1366 1367define i32 @cmpxchg32_monotonic(ptr %p) nounwind {1368; XTENSA-LABEL: cmpxchg32_monotonic:1369; XTENSA: # %bb.0:1370; XTENSA-NEXT: entry a1, 481371; XTENSA-NEXT: or a10, a2, a21372; XTENSA-NEXT: movi a13, 01373; XTENSA-NEXT: s32i a13, a1, 01374; XTENSA-NEXT: addi a11, a1, 01375; XTENSA-NEXT: movi a12, 11376; XTENSA-NEXT: l32r a8, .LCPI32_01377; XTENSA-NEXT: or a14, a13, a131378; XTENSA-NEXT: callx8 a81379; XTENSA-NEXT: l32i a2, a1, 01380; XTENSA-NEXT: retw1381;1382; XTENSA-ATOMIC-LABEL: cmpxchg32_monotonic:1383; XTENSA-ATOMIC: # %bb.0:1384; XTENSA-ATOMIC-NEXT: entry a1, 321385; XTENSA-ATOMIC-NEXT: movi a8, 11386; XTENSA-ATOMIC-NEXT: movi a9, 01387; XTENSA-ATOMIC-NEXT: wsr a9, scompare11388; XTENSA-ATOMIC-NEXT: s32c1i a8, a2, 01389; XTENSA-ATOMIC-NEXT: or a2, a8, a81390; XTENSA-ATOMIC-NEXT: retw1391 %res = cmpxchg ptr %p, i32 0, i32 1 monotonic monotonic1392 %res.0 = extractvalue { i32, i1 } %res, 01393 ret i32 %res.01394}1395 1396define i32 @cmpxchg32_seq_cst(ptr %p) nounwind {1397; XTENSA-LABEL: cmpxchg32_seq_cst:1398; XTENSA: # %bb.0:1399; XTENSA-NEXT: entry a1, 481400; XTENSA-NEXT: or a10, a2, a21401; XTENSA-NEXT: movi a8, 01402; XTENSA-NEXT: s32i a8, a1, 01403; XTENSA-NEXT: addi a11, a1, 01404; XTENSA-NEXT: movi a12, 11405; XTENSA-NEXT: movi a13, 51406; XTENSA-NEXT: l32r a8, .LCPI33_01407; XTENSA-NEXT: or a14, a13, a131408; XTENSA-NEXT: callx8 a81409; XTENSA-NEXT: l32i a2, a1, 01410; XTENSA-NEXT: retw1411;1412; XTENSA-ATOMIC-LABEL: cmpxchg32_seq_cst:1413; XTENSA-ATOMIC: # %bb.0:1414; XTENSA-ATOMIC-NEXT: entry a1, 321415; XTENSA-ATOMIC-NEXT: memw1416; XTENSA-ATOMIC-NEXT: movi a8, 11417; XTENSA-ATOMIC-NEXT: movi a9, 01418; XTENSA-ATOMIC-NEXT: wsr a9, scompare11419; XTENSA-ATOMIC-NEXT: s32c1i a8, a2, 01420; XTENSA-ATOMIC-NEXT: memw1421; XTENSA-ATOMIC-NEXT: or a2, a8, a81422; XTENSA-ATOMIC-NEXT: retw1423 %res = cmpxchg ptr %p, i32 0, i32 1 seq_cst seq_cst1424 %res.0 = extractvalue { i32, i1 } %res, 01425 ret i32 %res.01426}1427