brintos

brintos / llvm-project-archived public Read only

0
0
Text · 23.9 KiB · 132dc87 Raw
691 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=hawaii -o - %s | FileCheck -check-prefix=GFX7 %s3; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=fiji -o - %s | FileCheck -check-prefix=GFX8 %s4; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=gfx900 -o - %s | FileCheck -check-prefix=GFX9 %s5; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=gfx1010 -o - %s | FileCheck -check-prefix=GFX10 %s6; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 -o - %s | FileCheck -check-prefix=GFX10 %s7 8define amdgpu_ps i32 @s_bswap_i32(i32 inreg %src) {9; GFX7-LABEL: s_bswap_i32:10; GFX7:       ; %bb.0:11; GFX7-NEXT:    v_alignbit_b32 v0, s0, s0, 812; GFX7-NEXT:    v_alignbit_b32 v1, s0, s0, 2413; GFX7-NEXT:    s_mov_b32 s0, 0xff00ff14; GFX7-NEXT:    v_bfi_b32 v0, s0, v1, v015; GFX7-NEXT:    v_readfirstlane_b32 s0, v016; GFX7-NEXT:    ; return to shader part epilog17;18; GFX8-LABEL: s_bswap_i32:19; GFX8:       ; %bb.0:20; GFX8-NEXT:    v_mov_b32_e32 v0, s021; GFX8-NEXT:    s_mov_b32 s0, 0x1020322; GFX8-NEXT:    v_perm_b32 v0, 0, v0, s023; GFX8-NEXT:    v_readfirstlane_b32 s0, v024; GFX8-NEXT:    ; return to shader part epilog25;26; GFX9-LABEL: s_bswap_i32:27; GFX9:       ; %bb.0:28; GFX9-NEXT:    v_mov_b32_e32 v0, s029; GFX9-NEXT:    s_mov_b32 s0, 0x1020330; GFX9-NEXT:    v_perm_b32 v0, 0, v0, s031; GFX9-NEXT:    v_readfirstlane_b32 s0, v032; GFX9-NEXT:    ; return to shader part epilog33;34; GFX10-LABEL: s_bswap_i32:35; GFX10:       ; %bb.0:36; GFX10-NEXT:    v_perm_b32 v0, 0, s0, 0x1020337; GFX10-NEXT:    v_readfirstlane_b32 s0, v038; GFX10-NEXT:    ; return to shader part epilog39  %bswap = call i32 @llvm.bswap.i32(i32 %src)40  ret i32 %bswap41}42 43define i32 @v_bswap_i32(i32 %src) {44; GFX7-LABEL: v_bswap_i32:45; GFX7:       ; %bb.0:46; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)47; GFX7-NEXT:    v_alignbit_b32 v1, v0, v0, 848; GFX7-NEXT:    v_alignbit_b32 v0, v0, v0, 2449; GFX7-NEXT:    s_mov_b32 s4, 0xff00ff50; GFX7-NEXT:    v_bfi_b32 v0, s4, v0, v151; GFX7-NEXT:    s_setpc_b64 s[30:31]52;53; GFX8-LABEL: v_bswap_i32:54; GFX8:       ; %bb.0:55; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)56; GFX8-NEXT:    s_mov_b32 s4, 0x1020357; GFX8-NEXT:    v_perm_b32 v0, 0, v0, s458; GFX8-NEXT:    s_setpc_b64 s[30:31]59;60; GFX9-LABEL: v_bswap_i32:61; GFX9:       ; %bb.0:62; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)63; GFX9-NEXT:    s_mov_b32 s4, 0x1020364; GFX9-NEXT:    v_perm_b32 v0, 0, v0, s465; GFX9-NEXT:    s_setpc_b64 s[30:31]66;67; GFX10-LABEL: v_bswap_i32:68; GFX10:       ; %bb.0:69; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)70; GFX10-NEXT:    v_perm_b32 v0, 0, v0, 0x1020371; GFX10-NEXT:    s_setpc_b64 s[30:31]72  %bswap = call i32 @llvm.bswap.i32(i32 %src)73  ret i32 %bswap74}75 76define amdgpu_ps <2 x i32> @s_bswap_v2i32(<2 x i32> inreg %src) {77; GFX7-LABEL: s_bswap_v2i32:78; GFX7:       ; %bb.0:79; GFX7-NEXT:    v_alignbit_b32 v0, s0, s0, 880; GFX7-NEXT:    v_alignbit_b32 v1, s0, s0, 2481; GFX7-NEXT:    s_mov_b32 s0, 0xff00ff82; GFX7-NEXT:    v_bfi_b32 v0, s0, v1, v083; GFX7-NEXT:    v_alignbit_b32 v1, s1, s1, 884; GFX7-NEXT:    v_alignbit_b32 v2, s1, s1, 2485; GFX7-NEXT:    v_bfi_b32 v1, s0, v2, v186; GFX7-NEXT:    v_readfirstlane_b32 s0, v087; GFX7-NEXT:    v_readfirstlane_b32 s1, v188; GFX7-NEXT:    ; return to shader part epilog89;90; GFX8-LABEL: s_bswap_v2i32:91; GFX8:       ; %bb.0:92; GFX8-NEXT:    v_mov_b32_e32 v0, s093; GFX8-NEXT:    s_mov_b32 s0, 0x1020394; GFX8-NEXT:    v_mov_b32_e32 v1, s195; GFX8-NEXT:    v_perm_b32 v0, 0, v0, s096; GFX8-NEXT:    v_perm_b32 v1, 0, v1, s097; GFX8-NEXT:    v_readfirstlane_b32 s0, v098; GFX8-NEXT:    v_readfirstlane_b32 s1, v199; GFX8-NEXT:    ; return to shader part epilog100;101; GFX9-LABEL: s_bswap_v2i32:102; GFX9:       ; %bb.0:103; GFX9-NEXT:    v_mov_b32_e32 v0, s0104; GFX9-NEXT:    s_mov_b32 s0, 0x10203105; GFX9-NEXT:    v_mov_b32_e32 v1, s1106; GFX9-NEXT:    v_perm_b32 v0, 0, v0, s0107; GFX9-NEXT:    v_perm_b32 v1, 0, v1, s0108; GFX9-NEXT:    v_readfirstlane_b32 s0, v0109; GFX9-NEXT:    v_readfirstlane_b32 s1, v1110; GFX9-NEXT:    ; return to shader part epilog111;112; GFX10-LABEL: s_bswap_v2i32:113; GFX10:       ; %bb.0:114; GFX10-NEXT:    v_perm_b32 v0, 0, s0, 0x10203115; GFX10-NEXT:    v_perm_b32 v1, 0, s1, 0x10203116; GFX10-NEXT:    v_readfirstlane_b32 s0, v0117; GFX10-NEXT:    v_readfirstlane_b32 s1, v1118; GFX10-NEXT:    ; return to shader part epilog119  %bswap = call <2 x i32> @llvm.bswap.v2i32(<2 x i32> %src)120  ret <2 x i32> %bswap121}122 123define <2 x i32> @v_bswap_v2i32(<2 x i32> %src) {124; GFX7-LABEL: v_bswap_v2i32:125; GFX7:       ; %bb.0:126; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)127; GFX7-NEXT:    v_alignbit_b32 v2, v0, v0, 8128; GFX7-NEXT:    v_alignbit_b32 v0, v0, v0, 24129; GFX7-NEXT:    s_mov_b32 s4, 0xff00ff130; GFX7-NEXT:    v_bfi_b32 v0, s4, v0, v2131; GFX7-NEXT:    v_alignbit_b32 v2, v1, v1, 8132; GFX7-NEXT:    v_alignbit_b32 v1, v1, v1, 24133; GFX7-NEXT:    v_bfi_b32 v1, s4, v1, v2134; GFX7-NEXT:    s_setpc_b64 s[30:31]135;136; GFX8-LABEL: v_bswap_v2i32:137; GFX8:       ; %bb.0:138; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)139; GFX8-NEXT:    s_mov_b32 s4, 0x10203140; GFX8-NEXT:    v_perm_b32 v0, 0, v0, s4141; GFX8-NEXT:    v_perm_b32 v1, 0, v1, s4142; GFX8-NEXT:    s_setpc_b64 s[30:31]143;144; GFX9-LABEL: v_bswap_v2i32:145; GFX9:       ; %bb.0:146; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)147; GFX9-NEXT:    s_mov_b32 s4, 0x10203148; GFX9-NEXT:    v_perm_b32 v0, 0, v0, s4149; GFX9-NEXT:    v_perm_b32 v1, 0, v1, s4150; GFX9-NEXT:    s_setpc_b64 s[30:31]151;152; GFX10-LABEL: v_bswap_v2i32:153; GFX10:       ; %bb.0:154; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)155; GFX10-NEXT:    v_perm_b32 v0, 0, v0, 0x10203156; GFX10-NEXT:    v_perm_b32 v1, 0, v1, 0x10203157; GFX10-NEXT:    s_setpc_b64 s[30:31]158  %bswap = call <2 x i32> @llvm.bswap.v2i32(<2 x i32> %src)159  ret <2 x i32> %bswap160}161 162define amdgpu_ps i64 @s_bswap_i64(i64 inreg %src) {163; GFX7-LABEL: s_bswap_i64:164; GFX7:       ; %bb.0:165; GFX7-NEXT:    v_alignbit_b32 v0, s1, s1, 8166; GFX7-NEXT:    v_alignbit_b32 v1, s1, s1, 24167; GFX7-NEXT:    s_mov_b32 s1, 0xff00ff168; GFX7-NEXT:    v_bfi_b32 v0, s1, v1, v0169; GFX7-NEXT:    v_alignbit_b32 v1, s0, s0, 8170; GFX7-NEXT:    v_alignbit_b32 v2, s0, s0, 24171; GFX7-NEXT:    v_bfi_b32 v1, s1, v2, v1172; GFX7-NEXT:    v_readfirstlane_b32 s0, v0173; GFX7-NEXT:    v_readfirstlane_b32 s1, v1174; GFX7-NEXT:    ; return to shader part epilog175;176; GFX8-LABEL: s_bswap_i64:177; GFX8:       ; %bb.0:178; GFX8-NEXT:    v_mov_b32_e32 v0, s1179; GFX8-NEXT:    s_mov_b32 s1, 0x10203180; GFX8-NEXT:    v_mov_b32_e32 v1, s0181; GFX8-NEXT:    v_perm_b32 v0, 0, v0, s1182; GFX8-NEXT:    v_perm_b32 v1, 0, v1, s1183; GFX8-NEXT:    v_readfirstlane_b32 s0, v0184; GFX8-NEXT:    v_readfirstlane_b32 s1, v1185; GFX8-NEXT:    ; return to shader part epilog186;187; GFX9-LABEL: s_bswap_i64:188; GFX9:       ; %bb.0:189; GFX9-NEXT:    v_mov_b32_e32 v0, s1190; GFX9-NEXT:    s_mov_b32 s1, 0x10203191; GFX9-NEXT:    v_mov_b32_e32 v1, s0192; GFX9-NEXT:    v_perm_b32 v0, 0, v0, s1193; GFX9-NEXT:    v_perm_b32 v1, 0, v1, s1194; GFX9-NEXT:    v_readfirstlane_b32 s0, v0195; GFX9-NEXT:    v_readfirstlane_b32 s1, v1196; GFX9-NEXT:    ; return to shader part epilog197;198; GFX10-LABEL: s_bswap_i64:199; GFX10:       ; %bb.0:200; GFX10-NEXT:    v_perm_b32 v0, 0, s1, 0x10203201; GFX10-NEXT:    v_perm_b32 v1, 0, s0, 0x10203202; GFX10-NEXT:    v_readfirstlane_b32 s0, v0203; GFX10-NEXT:    v_readfirstlane_b32 s1, v1204; GFX10-NEXT:    ; return to shader part epilog205  %bswap = call i64 @llvm.bswap.i64(i64 %src)206  ret i64 %bswap207}208 209define i64 @v_bswap_i64(i64 %src) {210; GFX7-LABEL: v_bswap_i64:211; GFX7:       ; %bb.0:212; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)213; GFX7-NEXT:    v_alignbit_b32 v2, v1, v1, 8214; GFX7-NEXT:    v_alignbit_b32 v1, v1, v1, 24215; GFX7-NEXT:    s_mov_b32 s4, 0xff00ff216; GFX7-NEXT:    v_bfi_b32 v2, s4, v1, v2217; GFX7-NEXT:    v_alignbit_b32 v1, v0, v0, 8218; GFX7-NEXT:    v_alignbit_b32 v0, v0, v0, 24219; GFX7-NEXT:    v_bfi_b32 v1, s4, v0, v1220; GFX7-NEXT:    v_mov_b32_e32 v0, v2221; GFX7-NEXT:    s_setpc_b64 s[30:31]222;223; GFX8-LABEL: v_bswap_i64:224; GFX8:       ; %bb.0:225; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)226; GFX8-NEXT:    s_mov_b32 s4, 0x10203227; GFX8-NEXT:    v_perm_b32 v2, 0, v1, s4228; GFX8-NEXT:    v_perm_b32 v1, 0, v0, s4229; GFX8-NEXT:    v_mov_b32_e32 v0, v2230; GFX8-NEXT:    s_setpc_b64 s[30:31]231;232; GFX9-LABEL: v_bswap_i64:233; GFX9:       ; %bb.0:234; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)235; GFX9-NEXT:    s_mov_b32 s4, 0x10203236; GFX9-NEXT:    v_perm_b32 v2, 0, v1, s4237; GFX9-NEXT:    v_perm_b32 v1, 0, v0, s4238; GFX9-NEXT:    v_mov_b32_e32 v0, v2239; GFX9-NEXT:    s_setpc_b64 s[30:31]240;241; GFX10-LABEL: v_bswap_i64:242; GFX10:       ; %bb.0:243; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)244; GFX10-NEXT:    v_perm_b32 v2, 0, v1, 0x10203245; GFX10-NEXT:    v_perm_b32 v1, 0, v0, 0x10203246; GFX10-NEXT:    v_mov_b32_e32 v0, v2247; GFX10-NEXT:    s_setpc_b64 s[30:31]248  %bswap = call i64 @llvm.bswap.i64(i64 %src)249  ret i64 %bswap250}251 252define amdgpu_ps <2 x i64> @s_bswap_v2i64(<2 x i64> inreg %src) {253; GFX7-LABEL: s_bswap_v2i64:254; GFX7:       ; %bb.0:255; GFX7-NEXT:    v_alignbit_b32 v0, s1, s1, 8256; GFX7-NEXT:    v_alignbit_b32 v1, s1, s1, 24257; GFX7-NEXT:    s_mov_b32 s1, 0xff00ff258; GFX7-NEXT:    v_bfi_b32 v0, s1, v1, v0259; GFX7-NEXT:    v_alignbit_b32 v1, s0, s0, 8260; GFX7-NEXT:    v_alignbit_b32 v2, s0, s0, 24261; GFX7-NEXT:    v_bfi_b32 v1, s1, v2, v1262; GFX7-NEXT:    v_alignbit_b32 v2, s3, s3, 8263; GFX7-NEXT:    v_alignbit_b32 v3, s3, s3, 24264; GFX7-NEXT:    v_bfi_b32 v2, s1, v3, v2265; GFX7-NEXT:    v_alignbit_b32 v3, s2, s2, 8266; GFX7-NEXT:    v_alignbit_b32 v4, s2, s2, 24267; GFX7-NEXT:    v_bfi_b32 v3, s1, v4, v3268; GFX7-NEXT:    v_readfirstlane_b32 s0, v0269; GFX7-NEXT:    v_readfirstlane_b32 s1, v1270; GFX7-NEXT:    v_readfirstlane_b32 s2, v2271; GFX7-NEXT:    v_readfirstlane_b32 s3, v3272; GFX7-NEXT:    ; return to shader part epilog273;274; GFX8-LABEL: s_bswap_v2i64:275; GFX8:       ; %bb.0:276; GFX8-NEXT:    v_mov_b32_e32 v0, s1277; GFX8-NEXT:    s_mov_b32 s1, 0x10203278; GFX8-NEXT:    v_mov_b32_e32 v1, s0279; GFX8-NEXT:    v_mov_b32_e32 v2, s3280; GFX8-NEXT:    v_mov_b32_e32 v3, s2281; GFX8-NEXT:    v_perm_b32 v0, 0, v0, s1282; GFX8-NEXT:    v_perm_b32 v1, 0, v1, s1283; GFX8-NEXT:    v_perm_b32 v2, 0, v2, s1284; GFX8-NEXT:    v_perm_b32 v3, 0, v3, s1285; GFX8-NEXT:    v_readfirstlane_b32 s0, v0286; GFX8-NEXT:    v_readfirstlane_b32 s1, v1287; GFX8-NEXT:    v_readfirstlane_b32 s2, v2288; GFX8-NEXT:    v_readfirstlane_b32 s3, v3289; GFX8-NEXT:    ; return to shader part epilog290;291; GFX9-LABEL: s_bswap_v2i64:292; GFX9:       ; %bb.0:293; GFX9-NEXT:    v_mov_b32_e32 v0, s1294; GFX9-NEXT:    s_mov_b32 s1, 0x10203295; GFX9-NEXT:    v_mov_b32_e32 v1, s0296; GFX9-NEXT:    v_mov_b32_e32 v2, s3297; GFX9-NEXT:    v_mov_b32_e32 v3, s2298; GFX9-NEXT:    v_perm_b32 v0, 0, v0, s1299; GFX9-NEXT:    v_perm_b32 v1, 0, v1, s1300; GFX9-NEXT:    v_perm_b32 v2, 0, v2, s1301; GFX9-NEXT:    v_perm_b32 v3, 0, v3, s1302; GFX9-NEXT:    v_readfirstlane_b32 s0, v0303; GFX9-NEXT:    v_readfirstlane_b32 s1, v1304; GFX9-NEXT:    v_readfirstlane_b32 s2, v2305; GFX9-NEXT:    v_readfirstlane_b32 s3, v3306; GFX9-NEXT:    ; return to shader part epilog307;308; GFX10-LABEL: s_bswap_v2i64:309; GFX10:       ; %bb.0:310; GFX10-NEXT:    v_perm_b32 v0, 0, s1, 0x10203311; GFX10-NEXT:    v_perm_b32 v1, 0, s0, 0x10203312; GFX10-NEXT:    v_perm_b32 v2, 0, s3, 0x10203313; GFX10-NEXT:    v_perm_b32 v3, 0, s2, 0x10203314; GFX10-NEXT:    v_readfirstlane_b32 s0, v0315; GFX10-NEXT:    v_readfirstlane_b32 s1, v1316; GFX10-NEXT:    v_readfirstlane_b32 s2, v2317; GFX10-NEXT:    v_readfirstlane_b32 s3, v3318; GFX10-NEXT:    ; return to shader part epilog319  %bswap = call <2 x i64> @llvm.bswap.v2i64(<2 x i64> %src)320  ret <2 x i64> %bswap321}322 323define <2 x i64> @v_bswap_v2i64(<2 x i64> %src) {324; GFX7-LABEL: v_bswap_v2i64:325; GFX7:       ; %bb.0:326; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)327; GFX7-NEXT:    v_alignbit_b32 v4, v1, v1, 8328; GFX7-NEXT:    v_alignbit_b32 v1, v1, v1, 24329; GFX7-NEXT:    s_mov_b32 s4, 0xff00ff330; GFX7-NEXT:    v_bfi_b32 v4, s4, v1, v4331; GFX7-NEXT:    v_alignbit_b32 v1, v0, v0, 8332; GFX7-NEXT:    v_alignbit_b32 v0, v0, v0, 24333; GFX7-NEXT:    v_bfi_b32 v1, s4, v0, v1334; GFX7-NEXT:    v_alignbit_b32 v0, v3, v3, 8335; GFX7-NEXT:    v_alignbit_b32 v3, v3, v3, 24336; GFX7-NEXT:    v_bfi_b32 v5, s4, v3, v0337; GFX7-NEXT:    v_alignbit_b32 v0, v2, v2, 8338; GFX7-NEXT:    v_alignbit_b32 v2, v2, v2, 24339; GFX7-NEXT:    v_bfi_b32 v3, s4, v2, v0340; GFX7-NEXT:    v_mov_b32_e32 v0, v4341; GFX7-NEXT:    v_mov_b32_e32 v2, v5342; GFX7-NEXT:    s_setpc_b64 s[30:31]343;344; GFX8-LABEL: v_bswap_v2i64:345; GFX8:       ; %bb.0:346; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)347; GFX8-NEXT:    s_mov_b32 s4, 0x10203348; GFX8-NEXT:    v_perm_b32 v4, 0, v1, s4349; GFX8-NEXT:    v_perm_b32 v5, 0, v3, s4350; GFX8-NEXT:    v_perm_b32 v1, 0, v0, s4351; GFX8-NEXT:    v_perm_b32 v3, 0, v2, s4352; GFX8-NEXT:    v_mov_b32_e32 v0, v4353; GFX8-NEXT:    v_mov_b32_e32 v2, v5354; GFX8-NEXT:    s_setpc_b64 s[30:31]355;356; GFX9-LABEL: v_bswap_v2i64:357; GFX9:       ; %bb.0:358; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)359; GFX9-NEXT:    s_mov_b32 s4, 0x10203360; GFX9-NEXT:    v_perm_b32 v4, 0, v1, s4361; GFX9-NEXT:    v_perm_b32 v5, 0, v3, s4362; GFX9-NEXT:    v_perm_b32 v1, 0, v0, s4363; GFX9-NEXT:    v_perm_b32 v3, 0, v2, s4364; GFX9-NEXT:    v_mov_b32_e32 v0, v4365; GFX9-NEXT:    v_mov_b32_e32 v2, v5366; GFX9-NEXT:    s_setpc_b64 s[30:31]367;368; GFX10-LABEL: v_bswap_v2i64:369; GFX10:       ; %bb.0:370; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)371; GFX10-NEXT:    v_perm_b32 v4, 0, v1, 0x10203372; GFX10-NEXT:    v_perm_b32 v5, 0, v3, 0x10203373; GFX10-NEXT:    v_perm_b32 v1, 0, v0, 0x10203374; GFX10-NEXT:    v_perm_b32 v3, 0, v2, 0x10203375; GFX10-NEXT:    v_mov_b32_e32 v0, v4376; GFX10-NEXT:    v_mov_b32_e32 v2, v5377; GFX10-NEXT:    s_setpc_b64 s[30:31]378  %bswap = call <2 x i64> @llvm.bswap.v2i64(<2 x i64> %src)379  ret <2 x i64> %bswap380}381 382define amdgpu_ps i16 @s_bswap_i16(i16 inreg %src) {383; GFX7-LABEL: s_bswap_i16:384; GFX7:       ; %bb.0:385; GFX7-NEXT:    s_lshl_b32 s1, s0, 8386; GFX7-NEXT:    s_bfe_u32 s0, s0, 0x80008387; GFX7-NEXT:    s_or_b32 s0, s0, s1388; GFX7-NEXT:    ; return to shader part epilog389;390; GFX8-LABEL: s_bswap_i16:391; GFX8:       ; %bb.0:392; GFX8-NEXT:    v_mov_b32_e32 v0, s0393; GFX8-NEXT:    s_mov_b32 s0, 0xc0c0001394; GFX8-NEXT:    v_perm_b32 v0, 0, v0, s0395; GFX8-NEXT:    v_readfirstlane_b32 s0, v0396; GFX8-NEXT:    ; return to shader part epilog397;398; GFX9-LABEL: s_bswap_i16:399; GFX9:       ; %bb.0:400; GFX9-NEXT:    v_mov_b32_e32 v0, s0401; GFX9-NEXT:    s_mov_b32 s0, 0xc0c0001402; GFX9-NEXT:    v_perm_b32 v0, 0, v0, s0403; GFX9-NEXT:    v_readfirstlane_b32 s0, v0404; GFX9-NEXT:    ; return to shader part epilog405;406; GFX10-LABEL: s_bswap_i16:407; GFX10:       ; %bb.0:408; GFX10-NEXT:    v_perm_b32 v0, 0, s0, 0xc0c0001409; GFX10-NEXT:    v_readfirstlane_b32 s0, v0410; GFX10-NEXT:    ; return to shader part epilog411  %bswap = call i16 @llvm.bswap.i16(i16 %src)412  ret i16 %bswap413}414 415define i16 @v_bswap_i16(i16 %src) {416; GFX7-LABEL: v_bswap_i16:417; GFX7:       ; %bb.0:418; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)419; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 8, v0420; GFX7-NEXT:    v_bfe_u32 v0, v0, 8, 8421; GFX7-NEXT:    v_or_b32_e32 v0, v0, v1422; GFX7-NEXT:    s_setpc_b64 s[30:31]423;424; GFX8-LABEL: v_bswap_i16:425; GFX8:       ; %bb.0:426; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)427; GFX8-NEXT:    s_mov_b32 s4, 0xc0c0001428; GFX8-NEXT:    v_perm_b32 v0, 0, v0, s4429; GFX8-NEXT:    s_setpc_b64 s[30:31]430;431; GFX9-LABEL: v_bswap_i16:432; GFX9:       ; %bb.0:433; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)434; GFX9-NEXT:    s_mov_b32 s4, 0xc0c0001435; GFX9-NEXT:    v_perm_b32 v0, 0, v0, s4436; GFX9-NEXT:    s_setpc_b64 s[30:31]437;438; GFX10-LABEL: v_bswap_i16:439; GFX10:       ; %bb.0:440; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)441; GFX10-NEXT:    v_perm_b32 v0, 0, v0, 0xc0c0001442; GFX10-NEXT:    s_setpc_b64 s[30:31]443  %bswap = call i16 @llvm.bswap.i16(i16 %src)444  ret i16 %bswap445}446 447define amdgpu_ps i32 @s_bswap_v2i16(<2 x i16> inreg %src) {448; GFX7-LABEL: s_bswap_v2i16:449; GFX7:       ; %bb.0:450; GFX7-NEXT:    s_lshl_b32 s2, s0, 8451; GFX7-NEXT:    s_bfe_u32 s0, s0, 0x80008452; GFX7-NEXT:    s_or_b32 s0, s0, s2453; GFX7-NEXT:    s_lshl_b32 s2, s1, 8454; GFX7-NEXT:    s_bfe_u32 s1, s1, 0x80008455; GFX7-NEXT:    s_or_b32 s1, s1, s2456; GFX7-NEXT:    s_and_b32 s1, 0xffff, s1457; GFX7-NEXT:    s_and_b32 s0, 0xffff, s0458; GFX7-NEXT:    s_lshl_b32 s1, s1, 16459; GFX7-NEXT:    s_or_b32 s0, s0, s1460; GFX7-NEXT:    ; return to shader part epilog461;462; GFX8-LABEL: s_bswap_v2i16:463; GFX8:       ; %bb.0:464; GFX8-NEXT:    v_mov_b32_e32 v0, s0465; GFX8-NEXT:    s_mov_b32 s0, 0x2030001466; GFX8-NEXT:    v_perm_b32 v0, 0, v0, s0467; GFX8-NEXT:    v_readfirstlane_b32 s0, v0468; GFX8-NEXT:    ; return to shader part epilog469;470; GFX9-LABEL: s_bswap_v2i16:471; GFX9:       ; %bb.0:472; GFX9-NEXT:    v_mov_b32_e32 v0, s0473; GFX9-NEXT:    s_mov_b32 s0, 0x2030001474; GFX9-NEXT:    v_perm_b32 v0, 0, v0, s0475; GFX9-NEXT:    v_readfirstlane_b32 s0, v0476; GFX9-NEXT:    ; return to shader part epilog477;478; GFX10-LABEL: s_bswap_v2i16:479; GFX10:       ; %bb.0:480; GFX10-NEXT:    v_perm_b32 v0, 0, s0, 0x2030001481; GFX10-NEXT:    v_readfirstlane_b32 s0, v0482; GFX10-NEXT:    ; return to shader part epilog483  %bswap = call <2 x i16> @llvm.bswap.v2i16(<2 x i16> %src)484  %cast = bitcast <2 x i16> %bswap to i32485  ret i32 %cast486}487 488define i32 @v_bswap_i16_zext_to_i32(i16 %src) {489; GFX7-LABEL: v_bswap_i16_zext_to_i32:490; GFX7:       ; %bb.0:491; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)492; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 8, v0493; GFX7-NEXT:    v_bfe_u32 v0, v0, 8, 8494; GFX7-NEXT:    v_or_b32_e32 v0, v0, v1495; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v0496; GFX7-NEXT:    s_setpc_b64 s[30:31]497;498; GFX8-LABEL: v_bswap_i16_zext_to_i32:499; GFX8:       ; %bb.0:500; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)501; GFX8-NEXT:    s_mov_b32 s4, 0xc0c0001502; GFX8-NEXT:    v_perm_b32 v0, 0, v0, s4503; GFX8-NEXT:    s_setpc_b64 s[30:31]504;505; GFX9-LABEL: v_bswap_i16_zext_to_i32:506; GFX9:       ; %bb.0:507; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)508; GFX9-NEXT:    s_mov_b32 s4, 0xc0c0001509; GFX9-NEXT:    v_perm_b32 v0, 0, v0, s4510; GFX9-NEXT:    s_setpc_b64 s[30:31]511;512; GFX10-LABEL: v_bswap_i16_zext_to_i32:513; GFX10:       ; %bb.0:514; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)515; GFX10-NEXT:    v_perm_b32 v0, 0, v0, 0xc0c0001516; GFX10-NEXT:    s_setpc_b64 s[30:31]517  %bswap = call i16 @llvm.bswap.i16(i16 %src)518  %zext = zext i16 %bswap to i32519  ret i32 %zext520}521 522define i32 @v_bswap_i16_sext_to_i32(i16 %src) {523; GFX7-LABEL: v_bswap_i16_sext_to_i32:524; GFX7:       ; %bb.0:525; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)526; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 8, v0527; GFX7-NEXT:    v_bfe_u32 v0, v0, 8, 8528; GFX7-NEXT:    v_or_b32_e32 v0, v0, v1529; GFX7-NEXT:    v_bfe_i32 v0, v0, 0, 16530; GFX7-NEXT:    s_setpc_b64 s[30:31]531;532; GFX8-LABEL: v_bswap_i16_sext_to_i32:533; GFX8:       ; %bb.0:534; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)535; GFX8-NEXT:    s_mov_b32 s4, 0xc0c0001536; GFX8-NEXT:    v_perm_b32 v0, 0, v0, s4537; GFX8-NEXT:    v_bfe_i32 v0, v0, 0, 16538; GFX8-NEXT:    s_setpc_b64 s[30:31]539;540; GFX9-LABEL: v_bswap_i16_sext_to_i32:541; GFX9:       ; %bb.0:542; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)543; GFX9-NEXT:    s_mov_b32 s4, 0xc0c0001544; GFX9-NEXT:    v_perm_b32 v0, 0, v0, s4545; GFX9-NEXT:    v_bfe_i32 v0, v0, 0, 16546; GFX9-NEXT:    s_setpc_b64 s[30:31]547;548; GFX10-LABEL: v_bswap_i16_sext_to_i32:549; GFX10:       ; %bb.0:550; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)551; GFX10-NEXT:    v_perm_b32 v0, 0, v0, 0xc0c0001552; GFX10-NEXT:    v_bfe_i32 v0, v0, 0, 16553; GFX10-NEXT:    s_setpc_b64 s[30:31]554  %bswap = call i16 @llvm.bswap.i16(i16 %src)555  %zext = sext i16 %bswap to i32556  ret i32 %zext557}558 559define <2 x i16> @v_bswap_v2i16(<2 x i16> %src) {560; GFX7-LABEL: v_bswap_v2i16:561; GFX7:       ; %bb.0:562; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)563; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 8, v0564; GFX7-NEXT:    v_bfe_u32 v0, v0, 8, 8565; GFX7-NEXT:    v_or_b32_e32 v0, v0, v2566; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 8, v1567; GFX7-NEXT:    v_bfe_u32 v1, v1, 8, 8568; GFX7-NEXT:    v_or_b32_e32 v1, v1, v2569; GFX7-NEXT:    s_setpc_b64 s[30:31]570;571; GFX8-LABEL: v_bswap_v2i16:572; GFX8:       ; %bb.0:573; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)574; GFX8-NEXT:    s_mov_b32 s4, 0x2030001575; GFX8-NEXT:    v_perm_b32 v0, 0, v0, s4576; GFX8-NEXT:    s_setpc_b64 s[30:31]577;578; GFX9-LABEL: v_bswap_v2i16:579; GFX9:       ; %bb.0:580; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)581; GFX9-NEXT:    s_mov_b32 s4, 0x2030001582; GFX9-NEXT:    v_perm_b32 v0, 0, v0, s4583; GFX9-NEXT:    s_setpc_b64 s[30:31]584;585; GFX10-LABEL: v_bswap_v2i16:586; GFX10:       ; %bb.0:587; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)588; GFX10-NEXT:    v_perm_b32 v0, 0, v0, 0x2030001589; GFX10-NEXT:    s_setpc_b64 s[30:31]590  %bswap = call <2 x i16> @llvm.bswap.v2i16(<2 x i16> %src)591  ret <2 x i16> %bswap592}593 594define <3 x i16> @v_bswap_v3i16(<3 x i16> %src) {595; GFX7-LABEL: v_bswap_v3i16:596; GFX7:       ; %bb.0:597; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)598; GFX7-NEXT:    v_lshlrev_b32_e32 v3, 8, v0599; GFX7-NEXT:    v_bfe_u32 v0, v0, 8, 8600; GFX7-NEXT:    v_or_b32_e32 v0, v0, v3601; GFX7-NEXT:    v_lshlrev_b32_e32 v3, 8, v1602; GFX7-NEXT:    v_bfe_u32 v1, v1, 8, 8603; GFX7-NEXT:    v_or_b32_e32 v1, v1, v3604; GFX7-NEXT:    v_lshlrev_b32_e32 v3, 8, v2605; GFX7-NEXT:    v_bfe_u32 v2, v2, 8, 8606; GFX7-NEXT:    v_or_b32_e32 v2, v2, v3607; GFX7-NEXT:    s_setpc_b64 s[30:31]608;609; GFX8-LABEL: v_bswap_v3i16:610; GFX8:       ; %bb.0:611; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)612; GFX8-NEXT:    s_mov_b32 s4, 0x2030001613; GFX8-NEXT:    v_perm_b32 v0, 0, v0, s4614; GFX8-NEXT:    v_perm_b32 v1, 0, v1, s4615; GFX8-NEXT:    s_setpc_b64 s[30:31]616;617; GFX9-LABEL: v_bswap_v3i16:618; GFX9:       ; %bb.0:619; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)620; GFX9-NEXT:    s_mov_b32 s4, 0x2030001621; GFX9-NEXT:    v_perm_b32 v0, 0, v0, s4622; GFX9-NEXT:    v_perm_b32 v1, 0, v1, s4623; GFX9-NEXT:    s_setpc_b64 s[30:31]624;625; GFX10-LABEL: v_bswap_v3i16:626; GFX10:       ; %bb.0:627; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)628; GFX10-NEXT:    v_perm_b32 v0, 0, v0, 0x2030001629; GFX10-NEXT:    v_perm_b32 v1, 0, v1, 0x2030001630; GFX10-NEXT:    s_setpc_b64 s[30:31]631  %bswap = call <3 x i16> @llvm.bswap.v3i16(<3 x i16> %src)632  ret <3 x i16> %bswap633}634 635define i64 @v_bswap_i48(i64 %src) {636; GFX7-LABEL: v_bswap_i48:637; GFX7:       ; %bb.0:638; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)639; GFX7-NEXT:    v_alignbit_b32 v2, v1, v1, 8640; GFX7-NEXT:    v_alignbit_b32 v1, v1, v1, 24641; GFX7-NEXT:    s_mov_b32 s4, 0xff00ff642; GFX7-NEXT:    v_bfi_b32 v1, s4, v1, v2643; GFX7-NEXT:    v_alignbit_b32 v2, v0, v0, 8644; GFX7-NEXT:    v_alignbit_b32 v0, v0, v0, 24645; GFX7-NEXT:    v_bfi_b32 v2, s4, v0, v2646; GFX7-NEXT:    v_lshr_b64 v[0:1], v[1:2], 16647; GFX7-NEXT:    s_setpc_b64 s[30:31]648;649; GFX8-LABEL: v_bswap_i48:650; GFX8:       ; %bb.0:651; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)652; GFX8-NEXT:    s_mov_b32 s4, 0x10203653; GFX8-NEXT:    v_perm_b32 v1, 0, v1, s4654; GFX8-NEXT:    v_perm_b32 v2, 0, v0, s4655; GFX8-NEXT:    v_lshrrev_b64 v[0:1], 16, v[1:2]656; GFX8-NEXT:    s_setpc_b64 s[30:31]657;658; GFX9-LABEL: v_bswap_i48:659; GFX9:       ; %bb.0:660; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)661; GFX9-NEXT:    s_mov_b32 s4, 0x10203662; GFX9-NEXT:    v_perm_b32 v1, 0, v1, s4663; GFX9-NEXT:    v_perm_b32 v2, 0, v0, s4664; GFX9-NEXT:    v_lshrrev_b64 v[0:1], 16, v[1:2]665; GFX9-NEXT:    s_setpc_b64 s[30:31]666;667; GFX10-LABEL: v_bswap_i48:668; GFX10:       ; %bb.0:669; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)670; GFX10-NEXT:    v_perm_b32 v1, 0, v1, 0x10203671; GFX10-NEXT:    v_perm_b32 v2, 0, v0, 0x10203672; GFX10-NEXT:    v_lshrrev_b64 v[0:1], 16, v[1:2]673; GFX10-NEXT:    s_setpc_b64 s[30:31]674  %trunc = trunc i64 %src to i48675  %bswap = call i48 @llvm.bswap.i48(i48 %trunc)676  %zext = zext i48 %bswap to i64677  ret i64 %zext678}679 680declare i16 @llvm.bswap.i16(i16) #1681declare <2 x i16> @llvm.bswap.v2i16(<2 x i16>) #1682declare <3 x i16> @llvm.bswap.v3i16(<3 x i16>) #1683declare i32 @llvm.bswap.i32(i32) #1684declare <2 x i32> @llvm.bswap.v2i32(<2 x i32>) #1685declare i64 @llvm.bswap.i64(i64) #1686declare <2 x i64> @llvm.bswap.v2i64(<2 x i64>) #1687declare i48 @llvm.bswap.i48(i48) #1688 689attributes #0 = { convergent nounwind readnone }690attributes #1 = { nounwind readnone speculatable willreturn }691