499 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=xtensa -mattr=+windowed < %s | FileCheck %s --check-prefixes=XTENSA3; RUN: llc -mtriple=xtensa -mattr=+windowed,s32c1i < %s | FileCheck %s --check-prefixes=XTENSA-ATOMIC4 5define i8 @atomic_load_i8_unordered(ptr %a) nounwind {6; XTENSA-LABEL: atomic_load_i8_unordered:7; XTENSA: # %bb.0:8; XTENSA-NEXT: entry a1, 329; XTENSA-NEXT: or a10, a2, a210; XTENSA-NEXT: movi a11, 011; XTENSA-NEXT: l32r a8, .LCPI0_012; XTENSA-NEXT: callx8 a813; XTENSA-NEXT: or a2, a10, a1014; XTENSA-NEXT: retw15;16; XTENSA-ATOMIC-LABEL: atomic_load_i8_unordered:17; XTENSA-ATOMIC: # %bb.0:18; XTENSA-ATOMIC-NEXT: entry a1, 3219; XTENSA-ATOMIC-NEXT: l8ui a2, a2, 020; XTENSA-ATOMIC-NEXT: retw21 %1 = load atomic i8, ptr %a unordered, align 122 ret i8 %123}24 25define i8 @atomic_load_i8_monotonic(ptr %a) nounwind {26; XTENSA-LABEL: atomic_load_i8_monotonic:27; XTENSA: # %bb.0:28; XTENSA-NEXT: entry a1, 3229; XTENSA-NEXT: or a10, a2, a230; XTENSA-NEXT: movi a11, 031; XTENSA-NEXT: l32r a8, .LCPI1_032; XTENSA-NEXT: callx8 a833; XTENSA-NEXT: or a2, a10, a1034; XTENSA-NEXT: retw35;36; XTENSA-ATOMIC-LABEL: atomic_load_i8_monotonic:37; XTENSA-ATOMIC: # %bb.0:38; XTENSA-ATOMIC-NEXT: entry a1, 3239; XTENSA-ATOMIC-NEXT: l8ui a2, a2, 040; XTENSA-ATOMIC-NEXT: retw41 %1 = load atomic i8, ptr %a monotonic, align 142 ret i8 %143}44 45define i8 @atomic_load_i8_acquire(ptr %a) nounwind {46; XTENSA-LABEL: atomic_load_i8_acquire:47; XTENSA: # %bb.0:48; XTENSA-NEXT: entry a1, 3249; XTENSA-NEXT: or a10, a2, a250; XTENSA-NEXT: movi a11, 251; XTENSA-NEXT: l32r a8, .LCPI2_052; XTENSA-NEXT: callx8 a853; XTENSA-NEXT: or a2, a10, a1054; XTENSA-NEXT: retw55;56; XTENSA-ATOMIC-LABEL: atomic_load_i8_acquire:57; XTENSA-ATOMIC: # %bb.0:58; XTENSA-ATOMIC-NEXT: entry a1, 3259; XTENSA-ATOMIC-NEXT: l8ui a2, a2, 060; XTENSA-ATOMIC-NEXT: memw61; XTENSA-ATOMIC-NEXT: retw62 %1 = load atomic i8, ptr %a acquire, align 163 ret i8 %164}65 66define i8 @atomic_load_i8_seq_cst(ptr %a) nounwind {67; XTENSA-LABEL: atomic_load_i8_seq_cst:68; XTENSA: # %bb.0:69; XTENSA-NEXT: entry a1, 3270; XTENSA-NEXT: or a10, a2, a271; XTENSA-NEXT: movi a11, 572; XTENSA-NEXT: l32r a8, .LCPI3_073; XTENSA-NEXT: callx8 a874; XTENSA-NEXT: or a2, a10, a1075; XTENSA-NEXT: retw76;77; XTENSA-ATOMIC-LABEL: atomic_load_i8_seq_cst:78; XTENSA-ATOMIC: # %bb.0:79; XTENSA-ATOMIC-NEXT: entry a1, 3280; XTENSA-ATOMIC-NEXT: l8ui a2, a2, 081; XTENSA-ATOMIC-NEXT: memw82; XTENSA-ATOMIC-NEXT: retw83 %1 = load atomic i8, ptr %a seq_cst, align 184 ret i8 %185}86 87define i16 @atomic_load_i16_unordered(ptr %a) nounwind {88; XTENSA-LABEL: atomic_load_i16_unordered:89; XTENSA: # %bb.0:90; XTENSA-NEXT: entry a1, 3291; XTENSA-NEXT: or a10, a2, a292; XTENSA-NEXT: movi a11, 093; XTENSA-NEXT: l32r a8, .LCPI4_094; XTENSA-NEXT: callx8 a895; XTENSA-NEXT: or a2, a10, a1096; XTENSA-NEXT: retw97;98; XTENSA-ATOMIC-LABEL: atomic_load_i16_unordered:99; XTENSA-ATOMIC: # %bb.0:100; XTENSA-ATOMIC-NEXT: entry a1, 32101; XTENSA-ATOMIC-NEXT: l16ui a2, a2, 0102; XTENSA-ATOMIC-NEXT: retw103 %1 = load atomic i16, ptr %a unordered, align 2104 ret i16 %1105}106 107define i16 @atomic_load_i16_monotonic(ptr %a) nounwind {108; XTENSA-LABEL: atomic_load_i16_monotonic:109; XTENSA: # %bb.0:110; XTENSA-NEXT: entry a1, 32111; XTENSA-NEXT: or a10, a2, a2112; XTENSA-NEXT: movi a11, 0113; XTENSA-NEXT: l32r a8, .LCPI5_0114; XTENSA-NEXT: callx8 a8115; XTENSA-NEXT: or a2, a10, a10116; XTENSA-NEXT: retw117;118; XTENSA-ATOMIC-LABEL: atomic_load_i16_monotonic:119; XTENSA-ATOMIC: # %bb.0:120; XTENSA-ATOMIC-NEXT: entry a1, 32121; XTENSA-ATOMIC-NEXT: l16ui a2, a2, 0122; XTENSA-ATOMIC-NEXT: retw123 %1 = load atomic i16, ptr %a monotonic, align 2124 ret i16 %1125}126 127define i16 @atomic_load_i16_acquire(ptr %a) nounwind {128; XTENSA-LABEL: atomic_load_i16_acquire:129; XTENSA: # %bb.0:130; XTENSA-NEXT: entry a1, 32131; XTENSA-NEXT: or a10, a2, a2132; XTENSA-NEXT: movi a11, 2133; XTENSA-NEXT: l32r a8, .LCPI6_0134; XTENSA-NEXT: callx8 a8135; XTENSA-NEXT: or a2, a10, a10136; XTENSA-NEXT: retw137;138; XTENSA-ATOMIC-LABEL: atomic_load_i16_acquire:139; XTENSA-ATOMIC: # %bb.0:140; XTENSA-ATOMIC-NEXT: entry a1, 32141; XTENSA-ATOMIC-NEXT: l16ui a2, a2, 0142; XTENSA-ATOMIC-NEXT: memw143; XTENSA-ATOMIC-NEXT: retw144 %1 = load atomic i16, ptr %a acquire, align 2145 ret i16 %1146}147 148define i16 @atomic_load_i16_seq_cst(ptr %a) nounwind {149; XTENSA-LABEL: atomic_load_i16_seq_cst:150; XTENSA: # %bb.0:151; XTENSA-NEXT: entry a1, 32152; XTENSA-NEXT: or a10, a2, a2153; XTENSA-NEXT: movi a11, 5154; XTENSA-NEXT: l32r a8, .LCPI7_0155; XTENSA-NEXT: callx8 a8156; XTENSA-NEXT: or a2, a10, a10157; XTENSA-NEXT: retw158;159; XTENSA-ATOMIC-LABEL: atomic_load_i16_seq_cst:160; XTENSA-ATOMIC: # %bb.0:161; XTENSA-ATOMIC-NEXT: entry a1, 32162; XTENSA-ATOMIC-NEXT: l16ui a2, a2, 0163; XTENSA-ATOMIC-NEXT: memw164; XTENSA-ATOMIC-NEXT: retw165 %1 = load atomic i16, ptr %a seq_cst, align 2166 ret i16 %1167}168 169define i32 @atomic_load_i32_unordered(ptr %a) nounwind {170; XTENSA-LABEL: atomic_load_i32_unordered:171; XTENSA: # %bb.0:172; XTENSA-NEXT: entry a1, 32173; XTENSA-NEXT: or a10, a2, a2174; XTENSA-NEXT: movi a11, 0175; XTENSA-NEXT: l32r a8, .LCPI8_0176; XTENSA-NEXT: callx8 a8177; XTENSA-NEXT: or a2, a10, a10178; XTENSA-NEXT: retw179;180; XTENSA-ATOMIC-LABEL: atomic_load_i32_unordered:181; XTENSA-ATOMIC: # %bb.0:182; XTENSA-ATOMIC-NEXT: entry a1, 32183; XTENSA-ATOMIC-NEXT: l32i a2, a2, 0184; XTENSA-ATOMIC-NEXT: retw185 %1 = load atomic i32, ptr %a unordered, align 4186 ret i32 %1187}188 189define i32 @atomic_load_i32_monotonic(ptr %a) nounwind {190; XTENSA-LABEL: atomic_load_i32_monotonic:191; XTENSA: # %bb.0:192; XTENSA-NEXT: entry a1, 32193; XTENSA-NEXT: or a10, a2, a2194; XTENSA-NEXT: movi a11, 0195; XTENSA-NEXT: l32r a8, .LCPI9_0196; XTENSA-NEXT: callx8 a8197; XTENSA-NEXT: or a2, a10, a10198; XTENSA-NEXT: retw199;200; XTENSA-ATOMIC-LABEL: atomic_load_i32_monotonic:201; XTENSA-ATOMIC: # %bb.0:202; XTENSA-ATOMIC-NEXT: entry a1, 32203; XTENSA-ATOMIC-NEXT: l32i a2, a2, 0204; XTENSA-ATOMIC-NEXT: retw205 %1 = load atomic i32, ptr %a monotonic, align 4206 ret i32 %1207}208 209define i32 @atomic_load_i32_acquire(ptr %a) nounwind {210; XTENSA-LABEL: atomic_load_i32_acquire:211; XTENSA: # %bb.0:212; XTENSA-NEXT: entry a1, 32213; XTENSA-NEXT: or a10, a2, a2214; XTENSA-NEXT: movi a11, 2215; XTENSA-NEXT: l32r a8, .LCPI10_0216; XTENSA-NEXT: callx8 a8217; XTENSA-NEXT: or a2, a10, a10218; XTENSA-NEXT: retw219;220; XTENSA-ATOMIC-LABEL: atomic_load_i32_acquire:221; XTENSA-ATOMIC: # %bb.0:222; XTENSA-ATOMIC-NEXT: entry a1, 32223; XTENSA-ATOMIC-NEXT: l32i a2, a2, 0224; XTENSA-ATOMIC-NEXT: memw225; XTENSA-ATOMIC-NEXT: retw226 %1 = load atomic i32, ptr %a acquire, align 4227 ret i32 %1228}229 230define i32 @atomic_load_i32_seq_cst(ptr %a) nounwind {231; XTENSA-LABEL: atomic_load_i32_seq_cst:232; XTENSA: # %bb.0:233; XTENSA-NEXT: entry a1, 32234; XTENSA-NEXT: or a10, a2, a2235; XTENSA-NEXT: movi a11, 5236; XTENSA-NEXT: l32r a8, .LCPI11_0237; XTENSA-NEXT: callx8 a8238; XTENSA-NEXT: or a2, a10, a10239; XTENSA-NEXT: retw240;241; XTENSA-ATOMIC-LABEL: atomic_load_i32_seq_cst:242; XTENSA-ATOMIC: # %bb.0:243; XTENSA-ATOMIC-NEXT: entry a1, 32244; XTENSA-ATOMIC-NEXT: l32i a2, a2, 0245; XTENSA-ATOMIC-NEXT: memw246; XTENSA-ATOMIC-NEXT: retw247 %1 = load atomic i32, ptr %a seq_cst, align 4248 ret i32 %1249}250 251define void @atomic_store_i8_unordered(ptr %a, i8 %b) nounwind {252; XTENSA-LABEL: atomic_store_i8_unordered:253; XTENSA: # %bb.0:254; XTENSA-NEXT: entry a1, 32255; XTENSA-NEXT: or a11, a3, a3256; XTENSA-NEXT: or a10, a2, a2257; XTENSA-NEXT: movi a12, 0258; XTENSA-NEXT: l32r a8, .LCPI12_0259; XTENSA-NEXT: callx8 a8260; XTENSA-NEXT: retw261;262; XTENSA-ATOMIC-LABEL: atomic_store_i8_unordered:263; XTENSA-ATOMIC: # %bb.0:264; XTENSA-ATOMIC-NEXT: entry a1, 32265; XTENSA-ATOMIC-NEXT: s8i a3, a2, 0266; XTENSA-ATOMIC-NEXT: retw267 store atomic i8 %b, ptr %a unordered, align 1268 ret void269}270 271define void @atomic_store_i8_monotonic(ptr %a, i8 %b) nounwind {272; XTENSA-LABEL: atomic_store_i8_monotonic:273; XTENSA: # %bb.0:274; XTENSA-NEXT: entry a1, 32275; XTENSA-NEXT: or a11, a3, a3276; XTENSA-NEXT: or a10, a2, a2277; XTENSA-NEXT: movi a12, 0278; XTENSA-NEXT: l32r a8, .LCPI13_0279; XTENSA-NEXT: callx8 a8280; XTENSA-NEXT: retw281;282; XTENSA-ATOMIC-LABEL: atomic_store_i8_monotonic:283; XTENSA-ATOMIC: # %bb.0:284; XTENSA-ATOMIC-NEXT: entry a1, 32285; XTENSA-ATOMIC-NEXT: s8i a3, a2, 0286; XTENSA-ATOMIC-NEXT: retw287 store atomic i8 %b, ptr %a monotonic, align 1288 ret void289}290 291define void @atomic_store_i8_release(ptr %a, i8 %b) nounwind {292; XTENSA-LABEL: atomic_store_i8_release:293; XTENSA: # %bb.0:294; XTENSA-NEXT: entry a1, 32295; XTENSA-NEXT: or a11, a3, a3296; XTENSA-NEXT: or a10, a2, a2297; XTENSA-NEXT: movi a12, 3298; XTENSA-NEXT: l32r a8, .LCPI14_0299; XTENSA-NEXT: callx8 a8300; XTENSA-NEXT: retw301;302; XTENSA-ATOMIC-LABEL: atomic_store_i8_release:303; XTENSA-ATOMIC: # %bb.0:304; XTENSA-ATOMIC-NEXT: entry a1, 32305; XTENSA-ATOMIC-NEXT: memw306; XTENSA-ATOMIC-NEXT: s8i a3, a2, 0307; XTENSA-ATOMIC-NEXT: retw308 store atomic i8 %b, ptr %a release, align 1309 ret void310}311 312define void @atomic_store_i8_seq_cst(ptr %a, i8 %b) nounwind {313; XTENSA-LABEL: atomic_store_i8_seq_cst:314; XTENSA: # %bb.0:315; XTENSA-NEXT: entry a1, 32316; XTENSA-NEXT: or a11, a3, a3317; XTENSA-NEXT: or a10, a2, a2318; XTENSA-NEXT: movi a12, 5319; XTENSA-NEXT: l32r a8, .LCPI15_0320; XTENSA-NEXT: callx8 a8321; XTENSA-NEXT: retw322;323; XTENSA-ATOMIC-LABEL: atomic_store_i8_seq_cst:324; XTENSA-ATOMIC: # %bb.0:325; XTENSA-ATOMIC-NEXT: entry a1, 32326; XTENSA-ATOMIC-NEXT: memw327; XTENSA-ATOMIC-NEXT: s8i a3, a2, 0328; XTENSA-ATOMIC-NEXT: memw329; XTENSA-ATOMIC-NEXT: retw330 store atomic i8 %b, ptr %a seq_cst, align 1331 ret void332}333 334define void @atomic_store_i16_unordered(ptr %a, i16 %b) nounwind {335; XTENSA-LABEL: atomic_store_i16_unordered:336; XTENSA: # %bb.0:337; XTENSA-NEXT: entry a1, 32338; XTENSA-NEXT: or a11, a3, a3339; XTENSA-NEXT: or a10, a2, a2340; XTENSA-NEXT: movi a12, 0341; XTENSA-NEXT: l32r a8, .LCPI16_0342; XTENSA-NEXT: callx8 a8343; XTENSA-NEXT: retw344;345; XTENSA-ATOMIC-LABEL: atomic_store_i16_unordered:346; XTENSA-ATOMIC: # %bb.0:347; XTENSA-ATOMIC-NEXT: entry a1, 32348; XTENSA-ATOMIC-NEXT: s16i a3, a2, 0349; XTENSA-ATOMIC-NEXT: retw350 store atomic i16 %b, ptr %a unordered, align 2351 ret void352}353 354define void @atomic_store_i16_monotonic(ptr %a, i16 %b) nounwind {355; XTENSA-LABEL: atomic_store_i16_monotonic:356; XTENSA: # %bb.0:357; XTENSA-NEXT: entry a1, 32358; XTENSA-NEXT: or a11, a3, a3359; XTENSA-NEXT: or a10, a2, a2360; XTENSA-NEXT: movi a12, 0361; XTENSA-NEXT: l32r a8, .LCPI17_0362; XTENSA-NEXT: callx8 a8363; XTENSA-NEXT: retw364;365; XTENSA-ATOMIC-LABEL: atomic_store_i16_monotonic:366; XTENSA-ATOMIC: # %bb.0:367; XTENSA-ATOMIC-NEXT: entry a1, 32368; XTENSA-ATOMIC-NEXT: s16i a3, a2, 0369; XTENSA-ATOMIC-NEXT: retw370 store atomic i16 %b, ptr %a monotonic, align 2371 ret void372}373 374define void @atomic_store_i16_release(ptr %a, i16 %b) nounwind {375; XTENSA-LABEL: atomic_store_i16_release:376; XTENSA: # %bb.0:377; XTENSA-NEXT: entry a1, 32378; XTENSA-NEXT: or a11, a3, a3379; XTENSA-NEXT: or a10, a2, a2380; XTENSA-NEXT: movi a12, 3381; XTENSA-NEXT: l32r a8, .LCPI18_0382; XTENSA-NEXT: callx8 a8383; XTENSA-NEXT: retw384;385; XTENSA-ATOMIC-LABEL: atomic_store_i16_release:386; XTENSA-ATOMIC: # %bb.0:387; XTENSA-ATOMIC-NEXT: entry a1, 32388; XTENSA-ATOMIC-NEXT: memw389; XTENSA-ATOMIC-NEXT: s16i a3, a2, 0390; XTENSA-ATOMIC-NEXT: retw391 store atomic i16 %b, ptr %a release, align 2392 ret void393}394 395define void @atomic_store_i16_seq_cst(ptr %a, i16 %b) nounwind {396; XTENSA-LABEL: atomic_store_i16_seq_cst:397; XTENSA: # %bb.0:398; XTENSA-NEXT: entry a1, 32399; XTENSA-NEXT: or a11, a3, a3400; XTENSA-NEXT: or a10, a2, a2401; XTENSA-NEXT: movi a12, 5402; XTENSA-NEXT: l32r a8, .LCPI19_0403; XTENSA-NEXT: callx8 a8404; XTENSA-NEXT: retw405;406; XTENSA-ATOMIC-LABEL: atomic_store_i16_seq_cst:407; XTENSA-ATOMIC: # %bb.0:408; XTENSA-ATOMIC-NEXT: entry a1, 32409; XTENSA-ATOMIC-NEXT: memw410; XTENSA-ATOMIC-NEXT: s16i a3, a2, 0411; XTENSA-ATOMIC-NEXT: memw412; XTENSA-ATOMIC-NEXT: retw413 store atomic i16 %b, ptr %a seq_cst, align 2414 ret void415}416 417define void @atomic_store_i32_unordered(ptr %a, i32 %b) nounwind {418; XTENSA-LABEL: atomic_store_i32_unordered:419; XTENSA: # %bb.0:420; XTENSA-NEXT: entry a1, 32421; XTENSA-NEXT: or a11, a3, a3422; XTENSA-NEXT: or a10, a2, a2423; XTENSA-NEXT: movi a12, 0424; XTENSA-NEXT: l32r a8, .LCPI20_0425; XTENSA-NEXT: callx8 a8426; XTENSA-NEXT: retw427;428; XTENSA-ATOMIC-LABEL: atomic_store_i32_unordered:429; XTENSA-ATOMIC: # %bb.0:430; XTENSA-ATOMIC-NEXT: entry a1, 32431; XTENSA-ATOMIC-NEXT: s32i a3, a2, 0432; XTENSA-ATOMIC-NEXT: retw433 store atomic i32 %b, ptr %a unordered, align 4434 ret void435}436 437define void @atomic_store_i32_monotonic(ptr %a, i32 %b) nounwind {438; XTENSA-LABEL: atomic_store_i32_monotonic:439; XTENSA: # %bb.0:440; XTENSA-NEXT: entry a1, 32441; XTENSA-NEXT: or a11, a3, a3442; XTENSA-NEXT: or a10, a2, a2443; XTENSA-NEXT: movi a12, 0444; XTENSA-NEXT: l32r a8, .LCPI21_0445; XTENSA-NEXT: callx8 a8446; XTENSA-NEXT: retw447;448; XTENSA-ATOMIC-LABEL: atomic_store_i32_monotonic:449; XTENSA-ATOMIC: # %bb.0:450; XTENSA-ATOMIC-NEXT: entry a1, 32451; XTENSA-ATOMIC-NEXT: s32i a3, a2, 0452; XTENSA-ATOMIC-NEXT: retw453 store atomic i32 %b, ptr %a monotonic, align 4454 ret void455}456 457define void @atomic_store_i32_release(ptr %a, i32 %b) nounwind {458; XTENSA-LABEL: atomic_store_i32_release:459; XTENSA: # %bb.0:460; XTENSA-NEXT: entry a1, 32461; XTENSA-NEXT: or a11, a3, a3462; XTENSA-NEXT: or a10, a2, a2463; XTENSA-NEXT: movi a12, 3464; XTENSA-NEXT: l32r a8, .LCPI22_0465; XTENSA-NEXT: callx8 a8466; XTENSA-NEXT: retw467;468; XTENSA-ATOMIC-LABEL: atomic_store_i32_release:469; XTENSA-ATOMIC: # %bb.0:470; XTENSA-ATOMIC-NEXT: entry a1, 32471; XTENSA-ATOMIC-NEXT: memw472; XTENSA-ATOMIC-NEXT: s32i a3, a2, 0473; XTENSA-ATOMIC-NEXT: retw474 store atomic i32 %b, ptr %a release, align 4475 ret void476}477 478define void @atomic_store_i32_seq_cst(ptr %a, i32 %b) nounwind {479; XTENSA-LABEL: atomic_store_i32_seq_cst:480; XTENSA: # %bb.0:481; XTENSA-NEXT: entry a1, 32482; XTENSA-NEXT: or a11, a3, a3483; XTENSA-NEXT: or a10, a2, a2484; XTENSA-NEXT: movi a12, 5485; XTENSA-NEXT: l32r a8, .LCPI23_0486; XTENSA-NEXT: callx8 a8487; XTENSA-NEXT: retw488;489; XTENSA-ATOMIC-LABEL: atomic_store_i32_seq_cst:490; XTENSA-ATOMIC: # %bb.0:491; XTENSA-ATOMIC-NEXT: entry a1, 32492; XTENSA-ATOMIC-NEXT: memw493; XTENSA-ATOMIC-NEXT: s32i a3, a2, 0494; XTENSA-ATOMIC-NEXT: memw495; XTENSA-ATOMIC-NEXT: retw496 store atomic i32 %b, ptr %a seq_cst, align 4497 ret void498}499