585 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc -mtriple=amdgcn-- -o - %s | FileCheck -check-prefix=GCN %s3 4define <2 x i16> @extract_2xi16(ptr addrspace(1) %p0, ptr addrspace(1) %p1, i1 %c0) {5; GCN-LABEL: extract_2xi16:6; GCN: ; %bb.0:7; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8; GCN-NEXT: v_and_b32_e32 v4, 1, v49; GCN-NEXT: v_cmp_ne_u32_e32 vcc, 1, v410; GCN-NEXT: ; implicit-def: $vgpr511; GCN-NEXT: ; implicit-def: $vgpr412; GCN-NEXT: s_and_saveexec_b64 s[4:5], vcc13; GCN-NEXT: s_xor_b64 s[4:5], exec, s[4:5]14; GCN-NEXT: s_cbranch_execz .LBB0_215; GCN-NEXT: ; %bb.1: ; %F16; GCN-NEXT: s_mov_b32 s10, 017; GCN-NEXT: s_mov_b32 s11, 0xf00018; GCN-NEXT: s_mov_b32 s8, s1019; GCN-NEXT: s_mov_b32 s9, s1020; GCN-NEXT: buffer_load_ushort v0, v[2:3], s[8:11], 0 addr64 glc21; GCN-NEXT: s_waitcnt vmcnt(0)22; GCN-NEXT: buffer_load_ushort v4, v[2:3], s[8:11], 0 addr64 offset:2 glc23; GCN-NEXT: s_waitcnt vmcnt(0)24; GCN-NEXT: buffer_load_ushort v1, v[2:3], s[8:11], 0 addr64 offset:4 glc25; GCN-NEXT: s_waitcnt vmcnt(0)26; GCN-NEXT: buffer_load_ushort v1, v[2:3], s[8:11], 0 addr64 offset:6 glc27; GCN-NEXT: s_waitcnt vmcnt(0)28; GCN-NEXT: buffer_load_ushort v1, v[2:3], s[8:11], 0 addr64 offset:8 glc29; GCN-NEXT: s_waitcnt vmcnt(0)30; GCN-NEXT: buffer_load_ushort v1, v[2:3], s[8:11], 0 addr64 offset:10 glc31; GCN-NEXT: s_waitcnt vmcnt(0)32; GCN-NEXT: buffer_load_ushort v1, v[2:3], s[8:11], 0 addr64 offset:12 glc33; GCN-NEXT: s_waitcnt vmcnt(0)34; GCN-NEXT: buffer_load_ushort v1, v[2:3], s[8:11], 0 addr64 offset:14 glc35; GCN-NEXT: s_waitcnt vmcnt(0)36; GCN-NEXT: v_lshlrev_b32_e32 v1, 16, v437; GCN-NEXT: v_or_b32_e32 v5, v0, v138; GCN-NEXT: ; implicit-def: $vgpr039; GCN-NEXT: .LBB0_2: ; %Flow40; GCN-NEXT: s_andn2_saveexec_b64 s[4:5], s[4:5]41; GCN-NEXT: s_cbranch_execz .LBB0_442; GCN-NEXT: ; %bb.3: ; %T43; GCN-NEXT: s_mov_b32 s10, 044; GCN-NEXT: s_mov_b32 s11, 0xf00045; GCN-NEXT: s_mov_b32 s8, s1046; GCN-NEXT: s_mov_b32 s9, s1047; GCN-NEXT: buffer_load_ushort v2, v[0:1], s[8:11], 0 addr64 glc48; GCN-NEXT: s_waitcnt vmcnt(0)49; GCN-NEXT: buffer_load_ushort v4, v[0:1], s[8:11], 0 addr64 offset:2 glc50; GCN-NEXT: s_waitcnt vmcnt(0)51; GCN-NEXT: buffer_load_ushort v3, v[0:1], s[8:11], 0 addr64 offset:4 glc52; GCN-NEXT: s_waitcnt vmcnt(0)53; GCN-NEXT: buffer_load_ushort v3, v[0:1], s[8:11], 0 addr64 offset:6 glc54; GCN-NEXT: s_waitcnt vmcnt(0)55; GCN-NEXT: buffer_load_ushort v3, v[0:1], s[8:11], 0 addr64 offset:8 glc56; GCN-NEXT: s_waitcnt vmcnt(0)57; GCN-NEXT: buffer_load_ushort v3, v[0:1], s[8:11], 0 addr64 offset:10 glc58; GCN-NEXT: s_waitcnt vmcnt(0)59; GCN-NEXT: buffer_load_ushort v3, v[0:1], s[8:11], 0 addr64 offset:12 glc60; GCN-NEXT: s_waitcnt vmcnt(0)61; GCN-NEXT: buffer_load_ushort v0, v[0:1], s[8:11], 0 addr64 offset:14 glc62; GCN-NEXT: s_waitcnt vmcnt(0)63; GCN-NEXT: v_lshlrev_b32_e32 v0, 16, v464; GCN-NEXT: v_or_b32_e32 v5, v2, v065; GCN-NEXT: .LBB0_4: ; %exit66; GCN-NEXT: s_or_b64 exec, exec, s[4:5]67; GCN-NEXT: v_bfe_i32 v0, v5, 0, 1668; GCN-NEXT: v_bfe_i32 v1, v4, 0, 1669; GCN-NEXT: v_mov_b32_e32 v2, 0xffff70; GCN-NEXT: v_mov_b32_e32 v3, 0x800071; GCN-NEXT: v_mov_b32_e32 v4, 0xffff800072; GCN-NEXT: v_cmp_lt_i32_e32 vcc, -1, v073; GCN-NEXT: v_cndmask_b32_e32 v0, v2, v3, vcc74; GCN-NEXT: v_cmp_lt_i32_e32 vcc, -1, v175; GCN-NEXT: v_cndmask_b32_e32 v1, -1, v4, vcc76; GCN-NEXT: v_lshlrev_b32_e32 v2, 16, v177; GCN-NEXT: v_or_b32_e32 v0, v0, v278; GCN-NEXT: v_and_b32_e32 v1, 0xffff, v179; GCN-NEXT: s_setpc_b64 s[30:31]80 br i1 %c0, label %T, label %F81 82T:83 %t = load volatile <8 x i16>, ptr addrspace(1) %p084 br label %exit85 86F:87 %f = load volatile <8 x i16>, ptr addrspace(1) %p188 br label %exit89 90exit:91 %m = phi <8 x i16> [ %t, %T ], [ %f, %F ]92 %v2 = shufflevector <8 x i16> %m, <8 x i16> poison, <2 x i32> <i32 0, i32 1>93 %b2 = icmp sgt <2 x i16> %v2, <i16 -1, i16 -1>94 %r2 = select <2 x i1> %b2, <2 x i16> <i16 -32768, i16 -32768>, <2 x i16> <i16 -1, i16 -1>95 ret <2 x i16> %r296}97 98define <2 x i64> @extract_2xi64(ptr addrspace(1) %p0, ptr addrspace(1) %p1, i1 %c0) {99; GCN-LABEL: extract_2xi64:100; GCN: ; %bb.0:101; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)102; GCN-NEXT: v_and_b32_e32 v4, 1, v4103; GCN-NEXT: v_cmp_ne_u32_e32 vcc, 1, v4104; GCN-NEXT: ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19105; GCN-NEXT: s_and_saveexec_b64 s[4:5], vcc106; GCN-NEXT: s_xor_b64 s[4:5], exec, s[4:5]107; GCN-NEXT: s_cbranch_execz .LBB1_2108; GCN-NEXT: ; %bb.1: ; %F109; GCN-NEXT: s_mov_b32 s10, 0110; GCN-NEXT: s_mov_b32 s11, 0xf000111; GCN-NEXT: s_mov_b32 s8, s10112; GCN-NEXT: s_mov_b32 s9, s10113; GCN-NEXT: buffer_load_dwordx4 v[4:7], v[2:3], s[8:11], 0 addr64 glc114; GCN-NEXT: s_waitcnt vmcnt(0)115; GCN-NEXT: buffer_load_dwordx4 v[8:11], v[2:3], s[8:11], 0 addr64 offset:16 glc116; GCN-NEXT: s_waitcnt vmcnt(0)117; GCN-NEXT: buffer_load_dwordx4 v[8:11], v[2:3], s[8:11], 0 addr64 offset:32 glc118; GCN-NEXT: s_waitcnt vmcnt(0)119; GCN-NEXT: buffer_load_dwordx4 v[0:3], v[2:3], s[8:11], 0 addr64 offset:48 glc120; GCN-NEXT: s_waitcnt vmcnt(0)121; GCN-NEXT: ; implicit-def: $vgpr0122; GCN-NEXT: .LBB1_2: ; %Flow123; GCN-NEXT: s_andn2_saveexec_b64 s[4:5], s[4:5]124; GCN-NEXT: s_cbranch_execz .LBB1_4125; GCN-NEXT: ; %bb.3: ; %T126; GCN-NEXT: s_mov_b32 s10, 0127; GCN-NEXT: s_mov_b32 s11, 0xf000128; GCN-NEXT: s_mov_b32 s8, s10129; GCN-NEXT: s_mov_b32 s9, s10130; GCN-NEXT: buffer_load_dwordx4 v[4:7], v[0:1], s[8:11], 0 addr64 glc131; GCN-NEXT: s_waitcnt vmcnt(0)132; GCN-NEXT: buffer_load_dwordx4 v[8:11], v[0:1], s[8:11], 0 addr64 offset:16 glc133; GCN-NEXT: s_waitcnt vmcnt(0)134; GCN-NEXT: buffer_load_dwordx4 v[8:11], v[0:1], s[8:11], 0 addr64 offset:32 glc135; GCN-NEXT: s_waitcnt vmcnt(0)136; GCN-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[8:11], 0 addr64 offset:48 glc137; GCN-NEXT: s_waitcnt vmcnt(0)138; GCN-NEXT: .LBB1_4: ; %exit139; GCN-NEXT: s_or_b64 exec, exec, s[4:5]140; GCN-NEXT: v_mov_b32_e32 v1, 0xffff8000141; GCN-NEXT: v_cmp_lt_i64_e32 vcc, -1, v[4:5]142; GCN-NEXT: v_cndmask_b32_e32 v0, -1, v1, vcc143; GCN-NEXT: v_cmp_lt_i64_e32 vcc, -1, v[6:7]144; GCN-NEXT: v_cndmask_b32_e32 v2, -1, v1, vcc145; GCN-NEXT: v_mov_b32_e32 v1, -1146; GCN-NEXT: v_mov_b32_e32 v3, -1147; GCN-NEXT: s_setpc_b64 s[30:31]148 br i1 %c0, label %T, label %F149 150T:151 %t = load volatile <8 x i64>, ptr addrspace(1) %p0152 br label %exit153 154F:155 %f = load volatile <8 x i64>, ptr addrspace(1) %p1156 br label %exit157 158exit:159 %m = phi <8 x i64> [ %t, %T ], [ %f, %F ]160 %v2 = shufflevector <8 x i64> %m, <8 x i64> poison, <2 x i32> <i32 0, i32 1>161 %b2 = icmp sgt <2 x i64> %v2, <i64 -1, i64 -1>162 %r2 = select <2 x i1> %b2, <2 x i64> <i64 -32768, i64 -32768>, <2 x i64> <i64 -1, i64 -1>163 ret <2 x i64> %r2164}165 166define <4 x i64> @extract_4xi64(ptr addrspace(1) %p0, ptr addrspace(1) %p1, i1 %c0) {167; GCN-LABEL: extract_4xi64:168; GCN: ; %bb.0:169; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)170; GCN-NEXT: v_and_b32_e32 v4, 1, v4171; GCN-NEXT: v_cmp_ne_u32_e32 vcc, 1, v4172; GCN-NEXT: ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19173; GCN-NEXT: s_and_saveexec_b64 s[4:5], vcc174; GCN-NEXT: s_xor_b64 s[4:5], exec, s[4:5]175; GCN-NEXT: s_cbranch_execz .LBB2_2176; GCN-NEXT: ; %bb.1: ; %F177; GCN-NEXT: s_mov_b32 s10, 0178; GCN-NEXT: s_mov_b32 s11, 0xf000179; GCN-NEXT: s_mov_b32 s8, s10180; GCN-NEXT: s_mov_b32 s9, s10181; GCN-NEXT: buffer_load_dwordx4 v[4:7], v[2:3], s[8:11], 0 addr64 glc182; GCN-NEXT: s_waitcnt vmcnt(0)183; GCN-NEXT: buffer_load_dwordx4 v[8:11], v[2:3], s[8:11], 0 addr64 offset:16 glc184; GCN-NEXT: s_waitcnt vmcnt(0)185; GCN-NEXT: buffer_load_dwordx4 v[12:15], v[2:3], s[8:11], 0 addr64 offset:32 glc186; GCN-NEXT: s_waitcnt vmcnt(0)187; GCN-NEXT: buffer_load_dwordx4 v[0:3], v[2:3], s[8:11], 0 addr64 offset:48 glc188; GCN-NEXT: s_waitcnt vmcnt(0)189; GCN-NEXT: ; implicit-def: $vgpr0190; GCN-NEXT: .LBB2_2: ; %Flow191; GCN-NEXT: s_andn2_saveexec_b64 s[4:5], s[4:5]192; GCN-NEXT: s_cbranch_execz .LBB2_4193; GCN-NEXT: ; %bb.3: ; %T194; GCN-NEXT: s_mov_b32 s10, 0195; GCN-NEXT: s_mov_b32 s11, 0xf000196; GCN-NEXT: s_mov_b32 s8, s10197; GCN-NEXT: s_mov_b32 s9, s10198; GCN-NEXT: buffer_load_dwordx4 v[4:7], v[0:1], s[8:11], 0 addr64 glc199; GCN-NEXT: s_waitcnt vmcnt(0)200; GCN-NEXT: buffer_load_dwordx4 v[8:11], v[0:1], s[8:11], 0 addr64 offset:16 glc201; GCN-NEXT: s_waitcnt vmcnt(0)202; GCN-NEXT: buffer_load_dwordx4 v[12:15], v[0:1], s[8:11], 0 addr64 offset:32 glc203; GCN-NEXT: s_waitcnt vmcnt(0)204; GCN-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[8:11], 0 addr64 offset:48 glc205; GCN-NEXT: s_waitcnt vmcnt(0)206; GCN-NEXT: .LBB2_4: ; %exit207; GCN-NEXT: s_or_b64 exec, exec, s[4:5]208; GCN-NEXT: v_mov_b32_e32 v1, 0xffff8000209; GCN-NEXT: v_cmp_gt_i64_e32 vcc, 0, v[4:5]210; GCN-NEXT: v_cndmask_b32_e64 v0, v1, -1, vcc211; GCN-NEXT: v_cmp_gt_i64_e32 vcc, 0, v[6:7]212; GCN-NEXT: v_cndmask_b32_e64 v2, v1, -1, vcc213; GCN-NEXT: v_cmp_gt_i64_e32 vcc, 0, v[8:9]214; GCN-NEXT: v_cndmask_b32_e64 v4, v1, -1, vcc215; GCN-NEXT: v_cmp_gt_i64_e32 vcc, 0, v[10:11]216; GCN-NEXT: v_cndmask_b32_e64 v6, v1, -1, vcc217; GCN-NEXT: v_mov_b32_e32 v1, -1218; GCN-NEXT: v_mov_b32_e32 v3, -1219; GCN-NEXT: v_mov_b32_e32 v5, -1220; GCN-NEXT: v_mov_b32_e32 v7, -1221; GCN-NEXT: s_setpc_b64 s[30:31]222 br i1 %c0, label %T, label %F223 224T:225 %t = load volatile <8 x i64>, ptr addrspace(1) %p0226 br label %exit227 228F:229 %f = load volatile <8 x i64>, ptr addrspace(1) %p1230 br label %exit231 232exit:233 %m = phi <8 x i64> [ %t, %T ], [ %f, %F ]234 %v2 = shufflevector <8 x i64> %m, <8 x i64> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>235 %b2 = icmp sgt <4 x i64> %v2, <i64 -1, i64 -1, i64 -1, i64 -1>236 %r2 = select <4 x i1> %b2, <4 x i64> <i64 -32768, i64 -32768, i64 -32768, i64 -32768>, <4 x i64> <i64 -1, i64 -1, i64 -1, i64 -1>237 ret <4 x i64> %r2238}239 240define <8 x i64> @extract_8xi64(ptr addrspace(1) %p0, ptr addrspace(1) %p1, i1 %c0) {241; GCN-LABEL: extract_8xi64:242; GCN: ; %bb.0:243; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)244; GCN-NEXT: v_and_b32_e32 v4, 1, v4245; GCN-NEXT: v_cmp_ne_u32_e32 vcc, 1, v4246; GCN-NEXT: ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31_vgpr32_vgpr33_vgpr34_vgpr35247; GCN-NEXT: s_and_saveexec_b64 s[4:5], vcc248; GCN-NEXT: s_xor_b64 s[4:5], exec, s[4:5]249; GCN-NEXT: s_cbranch_execz .LBB3_2250; GCN-NEXT: ; %bb.1: ; %F251; GCN-NEXT: s_mov_b32 s10, 0252; GCN-NEXT: s_mov_b32 s11, 0xf000253; GCN-NEXT: s_mov_b32 s8, s10254; GCN-NEXT: s_mov_b32 s9, s10255; GCN-NEXT: buffer_load_dwordx4 v[4:7], v[2:3], s[8:11], 0 addr64 offset:112 glc256; GCN-NEXT: s_waitcnt vmcnt(0)257; GCN-NEXT: buffer_load_dwordx4 v[4:7], v[2:3], s[8:11], 0 addr64 offset:96 glc258; GCN-NEXT: s_waitcnt vmcnt(0)259; GCN-NEXT: buffer_load_dwordx4 v[4:7], v[2:3], s[8:11], 0 addr64 offset:80 glc260; GCN-NEXT: s_waitcnt vmcnt(0)261; GCN-NEXT: buffer_load_dwordx4 v[4:7], v[2:3], s[8:11], 0 addr64 offset:64 glc262; GCN-NEXT: s_waitcnt vmcnt(0)263; GCN-NEXT: buffer_load_dwordx4 v[4:7], v[2:3], s[8:11], 0 addr64 glc264; GCN-NEXT: s_waitcnt vmcnt(0)265; GCN-NEXT: buffer_load_dwordx4 v[8:11], v[2:3], s[8:11], 0 addr64 offset:16 glc266; GCN-NEXT: s_waitcnt vmcnt(0)267; GCN-NEXT: buffer_load_dwordx4 v[12:15], v[2:3], s[8:11], 0 addr64 offset:32 glc268; GCN-NEXT: s_waitcnt vmcnt(0)269; GCN-NEXT: buffer_load_dwordx4 v[16:19], v[2:3], s[8:11], 0 addr64 offset:48 glc270; GCN-NEXT: s_waitcnt vmcnt(0)271; GCN-NEXT: ; implicit-def: $vgpr0272; GCN-NEXT: .LBB3_2: ; %Flow273; GCN-NEXT: s_andn2_saveexec_b64 s[4:5], s[4:5]274; GCN-NEXT: s_cbranch_execz .LBB3_4275; GCN-NEXT: ; %bb.3: ; %T276; GCN-NEXT: s_mov_b32 s10, 0277; GCN-NEXT: s_mov_b32 s11, 0xf000278; GCN-NEXT: s_mov_b32 s8, s10279; GCN-NEXT: s_mov_b32 s9, s10280; GCN-NEXT: buffer_load_dwordx4 v[2:5], v[0:1], s[8:11], 0 addr64 offset:112 glc281; GCN-NEXT: s_waitcnt vmcnt(0)282; GCN-NEXT: buffer_load_dwordx4 v[2:5], v[0:1], s[8:11], 0 addr64 offset:96 glc283; GCN-NEXT: s_waitcnt vmcnt(0)284; GCN-NEXT: buffer_load_dwordx4 v[2:5], v[0:1], s[8:11], 0 addr64 offset:80 glc285; GCN-NEXT: s_waitcnt vmcnt(0)286; GCN-NEXT: buffer_load_dwordx4 v[2:5], v[0:1], s[8:11], 0 addr64 offset:64 glc287; GCN-NEXT: s_waitcnt vmcnt(0)288; GCN-NEXT: buffer_load_dwordx4 v[4:7], v[0:1], s[8:11], 0 addr64 glc289; GCN-NEXT: s_waitcnt vmcnt(0)290; GCN-NEXT: buffer_load_dwordx4 v[8:11], v[0:1], s[8:11], 0 addr64 offset:16 glc291; GCN-NEXT: s_waitcnt vmcnt(0)292; GCN-NEXT: buffer_load_dwordx4 v[12:15], v[0:1], s[8:11], 0 addr64 offset:32 glc293; GCN-NEXT: s_waitcnt vmcnt(0)294; GCN-NEXT: buffer_load_dwordx4 v[16:19], v[0:1], s[8:11], 0 addr64 offset:48 glc295; GCN-NEXT: s_waitcnt vmcnt(0)296; GCN-NEXT: .LBB3_4: ; %exit297; GCN-NEXT: s_or_b64 exec, exec, s[4:5]298; GCN-NEXT: v_mov_b32_e32 v1, 0xffff8000299; GCN-NEXT: v_cmp_gt_i64_e32 vcc, 0, v[6:7]300; GCN-NEXT: v_cmp_gt_i64_e64 s[4:5], 0, v[8:9]301; GCN-NEXT: v_cmp_gt_i64_e64 s[6:7], 0, v[10:11]302; GCN-NEXT: v_cmp_gt_i64_e64 s[8:9], 0, v[12:13]303; GCN-NEXT: v_cmp_gt_i64_e64 s[10:11], 0, v[14:15]304; GCN-NEXT: v_cmp_gt_i64_e64 s[12:13], 0, v[16:17]305; GCN-NEXT: v_cmp_gt_i64_e64 s[14:15], 0, v[18:19]306; GCN-NEXT: v_cmp_gt_i64_e64 s[16:17], 0, v[4:5]307; GCN-NEXT: v_cndmask_b32_e64 v0, v1, -1, s[16:17]308; GCN-NEXT: v_cndmask_b32_e64 v2, v1, -1, vcc309; GCN-NEXT: v_cndmask_b32_e64 v4, v1, -1, s[4:5]310; GCN-NEXT: v_cndmask_b32_e64 v6, v1, -1, s[6:7]311; GCN-NEXT: v_cndmask_b32_e64 v8, v1, -1, s[8:9]312; GCN-NEXT: v_cndmask_b32_e64 v10, v1, -1, s[10:11]313; GCN-NEXT: v_cndmask_b32_e64 v12, v1, -1, s[12:13]314; GCN-NEXT: v_cndmask_b32_e64 v14, v1, -1, s[14:15]315; GCN-NEXT: v_mov_b32_e32 v1, -1316; GCN-NEXT: v_mov_b32_e32 v3, -1317; GCN-NEXT: v_mov_b32_e32 v5, -1318; GCN-NEXT: v_mov_b32_e32 v7, -1319; GCN-NEXT: v_mov_b32_e32 v9, -1320; GCN-NEXT: v_mov_b32_e32 v11, -1321; GCN-NEXT: v_mov_b32_e32 v13, -1322; GCN-NEXT: v_mov_b32_e32 v15, -1323; GCN-NEXT: s_setpc_b64 s[30:31]324 br i1 %c0, label %T, label %F325 326T:327 %t = load volatile <16 x i64>, ptr addrspace(1) %p0328 br label %exit329 330F:331 %f = load volatile <16 x i64>, ptr addrspace(1) %p1332 br label %exit333 334exit:335 %m = phi <16 x i64> [ %t, %T ], [ %f, %F ]336 %v2 = shufflevector <16 x i64> %m, <16 x i64> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>337 %b2 = icmp sgt <8 x i64> %v2, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>338 %r2 = select <8 x i1> %b2, <8 x i64> <i64 -32768, i64 -32768, i64 -32768, i64 -32768, i64 -32768, i64 -32768, i64 -32768, i64 -32768>, <8 x i64> <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>339 ret <8 x i64> %r2340}341 342define <2 x double> @extract_2xf64(ptr addrspace(1) %p0, ptr addrspace(1) %p1, i1 %c0) {343; GCN-LABEL: extract_2xf64:344; GCN: ; %bb.0:345; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)346; GCN-NEXT: v_and_b32_e32 v4, 1, v4347; GCN-NEXT: v_cmp_ne_u32_e32 vcc, 1, v4348; GCN-NEXT: ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19349; GCN-NEXT: s_and_saveexec_b64 s[4:5], vcc350; GCN-NEXT: s_xor_b64 s[4:5], exec, s[4:5]351; GCN-NEXT: s_cbranch_execz .LBB4_2352; GCN-NEXT: ; %bb.1: ; %F353; GCN-NEXT: s_mov_b32 s10, 0354; GCN-NEXT: s_mov_b32 s11, 0xf000355; GCN-NEXT: s_mov_b32 s8, s10356; GCN-NEXT: s_mov_b32 s9, s10357; GCN-NEXT: buffer_load_dwordx4 v[4:7], v[2:3], s[8:11], 0 addr64 glc358; GCN-NEXT: s_waitcnt vmcnt(0)359; GCN-NEXT: buffer_load_dwordx4 v[8:11], v[2:3], s[8:11], 0 addr64 offset:16 glc360; GCN-NEXT: s_waitcnt vmcnt(0)361; GCN-NEXT: buffer_load_dwordx4 v[8:11], v[2:3], s[8:11], 0 addr64 offset:32 glc362; GCN-NEXT: s_waitcnt vmcnt(0)363; GCN-NEXT: buffer_load_dwordx4 v[0:3], v[2:3], s[8:11], 0 addr64 offset:48 glc364; GCN-NEXT: s_waitcnt vmcnt(0)365; GCN-NEXT: ; implicit-def: $vgpr0366; GCN-NEXT: .LBB4_2: ; %Flow367; GCN-NEXT: s_andn2_saveexec_b64 s[4:5], s[4:5]368; GCN-NEXT: s_cbranch_execz .LBB4_4369; GCN-NEXT: ; %bb.3: ; %T370; GCN-NEXT: s_mov_b32 s10, 0371; GCN-NEXT: s_mov_b32 s11, 0xf000372; GCN-NEXT: s_mov_b32 s8, s10373; GCN-NEXT: s_mov_b32 s9, s10374; GCN-NEXT: buffer_load_dwordx4 v[4:7], v[0:1], s[8:11], 0 addr64 glc375; GCN-NEXT: s_waitcnt vmcnt(0)376; GCN-NEXT: buffer_load_dwordx4 v[8:11], v[0:1], s[8:11], 0 addr64 offset:16 glc377; GCN-NEXT: s_waitcnt vmcnt(0)378; GCN-NEXT: buffer_load_dwordx4 v[8:11], v[0:1], s[8:11], 0 addr64 offset:32 glc379; GCN-NEXT: s_waitcnt vmcnt(0)380; GCN-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[8:11], 0 addr64 offset:48 glc381; GCN-NEXT: s_waitcnt vmcnt(0)382; GCN-NEXT: .LBB4_4: ; %exit383; GCN-NEXT: s_or_b64 exec, exec, s[4:5]384; GCN-NEXT: v_mov_b32_e32 v0, 0xbff00000385; GCN-NEXT: v_cmp_lt_f64_e32 vcc, -1.0, v[4:5]386; GCN-NEXT: v_cndmask_b32_e64 v1, v0, -2.0, vcc387; GCN-NEXT: v_cmp_lt_f64_e32 vcc, -1.0, v[6:7]388; GCN-NEXT: v_cndmask_b32_e64 v3, v0, -2.0, vcc389; GCN-NEXT: v_mov_b32_e32 v0, 0390; GCN-NEXT: v_mov_b32_e32 v2, 0391; GCN-NEXT: s_setpc_b64 s[30:31]392 br i1 %c0, label %T, label %F393 394T:395 %t = load volatile <8 x double>, ptr addrspace(1) %p0396 br label %exit397 398F:399 %f = load volatile <8 x double>, ptr addrspace(1) %p1400 br label %exit401 402exit:403 %m = phi <8 x double> [ %t, %T ], [ %f, %F ]404 %v2 = shufflevector <8 x double> %m, <8 x double> poison, <2 x i32> <i32 0, i32 1>405 %b2 = fcmp ogt <2 x double> %v2, <double -1.0, double -1.0>406 %r2 = select <2 x i1> %b2, <2 x double> <double -2.0, double -2.0>, <2 x double> <double -1.0, double -1.0>407 ret <2 x double> %r2408}409 410define <4 x double> @extract_4xf64(ptr addrspace(1) %p0, ptr addrspace(1) %p1, i1 %c0) {411; GCN-LABEL: extract_4xf64:412; GCN: ; %bb.0:413; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)414; GCN-NEXT: v_and_b32_e32 v4, 1, v4415; GCN-NEXT: v_cmp_ne_u32_e32 vcc, 1, v4416; GCN-NEXT: ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19417; GCN-NEXT: s_and_saveexec_b64 s[4:5], vcc418; GCN-NEXT: s_xor_b64 s[4:5], exec, s[4:5]419; GCN-NEXT: s_cbranch_execz .LBB5_2420; GCN-NEXT: ; %bb.1: ; %F421; GCN-NEXT: s_mov_b32 s10, 0422; GCN-NEXT: s_mov_b32 s11, 0xf000423; GCN-NEXT: s_mov_b32 s8, s10424; GCN-NEXT: s_mov_b32 s9, s10425; GCN-NEXT: buffer_load_dwordx4 v[4:7], v[2:3], s[8:11], 0 addr64 glc426; GCN-NEXT: s_waitcnt vmcnt(0)427; GCN-NEXT: buffer_load_dwordx4 v[8:11], v[2:3], s[8:11], 0 addr64 offset:16 glc428; GCN-NEXT: s_waitcnt vmcnt(0)429; GCN-NEXT: buffer_load_dwordx4 v[12:15], v[2:3], s[8:11], 0 addr64 offset:32 glc430; GCN-NEXT: s_waitcnt vmcnt(0)431; GCN-NEXT: buffer_load_dwordx4 v[0:3], v[2:3], s[8:11], 0 addr64 offset:48 glc432; GCN-NEXT: s_waitcnt vmcnt(0)433; GCN-NEXT: ; implicit-def: $vgpr0434; GCN-NEXT: .LBB5_2: ; %Flow435; GCN-NEXT: s_andn2_saveexec_b64 s[4:5], s[4:5]436; GCN-NEXT: s_cbranch_execz .LBB5_4437; GCN-NEXT: ; %bb.3: ; %T438; GCN-NEXT: s_mov_b32 s10, 0439; GCN-NEXT: s_mov_b32 s11, 0xf000440; GCN-NEXT: s_mov_b32 s8, s10441; GCN-NEXT: s_mov_b32 s9, s10442; GCN-NEXT: buffer_load_dwordx4 v[4:7], v[0:1], s[8:11], 0 addr64 glc443; GCN-NEXT: s_waitcnt vmcnt(0)444; GCN-NEXT: buffer_load_dwordx4 v[8:11], v[0:1], s[8:11], 0 addr64 offset:16 glc445; GCN-NEXT: s_waitcnt vmcnt(0)446; GCN-NEXT: buffer_load_dwordx4 v[12:15], v[0:1], s[8:11], 0 addr64 offset:32 glc447; GCN-NEXT: s_waitcnt vmcnt(0)448; GCN-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[8:11], 0 addr64 offset:48 glc449; GCN-NEXT: s_waitcnt vmcnt(0)450; GCN-NEXT: .LBB5_4: ; %exit451; GCN-NEXT: s_or_b64 exec, exec, s[4:5]452; GCN-NEXT: v_mov_b32_e32 v0, 0xbff00000453; GCN-NEXT: v_cmp_nlt_f64_e32 vcc, -1.0, v[4:5]454; GCN-NEXT: v_cndmask_b32_e32 v1, -2.0, v0, vcc455; GCN-NEXT: v_cmp_nlt_f64_e32 vcc, -1.0, v[6:7]456; GCN-NEXT: v_cndmask_b32_e32 v3, -2.0, v0, vcc457; GCN-NEXT: v_cmp_nlt_f64_e32 vcc, -1.0, v[8:9]458; GCN-NEXT: v_cndmask_b32_e32 v5, -2.0, v0, vcc459; GCN-NEXT: v_cmp_nlt_f64_e32 vcc, -1.0, v[10:11]460; GCN-NEXT: v_cndmask_b32_e32 v7, -2.0, v0, vcc461; GCN-NEXT: v_mov_b32_e32 v0, 0462; GCN-NEXT: v_mov_b32_e32 v2, 0463; GCN-NEXT: v_mov_b32_e32 v4, 0464; GCN-NEXT: v_mov_b32_e32 v6, 0465; GCN-NEXT: s_setpc_b64 s[30:31]466 br i1 %c0, label %T, label %F467 468T:469 %t = load volatile <8 x double>, ptr addrspace(1) %p0470 br label %exit471 472F:473 %f = load volatile <8 x double>, ptr addrspace(1) %p1474 br label %exit475 476exit:477 %m = phi <8 x double> [ %t, %T ], [ %f, %F ]478 %v2 = shufflevector <8 x double> %m, <8 x double> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>479 %b2 = fcmp ogt <4 x double> %v2, <double -1.0, double -1.0, double -1.0, double -1.0>480 %r2 = select <4 x i1> %b2, <4 x double> <double -2.0, double -2.0, double -2.0, double -2.0>, <4 x double> <double -1.0, double -1.0, double -1.0, double -1.0>481 ret <4 x double> %r2482}483 484define <8 x double> @extract_8xf64(ptr addrspace(1) %p0, ptr addrspace(1) %p1, i1 %c0) {485; GCN-LABEL: extract_8xf64:486; GCN: ; %bb.0:487; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)488; GCN-NEXT: v_and_b32_e32 v4, 1, v4489; GCN-NEXT: v_cmp_ne_u32_e32 vcc, 1, v4490; GCN-NEXT: ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15_vgpr16_vgpr17_vgpr18_vgpr19_vgpr20_vgpr21_vgpr22_vgpr23_vgpr24_vgpr25_vgpr26_vgpr27_vgpr28_vgpr29_vgpr30_vgpr31_vgpr32_vgpr33_vgpr34_vgpr35491; GCN-NEXT: s_and_saveexec_b64 s[4:5], vcc492; GCN-NEXT: s_xor_b64 s[4:5], exec, s[4:5]493; GCN-NEXT: s_cbranch_execz .LBB6_2494; GCN-NEXT: ; %bb.1: ; %F495; GCN-NEXT: s_mov_b32 s10, 0496; GCN-NEXT: s_mov_b32 s11, 0xf000497; GCN-NEXT: s_mov_b32 s8, s10498; GCN-NEXT: s_mov_b32 s9, s10499; GCN-NEXT: buffer_load_dwordx4 v[4:7], v[2:3], s[8:11], 0 addr64 offset:112 glc500; GCN-NEXT: s_waitcnt vmcnt(0)501; GCN-NEXT: buffer_load_dwordx4 v[4:7], v[2:3], s[8:11], 0 addr64 offset:96 glc502; GCN-NEXT: s_waitcnt vmcnt(0)503; GCN-NEXT: buffer_load_dwordx4 v[4:7], v[2:3], s[8:11], 0 addr64 offset:80 glc504; GCN-NEXT: s_waitcnt vmcnt(0)505; GCN-NEXT: buffer_load_dwordx4 v[4:7], v[2:3], s[8:11], 0 addr64 offset:64 glc506; GCN-NEXT: s_waitcnt vmcnt(0)507; GCN-NEXT: buffer_load_dwordx4 v[4:7], v[2:3], s[8:11], 0 addr64 glc508; GCN-NEXT: s_waitcnt vmcnt(0)509; GCN-NEXT: buffer_load_dwordx4 v[8:11], v[2:3], s[8:11], 0 addr64 offset:16 glc510; GCN-NEXT: s_waitcnt vmcnt(0)511; GCN-NEXT: buffer_load_dwordx4 v[12:15], v[2:3], s[8:11], 0 addr64 offset:32 glc512; GCN-NEXT: s_waitcnt vmcnt(0)513; GCN-NEXT: buffer_load_dwordx4 v[16:19], v[2:3], s[8:11], 0 addr64 offset:48 glc514; GCN-NEXT: s_waitcnt vmcnt(0)515; GCN-NEXT: ; implicit-def: $vgpr0516; GCN-NEXT: .LBB6_2: ; %Flow517; GCN-NEXT: s_andn2_saveexec_b64 s[4:5], s[4:5]518; GCN-NEXT: s_cbranch_execz .LBB6_4519; GCN-NEXT: ; %bb.3: ; %T520; GCN-NEXT: s_mov_b32 s10, 0521; GCN-NEXT: s_mov_b32 s11, 0xf000522; GCN-NEXT: s_mov_b32 s8, s10523; GCN-NEXT: s_mov_b32 s9, s10524; GCN-NEXT: buffer_load_dwordx4 v[2:5], v[0:1], s[8:11], 0 addr64 offset:112 glc525; GCN-NEXT: s_waitcnt vmcnt(0)526; GCN-NEXT: buffer_load_dwordx4 v[2:5], v[0:1], s[8:11], 0 addr64 offset:96 glc527; GCN-NEXT: s_waitcnt vmcnt(0)528; GCN-NEXT: buffer_load_dwordx4 v[2:5], v[0:1], s[8:11], 0 addr64 offset:80 glc529; GCN-NEXT: s_waitcnt vmcnt(0)530; GCN-NEXT: buffer_load_dwordx4 v[2:5], v[0:1], s[8:11], 0 addr64 offset:64 glc531; GCN-NEXT: s_waitcnt vmcnt(0)532; GCN-NEXT: buffer_load_dwordx4 v[4:7], v[0:1], s[8:11], 0 addr64 glc533; GCN-NEXT: s_waitcnt vmcnt(0)534; GCN-NEXT: buffer_load_dwordx4 v[8:11], v[0:1], s[8:11], 0 addr64 offset:16 glc535; GCN-NEXT: s_waitcnt vmcnt(0)536; GCN-NEXT: buffer_load_dwordx4 v[12:15], v[0:1], s[8:11], 0 addr64 offset:32 glc537; GCN-NEXT: s_waitcnt vmcnt(0)538; GCN-NEXT: buffer_load_dwordx4 v[16:19], v[0:1], s[8:11], 0 addr64 offset:48 glc539; GCN-NEXT: s_waitcnt vmcnt(0)540; GCN-NEXT: .LBB6_4: ; %exit541; GCN-NEXT: s_or_b64 exec, exec, s[4:5]542; GCN-NEXT: v_mov_b32_e32 v0, 0xbff00000543; GCN-NEXT: v_cmp_nlt_f64_e32 vcc, -1.0, v[6:7]544; GCN-NEXT: v_cmp_nlt_f64_e64 s[4:5], -1.0, v[8:9]545; GCN-NEXT: v_cmp_nlt_f64_e64 s[6:7], -1.0, v[10:11]546; GCN-NEXT: v_cmp_nlt_f64_e64 s[8:9], -1.0, v[12:13]547; GCN-NEXT: v_cmp_nlt_f64_e64 s[10:11], -1.0, v[14:15]548; GCN-NEXT: v_cmp_nlt_f64_e64 s[12:13], -1.0, v[16:17]549; GCN-NEXT: v_cmp_nlt_f64_e64 s[14:15], -1.0, v[18:19]550; GCN-NEXT: v_cmp_nlt_f64_e64 s[16:17], -1.0, v[4:5]551; GCN-NEXT: v_cndmask_b32_e64 v1, -2.0, v0, s[16:17]552; GCN-NEXT: v_cndmask_b32_e32 v3, -2.0, v0, vcc553; GCN-NEXT: v_cndmask_b32_e64 v5, -2.0, v0, s[4:5]554; GCN-NEXT: v_cndmask_b32_e64 v7, -2.0, v0, s[6:7]555; GCN-NEXT: v_cndmask_b32_e64 v9, -2.0, v0, s[8:9]556; GCN-NEXT: v_cndmask_b32_e64 v11, -2.0, v0, s[10:11]557; GCN-NEXT: v_cndmask_b32_e64 v13, -2.0, v0, s[12:13]558; GCN-NEXT: v_cndmask_b32_e64 v15, -2.0, v0, s[14:15]559; GCN-NEXT: v_mov_b32_e32 v0, 0560; GCN-NEXT: v_mov_b32_e32 v2, 0561; GCN-NEXT: v_mov_b32_e32 v4, 0562; GCN-NEXT: v_mov_b32_e32 v6, 0563; GCN-NEXT: v_mov_b32_e32 v8, 0564; GCN-NEXT: v_mov_b32_e32 v10, 0565; GCN-NEXT: v_mov_b32_e32 v12, 0566; GCN-NEXT: v_mov_b32_e32 v14, 0567; GCN-NEXT: s_setpc_b64 s[30:31]568 br i1 %c0, label %T, label %F569 570T:571 %t = load volatile <16 x double>, ptr addrspace(1) %p0572 br label %exit573 574F:575 %f = load volatile <16 x double>, ptr addrspace(1) %p1576 br label %exit577 578exit:579 %m = phi <16 x double> [ %t, %T ], [ %f, %F ]580 %v2 = shufflevector <16 x double> %m, <16 x double> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>581 %b2 = fcmp ogt <8 x double> %v2, <double -1.0, double -1.0, double -1.0, double -1.0, double -1.0, double -1.0, double -1.0, double -1.0>582 %r2 = select <8 x i1> %b2, <8 x double> <double -2.0, double -2.0, double -2.0, double -2.0, double -2.0, double -2.0, double -2.0, double -2.0>, <8 x double> <double -1.0, double -1.0, double -1.0, double -1.0, double -1.0, double -1.0, double -1.0, double -1.0>583 ret <8 x double> %r2584}585