brintos

brintos / llvm-project-archived public Read only

0
0
Text · 26.2 KiB · 3a2d056 Raw
667 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=kaveri < %s | FileCheck -check-prefix=GCN %s3 4define i128 @v_shl_i128_vv(i128 %lhs, i128 %rhs) {5; GCN-LABEL: v_shl_i128_vv:6; GCN:       ; %bb.0:7; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8; GCN-NEXT:    v_sub_i32_e32 v7, vcc, 64, v49; GCN-NEXT:    v_lshl_b64 v[5:6], v[2:3], v410; GCN-NEXT:    v_lshr_b64 v[7:8], v[0:1], v711; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v412; GCN-NEXT:    v_or_b32_e32 v7, v5, v713; GCN-NEXT:    v_subrev_i32_e32 v5, vcc, 64, v414; GCN-NEXT:    v_or_b32_e32 v8, v6, v815; GCN-NEXT:    v_lshl_b64 v[5:6], v[0:1], v516; GCN-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v417; GCN-NEXT:    v_cndmask_b32_e32 v5, v5, v7, vcc18; GCN-NEXT:    v_lshl_b64 v[0:1], v[0:1], v419; GCN-NEXT:    v_cndmask_b32_e64 v2, v5, v2, s[4:5]20; GCN-NEXT:    v_cndmask_b32_e32 v5, v6, v8, vcc21; GCN-NEXT:    v_cndmask_b32_e64 v3, v5, v3, s[4:5]22; GCN-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc23; GCN-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc24; GCN-NEXT:    s_setpc_b64 s[30:31]25  %shl = shl i128 %lhs, %rhs26  ret i128 %shl27}28 29define i128 @v_lshr_i128_vv(i128 %lhs, i128 %rhs) {30; GCN-LABEL: v_lshr_i128_vv:31; GCN:       ; %bb.0:32; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)33; GCN-NEXT:    v_sub_i32_e32 v7, vcc, 64, v434; GCN-NEXT:    v_lshr_b64 v[5:6], v[0:1], v435; GCN-NEXT:    v_lshl_b64 v[7:8], v[2:3], v736; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v437; GCN-NEXT:    v_or_b32_e32 v7, v5, v738; GCN-NEXT:    v_subrev_i32_e32 v5, vcc, 64, v439; GCN-NEXT:    v_or_b32_e32 v8, v6, v840; GCN-NEXT:    v_lshr_b64 v[5:6], v[2:3], v541; GCN-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v442; GCN-NEXT:    v_cndmask_b32_e32 v5, v5, v7, vcc43; GCN-NEXT:    v_lshr_b64 v[2:3], v[2:3], v444; GCN-NEXT:    v_cndmask_b32_e64 v0, v5, v0, s[4:5]45; GCN-NEXT:    v_cndmask_b32_e32 v5, v6, v8, vcc46; GCN-NEXT:    v_cndmask_b32_e64 v1, v5, v1, s[4:5]47; GCN-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc48; GCN-NEXT:    v_cndmask_b32_e32 v3, 0, v3, vcc49; GCN-NEXT:    s_setpc_b64 s[30:31]50 51  %shl = lshr i128 %lhs, %rhs52  ret i128 %shl53}54 55define i128 @v_ashr_i128_vv(i128 %lhs, i128 %rhs) {56; GCN-LABEL: v_ashr_i128_vv:57; GCN:       ; %bb.0:58; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)59; GCN-NEXT:    v_sub_i32_e32 v7, vcc, 64, v460; GCN-NEXT:    v_lshr_b64 v[5:6], v[0:1], v461; GCN-NEXT:    v_lshl_b64 v[7:8], v[2:3], v762; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v463; GCN-NEXT:    v_or_b32_e32 v7, v5, v764; GCN-NEXT:    v_subrev_i32_e32 v5, vcc, 64, v465; GCN-NEXT:    v_or_b32_e32 v8, v6, v866; GCN-NEXT:    v_ashr_i64 v[5:6], v[2:3], v567; GCN-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v468; GCN-NEXT:    v_cndmask_b32_e32 v5, v5, v7, vcc69; GCN-NEXT:    v_cndmask_b32_e64 v0, v5, v0, s[4:5]70; GCN-NEXT:    v_cndmask_b32_e32 v5, v6, v8, vcc71; GCN-NEXT:    v_cndmask_b32_e64 v1, v5, v1, s[4:5]72; GCN-NEXT:    v_ashr_i64 v[4:5], v[2:3], v473; GCN-NEXT:    v_ashrrev_i32_e32 v3, 31, v374; GCN-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc75; GCN-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc76; GCN-NEXT:    s_setpc_b64 s[30:31]77  %shl = ashr i128 %lhs, %rhs78  ret i128 %shl79}80 81 82define i128 @v_shl_i128_vk(i128 %lhs) {83; GCN-LABEL: v_shl_i128_vk:84; GCN:       ; %bb.0:85; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)86; GCN-NEXT:    v_lshl_b64 v[2:3], v[2:3], 1787; GCN-NEXT:    v_lshrrev_b32_e32 v4, 15, v188; GCN-NEXT:    v_or_b32_e32 v2, v2, v489; GCN-NEXT:    v_alignbit_b32 v1, v1, v0, 1590; GCN-NEXT:    v_lshlrev_b32_e32 v0, 17, v091; GCN-NEXT:    s_setpc_b64 s[30:31]92  %shl = shl i128 %lhs, 1793  ret i128 %shl94}95 96define i128 @v_lshr_i128_vk(i128 %lhs) {97; GCN-LABEL: v_lshr_i128_vk:98; GCN:       ; %bb.0:99; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)100; GCN-NEXT:    v_alignbit_b32 v0, v3, v2, 1101; GCN-NEXT:    v_lshrrev_b32_e32 v1, 1, v3102; GCN-NEXT:    v_mov_b32_e32 v2, 0103; GCN-NEXT:    v_mov_b32_e32 v3, 0104; GCN-NEXT:    s_setpc_b64 s[30:31]105  %shl = lshr i128 %lhs, 65106  ret i128 %shl107}108 109define i128 @v_ashr_i128_vk(i128 %lhs) {110; GCN-LABEL: v_ashr_i128_vk:111; GCN:       ; %bb.0:112; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)113; GCN-NEXT:    v_mov_b32_e32 v4, v1114; GCN-NEXT:    v_lshl_b64 v[0:1], v[2:3], 31115; GCN-NEXT:    v_lshrrev_b32_e32 v2, 1, v4116; GCN-NEXT:    v_or_b32_e32 v0, v2, v0117; GCN-NEXT:    v_ashrrev_i32_e32 v2, 1, v3118; GCN-NEXT:    v_ashrrev_i32_e32 v3, 31, v3119; GCN-NEXT:    s_setpc_b64 s[30:31]120  %shl = ashr i128 %lhs, 33121  ret i128 %shl122}123 124define i128 @v_shl_i128_kv(i128 %rhs) {125; GCN-LABEL: v_shl_i128_kv:126; GCN:       ; %bb.0:127; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)128; GCN-NEXT:    v_sub_i32_e32 v1, vcc, 64, v0129; GCN-NEXT:    v_lshr_b64 v[2:3], 17, v1130; GCN-NEXT:    v_subrev_i32_e32 v1, vcc, 64, v0131; GCN-NEXT:    v_lshl_b64 v[4:5], 17, v1132; GCN-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v0133; GCN-NEXT:    v_cndmask_b32_e32 v1, v4, v2, vcc134; GCN-NEXT:    v_cmp_ne_u32_e64 s[4:5], 0, v0135; GCN-NEXT:    v_cndmask_b32_e64 v2, 0, v1, s[4:5]136; GCN-NEXT:    v_lshl_b64 v[0:1], 17, v0137; GCN-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc138; GCN-NEXT:    v_cndmask_b32_e64 v3, 0, v3, s[4:5]139; GCN-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc140; GCN-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc141; GCN-NEXT:    s_setpc_b64 s[30:31]142  %shl = shl i128 17, %rhs143  ret i128 %shl144}145 146define i128 @v_lshr_i128_kv(i128 %rhs) {147; GCN-LABEL: v_lshr_i128_kv:148; GCN:       ; %bb.0:149; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)150; GCN-NEXT:    s_mov_b64 s[4:5], 0x41151; GCN-NEXT:    v_lshr_b64 v[1:2], s[4:5], v0152; GCN-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v0153; GCN-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc154; GCN-NEXT:    v_mov_b32_e32 v2, 0x41155; GCN-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v0156; GCN-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc157; GCN-NEXT:    v_mov_b32_e32 v1, 0158; GCN-NEXT:    v_mov_b32_e32 v2, 0159; GCN-NEXT:    v_mov_b32_e32 v3, 0160; GCN-NEXT:    s_setpc_b64 s[30:31]161  %shl = lshr i128 65, %rhs162  ret i128 %shl163}164 165define i128 @v_ashr_i128_kv(i128 %rhs) {166; GCN-LABEL: v_ashr_i128_kv:167; GCN:       ; %bb.0:168; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)169; GCN-NEXT:    v_lshr_b64 v[1:2], 33, v0170; GCN-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v0171; GCN-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc172; GCN-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v0173; GCN-NEXT:    v_cndmask_b32_e32 v0, 33, v1, vcc174; GCN-NEXT:    v_mov_b32_e32 v1, 0175; GCN-NEXT:    v_mov_b32_e32 v2, 0176; GCN-NEXT:    v_mov_b32_e32 v3, 0177; GCN-NEXT:    s_setpc_b64 s[30:31]178  %shl = ashr i128 33, %rhs179  ret i128 %shl180}181 182define amdgpu_kernel void @s_shl_i128_ss(i128 %lhs, i128 %rhs) {183; GCN-LABEL: s_shl_i128_ss:184; GCN:       ; %bb.0:185; GCN-NEXT:    s_load_dwordx8 s[0:7], s[8:9], 0x0186; GCN-NEXT:    s_add_i32 s12, s12, s17187; GCN-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8188; GCN-NEXT:    v_mov_b32_e32 v4, 0189; GCN-NEXT:    s_mov_b32 flat_scratch_lo, s13190; GCN-NEXT:    s_waitcnt lgkmcnt(0)191; GCN-NEXT:    s_sub_i32 s5, s4, 64192; GCN-NEXT:    s_sub_i32 s12, 64, s4193; GCN-NEXT:    s_lshl_b64 s[6:7], s[2:3], s4194; GCN-NEXT:    s_lshl_b64 s[8:9], s[0:1], s4195; GCN-NEXT:    s_lshl_b64 s[10:11], s[0:1], s5196; GCN-NEXT:    s_lshr_b64 s[0:1], s[0:1], s12197; GCN-NEXT:    s_or_b64 s[0:1], s[6:7], s[0:1]198; GCN-NEXT:    s_cmp_lt_u32 s4, 64199; GCN-NEXT:    s_cselect_b32 s0, s0, s10200; GCN-NEXT:    s_cselect_b32 s1, s1, s11201; GCN-NEXT:    s_cselect_b32 s5, s9, 0202; GCN-NEXT:    s_cselect_b32 s6, s8, 0203; GCN-NEXT:    s_cmp_eq_u32 s4, 0204; GCN-NEXT:    s_cselect_b32 s1, s3, s1205; GCN-NEXT:    s_cselect_b32 s0, s2, s0206; GCN-NEXT:    v_mov_b32_e32 v0, s6207; GCN-NEXT:    v_mov_b32_e32 v1, s5208; GCN-NEXT:    v_mov_b32_e32 v2, s0209; GCN-NEXT:    v_mov_b32_e32 v5, 0210; GCN-NEXT:    v_mov_b32_e32 v3, s1211; GCN-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]212; GCN-NEXT:    s_endpgm213  %shift = shl i128 %lhs, %rhs214  store i128 %shift, ptr addrspace(1) null215  ret void216}217 218define amdgpu_kernel void @s_lshr_i128_ss(i128 %lhs, i128 %rhs) {219; GCN-LABEL: s_lshr_i128_ss:220; GCN:       ; %bb.0:221; GCN-NEXT:    s_load_dwordx8 s[0:7], s[8:9], 0x0222; GCN-NEXT:    s_add_i32 s12, s12, s17223; GCN-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8224; GCN-NEXT:    v_mov_b32_e32 v4, 0225; GCN-NEXT:    s_mov_b32 flat_scratch_lo, s13226; GCN-NEXT:    s_waitcnt lgkmcnt(0)227; GCN-NEXT:    s_sub_i32 s5, s4, 64228; GCN-NEXT:    s_sub_i32 s12, 64, s4229; GCN-NEXT:    s_lshr_b64 s[6:7], s[0:1], s4230; GCN-NEXT:    s_lshr_b64 s[8:9], s[2:3], s4231; GCN-NEXT:    s_lshr_b64 s[10:11], s[2:3], s5232; GCN-NEXT:    s_lshl_b64 s[2:3], s[2:3], s12233; GCN-NEXT:    s_or_b64 s[2:3], s[6:7], s[2:3]234; GCN-NEXT:    s_cmp_lt_u32 s4, 64235; GCN-NEXT:    s_cselect_b32 s2, s2, s10236; GCN-NEXT:    s_cselect_b32 s3, s3, s11237; GCN-NEXT:    s_cselect_b32 s5, s9, 0238; GCN-NEXT:    s_cselect_b32 s6, s8, 0239; GCN-NEXT:    s_cmp_eq_u32 s4, 0240; GCN-NEXT:    s_cselect_b32 s1, s1, s3241; GCN-NEXT:    s_cselect_b32 s0, s0, s2242; GCN-NEXT:    v_mov_b32_e32 v0, s0243; GCN-NEXT:    v_mov_b32_e32 v1, s1244; GCN-NEXT:    v_mov_b32_e32 v2, s6245; GCN-NEXT:    v_mov_b32_e32 v5, 0246; GCN-NEXT:    v_mov_b32_e32 v3, s5247; GCN-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]248; GCN-NEXT:    s_endpgm249  %shift = lshr i128 %lhs, %rhs250  store i128 %shift, ptr addrspace(1) null251  ret void252}253 254define amdgpu_kernel void @s_ashr_i128_ss(i128 %lhs, i128 %rhs) {255; GCN-LABEL: s_ashr_i128_ss:256; GCN:       ; %bb.0:257; GCN-NEXT:    s_load_dwordx8 s[0:7], s[8:9], 0x0258; GCN-NEXT:    s_add_i32 s12, s12, s17259; GCN-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8260; GCN-NEXT:    v_mov_b32_e32 v4, 0261; GCN-NEXT:    s_mov_b32 flat_scratch_lo, s13262; GCN-NEXT:    s_waitcnt lgkmcnt(0)263; GCN-NEXT:    s_sub_i32 s5, 64, s4264; GCN-NEXT:    s_lshr_b64 s[6:7], s[0:1], s4265; GCN-NEXT:    s_sub_i32 s10, s4, 64266; GCN-NEXT:    s_lshl_b64 s[8:9], s[2:3], s5267; GCN-NEXT:    s_ashr_i32 s12, s3, 31268; GCN-NEXT:    s_ashr_i64 s[10:11], s[2:3], s10269; GCN-NEXT:    s_or_b64 s[6:7], s[6:7], s[8:9]270; GCN-NEXT:    s_ashr_i64 s[2:3], s[2:3], s4271; GCN-NEXT:    s_cmp_lt_u32 s4, 64272; GCN-NEXT:    s_cselect_b32 s3, s3, s12273; GCN-NEXT:    s_cselect_b32 s2, s2, s12274; GCN-NEXT:    s_cselect_b32 s5, s6, s10275; GCN-NEXT:    s_cselect_b32 s6, s7, s11276; GCN-NEXT:    s_cmp_eq_u32 s4, 0277; GCN-NEXT:    s_cselect_b32 s1, s1, s6278; GCN-NEXT:    s_cselect_b32 s0, s0, s5279; GCN-NEXT:    v_mov_b32_e32 v0, s0280; GCN-NEXT:    v_mov_b32_e32 v1, s1281; GCN-NEXT:    v_mov_b32_e32 v2, s2282; GCN-NEXT:    v_mov_b32_e32 v5, 0283; GCN-NEXT:    v_mov_b32_e32 v3, s3284; GCN-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]285; GCN-NEXT:    s_endpgm286  %shift = ashr i128 %lhs, %rhs287  store i128 %shift, ptr addrspace(1) null288  ret void289}290 291define <2 x i128> @v_shl_v2i128_vv(<2 x i128> %lhs, <2 x i128> %rhs) {292; GCN-LABEL: v_shl_v2i128_vv:293; GCN:       ; %bb.0:294; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)295; GCN-NEXT:    v_sub_i32_e32 v16, vcc, 64, v8296; GCN-NEXT:    v_lshr_b64 v[16:17], v[0:1], v16297; GCN-NEXT:    v_lshl_b64 v[18:19], v[2:3], v8298; GCN-NEXT:    v_cmp_gt_u64_e32 vcc, 64, v[8:9]299; GCN-NEXT:    v_cmp_eq_u64_e64 s[4:5], 0, v[10:11]300; GCN-NEXT:    v_or_b32_e32 v11, v9, v11301; GCN-NEXT:    v_subrev_i32_e64 v9, s[6:7], 64, v8302; GCN-NEXT:    v_or_b32_e32 v19, v19, v17303; GCN-NEXT:    v_or_b32_e32 v18, v18, v16304; GCN-NEXT:    v_or_b32_e32 v10, v8, v10305; GCN-NEXT:    v_lshl_b64 v[16:17], v[0:1], v9306; GCN-NEXT:    s_and_b64 vcc, s[4:5], vcc307; GCN-NEXT:    v_cmp_eq_u64_e64 s[4:5], 0, v[10:11]308; GCN-NEXT:    v_cndmask_b32_e32 v9, v16, v18, vcc309; GCN-NEXT:    v_cndmask_b32_e64 v2, v9, v2, s[4:5]310; GCN-NEXT:    v_sub_i32_e64 v9, s[6:7], 64, v12311; GCN-NEXT:    v_cndmask_b32_e32 v11, v17, v19, vcc312; GCN-NEXT:    v_lshr_b64 v[9:10], v[4:5], v9313; GCN-NEXT:    v_lshl_b64 v[16:17], v[6:7], v12314; GCN-NEXT:    v_cndmask_b32_e64 v3, v11, v3, s[4:5]315; GCN-NEXT:    v_or_b32_e32 v16, v16, v9316; GCN-NEXT:    v_cmp_gt_u64_e64 s[4:5], 64, v[12:13]317; GCN-NEXT:    v_cmp_eq_u64_e64 s[6:7], 0, v[14:15]318; GCN-NEXT:    v_subrev_i32_e64 v9, s[8:9], 64, v12319; GCN-NEXT:    v_or_b32_e32 v11, v17, v10320; GCN-NEXT:    v_lshl_b64 v[9:10], v[4:5], v9321; GCN-NEXT:    v_or_b32_e32 v15, v13, v15322; GCN-NEXT:    v_or_b32_e32 v14, v12, v14323; GCN-NEXT:    s_and_b64 s[4:5], s[6:7], s[4:5]324; GCN-NEXT:    v_cmp_eq_u64_e64 s[6:7], 0, v[14:15]325; GCN-NEXT:    v_cndmask_b32_e64 v9, v9, v16, s[4:5]326; GCN-NEXT:    v_lshl_b64 v[0:1], v[0:1], v8327; GCN-NEXT:    v_lshl_b64 v[4:5], v[4:5], v12328; GCN-NEXT:    v_cndmask_b32_e64 v6, v9, v6, s[6:7]329; GCN-NEXT:    v_cndmask_b32_e64 v9, v10, v11, s[4:5]330; GCN-NEXT:    v_cndmask_b32_e64 v7, v9, v7, s[6:7]331; GCN-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc332; GCN-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc333; GCN-NEXT:    v_cndmask_b32_e64 v4, 0, v4, s[4:5]334; GCN-NEXT:    v_cndmask_b32_e64 v5, 0, v5, s[4:5]335; GCN-NEXT:    s_setpc_b64 s[30:31]336  %shl = shl <2 x i128> %lhs, %rhs337  ret <2 x i128> %shl338}339 340define <2 x i128> @v_lshr_v2i128_vv(<2 x i128> %lhs, <2 x i128> %rhs) {341; GCN-LABEL: v_lshr_v2i128_vv:342; GCN:       ; %bb.0:343; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)344; GCN-NEXT:    v_sub_i32_e32 v16, vcc, 64, v8345; GCN-NEXT:    v_lshl_b64 v[16:17], v[2:3], v16346; GCN-NEXT:    v_lshr_b64 v[18:19], v[0:1], v8347; GCN-NEXT:    v_cmp_gt_u64_e32 vcc, 64, v[8:9]348; GCN-NEXT:    v_cmp_eq_u64_e64 s[4:5], 0, v[10:11]349; GCN-NEXT:    v_or_b32_e32 v11, v9, v11350; GCN-NEXT:    v_subrev_i32_e64 v9, s[6:7], 64, v8351; GCN-NEXT:    v_or_b32_e32 v19, v19, v17352; GCN-NEXT:    v_or_b32_e32 v18, v18, v16353; GCN-NEXT:    v_or_b32_e32 v10, v8, v10354; GCN-NEXT:    v_lshr_b64 v[16:17], v[2:3], v9355; GCN-NEXT:    s_and_b64 vcc, s[4:5], vcc356; GCN-NEXT:    v_cmp_eq_u64_e64 s[4:5], 0, v[10:11]357; GCN-NEXT:    v_cndmask_b32_e32 v9, v16, v18, vcc358; GCN-NEXT:    v_cndmask_b32_e64 v0, v9, v0, s[4:5]359; GCN-NEXT:    v_sub_i32_e64 v9, s[6:7], 64, v12360; GCN-NEXT:    v_cndmask_b32_e32 v11, v17, v19, vcc361; GCN-NEXT:    v_lshl_b64 v[9:10], v[6:7], v9362; GCN-NEXT:    v_lshr_b64 v[16:17], v[4:5], v12363; GCN-NEXT:    v_cndmask_b32_e64 v1, v11, v1, s[4:5]364; GCN-NEXT:    v_or_b32_e32 v16, v16, v9365; GCN-NEXT:    v_cmp_gt_u64_e64 s[4:5], 64, v[12:13]366; GCN-NEXT:    v_cmp_eq_u64_e64 s[6:7], 0, v[14:15]367; GCN-NEXT:    v_subrev_i32_e64 v9, s[8:9], 64, v12368; GCN-NEXT:    v_or_b32_e32 v11, v17, v10369; GCN-NEXT:    v_lshr_b64 v[9:10], v[6:7], v9370; GCN-NEXT:    v_or_b32_e32 v15, v13, v15371; GCN-NEXT:    v_or_b32_e32 v14, v12, v14372; GCN-NEXT:    s_and_b64 s[4:5], s[6:7], s[4:5]373; GCN-NEXT:    v_cmp_eq_u64_e64 s[6:7], 0, v[14:15]374; GCN-NEXT:    v_cndmask_b32_e64 v9, v9, v16, s[4:5]375; GCN-NEXT:    v_lshr_b64 v[2:3], v[2:3], v8376; GCN-NEXT:    v_lshr_b64 v[6:7], v[6:7], v12377; GCN-NEXT:    v_cndmask_b32_e64 v4, v9, v4, s[6:7]378; GCN-NEXT:    v_cndmask_b32_e64 v9, v10, v11, s[4:5]379; GCN-NEXT:    v_cndmask_b32_e64 v5, v9, v5, s[6:7]380; GCN-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc381; GCN-NEXT:    v_cndmask_b32_e32 v3, 0, v3, vcc382; GCN-NEXT:    v_cndmask_b32_e64 v6, 0, v6, s[4:5]383; GCN-NEXT:    v_cndmask_b32_e64 v7, 0, v7, s[4:5]384; GCN-NEXT:    s_setpc_b64 s[30:31]385  %shl = lshr <2 x i128> %lhs, %rhs386  ret <2 x i128> %shl387}388 389define <2 x i128> @v_ashr_v2i128_vv(<2 x i128> %lhs, <2 x i128> %rhs) {390; GCN-LABEL: v_ashr_v2i128_vv:391; GCN:       ; %bb.0:392; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)393; GCN-NEXT:    v_sub_i32_e32 v16, vcc, 64, v8394; GCN-NEXT:    v_lshl_b64 v[16:17], v[2:3], v16395; GCN-NEXT:    v_lshr_b64 v[18:19], v[0:1], v8396; GCN-NEXT:    v_cmp_gt_u64_e32 vcc, 64, v[8:9]397; GCN-NEXT:    v_cmp_eq_u64_e64 s[4:5], 0, v[10:11]398; GCN-NEXT:    v_or_b32_e32 v11, v9, v11399; GCN-NEXT:    v_subrev_i32_e64 v9, s[6:7], 64, v8400; GCN-NEXT:    v_or_b32_e32 v19, v19, v17401; GCN-NEXT:    v_or_b32_e32 v18, v18, v16402; GCN-NEXT:    v_or_b32_e32 v10, v8, v10403; GCN-NEXT:    v_ashr_i64 v[16:17], v[2:3], v9404; GCN-NEXT:    s_and_b64 vcc, s[4:5], vcc405; GCN-NEXT:    v_cmp_eq_u64_e64 s[4:5], 0, v[10:11]406; GCN-NEXT:    v_cndmask_b32_e32 v9, v16, v18, vcc407; GCN-NEXT:    v_cndmask_b32_e64 v0, v9, v0, s[4:5]408; GCN-NEXT:    v_sub_i32_e64 v9, s[6:7], 64, v12409; GCN-NEXT:    v_cndmask_b32_e32 v11, v17, v19, vcc410; GCN-NEXT:    v_lshl_b64 v[9:10], v[6:7], v9411; GCN-NEXT:    v_lshr_b64 v[16:17], v[4:5], v12412; GCN-NEXT:    v_cndmask_b32_e64 v1, v11, v1, s[4:5]413; GCN-NEXT:    v_or_b32_e32 v16, v16, v9414; GCN-NEXT:    v_cmp_gt_u64_e64 s[4:5], 64, v[12:13]415; GCN-NEXT:    v_cmp_eq_u64_e64 s[6:7], 0, v[14:15]416; GCN-NEXT:    v_subrev_i32_e64 v9, s[8:9], 64, v12417; GCN-NEXT:    v_or_b32_e32 v11, v17, v10418; GCN-NEXT:    v_ashr_i64 v[9:10], v[6:7], v9419; GCN-NEXT:    v_or_b32_e32 v15, v13, v15420; GCN-NEXT:    v_or_b32_e32 v14, v12, v14421; GCN-NEXT:    s_and_b64 s[4:5], s[6:7], s[4:5]422; GCN-NEXT:    v_cmp_eq_u64_e64 s[6:7], 0, v[14:15]423; GCN-NEXT:    v_cndmask_b32_e64 v9, v9, v16, s[4:5]424; GCN-NEXT:    v_cndmask_b32_e64 v4, v9, v4, s[6:7]425; GCN-NEXT:    v_cndmask_b32_e64 v9, v10, v11, s[4:5]426; GCN-NEXT:    v_cndmask_b32_e64 v5, v9, v5, s[6:7]427; GCN-NEXT:    v_ashr_i64 v[8:9], v[2:3], v8428; GCN-NEXT:    v_ashrrev_i32_e32 v3, 31, v3429; GCN-NEXT:    v_cndmask_b32_e32 v2, v3, v8, vcc430; GCN-NEXT:    v_cndmask_b32_e32 v3, v3, v9, vcc431; GCN-NEXT:    v_ashr_i64 v[8:9], v[6:7], v12432; GCN-NEXT:    v_ashrrev_i32_e32 v7, 31, v7433; GCN-NEXT:    v_cndmask_b32_e64 v6, v7, v8, s[4:5]434; GCN-NEXT:    v_cndmask_b32_e64 v7, v7, v9, s[4:5]435; GCN-NEXT:    s_setpc_b64 s[30:31]436  %shl = ashr <2 x i128> %lhs, %rhs437  ret <2 x i128> %shl438}439 440define amdgpu_kernel void @s_shl_v2i128ss(<2 x i128> %lhs, <2 x i128> %rhs) {441; GCN-LABEL: s_shl_v2i128ss:442; GCN:       ; %bb.0:443; GCN-NEXT:    s_add_i32 s12, s12, s17444; GCN-NEXT:    s_mov_b32 flat_scratch_lo, s13445; GCN-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8446; GCN-NEXT:    s_load_dwordx16 s[0:15], s[8:9], 0x0447; GCN-NEXT:    v_mov_b32_e32 v6, 16448; GCN-NEXT:    v_mov_b32_e32 v4, 0449; GCN-NEXT:    v_mov_b32_e32 v7, 0450; GCN-NEXT:    v_mov_b32_e32 v5, 0451; GCN-NEXT:    s_waitcnt lgkmcnt(0)452; GCN-NEXT:    v_cmp_lt_u64_e64 s[16:17], s[8:9], 64453; GCN-NEXT:    v_cmp_eq_u64_e64 s[18:19], s[10:11], 0454; GCN-NEXT:    s_sub_i32 s22, 64, s8455; GCN-NEXT:    s_sub_i32 s20, s8, 64456; GCN-NEXT:    s_lshr_b64 s[22:23], s[0:1], s22457; GCN-NEXT:    s_and_b64 s[16:17], s[18:19], s[16:17]458; GCN-NEXT:    s_lshl_b64 s[18:19], s[2:3], s8459; GCN-NEXT:    s_lshl_b64 s[20:21], s[0:1], s20460; GCN-NEXT:    s_or_b64 s[18:19], s[18:19], s[22:23]461; GCN-NEXT:    s_and_b64 s[22:23], s[16:17], exec462; GCN-NEXT:    s_cselect_b32 s19, s19, s21463; GCN-NEXT:    s_or_b64 s[10:11], s[8:9], s[10:11]464; GCN-NEXT:    v_cmp_eq_u64_e64 s[10:11], s[10:11], 0465; GCN-NEXT:    s_and_b64 s[22:23], s[10:11], exec466; GCN-NEXT:    s_cselect_b32 s9, s3, s19467; GCN-NEXT:    s_and_b64 s[22:23], s[16:17], exec468; GCN-NEXT:    s_cselect_b32 s3, s18, s20469; GCN-NEXT:    s_and_b64 s[10:11], s[10:11], exec470; GCN-NEXT:    v_cmp_lt_u64_e64 s[10:11], s[12:13], 64471; GCN-NEXT:    v_cmp_eq_u64_e64 s[18:19], s[14:15], 0472; GCN-NEXT:    s_cselect_b32 s22, s2, s3473; GCN-NEXT:    s_and_b64 s[2:3], s[18:19], s[10:11]474; GCN-NEXT:    s_sub_i32 s18, 64, s12475; GCN-NEXT:    s_sub_i32 s10, s12, 64476; GCN-NEXT:    s_lshr_b64 s[18:19], s[4:5], s18477; GCN-NEXT:    s_lshl_b64 s[20:21], s[6:7], s12478; GCN-NEXT:    s_lshl_b64 s[10:11], s[4:5], s10479; GCN-NEXT:    s_or_b64 s[18:19], s[20:21], s[18:19]480; GCN-NEXT:    s_and_b64 s[20:21], s[2:3], exec481; GCN-NEXT:    s_cselect_b32 s11, s19, s11482; GCN-NEXT:    s_or_b64 s[14:15], s[12:13], s[14:15]483; GCN-NEXT:    v_cmp_eq_u64_e64 s[14:15], s[14:15], 0484; GCN-NEXT:    s_and_b64 s[20:21], s[14:15], exec485; GCN-NEXT:    s_cselect_b32 s13, s7, s11486; GCN-NEXT:    s_and_b64 s[20:21], s[2:3], exec487; GCN-NEXT:    s_cselect_b32 s7, s18, s10488; GCN-NEXT:    s_and_b64 s[10:11], s[14:15], exec489; GCN-NEXT:    s_cselect_b32 s10, s6, s7490; GCN-NEXT:    s_lshl_b64 s[0:1], s[0:1], s8491; GCN-NEXT:    s_and_b64 s[6:7], s[16:17], exec492; GCN-NEXT:    s_cselect_b32 s6, s1, 0493; GCN-NEXT:    s_cselect_b32 s7, s0, 0494; GCN-NEXT:    s_lshl_b64 s[0:1], s[4:5], s12495; GCN-NEXT:    s_and_b64 s[2:3], s[2:3], exec496; GCN-NEXT:    s_cselect_b32 s1, s1, 0497; GCN-NEXT:    s_cselect_b32 s0, s0, 0498; GCN-NEXT:    v_mov_b32_e32 v0, s0499; GCN-NEXT:    v_mov_b32_e32 v1, s1500; GCN-NEXT:    v_mov_b32_e32 v2, s10501; GCN-NEXT:    v_mov_b32_e32 v3, s13502; GCN-NEXT:    flat_store_dwordx4 v[6:7], v[0:3]503; GCN-NEXT:    s_nop 0504; GCN-NEXT:    v_mov_b32_e32 v0, s7505; GCN-NEXT:    v_mov_b32_e32 v1, s6506; GCN-NEXT:    v_mov_b32_e32 v2, s22507; GCN-NEXT:    v_mov_b32_e32 v3, s9508; GCN-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]509; GCN-NEXT:    s_endpgm510  %shift = shl <2 x i128> %lhs, %rhs511  store <2 x i128> %shift, ptr addrspace(1) null512  ret void513}514 515define amdgpu_kernel void @s_lshr_v2i128_ss(<2 x i128> %lhs, <2 x i128> %rhs) {516; GCN-LABEL: s_lshr_v2i128_ss:517; GCN:       ; %bb.0:518; GCN-NEXT:    s_add_i32 s12, s12, s17519; GCN-NEXT:    s_mov_b32 flat_scratch_lo, s13520; GCN-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8521; GCN-NEXT:    s_load_dwordx16 s[0:15], s[8:9], 0x0522; GCN-NEXT:    v_mov_b32_e32 v6, 16523; GCN-NEXT:    v_mov_b32_e32 v4, 0524; GCN-NEXT:    v_mov_b32_e32 v7, 0525; GCN-NEXT:    v_mov_b32_e32 v5, 0526; GCN-NEXT:    s_waitcnt lgkmcnt(0)527; GCN-NEXT:    v_cmp_lt_u64_e64 s[16:17], s[8:9], 64528; GCN-NEXT:    v_cmp_eq_u64_e64 s[18:19], s[10:11], 0529; GCN-NEXT:    s_sub_i32 s22, 64, s8530; GCN-NEXT:    s_sub_i32 s20, s8, 64531; GCN-NEXT:    s_lshl_b64 s[22:23], s[2:3], s22532; GCN-NEXT:    s_and_b64 s[16:17], s[18:19], s[16:17]533; GCN-NEXT:    s_lshr_b64 s[18:19], s[0:1], s8534; GCN-NEXT:    s_lshr_b64 s[20:21], s[2:3], s20535; GCN-NEXT:    s_or_b64 s[18:19], s[18:19], s[22:23]536; GCN-NEXT:    s_and_b64 s[22:23], s[16:17], exec537; GCN-NEXT:    s_cselect_b32 s19, s19, s21538; GCN-NEXT:    s_or_b64 s[10:11], s[8:9], s[10:11]539; GCN-NEXT:    v_cmp_eq_u64_e64 s[10:11], s[10:11], 0540; GCN-NEXT:    s_and_b64 s[22:23], s[10:11], exec541; GCN-NEXT:    s_cselect_b32 s9, s1, s19542; GCN-NEXT:    s_and_b64 s[22:23], s[16:17], exec543; GCN-NEXT:    s_cselect_b32 s1, s18, s20544; GCN-NEXT:    s_and_b64 s[10:11], s[10:11], exec545; GCN-NEXT:    v_cmp_lt_u64_e64 s[10:11], s[12:13], 64546; GCN-NEXT:    v_cmp_eq_u64_e64 s[18:19], s[14:15], 0547; GCN-NEXT:    s_cselect_b32 s22, s0, s1548; GCN-NEXT:    s_and_b64 s[0:1], s[18:19], s[10:11]549; GCN-NEXT:    s_sub_i32 s18, 64, s12550; GCN-NEXT:    s_sub_i32 s10, s12, 64551; GCN-NEXT:    s_lshl_b64 s[18:19], s[6:7], s18552; GCN-NEXT:    s_lshr_b64 s[20:21], s[4:5], s12553; GCN-NEXT:    s_lshr_b64 s[10:11], s[6:7], s10554; GCN-NEXT:    s_or_b64 s[18:19], s[20:21], s[18:19]555; GCN-NEXT:    s_and_b64 s[20:21], s[0:1], exec556; GCN-NEXT:    s_cselect_b32 s11, s19, s11557; GCN-NEXT:    s_or_b64 s[14:15], s[12:13], s[14:15]558; GCN-NEXT:    v_cmp_eq_u64_e64 s[14:15], s[14:15], 0559; GCN-NEXT:    s_and_b64 s[20:21], s[14:15], exec560; GCN-NEXT:    s_cselect_b32 s13, s5, s11561; GCN-NEXT:    s_and_b64 s[20:21], s[0:1], exec562; GCN-NEXT:    s_cselect_b32 s5, s18, s10563; GCN-NEXT:    s_and_b64 s[10:11], s[14:15], exec564; GCN-NEXT:    s_cselect_b32 s10, s4, s5565; GCN-NEXT:    s_lshr_b64 s[2:3], s[2:3], s8566; GCN-NEXT:    s_and_b64 s[4:5], s[16:17], exec567; GCN-NEXT:    s_cselect_b32 s4, s3, 0568; GCN-NEXT:    s_cselect_b32 s5, s2, 0569; GCN-NEXT:    s_lshr_b64 s[2:3], s[6:7], s12570; GCN-NEXT:    s_and_b64 s[0:1], s[0:1], exec571; GCN-NEXT:    s_cselect_b32 s0, s3, 0572; GCN-NEXT:    s_cselect_b32 s1, s2, 0573; GCN-NEXT:    v_mov_b32_e32 v0, s10574; GCN-NEXT:    v_mov_b32_e32 v1, s13575; GCN-NEXT:    v_mov_b32_e32 v2, s1576; GCN-NEXT:    v_mov_b32_e32 v3, s0577; GCN-NEXT:    flat_store_dwordx4 v[6:7], v[0:3]578; GCN-NEXT:    s_nop 0579; GCN-NEXT:    v_mov_b32_e32 v0, s22580; GCN-NEXT:    v_mov_b32_e32 v1, s9581; GCN-NEXT:    v_mov_b32_e32 v2, s5582; GCN-NEXT:    v_mov_b32_e32 v3, s4583; GCN-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]584; GCN-NEXT:    s_endpgm585  %shift = lshr <2 x i128> %lhs, %rhs586  store <2 x i128> %shift, ptr addrspace(1) null587  ret void588}589 590define amdgpu_kernel void @s_ashr_v2i128_ss(<2 x i128> %lhs, <2 x i128> %rhs) {591; GCN-LABEL: s_ashr_v2i128_ss:592; GCN:       ; %bb.0:593; GCN-NEXT:    s_add_i32 s12, s12, s17594; GCN-NEXT:    s_mov_b32 flat_scratch_lo, s13595; GCN-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8596; GCN-NEXT:    s_load_dwordx16 s[0:15], s[8:9], 0x0597; GCN-NEXT:    v_mov_b32_e32 v6, 16598; GCN-NEXT:    v_mov_b32_e32 v4, 0599; GCN-NEXT:    v_mov_b32_e32 v7, 0600; GCN-NEXT:    v_mov_b32_e32 v5, 0601; GCN-NEXT:    s_waitcnt lgkmcnt(0)602; GCN-NEXT:    v_cmp_lt_u64_e64 s[16:17], s[8:9], 64603; GCN-NEXT:    v_cmp_eq_u64_e64 s[18:19], s[10:11], 0604; GCN-NEXT:    s_sub_i32 s22, 64, s8605; GCN-NEXT:    s_sub_i32 s20, s8, 64606; GCN-NEXT:    s_lshl_b64 s[22:23], s[2:3], s22607; GCN-NEXT:    s_and_b64 s[16:17], s[18:19], s[16:17]608; GCN-NEXT:    s_lshr_b64 s[18:19], s[0:1], s8609; GCN-NEXT:    s_ashr_i64 s[20:21], s[2:3], s20610; GCN-NEXT:    s_or_b64 s[18:19], s[18:19], s[22:23]611; GCN-NEXT:    s_and_b64 s[22:23], s[16:17], exec612; GCN-NEXT:    s_cselect_b32 s19, s19, s21613; GCN-NEXT:    s_or_b64 s[10:11], s[8:9], s[10:11]614; GCN-NEXT:    v_cmp_eq_u64_e64 s[10:11], s[10:11], 0615; GCN-NEXT:    s_and_b64 s[22:23], s[10:11], exec616; GCN-NEXT:    s_cselect_b32 s9, s1, s19617; GCN-NEXT:    s_and_b64 s[22:23], s[16:17], exec618; GCN-NEXT:    s_cselect_b32 s1, s18, s20619; GCN-NEXT:    s_and_b64 s[10:11], s[10:11], exec620; GCN-NEXT:    v_cmp_lt_u64_e64 s[10:11], s[12:13], 64621; GCN-NEXT:    v_cmp_eq_u64_e64 s[18:19], s[14:15], 0622; GCN-NEXT:    s_cselect_b32 s22, s0, s1623; GCN-NEXT:    s_and_b64 s[0:1], s[18:19], s[10:11]624; GCN-NEXT:    s_sub_i32 s18, 64, s12625; GCN-NEXT:    s_sub_i32 s10, s12, 64626; GCN-NEXT:    s_lshl_b64 s[18:19], s[6:7], s18627; GCN-NEXT:    s_lshr_b64 s[20:21], s[4:5], s12628; GCN-NEXT:    s_ashr_i64 s[10:11], s[6:7], s10629; GCN-NEXT:    s_or_b64 s[18:19], s[20:21], s[18:19]630; GCN-NEXT:    s_and_b64 s[20:21], s[0:1], exec631; GCN-NEXT:    s_cselect_b32 s11, s19, s11632; GCN-NEXT:    s_or_b64 s[14:15], s[12:13], s[14:15]633; GCN-NEXT:    v_cmp_eq_u64_e64 s[14:15], s[14:15], 0634; GCN-NEXT:    s_and_b64 s[20:21], s[14:15], exec635; GCN-NEXT:    s_cselect_b32 s13, s5, s11636; GCN-NEXT:    s_and_b64 s[20:21], s[0:1], exec637; GCN-NEXT:    s_cselect_b32 s5, s18, s10638; GCN-NEXT:    s_and_b64 s[10:11], s[14:15], exec639; GCN-NEXT:    s_cselect_b32 s10, s4, s5640; GCN-NEXT:    s_ashr_i32 s11, s3, 31641; GCN-NEXT:    s_ashr_i64 s[2:3], s[2:3], s8642; GCN-NEXT:    s_and_b64 s[4:5], s[16:17], exec643; GCN-NEXT:    s_cselect_b32 s4, s3, s11644; GCN-NEXT:    s_cselect_b32 s5, s2, s11645; GCN-NEXT:    s_ashr_i32 s8, s7, 31646; GCN-NEXT:    s_ashr_i64 s[2:3], s[6:7], s12647; GCN-NEXT:    s_and_b64 s[0:1], s[0:1], exec648; GCN-NEXT:    s_cselect_b32 s0, s3, s8649; GCN-NEXT:    s_cselect_b32 s1, s2, s8650; GCN-NEXT:    v_mov_b32_e32 v0, s10651; GCN-NEXT:    v_mov_b32_e32 v1, s13652; GCN-NEXT:    v_mov_b32_e32 v2, s1653; GCN-NEXT:    v_mov_b32_e32 v3, s0654; GCN-NEXT:    flat_store_dwordx4 v[6:7], v[0:3]655; GCN-NEXT:    s_nop 0656; GCN-NEXT:    v_mov_b32_e32 v0, s22657; GCN-NEXT:    v_mov_b32_e32 v1, s9658; GCN-NEXT:    v_mov_b32_e32 v2, s5659; GCN-NEXT:    v_mov_b32_e32 v3, s4660; GCN-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]661; GCN-NEXT:    s_endpgm662  %shift = ashr <2 x i128> %lhs, %rhs663  store <2 x i128> %shift, ptr addrspace(1) null664  ret void665}666 667