418 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=xtensa -verify-machineinstrs < %s \3; RUN: | FileCheck -check-prefix=XTENSA %s4 5declare i16 @llvm.bswap.i16(i16)6declare i32 @llvm.bswap.i32(i32)7declare i64 @llvm.bswap.i64(i64)8declare i8 @llvm.bitreverse.i8(i8)9declare i16 @llvm.bitreverse.i16(i16)10declare i32 @llvm.bitreverse.i32(i32)11declare i64 @llvm.bitreverse.i64(i64)12 13define i16 @test_bswap_i16(i16 %a) nounwind {14; XTENSA-LABEL: test_bswap_i16:15; XTENSA: # %bb.0:16; XTENSA-NEXT: l32r a8, .LCPI0_017; XTENSA-NEXT: and a8, a2, a818; XTENSA-NEXT: srli a8, a8, 819; XTENSA-NEXT: slli a9, a2, 820; XTENSA-NEXT: or a2, a9, a821; XTENSA-NEXT: ret22 %tmp = call i16 @llvm.bswap.i16(i16 %a)23 ret i16 %tmp24}25 26define i32 @test_bswap_i32(i32 %a) nounwind {27; XTENSA-LABEL: test_bswap_i32:28; XTENSA: # %bb.0:29; XTENSA-NEXT: srli a8, a2, 830; XTENSA-NEXT: l32r a9, .LCPI1_031; XTENSA-NEXT: and a8, a8, a932; XTENSA-NEXT: extui a10, a2, 24, 833; XTENSA-NEXT: or a8, a8, a1034; XTENSA-NEXT: and a9, a2, a935; XTENSA-NEXT: slli a9, a9, 836; XTENSA-NEXT: slli a10, a2, 2437; XTENSA-NEXT: or a9, a10, a938; XTENSA-NEXT: or a2, a9, a839; XTENSA-NEXT: ret40 %tmp = call i32 @llvm.bswap.i32(i32 %a)41 ret i32 %tmp42}43 44define i64 @test_bswap_i64(i64 %a) nounwind {45; XTENSA-LABEL: test_bswap_i64:46; XTENSA: # %bb.0:47; XTENSA-NEXT: srli a8, a3, 848; XTENSA-NEXT: l32r a9, .LCPI2_049; XTENSA-NEXT: and a8, a8, a950; XTENSA-NEXT: extui a10, a3, 24, 851; XTENSA-NEXT: or a8, a8, a1052; XTENSA-NEXT: and a10, a3, a953; XTENSA-NEXT: slli a10, a10, 854; XTENSA-NEXT: slli a11, a3, 2455; XTENSA-NEXT: or a10, a11, a1056; XTENSA-NEXT: or a8, a10, a857; XTENSA-NEXT: srli a10, a2, 858; XTENSA-NEXT: and a10, a10, a959; XTENSA-NEXT: extui a11, a2, 24, 860; XTENSA-NEXT: or a10, a10, a1161; XTENSA-NEXT: and a9, a2, a962; XTENSA-NEXT: slli a9, a9, 863; XTENSA-NEXT: slli a11, a2, 2464; XTENSA-NEXT: or a9, a11, a965; XTENSA-NEXT: or a3, a9, a1066; XTENSA-NEXT: or a2, a8, a867; XTENSA-NEXT: ret68 %tmp = call i64 @llvm.bswap.i64(i64 %a)69 ret i64 %tmp70}71 72define i8 @test_bitreverse_i8(i8 %a) nounwind {73; XTENSA-LABEL: test_bitreverse_i8:74; XTENSA: # %bb.0:75; XTENSA-NEXT: movi a8, 1576; XTENSA-NEXT: and a8, a2, a877; XTENSA-NEXT: slli a8, a8, 478; XTENSA-NEXT: movi a9, 24079; XTENSA-NEXT: and a9, a2, a980; XTENSA-NEXT: srli a9, a9, 481; XTENSA-NEXT: or a8, a9, a882; XTENSA-NEXT: srli a9, a8, 283; XTENSA-NEXT: movi a10, 5184; XTENSA-NEXT: and a9, a9, a1085; XTENSA-NEXT: and a8, a8, a1086; XTENSA-NEXT: slli a8, a8, 287; XTENSA-NEXT: or a8, a9, a888; XTENSA-NEXT: srli a9, a8, 189; XTENSA-NEXT: movi a10, 8590; XTENSA-NEXT: and a9, a9, a1091; XTENSA-NEXT: and a8, a8, a1092; XTENSA-NEXT: slli a8, a8, 193; XTENSA-NEXT: or a2, a9, a894; XTENSA-NEXT: ret95 %tmp = call i8 @llvm.bitreverse.i8(i8 %a)96 ret i8 %tmp97}98 99define i16 @test_bitreverse_i16(i16 %a) nounwind {100; XTENSA-LABEL: test_bitreverse_i16:101; XTENSA: # %bb.0:102; XTENSA-NEXT: l32r a8, .LCPI4_0103; XTENSA-NEXT: and a8, a2, a8104; XTENSA-NEXT: srli a8, a8, 8105; XTENSA-NEXT: slli a9, a2, 8106; XTENSA-NEXT: or a8, a9, a8107; XTENSA-NEXT: srli a9, a8, 4108; XTENSA-NEXT: l32r a10, .LCPI4_1109; XTENSA-NEXT: and a9, a9, a10110; XTENSA-NEXT: and a8, a8, a10111; XTENSA-NEXT: slli a8, a8, 4112; XTENSA-NEXT: or a8, a9, a8113; XTENSA-NEXT: srli a9, a8, 2114; XTENSA-NEXT: l32r a10, .LCPI4_2115; XTENSA-NEXT: and a9, a9, a10116; XTENSA-NEXT: and a8, a8, a10117; XTENSA-NEXT: slli a8, a8, 2118; XTENSA-NEXT: or a8, a9, a8119; XTENSA-NEXT: srli a9, a8, 1120; XTENSA-NEXT: l32r a10, .LCPI4_3121; XTENSA-NEXT: and a9, a9, a10122; XTENSA-NEXT: and a8, a8, a10123; XTENSA-NEXT: slli a8, a8, 1124; XTENSA-NEXT: or a2, a9, a8125; XTENSA-NEXT: ret126 %tmp = call i16 @llvm.bitreverse.i16(i16 %a)127 ret i16 %tmp128}129 130define i32 @test_bitreverse_i32(i32 %a) nounwind {131; XTENSA-LABEL: test_bitreverse_i32:132; XTENSA: # %bb.0:133; XTENSA-NEXT: srli a8, a2, 8134; XTENSA-NEXT: l32r a9, .LCPI5_0135; XTENSA-NEXT: and a8, a8, a9136; XTENSA-NEXT: extui a10, a2, 24, 8137; XTENSA-NEXT: or a8, a8, a10138; XTENSA-NEXT: and a9, a2, a9139; XTENSA-NEXT: slli a9, a9, 8140; XTENSA-NEXT: slli a10, a2, 24141; XTENSA-NEXT: or a9, a10, a9142; XTENSA-NEXT: or a8, a9, a8143; XTENSA-NEXT: srli a9, a8, 4144; XTENSA-NEXT: l32r a10, .LCPI5_1145; XTENSA-NEXT: and a9, a9, a10146; XTENSA-NEXT: and a8, a8, a10147; XTENSA-NEXT: slli a8, a8, 4148; XTENSA-NEXT: or a8, a9, a8149; XTENSA-NEXT: srli a9, a8, 2150; XTENSA-NEXT: l32r a10, .LCPI5_2151; XTENSA-NEXT: and a9, a9, a10152; XTENSA-NEXT: and a8, a8, a10153; XTENSA-NEXT: slli a8, a8, 2154; XTENSA-NEXT: or a8, a9, a8155; XTENSA-NEXT: srli a9, a8, 1156; XTENSA-NEXT: l32r a10, .LCPI5_3157; XTENSA-NEXT: and a9, a9, a10158; XTENSA-NEXT: and a8, a8, a10159; XTENSA-NEXT: slli a8, a8, 1160; XTENSA-NEXT: or a2, a9, a8161; XTENSA-NEXT: ret162 %tmp = call i32 @llvm.bitreverse.i32(i32 %a)163 ret i32 %tmp164}165 166define i64 @test_bitreverse_i64(i64 %a) nounwind {167; XTENSA-LABEL: test_bitreverse_i64:168; XTENSA: # %bb.0:169; XTENSA-NEXT: srli a8, a3, 8170; XTENSA-NEXT: l32r a9, .LCPI6_0171; XTENSA-NEXT: and a8, a8, a9172; XTENSA-NEXT: extui a10, a3, 24, 8173; XTENSA-NEXT: or a8, a8, a10174; XTENSA-NEXT: and a10, a3, a9175; XTENSA-NEXT: slli a10, a10, 8176; XTENSA-NEXT: slli a11, a3, 24177; XTENSA-NEXT: or a10, a11, a10178; XTENSA-NEXT: or a8, a10, a8179; XTENSA-NEXT: srli a10, a8, 4180; XTENSA-NEXT: l32r a11, .LCPI6_1181; XTENSA-NEXT: and a10, a10, a11182; XTENSA-NEXT: and a8, a8, a11183; XTENSA-NEXT: slli a8, a8, 4184; XTENSA-NEXT: or a8, a10, a8185; XTENSA-NEXT: srli a10, a8, 2186; XTENSA-NEXT: l32r a7, .LCPI6_2187; XTENSA-NEXT: and a10, a10, a7188; XTENSA-NEXT: and a8, a8, a7189; XTENSA-NEXT: slli a8, a8, 2190; XTENSA-NEXT: or a8, a10, a8191; XTENSA-NEXT: srli a10, a8, 1192; XTENSA-NEXT: l32r a6, .LCPI6_3193; XTENSA-NEXT: and a10, a10, a6194; XTENSA-NEXT: and a8, a8, a6195; XTENSA-NEXT: slli a8, a8, 1196; XTENSA-NEXT: or a8, a10, a8197; XTENSA-NEXT: srli a10, a2, 8198; XTENSA-NEXT: and a10, a10, a9199; XTENSA-NEXT: extui a5, a2, 24, 8200; XTENSA-NEXT: or a10, a10, a5201; XTENSA-NEXT: and a9, a2, a9202; XTENSA-NEXT: slli a9, a9, 8203; XTENSA-NEXT: slli a5, a2, 24204; XTENSA-NEXT: or a9, a5, a9205; XTENSA-NEXT: or a9, a9, a10206; XTENSA-NEXT: srli a10, a9, 4207; XTENSA-NEXT: and a10, a10, a11208; XTENSA-NEXT: and a9, a9, a11209; XTENSA-NEXT: slli a9, a9, 4210; XTENSA-NEXT: or a9, a10, a9211; XTENSA-NEXT: srli a10, a9, 2212; XTENSA-NEXT: and a10, a10, a7213; XTENSA-NEXT: and a9, a9, a7214; XTENSA-NEXT: slli a9, a9, 2215; XTENSA-NEXT: or a9, a10, a9216; XTENSA-NEXT: srli a10, a9, 1217; XTENSA-NEXT: and a10, a10, a6218; XTENSA-NEXT: and a9, a9, a6219; XTENSA-NEXT: slli a9, a9, 1220; XTENSA-NEXT: or a3, a10, a9221; XTENSA-NEXT: or a2, a8, a8222; XTENSA-NEXT: ret223 %tmp = call i64 @llvm.bitreverse.i64(i64 %a)224 ret i64 %tmp225}226 227define i16 @test_bswap_bitreverse_i16(i16 %a) nounwind {228; XTENSA-LABEL: test_bswap_bitreverse_i16:229; XTENSA: # %bb.0:230; XTENSA-NEXT: srli a8, a2, 4231; XTENSA-NEXT: l32r a9, .LCPI7_0232; XTENSA-NEXT: and a8, a8, a9233; XTENSA-NEXT: and a9, a2, a9234; XTENSA-NEXT: slli a9, a9, 4235; XTENSA-NEXT: or a8, a8, a9236; XTENSA-NEXT: srli a9, a8, 2237; XTENSA-NEXT: l32r a10, .LCPI7_1238; XTENSA-NEXT: and a9, a9, a10239; XTENSA-NEXT: and a8, a8, a10240; XTENSA-NEXT: slli a8, a8, 2241; XTENSA-NEXT: or a8, a9, a8242; XTENSA-NEXT: srli a9, a8, 1243; XTENSA-NEXT: l32r a10, .LCPI7_2244; XTENSA-NEXT: and a9, a9, a10245; XTENSA-NEXT: and a8, a8, a10246; XTENSA-NEXT: slli a8, a8, 1247; XTENSA-NEXT: or a2, a9, a8248; XTENSA-NEXT: ret249 %tmp = call i16 @llvm.bswap.i16(i16 %a)250 %tmp2 = call i16 @llvm.bitreverse.i16(i16 %tmp)251 ret i16 %tmp2252}253 254define i32 @test_bswap_bitreverse_i32(i32 %a) nounwind {255; XTENSA-LABEL: test_bswap_bitreverse_i32:256; XTENSA: # %bb.0:257; XTENSA-NEXT: srli a8, a2, 4258; XTENSA-NEXT: l32r a9, .LCPI8_0259; XTENSA-NEXT: and a8, a8, a9260; XTENSA-NEXT: and a9, a2, a9261; XTENSA-NEXT: slli a9, a9, 4262; XTENSA-NEXT: or a8, a8, a9263; XTENSA-NEXT: srli a9, a8, 2264; XTENSA-NEXT: l32r a10, .LCPI8_1265; XTENSA-NEXT: and a9, a9, a10266; XTENSA-NEXT: and a8, a8, a10267; XTENSA-NEXT: slli a8, a8, 2268; XTENSA-NEXT: or a8, a9, a8269; XTENSA-NEXT: srli a9, a8, 1270; XTENSA-NEXT: l32r a10, .LCPI8_2271; XTENSA-NEXT: and a9, a9, a10272; XTENSA-NEXT: and a8, a8, a10273; XTENSA-NEXT: slli a8, a8, 1274; XTENSA-NEXT: or a2, a9, a8275; XTENSA-NEXT: ret276 %tmp = call i32 @llvm.bswap.i32(i32 %a)277 %tmp2 = call i32 @llvm.bitreverse.i32(i32 %tmp)278 ret i32 %tmp2279}280 281define i64 @test_bswap_bitreverse_i64(i64 %a) nounwind {282; XTENSA-LABEL: test_bswap_bitreverse_i64:283; XTENSA: # %bb.0:284; XTENSA-NEXT: srli a8, a2, 4285; XTENSA-NEXT: l32r a9, .LCPI9_0286; XTENSA-NEXT: and a8, a8, a9287; XTENSA-NEXT: and a10, a2, a9288; XTENSA-NEXT: slli a10, a10, 4289; XTENSA-NEXT: or a8, a8, a10290; XTENSA-NEXT: srli a10, a8, 2291; XTENSA-NEXT: l32r a11, .LCPI9_1292; XTENSA-NEXT: and a10, a10, a11293; XTENSA-NEXT: and a8, a8, a11294; XTENSA-NEXT: slli a8, a8, 2295; XTENSA-NEXT: or a8, a10, a8296; XTENSA-NEXT: srli a10, a8, 1297; XTENSA-NEXT: l32r a7, .LCPI9_2298; XTENSA-NEXT: and a10, a10, a7299; XTENSA-NEXT: and a8, a8, a7300; XTENSA-NEXT: slli a8, a8, 1301; XTENSA-NEXT: or a2, a10, a8302; XTENSA-NEXT: srli a8, a3, 4303; XTENSA-NEXT: and a8, a8, a9304; XTENSA-NEXT: and a9, a3, a9305; XTENSA-NEXT: slli a9, a9, 4306; XTENSA-NEXT: or a8, a8, a9307; XTENSA-NEXT: srli a9, a8, 2308; XTENSA-NEXT: and a9, a9, a11309; XTENSA-NEXT: and a8, a8, a11310; XTENSA-NEXT: slli a8, a8, 2311; XTENSA-NEXT: or a8, a9, a8312; XTENSA-NEXT: srli a9, a8, 1313; XTENSA-NEXT: and a9, a9, a7314; XTENSA-NEXT: and a8, a8, a7315; XTENSA-NEXT: slli a8, a8, 1316; XTENSA-NEXT: or a3, a9, a8317; XTENSA-NEXT: ret318 %tmp = call i64 @llvm.bswap.i64(i64 %a)319 %tmp2 = call i64 @llvm.bitreverse.i64(i64 %tmp)320 ret i64 %tmp2321}322 323define i16 @test_bitreverse_bswap_i16(i16 %a) nounwind {324; XTENSA-LABEL: test_bitreverse_bswap_i16:325; XTENSA: # %bb.0:326; XTENSA-NEXT: srli a8, a2, 4327; XTENSA-NEXT: l32r a9, .LCPI10_0328; XTENSA-NEXT: and a8, a8, a9329; XTENSA-NEXT: and a9, a2, a9330; XTENSA-NEXT: slli a9, a9, 4331; XTENSA-NEXT: or a8, a8, a9332; XTENSA-NEXT: srli a9, a8, 2333; XTENSA-NEXT: l32r a10, .LCPI10_1334; XTENSA-NEXT: and a9, a9, a10335; XTENSA-NEXT: and a8, a8, a10336; XTENSA-NEXT: slli a8, a8, 2337; XTENSA-NEXT: or a8, a9, a8338; XTENSA-NEXT: srli a9, a8, 1339; XTENSA-NEXT: l32r a10, .LCPI10_2340; XTENSA-NEXT: and a9, a9, a10341; XTENSA-NEXT: and a8, a8, a10342; XTENSA-NEXT: slli a8, a8, 1343; XTENSA-NEXT: or a2, a9, a8344; XTENSA-NEXT: ret345 %tmp = call i16 @llvm.bitreverse.i16(i16 %a)346 %tmp2 = call i16 @llvm.bswap.i16(i16 %tmp)347 ret i16 %tmp2348}349 350define i32 @test_bitreverse_bswap_i32(i32 %a) nounwind {351; XTENSA-LABEL: test_bitreverse_bswap_i32:352; XTENSA: # %bb.0:353; XTENSA-NEXT: srli a8, a2, 4354; XTENSA-NEXT: l32r a9, .LCPI11_0355; XTENSA-NEXT: and a8, a8, a9356; XTENSA-NEXT: and a9, a2, a9357; XTENSA-NEXT: slli a9, a9, 4358; XTENSA-NEXT: or a8, a8, a9359; XTENSA-NEXT: srli a9, a8, 2360; XTENSA-NEXT: l32r a10, .LCPI11_1361; XTENSA-NEXT: and a9, a9, a10362; XTENSA-NEXT: and a8, a8, a10363; XTENSA-NEXT: slli a8, a8, 2364; XTENSA-NEXT: or a8, a9, a8365; XTENSA-NEXT: srli a9, a8, 1366; XTENSA-NEXT: l32r a10, .LCPI11_2367; XTENSA-NEXT: and a9, a9, a10368; XTENSA-NEXT: and a8, a8, a10369; XTENSA-NEXT: slli a8, a8, 1370; XTENSA-NEXT: or a2, a9, a8371; XTENSA-NEXT: ret372 %tmp = call i32 @llvm.bitreverse.i32(i32 %a)373 %tmp2 = call i32 @llvm.bswap.i32(i32 %tmp)374 ret i32 %tmp2375}376 377define i64 @test_bitreverse_bswap_i64(i64 %a) nounwind {378; XTENSA-LABEL: test_bitreverse_bswap_i64:379; XTENSA: # %bb.0:380; XTENSA-NEXT: srli a8, a2, 4381; XTENSA-NEXT: l32r a9, .LCPI12_0382; XTENSA-NEXT: and a8, a8, a9383; XTENSA-NEXT: and a10, a2, a9384; XTENSA-NEXT: slli a10, a10, 4385; XTENSA-NEXT: or a8, a8, a10386; XTENSA-NEXT: srli a10, a8, 2387; XTENSA-NEXT: l32r a11, .LCPI12_1388; XTENSA-NEXT: and a10, a10, a11389; XTENSA-NEXT: and a8, a8, a11390; XTENSA-NEXT: slli a8, a8, 2391; XTENSA-NEXT: or a8, a10, a8392; XTENSA-NEXT: srli a10, a8, 1393; XTENSA-NEXT: l32r a7, .LCPI12_2394; XTENSA-NEXT: and a10, a10, a7395; XTENSA-NEXT: and a8, a8, a7396; XTENSA-NEXT: slli a8, a8, 1397; XTENSA-NEXT: or a2, a10, a8398; XTENSA-NEXT: srli a8, a3, 4399; XTENSA-NEXT: and a8, a8, a9400; XTENSA-NEXT: and a9, a3, a9401; XTENSA-NEXT: slli a9, a9, 4402; XTENSA-NEXT: or a8, a8, a9403; XTENSA-NEXT: srli a9, a8, 2404; XTENSA-NEXT: and a9, a9, a11405; XTENSA-NEXT: and a8, a8, a11406; XTENSA-NEXT: slli a8, a8, 2407; XTENSA-NEXT: or a8, a9, a8408; XTENSA-NEXT: srli a9, a8, 1409; XTENSA-NEXT: and a9, a9, a7410; XTENSA-NEXT: and a8, a8, a7411; XTENSA-NEXT: slli a8, a8, 1412; XTENSA-NEXT: or a3, a9, a8413; XTENSA-NEXT: ret414 %tmp = call i64 @llvm.bitreverse.i64(i64 %a)415 %tmp2 = call i64 @llvm.bswap.i64(i64 %tmp)416 ret i64 %tmp2417}418