1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9,GFX900 %s 3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX90A %s 4; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx940 < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX940 %s 5 6 7define void @v_shuffle_v2i32_v4i32__u_u(ptr addrspace(1) inreg %ptr) { 8; GFX9-LABEL: v_shuffle_v2i32_v4i32__u_u: 9; GFX9: ; %bb.0: 10; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 11; GFX9-NEXT: s_setpc_b64 s[30:31] 12 %vec0 = call <4 x i32> asm "; def $0", "=v"() 13 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> poison 14 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 15 ret void 16} 17 18define void @v_shuffle_v2i32_v4i32__0_u(ptr addrspace(1) inreg %ptr) { 19; GFX900-LABEL: v_shuffle_v2i32_v4i32__0_u: 20; GFX900: ; %bb.0: 21; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 22; GFX900-NEXT: v_mov_b32_e32 v4, 0 23; GFX900-NEXT: ;;#ASMSTART 24; GFX900-NEXT: ; def v[0:3] 25; GFX900-NEXT: ;;#ASMEND 26; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 27; GFX900-NEXT: s_waitcnt vmcnt(0) 28; GFX900-NEXT: s_setpc_b64 s[30:31] 29; 30; GFX90A-LABEL: v_shuffle_v2i32_v4i32__0_u: 31; GFX90A: ; %bb.0: 32; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 33; GFX90A-NEXT: v_mov_b32_e32 v4, 0 34; GFX90A-NEXT: ;;#ASMSTART 35; GFX90A-NEXT: ; def v[0:3] 36; GFX90A-NEXT: ;;#ASMEND 37; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 38; GFX90A-NEXT: s_waitcnt vmcnt(0) 39; GFX90A-NEXT: s_setpc_b64 s[30:31] 40; 41; GFX940-LABEL: v_shuffle_v2i32_v4i32__0_u: 42; GFX940: ; %bb.0: 43; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 44; GFX940-NEXT: v_mov_b32_e32 v4, 0 45; GFX940-NEXT: ;;#ASMSTART 46; GFX940-NEXT: ; def v[0:3] 47; GFX940-NEXT: ;;#ASMEND 48; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 49; GFX940-NEXT: s_waitcnt vmcnt(0) 50; GFX940-NEXT: s_setpc_b64 s[30:31] 51 %vec0 = call <4 x i32> asm "; def $0", "=v"() 52 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 0, i32 poison> 53 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 54 ret void 55} 56 57define void @v_shuffle_v2i32_v4i32__1_u(ptr addrspace(1) inreg %ptr) { 58; GFX900-LABEL: v_shuffle_v2i32_v4i32__1_u: 59; GFX900: ; %bb.0: 60; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 61; GFX900-NEXT: v_mov_b32_e32 v4, 0 62; GFX900-NEXT: ;;#ASMSTART 63; GFX900-NEXT: ; def v[0:3] 64; GFX900-NEXT: ;;#ASMEND 65; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17] 66; GFX900-NEXT: s_waitcnt vmcnt(0) 67; GFX900-NEXT: s_setpc_b64 s[30:31] 68; 69; GFX90A-LABEL: v_shuffle_v2i32_v4i32__1_u: 70; GFX90A: ; %bb.0: 71; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 72; GFX90A-NEXT: ;;#ASMSTART 73; GFX90A-NEXT: ; def v[0:3] 74; GFX90A-NEXT: ;;#ASMEND 75; GFX90A-NEXT: v_mov_b32_e32 v4, 0 76; GFX90A-NEXT: v_mov_b32_e32 v0, v1 77; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 78; GFX90A-NEXT: s_waitcnt vmcnt(0) 79; GFX90A-NEXT: s_setpc_b64 s[30:31] 80; 81; GFX940-LABEL: v_shuffle_v2i32_v4i32__1_u: 82; GFX940: ; %bb.0: 83; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 84; GFX940-NEXT: ;;#ASMSTART 85; GFX940-NEXT: ; def v[0:3] 86; GFX940-NEXT: ;;#ASMEND 87; GFX940-NEXT: v_mov_b32_e32 v4, 0 88; GFX940-NEXT: v_mov_b32_e32 v0, v1 89; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 90; GFX940-NEXT: s_waitcnt vmcnt(0) 91; GFX940-NEXT: s_setpc_b64 s[30:31] 92 %vec0 = call <4 x i32> asm "; def $0", "=v"() 93 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 poison> 94 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 95 ret void 96} 97 98define void @v_shuffle_v2i32_v4i32__2_u(ptr addrspace(1) inreg %ptr) { 99; GFX900-LABEL: v_shuffle_v2i32_v4i32__2_u: 100; GFX900: ; %bb.0: 101; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 102; GFX900-NEXT: v_mov_b32_e32 v4, 0 103; GFX900-NEXT: ;;#ASMSTART 104; GFX900-NEXT: ; def v[0:3] 105; GFX900-NEXT: ;;#ASMEND 106; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 107; GFX900-NEXT: s_waitcnt vmcnt(0) 108; GFX900-NEXT: s_setpc_b64 s[30:31] 109; 110; GFX90A-LABEL: v_shuffle_v2i32_v4i32__2_u: 111; GFX90A: ; %bb.0: 112; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 113; GFX90A-NEXT: v_mov_b32_e32 v4, 0 114; GFX90A-NEXT: ;;#ASMSTART 115; GFX90A-NEXT: ; def v[0:3] 116; GFX90A-NEXT: ;;#ASMEND 117; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 118; GFX90A-NEXT: s_waitcnt vmcnt(0) 119; GFX90A-NEXT: s_setpc_b64 s[30:31] 120; 121; GFX940-LABEL: v_shuffle_v2i32_v4i32__2_u: 122; GFX940: ; %bb.0: 123; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 124; GFX940-NEXT: v_mov_b32_e32 v4, 0 125; GFX940-NEXT: ;;#ASMSTART 126; GFX940-NEXT: ; def v[0:3] 127; GFX940-NEXT: ;;#ASMEND 128; GFX940-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1 129; GFX940-NEXT: s_waitcnt vmcnt(0) 130; GFX940-NEXT: s_setpc_b64 s[30:31] 131 %vec0 = call <4 x i32> asm "; def $0", "=v"() 132 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 poison> 133 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 134 ret void 135} 136 137define void @v_shuffle_v2i32_v4i32__3_u(ptr addrspace(1) inreg %ptr) { 138; GFX900-LABEL: v_shuffle_v2i32_v4i32__3_u: 139; GFX900: ; %bb.0: 140; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 141; GFX900-NEXT: ;;#ASMSTART 142; GFX900-NEXT: ; def v[0:3] 143; GFX900-NEXT: ;;#ASMEND 144; GFX900-NEXT: v_mov_b32_e32 v4, 0 145; GFX900-NEXT: v_mov_b32_e32 v0, v3 146; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 147; GFX900-NEXT: s_waitcnt vmcnt(0) 148; GFX900-NEXT: s_setpc_b64 s[30:31] 149; 150; GFX90A-LABEL: v_shuffle_v2i32_v4i32__3_u: 151; GFX90A: ; %bb.0: 152; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 153; GFX90A-NEXT: ;;#ASMSTART 154; GFX90A-NEXT: ; def v[0:3] 155; GFX90A-NEXT: ;;#ASMEND 156; GFX90A-NEXT: v_mov_b32_e32 v4, 0 157; GFX90A-NEXT: v_mov_b32_e32 v0, v3 158; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 159; GFX90A-NEXT: s_waitcnt vmcnt(0) 160; GFX90A-NEXT: s_setpc_b64 s[30:31] 161; 162; GFX940-LABEL: v_shuffle_v2i32_v4i32__3_u: 163; GFX940: ; %bb.0: 164; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 165; GFX940-NEXT: ;;#ASMSTART 166; GFX940-NEXT: ; def v[0:3] 167; GFX940-NEXT: ;;#ASMEND 168; GFX940-NEXT: v_mov_b32_e32 v4, 0 169; GFX940-NEXT: v_mov_b32_e32 v0, v3 170; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 171; GFX940-NEXT: s_waitcnt vmcnt(0) 172; GFX940-NEXT: s_setpc_b64 s[30:31] 173 %vec0 = call <4 x i32> asm "; def $0", "=v"() 174 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 poison> 175 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 176 ret void 177} 178 179define void @v_shuffle_v2i32_v4i32__4_u(ptr addrspace(1) inreg %ptr) { 180; GFX9-LABEL: v_shuffle_v2i32_v4i32__4_u: 181; GFX9: ; %bb.0: 182; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 183; GFX9-NEXT: s_setpc_b64 s[30:31] 184 %vec0 = call <4 x i32> asm "; def $0", "=v"() 185 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 poison> 186 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 187 ret void 188} 189 190define void @v_shuffle_v2i32_v4i32__5_u(ptr addrspace(1) inreg %ptr) { 191; GFX900-LABEL: v_shuffle_v2i32_v4i32__5_u: 192; GFX900: ; %bb.0: 193; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 194; GFX900-NEXT: v_mov_b32_e32 v4, 0 195; GFX900-NEXT: ;;#ASMSTART 196; GFX900-NEXT: ; def v[0:3] 197; GFX900-NEXT: ;;#ASMEND 198; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17] 199; GFX900-NEXT: s_waitcnt vmcnt(0) 200; GFX900-NEXT: s_setpc_b64 s[30:31] 201; 202; GFX90A-LABEL: v_shuffle_v2i32_v4i32__5_u: 203; GFX90A: ; %bb.0: 204; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 205; GFX90A-NEXT: ;;#ASMSTART 206; GFX90A-NEXT: ; def v[0:3] 207; GFX90A-NEXT: ;;#ASMEND 208; GFX90A-NEXT: v_mov_b32_e32 v4, 0 209; GFX90A-NEXT: v_mov_b32_e32 v0, v1 210; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 211; GFX90A-NEXT: s_waitcnt vmcnt(0) 212; GFX90A-NEXT: s_setpc_b64 s[30:31] 213; 214; GFX940-LABEL: v_shuffle_v2i32_v4i32__5_u: 215; GFX940: ; %bb.0: 216; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 217; GFX940-NEXT: ;;#ASMSTART 218; GFX940-NEXT: ; def v[0:3] 219; GFX940-NEXT: ;;#ASMEND 220; GFX940-NEXT: v_mov_b32_e32 v4, 0 221; GFX940-NEXT: v_mov_b32_e32 v0, v1 222; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 223; GFX940-NEXT: s_waitcnt vmcnt(0) 224; GFX940-NEXT: s_setpc_b64 s[30:31] 225 %vec0 = call <4 x i32> asm "; def $0", "=v"() 226 %vec1 = call <4 x i32> asm "; def $0", "=v"() 227 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 poison> 228 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 229 ret void 230} 231 232define void @v_shuffle_v2i32_v4i32__6_u(ptr addrspace(1) inreg %ptr) { 233; GFX900-LABEL: v_shuffle_v2i32_v4i32__6_u: 234; GFX900: ; %bb.0: 235; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 236; GFX900-NEXT: v_mov_b32_e32 v4, 0 237; GFX900-NEXT: ;;#ASMSTART 238; GFX900-NEXT: ; def v[0:3] 239; GFX900-NEXT: ;;#ASMEND 240; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 241; GFX900-NEXT: s_waitcnt vmcnt(0) 242; GFX900-NEXT: s_setpc_b64 s[30:31] 243; 244; GFX90A-LABEL: v_shuffle_v2i32_v4i32__6_u: 245; GFX90A: ; %bb.0: 246; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 247; GFX90A-NEXT: v_mov_b32_e32 v4, 0 248; GFX90A-NEXT: ;;#ASMSTART 249; GFX90A-NEXT: ; def v[0:3] 250; GFX90A-NEXT: ;;#ASMEND 251; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 252; GFX90A-NEXT: s_waitcnt vmcnt(0) 253; GFX90A-NEXT: s_setpc_b64 s[30:31] 254; 255; GFX940-LABEL: v_shuffle_v2i32_v4i32__6_u: 256; GFX940: ; %bb.0: 257; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 258; GFX940-NEXT: v_mov_b32_e32 v4, 0 259; GFX940-NEXT: ;;#ASMSTART 260; GFX940-NEXT: ; def v[0:3] 261; GFX940-NEXT: ;;#ASMEND 262; GFX940-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1 263; GFX940-NEXT: s_waitcnt vmcnt(0) 264; GFX940-NEXT: s_setpc_b64 s[30:31] 265 %vec0 = call <4 x i32> asm "; def $0", "=v"() 266 %vec1 = call <4 x i32> asm "; def $0", "=v"() 267 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 poison> 268 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 269 ret void 270} 271 272define void @v_shuffle_v2i32_v4i32__7_u(ptr addrspace(1) inreg %ptr) { 273; GFX900-LABEL: v_shuffle_v2i32_v4i32__7_u: 274; GFX900: ; %bb.0: 275; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 276; GFX900-NEXT: ;;#ASMSTART 277; GFX900-NEXT: ; def v[0:3] 278; GFX900-NEXT: ;;#ASMEND 279; GFX900-NEXT: v_mov_b32_e32 v4, 0 280; GFX900-NEXT: v_mov_b32_e32 v0, v3 281; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 282; GFX900-NEXT: s_waitcnt vmcnt(0) 283; GFX900-NEXT: s_setpc_b64 s[30:31] 284; 285; GFX90A-LABEL: v_shuffle_v2i32_v4i32__7_u: 286; GFX90A: ; %bb.0: 287; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 288; GFX90A-NEXT: ;;#ASMSTART 289; GFX90A-NEXT: ; def v[0:3] 290; GFX90A-NEXT: ;;#ASMEND 291; GFX90A-NEXT: v_mov_b32_e32 v4, 0 292; GFX90A-NEXT: v_mov_b32_e32 v0, v3 293; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 294; GFX90A-NEXT: s_waitcnt vmcnt(0) 295; GFX90A-NEXT: s_setpc_b64 s[30:31] 296; 297; GFX940-LABEL: v_shuffle_v2i32_v4i32__7_u: 298; GFX940: ; %bb.0: 299; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 300; GFX940-NEXT: ;;#ASMSTART 301; GFX940-NEXT: ; def v[0:3] 302; GFX940-NEXT: ;;#ASMEND 303; GFX940-NEXT: v_mov_b32_e32 v4, 0 304; GFX940-NEXT: v_mov_b32_e32 v0, v3 305; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 306; GFX940-NEXT: s_waitcnt vmcnt(0) 307; GFX940-NEXT: s_setpc_b64 s[30:31] 308 %vec0 = call <4 x i32> asm "; def $0", "=v"() 309 %vec1 = call <4 x i32> asm "; def $0", "=v"() 310 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 poison> 311 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 312 ret void 313} 314 315define void @v_shuffle_v2i32_v4i32__7_0(ptr addrspace(1) inreg %ptr) { 316; GFX900-LABEL: v_shuffle_v2i32_v4i32__7_0: 317; GFX900: ; %bb.0: 318; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 319; GFX900-NEXT: ;;#ASMSTART 320; GFX900-NEXT: ; def v[0:3] 321; GFX900-NEXT: ;;#ASMEND 322; GFX900-NEXT: ;;#ASMSTART 323; GFX900-NEXT: ; def v[1:4] 324; GFX900-NEXT: ;;#ASMEND 325; GFX900-NEXT: v_mov_b32_e32 v5, 0 326; GFX900-NEXT: v_mov_b32_e32 v1, v4 327; GFX900-NEXT: v_mov_b32_e32 v2, v0 328; GFX900-NEXT: global_store_dwordx2 v5, v[1:2], s[16:17] 329; GFX900-NEXT: s_waitcnt vmcnt(0) 330; GFX900-NEXT: s_setpc_b64 s[30:31] 331; 332; GFX90A-LABEL: v_shuffle_v2i32_v4i32__7_0: 333; GFX90A: ; %bb.0: 334; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 335; GFX90A-NEXT: ;;#ASMSTART 336; GFX90A-NEXT: ; def v[0:3] 337; GFX90A-NEXT: ;;#ASMEND 338; GFX90A-NEXT: v_mov_b32_e32 v6, 0 339; GFX90A-NEXT: ;;#ASMSTART 340; GFX90A-NEXT: ; def v[2:5] 341; GFX90A-NEXT: ;;#ASMEND 342; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[4:5], v[0:1] op_sel:[1,0] 343; GFX90A-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17] 344; GFX90A-NEXT: s_waitcnt vmcnt(0) 345; GFX90A-NEXT: s_setpc_b64 s[30:31] 346; 347; GFX940-LABEL: v_shuffle_v2i32_v4i32__7_0: 348; GFX940: ; %bb.0: 349; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 350; GFX940-NEXT: ;;#ASMSTART 351; GFX940-NEXT: ; def v[0:3] 352; GFX940-NEXT: ;;#ASMEND 353; GFX940-NEXT: v_mov_b32_e32 v6, 0 354; GFX940-NEXT: ;;#ASMSTART 355; GFX940-NEXT: ; def v[2:5] 356; GFX940-NEXT: ;;#ASMEND 357; GFX940-NEXT: s_nop 0 358; GFX940-NEXT: v_pk_mov_b32 v[0:1], v[4:5], v[0:1] op_sel:[1,0] 359; GFX940-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1] sc0 sc1 360; GFX940-NEXT: s_waitcnt vmcnt(0) 361; GFX940-NEXT: s_setpc_b64 s[30:31] 362 %vec0 = call <4 x i32> asm "; def $0", "=v"() 363 %vec1 = call <4 x i32> asm "; def $0", "=v"() 364 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 0> 365 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 366 ret void 367} 368 369define void @v_shuffle_v2i32_v4i32__7_1(ptr addrspace(1) inreg %ptr) { 370; GFX900-LABEL: v_shuffle_v2i32_v4i32__7_1: 371; GFX900: ; %bb.0: 372; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 373; GFX900-NEXT: ;;#ASMSTART 374; GFX900-NEXT: ; def v[0:3] 375; GFX900-NEXT: ;;#ASMEND 376; GFX900-NEXT: v_mov_b32_e32 v6, 0 377; GFX900-NEXT: ;;#ASMSTART 378; GFX900-NEXT: ; def v[2:5] 379; GFX900-NEXT: ;;#ASMEND 380; GFX900-NEXT: v_mov_b32_e32 v0, v5 381; GFX900-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17] 382; GFX900-NEXT: s_waitcnt vmcnt(0) 383; GFX900-NEXT: s_setpc_b64 s[30:31] 384; 385; GFX90A-LABEL: v_shuffle_v2i32_v4i32__7_1: 386; GFX90A: ; %bb.0: 387; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 388; GFX90A-NEXT: ;;#ASMSTART 389; GFX90A-NEXT: ; def v[0:3] 390; GFX90A-NEXT: ;;#ASMEND 391; GFX90A-NEXT: v_mov_b32_e32 v6, 0 392; GFX90A-NEXT: ;;#ASMSTART 393; GFX90A-NEXT: ; def v[2:5] 394; GFX90A-NEXT: ;;#ASMEND 395; GFX90A-NEXT: v_mov_b32_e32 v0, v5 396; GFX90A-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17] 397; GFX90A-NEXT: s_waitcnt vmcnt(0) 398; GFX90A-NEXT: s_setpc_b64 s[30:31] 399; 400; GFX940-LABEL: v_shuffle_v2i32_v4i32__7_1: 401; GFX940: ; %bb.0: 402; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 403; GFX940-NEXT: ;;#ASMSTART 404; GFX940-NEXT: ; def v[0:3] 405; GFX940-NEXT: ;;#ASMEND 406; GFX940-NEXT: v_mov_b32_e32 v6, 0 407; GFX940-NEXT: ;;#ASMSTART 408; GFX940-NEXT: ; def v[2:5] 409; GFX940-NEXT: ;;#ASMEND 410; GFX940-NEXT: s_nop 0 411; GFX940-NEXT: v_mov_b32_e32 v0, v5 412; GFX940-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1] sc0 sc1 413; GFX940-NEXT: s_waitcnt vmcnt(0) 414; GFX940-NEXT: s_setpc_b64 s[30:31] 415 %vec0 = call <4 x i32> asm "; def $0", "=v"() 416 %vec1 = call <4 x i32> asm "; def $0", "=v"() 417 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 1> 418 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 419 ret void 420} 421 422define void @v_shuffle_v2i32_v4i32__7_2(ptr addrspace(1) inreg %ptr) { 423; GFX900-LABEL: v_shuffle_v2i32_v4i32__7_2: 424; GFX900: ; %bb.0: 425; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 426; GFX900-NEXT: ;;#ASMSTART 427; GFX900-NEXT: ; def v[0:3] 428; GFX900-NEXT: ;;#ASMEND 429; GFX900-NEXT: v_mov_b32_e32 v7, 0 430; GFX900-NEXT: ;;#ASMSTART 431; GFX900-NEXT: ; def v[3:6] 432; GFX900-NEXT: ;;#ASMEND 433; GFX900-NEXT: v_mov_b32_e32 v1, v6 434; GFX900-NEXT: global_store_dwordx2 v7, v[1:2], s[16:17] 435; GFX900-NEXT: s_waitcnt vmcnt(0) 436; GFX900-NEXT: s_setpc_b64 s[30:31] 437; 438; GFX90A-LABEL: v_shuffle_v2i32_v4i32__7_2: 439; GFX90A: ; %bb.0: 440; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 441; GFX90A-NEXT: ;;#ASMSTART 442; GFX90A-NEXT: ; def v[0:3] 443; GFX90A-NEXT: ;;#ASMEND 444; GFX90A-NEXT: v_mov_b32_e32 v8, 0 445; GFX90A-NEXT: ;;#ASMSTART 446; GFX90A-NEXT: ; def v[4:7] 447; GFX90A-NEXT: ;;#ASMEND 448; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[6:7], v[2:3] op_sel:[1,0] 449; GFX90A-NEXT: global_store_dwordx2 v8, v[0:1], s[16:17] 450; GFX90A-NEXT: s_waitcnt vmcnt(0) 451; GFX90A-NEXT: s_setpc_b64 s[30:31] 452; 453; GFX940-LABEL: v_shuffle_v2i32_v4i32__7_2: 454; GFX940: ; %bb.0: 455; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 456; GFX940-NEXT: ;;#ASMSTART 457; GFX940-NEXT: ; def v[0:3] 458; GFX940-NEXT: ;;#ASMEND 459; GFX940-NEXT: v_mov_b32_e32 v8, 0 460; GFX940-NEXT: ;;#ASMSTART 461; GFX940-NEXT: ; def v[4:7] 462; GFX940-NEXT: ;;#ASMEND 463; GFX940-NEXT: s_nop 0 464; GFX940-NEXT: v_pk_mov_b32 v[0:1], v[6:7], v[2:3] op_sel:[1,0] 465; GFX940-NEXT: global_store_dwordx2 v8, v[0:1], s[0:1] sc0 sc1 466; GFX940-NEXT: s_waitcnt vmcnt(0) 467; GFX940-NEXT: s_setpc_b64 s[30:31] 468 %vec0 = call <4 x i32> asm "; def $0", "=v"() 469 %vec1 = call <4 x i32> asm "; def $0", "=v"() 470 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 2> 471 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 472 ret void 473} 474 475define void @v_shuffle_v2i32_v4i32__7_3(ptr addrspace(1) inreg %ptr) { 476; GFX900-LABEL: v_shuffle_v2i32_v4i32__7_3: 477; GFX900: ; %bb.0: 478; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 479; GFX900-NEXT: ;;#ASMSTART 480; GFX900-NEXT: ; def v[0:3] 481; GFX900-NEXT: ;;#ASMEND 482; GFX900-NEXT: v_mov_b32_e32 v8, 0 483; GFX900-NEXT: ;;#ASMSTART 484; GFX900-NEXT: ; def v[4:7] 485; GFX900-NEXT: ;;#ASMEND 486; GFX900-NEXT: v_mov_b32_e32 v2, v7 487; GFX900-NEXT: global_store_dwordx2 v8, v[2:3], s[16:17] 488; GFX900-NEXT: s_waitcnt vmcnt(0) 489; GFX900-NEXT: s_setpc_b64 s[30:31] 490; 491; GFX90A-LABEL: v_shuffle_v2i32_v4i32__7_3: 492; GFX90A: ; %bb.0: 493; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 494; GFX90A-NEXT: ;;#ASMSTART 495; GFX90A-NEXT: ; def v[0:3] 496; GFX90A-NEXT: ;;#ASMEND 497; GFX90A-NEXT: v_mov_b32_e32 v8, 0 498; GFX90A-NEXT: ;;#ASMSTART 499; GFX90A-NEXT: ; def v[4:7] 500; GFX90A-NEXT: ;;#ASMEND 501; GFX90A-NEXT: v_mov_b32_e32 v2, v7 502; GFX90A-NEXT: global_store_dwordx2 v8, v[2:3], s[16:17] 503; GFX90A-NEXT: s_waitcnt vmcnt(0) 504; GFX90A-NEXT: s_setpc_b64 s[30:31] 505; 506; GFX940-LABEL: v_shuffle_v2i32_v4i32__7_3: 507; GFX940: ; %bb.0: 508; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 509; GFX940-NEXT: ;;#ASMSTART 510; GFX940-NEXT: ; def v[0:3] 511; GFX940-NEXT: ;;#ASMEND 512; GFX940-NEXT: v_mov_b32_e32 v8, 0 513; GFX940-NEXT: ;;#ASMSTART 514; GFX940-NEXT: ; def v[4:7] 515; GFX940-NEXT: ;;#ASMEND 516; GFX940-NEXT: s_nop 0 517; GFX940-NEXT: v_mov_b32_e32 v2, v7 518; GFX940-NEXT: global_store_dwordx2 v8, v[2:3], s[0:1] sc0 sc1 519; GFX940-NEXT: s_waitcnt vmcnt(0) 520; GFX940-NEXT: s_setpc_b64 s[30:31] 521 %vec0 = call <4 x i32> asm "; def $0", "=v"() 522 %vec1 = call <4 x i32> asm "; def $0", "=v"() 523 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 3> 524 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 525 ret void 526} 527 528define void @v_shuffle_v2i32_v4i32__7_4(ptr addrspace(1) inreg %ptr) { 529; GFX900-LABEL: v_shuffle_v2i32_v4i32__7_4: 530; GFX900: ; %bb.0: 531; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 532; GFX900-NEXT: ;;#ASMSTART 533; GFX900-NEXT: ; def v[0:3] 534; GFX900-NEXT: ;;#ASMEND 535; GFX900-NEXT: v_mov_b32_e32 v4, 0 536; GFX900-NEXT: v_mov_b32_e32 v1, v3 537; GFX900-NEXT: v_mov_b32_e32 v2, v0 538; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17] 539; GFX900-NEXT: s_waitcnt vmcnt(0) 540; GFX900-NEXT: s_setpc_b64 s[30:31] 541; 542; GFX90A-LABEL: v_shuffle_v2i32_v4i32__7_4: 543; GFX90A: ; %bb.0: 544; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 545; GFX90A-NEXT: ;;#ASMSTART 546; GFX90A-NEXT: ; def v[0:3] 547; GFX90A-NEXT: ;;#ASMEND 548; GFX90A-NEXT: v_mov_b32_e32 v4, 0 549; GFX90A-NEXT: v_mov_b32_e32 v2, v3 550; GFX90A-NEXT: v_mov_b32_e32 v3, v0 551; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 552; GFX90A-NEXT: s_waitcnt vmcnt(0) 553; GFX90A-NEXT: s_setpc_b64 s[30:31] 554; 555; GFX940-LABEL: v_shuffle_v2i32_v4i32__7_4: 556; GFX940: ; %bb.0: 557; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 558; GFX940-NEXT: ;;#ASMSTART 559; GFX940-NEXT: ; def v[0:3] 560; GFX940-NEXT: ;;#ASMEND 561; GFX940-NEXT: v_mov_b32_e32 v4, 0 562; GFX940-NEXT: v_mov_b32_e32 v2, v3 563; GFX940-NEXT: v_mov_b32_e32 v3, v0 564; GFX940-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1 565; GFX940-NEXT: s_waitcnt vmcnt(0) 566; GFX940-NEXT: s_setpc_b64 s[30:31] 567 %vec0 = call <4 x i32> asm "; def $0", "=v"() 568 %vec1 = call <4 x i32> asm "; def $0", "=v"() 569 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 4> 570 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 571 ret void 572} 573 574define void @v_shuffle_v2i32_v4i32__7_5(ptr addrspace(1) inreg %ptr) { 575; GFX900-LABEL: v_shuffle_v2i32_v4i32__7_5: 576; GFX900: ; %bb.0: 577; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 578; GFX900-NEXT: ;;#ASMSTART 579; GFX900-NEXT: ; def v[0:3] 580; GFX900-NEXT: ;;#ASMEND 581; GFX900-NEXT: v_mov_b32_e32 v4, 0 582; GFX900-NEXT: v_mov_b32_e32 v0, v3 583; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 584; GFX900-NEXT: s_waitcnt vmcnt(0) 585; GFX900-NEXT: s_setpc_b64 s[30:31] 586; 587; GFX90A-LABEL: v_shuffle_v2i32_v4i32__7_5: 588; GFX90A: ; %bb.0: 589; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 590; GFX90A-NEXT: ;;#ASMSTART 591; GFX90A-NEXT: ; def v[0:3] 592; GFX90A-NEXT: ;;#ASMEND 593; GFX90A-NEXT: v_mov_b32_e32 v4, 0 594; GFX90A-NEXT: v_mov_b32_e32 v0, v3 595; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 596; GFX90A-NEXT: s_waitcnt vmcnt(0) 597; GFX90A-NEXT: s_setpc_b64 s[30:31] 598; 599; GFX940-LABEL: v_shuffle_v2i32_v4i32__7_5: 600; GFX940: ; %bb.0: 601; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 602; GFX940-NEXT: ;;#ASMSTART 603; GFX940-NEXT: ; def v[0:3] 604; GFX940-NEXT: ;;#ASMEND 605; GFX940-NEXT: v_mov_b32_e32 v4, 0 606; GFX940-NEXT: v_mov_b32_e32 v0, v3 607; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 608; GFX940-NEXT: s_waitcnt vmcnt(0) 609; GFX940-NEXT: s_setpc_b64 s[30:31] 610 %vec0 = call <4 x i32> asm "; def $0", "=v"() 611 %vec1 = call <4 x i32> asm "; def $0", "=v"() 612 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 5> 613 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 614 ret void 615} 616 617define void @v_shuffle_v2i32_v4i32__7_6(ptr addrspace(1) inreg %ptr) { 618; GFX900-LABEL: v_shuffle_v2i32_v4i32__7_6: 619; GFX900: ; %bb.0: 620; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 621; GFX900-NEXT: ;;#ASMSTART 622; GFX900-NEXT: ; def v[0:3] 623; GFX900-NEXT: ;;#ASMEND 624; GFX900-NEXT: v_mov_b32_e32 v4, 0 625; GFX900-NEXT: v_mov_b32_e32 v1, v3 626; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17] 627; GFX900-NEXT: s_waitcnt vmcnt(0) 628; GFX900-NEXT: s_setpc_b64 s[30:31] 629; 630; GFX90A-LABEL: v_shuffle_v2i32_v4i32__7_6: 631; GFX90A: ; %bb.0: 632; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 633; GFX90A-NEXT: ;;#ASMSTART 634; GFX90A-NEXT: ; def v[0:3] 635; GFX90A-NEXT: ;;#ASMEND 636; GFX90A-NEXT: v_mov_b32_e32 v4, 0 637; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0] 638; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 639; GFX90A-NEXT: s_waitcnt vmcnt(0) 640; GFX90A-NEXT: s_setpc_b64 s[30:31] 641; 642; GFX940-LABEL: v_shuffle_v2i32_v4i32__7_6: 643; GFX940: ; %bb.0: 644; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 645; GFX940-NEXT: ;;#ASMSTART 646; GFX940-NEXT: ; def v[0:3] 647; GFX940-NEXT: ;;#ASMEND 648; GFX940-NEXT: v_mov_b32_e32 v4, 0 649; GFX940-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0] 650; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 651; GFX940-NEXT: s_waitcnt vmcnt(0) 652; GFX940-NEXT: s_setpc_b64 s[30:31] 653 %vec0 = call <4 x i32> asm "; def $0", "=v"() 654 %vec1 = call <4 x i32> asm "; def $0", "=v"() 655 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 6> 656 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 657 ret void 658} 659 660define void @v_shuffle_v2i32_v4i32__7_7(ptr addrspace(1) inreg %ptr) { 661; GFX900-LABEL: v_shuffle_v2i32_v4i32__7_7: 662; GFX900: ; %bb.0: 663; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 664; GFX900-NEXT: ;;#ASMSTART 665; GFX900-NEXT: ; def v[0:3] 666; GFX900-NEXT: ;;#ASMEND 667; GFX900-NEXT: v_mov_b32_e32 v4, 0 668; GFX900-NEXT: v_mov_b32_e32 v2, v3 669; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 670; GFX900-NEXT: s_waitcnt vmcnt(0) 671; GFX900-NEXT: s_setpc_b64 s[30:31] 672; 673; GFX90A-LABEL: v_shuffle_v2i32_v4i32__7_7: 674; GFX90A: ; %bb.0: 675; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 676; GFX90A-NEXT: ;;#ASMSTART 677; GFX90A-NEXT: ; def v[0:3] 678; GFX90A-NEXT: ;;#ASMEND 679; GFX90A-NEXT: v_mov_b32_e32 v4, 0 680; GFX90A-NEXT: v_mov_b32_e32 v2, v3 681; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 682; GFX90A-NEXT: s_waitcnt vmcnt(0) 683; GFX90A-NEXT: s_setpc_b64 s[30:31] 684; 685; GFX940-LABEL: v_shuffle_v2i32_v4i32__7_7: 686; GFX940: ; %bb.0: 687; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 688; GFX940-NEXT: ;;#ASMSTART 689; GFX940-NEXT: ; def v[0:3] 690; GFX940-NEXT: ;;#ASMEND 691; GFX940-NEXT: v_mov_b32_e32 v4, 0 692; GFX940-NEXT: v_mov_b32_e32 v2, v3 693; GFX940-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1 694; GFX940-NEXT: s_waitcnt vmcnt(0) 695; GFX940-NEXT: s_setpc_b64 s[30:31] 696 %vec0 = call <4 x i32> asm "; def $0", "=v"() 697 %vec1 = call <4 x i32> asm "; def $0", "=v"() 698 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 7> 699 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 700 ret void 701} 702 703define void @v_shuffle_v2i32_v4i32__u_0(ptr addrspace(1) inreg %ptr) { 704; GFX900-LABEL: v_shuffle_v2i32_v4i32__u_0: 705; GFX900: ; %bb.0: 706; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 707; GFX900-NEXT: ;;#ASMSTART 708; GFX900-NEXT: ; def v[0:3] 709; GFX900-NEXT: ;;#ASMEND 710; GFX900-NEXT: v_mov_b32_e32 v4, 0 711; GFX900-NEXT: v_mov_b32_e32 v1, v0 712; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 713; GFX900-NEXT: s_waitcnt vmcnt(0) 714; GFX900-NEXT: s_setpc_b64 s[30:31] 715; 716; GFX90A-LABEL: v_shuffle_v2i32_v4i32__u_0: 717; GFX90A: ; %bb.0: 718; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 719; GFX90A-NEXT: ;;#ASMSTART 720; GFX90A-NEXT: ; def v[0:3] 721; GFX90A-NEXT: ;;#ASMEND 722; GFX90A-NEXT: v_mov_b32_e32 v4, 0 723; GFX90A-NEXT: v_mov_b32_e32 v1, v0 724; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 725; GFX90A-NEXT: s_waitcnt vmcnt(0) 726; GFX90A-NEXT: s_setpc_b64 s[30:31] 727; 728; GFX940-LABEL: v_shuffle_v2i32_v4i32__u_0: 729; GFX940: ; %bb.0: 730; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 731; GFX940-NEXT: ;;#ASMSTART 732; GFX940-NEXT: ; def v[0:3] 733; GFX940-NEXT: ;;#ASMEND 734; GFX940-NEXT: v_mov_b32_e32 v4, 0 735; GFX940-NEXT: v_mov_b32_e32 v1, v0 736; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 737; GFX940-NEXT: s_waitcnt vmcnt(0) 738; GFX940-NEXT: s_setpc_b64 s[30:31] 739 %vec0 = call <4 x i32> asm "; def $0", "=v"() 740 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 poison, i32 0> 741 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 742 ret void 743} 744 745define void @v_shuffle_v2i32_v4i32__0_0(ptr addrspace(1) inreg %ptr) { 746; GFX900-LABEL: v_shuffle_v2i32_v4i32__0_0: 747; GFX900: ; %bb.0: 748; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 749; GFX900-NEXT: ;;#ASMSTART 750; GFX900-NEXT: ; def v[0:3] 751; GFX900-NEXT: ;;#ASMEND 752; GFX900-NEXT: v_mov_b32_e32 v4, 0 753; GFX900-NEXT: v_mov_b32_e32 v1, v0 754; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 755; GFX900-NEXT: s_waitcnt vmcnt(0) 756; GFX900-NEXT: s_setpc_b64 s[30:31] 757; 758; GFX90A-LABEL: v_shuffle_v2i32_v4i32__0_0: 759; GFX90A: ; %bb.0: 760; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 761; GFX90A-NEXT: ;;#ASMSTART 762; GFX90A-NEXT: ; def v[0:3] 763; GFX90A-NEXT: ;;#ASMEND 764; GFX90A-NEXT: v_mov_b32_e32 v4, 0 765; GFX90A-NEXT: v_mov_b32_e32 v1, v0 766; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 767; GFX90A-NEXT: s_waitcnt vmcnt(0) 768; GFX90A-NEXT: s_setpc_b64 s[30:31] 769; 770; GFX940-LABEL: v_shuffle_v2i32_v4i32__0_0: 771; GFX940: ; %bb.0: 772; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 773; GFX940-NEXT: ;;#ASMSTART 774; GFX940-NEXT: ; def v[0:3] 775; GFX940-NEXT: ;;#ASMEND 776; GFX940-NEXT: v_mov_b32_e32 v4, 0 777; GFX940-NEXT: v_mov_b32_e32 v1, v0 778; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 779; GFX940-NEXT: s_waitcnt vmcnt(0) 780; GFX940-NEXT: s_setpc_b64 s[30:31] 781 %vec0 = call <4 x i32> asm "; def $0", "=v"() 782 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> zeroinitializer 783 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 784 ret void 785} 786 787define void @v_shuffle_v2i32_v4i32__1_0(ptr addrspace(1) inreg %ptr) { 788; GFX900-LABEL: v_shuffle_v2i32_v4i32__1_0: 789; GFX900: ; %bb.0: 790; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 791; GFX900-NEXT: ;;#ASMSTART 792; GFX900-NEXT: ; def v[0:3] 793; GFX900-NEXT: ;;#ASMEND 794; GFX900-NEXT: v_mov_b32_e32 v4, 0 795; GFX900-NEXT: v_mov_b32_e32 v2, v0 796; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17] 797; GFX900-NEXT: s_waitcnt vmcnt(0) 798; GFX900-NEXT: s_setpc_b64 s[30:31] 799; 800; GFX90A-LABEL: v_shuffle_v2i32_v4i32__1_0: 801; GFX90A: ; %bb.0: 802; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 803; GFX90A-NEXT: ;;#ASMSTART 804; GFX90A-NEXT: ; def v[0:3] 805; GFX90A-NEXT: ;;#ASMEND 806; GFX90A-NEXT: v_mov_b32_e32 v4, 0 807; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0] 808; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 809; GFX90A-NEXT: s_waitcnt vmcnt(0) 810; GFX90A-NEXT: s_setpc_b64 s[30:31] 811; 812; GFX940-LABEL: v_shuffle_v2i32_v4i32__1_0: 813; GFX940: ; %bb.0: 814; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 815; GFX940-NEXT: ;;#ASMSTART 816; GFX940-NEXT: ; def v[0:3] 817; GFX940-NEXT: ;;#ASMEND 818; GFX940-NEXT: v_mov_b32_e32 v4, 0 819; GFX940-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0] 820; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 821; GFX940-NEXT: s_waitcnt vmcnt(0) 822; GFX940-NEXT: s_setpc_b64 s[30:31] 823 %vec0 = call <4 x i32> asm "; def $0", "=v"() 824 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 0> 825 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 826 ret void 827} 828 829define void @v_shuffle_v2i32_v4i32__2_0(ptr addrspace(1) inreg %ptr) { 830; GFX900-LABEL: v_shuffle_v2i32_v4i32__2_0: 831; GFX900: ; %bb.0: 832; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 833; GFX900-NEXT: ;;#ASMSTART 834; GFX900-NEXT: ; def v[0:3] 835; GFX900-NEXT: ;;#ASMEND 836; GFX900-NEXT: v_mov_b32_e32 v4, 0 837; GFX900-NEXT: v_mov_b32_e32 v3, v0 838; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 839; GFX900-NEXT: s_waitcnt vmcnt(0) 840; GFX900-NEXT: s_setpc_b64 s[30:31] 841; 842; GFX90A-LABEL: v_shuffle_v2i32_v4i32__2_0: 843; GFX90A: ; %bb.0: 844; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 845; GFX90A-NEXT: ;;#ASMSTART 846; GFX90A-NEXT: ; def v[0:3] 847; GFX90A-NEXT: ;;#ASMEND 848; GFX90A-NEXT: v_mov_b32_e32 v4, 0 849; GFX90A-NEXT: v_mov_b32_e32 v3, v0 850; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 851; GFX90A-NEXT: s_waitcnt vmcnt(0) 852; GFX90A-NEXT: s_setpc_b64 s[30:31] 853; 854; GFX940-LABEL: v_shuffle_v2i32_v4i32__2_0: 855; GFX940: ; %bb.0: 856; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 857; GFX940-NEXT: ;;#ASMSTART 858; GFX940-NEXT: ; def v[0:3] 859; GFX940-NEXT: ;;#ASMEND 860; GFX940-NEXT: v_mov_b32_e32 v4, 0 861; GFX940-NEXT: v_mov_b32_e32 v3, v0 862; GFX940-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1 863; GFX940-NEXT: s_waitcnt vmcnt(0) 864; GFX940-NEXT: s_setpc_b64 s[30:31] 865 %vec0 = call <4 x i32> asm "; def $0", "=v"() 866 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 0> 867 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 868 ret void 869} 870 871define void @v_shuffle_v2i32_v4i32__3_0(ptr addrspace(1) inreg %ptr) { 872; GFX900-LABEL: v_shuffle_v2i32_v4i32__3_0: 873; GFX900: ; %bb.0: 874; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 875; GFX900-NEXT: ;;#ASMSTART 876; GFX900-NEXT: ; def v[0:3] 877; GFX900-NEXT: ;;#ASMEND 878; GFX900-NEXT: v_mov_b32_e32 v4, 0 879; GFX900-NEXT: v_mov_b32_e32 v1, v3 880; GFX900-NEXT: v_mov_b32_e32 v2, v0 881; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17] 882; GFX900-NEXT: s_waitcnt vmcnt(0) 883; GFX900-NEXT: s_setpc_b64 s[30:31] 884; 885; GFX90A-LABEL: v_shuffle_v2i32_v4i32__3_0: 886; GFX90A: ; %bb.0: 887; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 888; GFX90A-NEXT: ;;#ASMSTART 889; GFX90A-NEXT: ; def v[0:3] 890; GFX90A-NEXT: ;;#ASMEND 891; GFX90A-NEXT: v_mov_b32_e32 v4, 0 892; GFX90A-NEXT: v_mov_b32_e32 v2, v3 893; GFX90A-NEXT: v_mov_b32_e32 v3, v0 894; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 895; GFX90A-NEXT: s_waitcnt vmcnt(0) 896; GFX90A-NEXT: s_setpc_b64 s[30:31] 897; 898; GFX940-LABEL: v_shuffle_v2i32_v4i32__3_0: 899; GFX940: ; %bb.0: 900; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 901; GFX940-NEXT: ;;#ASMSTART 902; GFX940-NEXT: ; def v[0:3] 903; GFX940-NEXT: ;;#ASMEND 904; GFX940-NEXT: v_mov_b32_e32 v4, 0 905; GFX940-NEXT: v_mov_b32_e32 v2, v3 906; GFX940-NEXT: v_mov_b32_e32 v3, v0 907; GFX940-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1 908; GFX940-NEXT: s_waitcnt vmcnt(0) 909; GFX940-NEXT: s_setpc_b64 s[30:31] 910 %vec0 = call <4 x i32> asm "; def $0", "=v"() 911 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 0> 912 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 913 ret void 914} 915 916define void @v_shuffle_v2i32_v4i32__4_0(ptr addrspace(1) inreg %ptr) { 917; GFX900-LABEL: v_shuffle_v2i32_v4i32__4_0: 918; GFX900: ; %bb.0: 919; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 920; GFX900-NEXT: ;;#ASMSTART 921; GFX900-NEXT: ; def v[0:3] 922; GFX900-NEXT: ;;#ASMEND 923; GFX900-NEXT: v_mov_b32_e32 v4, 0 924; GFX900-NEXT: v_mov_b32_e32 v1, v0 925; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 926; GFX900-NEXT: s_waitcnt vmcnt(0) 927; GFX900-NEXT: s_setpc_b64 s[30:31] 928; 929; GFX90A-LABEL: v_shuffle_v2i32_v4i32__4_0: 930; GFX90A: ; %bb.0: 931; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 932; GFX90A-NEXT: ;;#ASMSTART 933; GFX90A-NEXT: ; def v[0:3] 934; GFX90A-NEXT: ;;#ASMEND 935; GFX90A-NEXT: v_mov_b32_e32 v4, 0 936; GFX90A-NEXT: v_mov_b32_e32 v1, v0 937; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 938; GFX90A-NEXT: s_waitcnt vmcnt(0) 939; GFX90A-NEXT: s_setpc_b64 s[30:31] 940; 941; GFX940-LABEL: v_shuffle_v2i32_v4i32__4_0: 942; GFX940: ; %bb.0: 943; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 944; GFX940-NEXT: ;;#ASMSTART 945; GFX940-NEXT: ; def v[0:3] 946; GFX940-NEXT: ;;#ASMEND 947; GFX940-NEXT: v_mov_b32_e32 v4, 0 948; GFX940-NEXT: v_mov_b32_e32 v1, v0 949; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 950; GFX940-NEXT: s_waitcnt vmcnt(0) 951; GFX940-NEXT: s_setpc_b64 s[30:31] 952 %vec0 = call <4 x i32> asm "; def $0", "=v"() 953 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 0> 954 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 955 ret void 956} 957 958define void @v_shuffle_v2i32_v4i32__5_0(ptr addrspace(1) inreg %ptr) { 959; GFX900-LABEL: v_shuffle_v2i32_v4i32__5_0: 960; GFX900: ; %bb.0: 961; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 962; GFX900-NEXT: ;;#ASMSTART 963; GFX900-NEXT: ; def v[0:3] 964; GFX900-NEXT: ;;#ASMEND 965; GFX900-NEXT: ;;#ASMSTART 966; GFX900-NEXT: ; def v[1:4] 967; GFX900-NEXT: ;;#ASMEND 968; GFX900-NEXT: v_mov_b32_e32 v5, 0 969; GFX900-NEXT: v_mov_b32_e32 v3, v0 970; GFX900-NEXT: global_store_dwordx2 v5, v[2:3], s[16:17] 971; GFX900-NEXT: s_waitcnt vmcnt(0) 972; GFX900-NEXT: s_setpc_b64 s[30:31] 973; 974; GFX90A-LABEL: v_shuffle_v2i32_v4i32__5_0: 975; GFX90A: ; %bb.0: 976; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 977; GFX90A-NEXT: ;;#ASMSTART 978; GFX90A-NEXT: ; def v[0:3] 979; GFX90A-NEXT: ;;#ASMEND 980; GFX90A-NEXT: v_mov_b32_e32 v6, 0 981; GFX90A-NEXT: ;;#ASMSTART 982; GFX90A-NEXT: ; def v[2:5] 983; GFX90A-NEXT: ;;#ASMEND 984; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[0:1] op_sel:[1,0] 985; GFX90A-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17] 986; GFX90A-NEXT: s_waitcnt vmcnt(0) 987; GFX90A-NEXT: s_setpc_b64 s[30:31] 988; 989; GFX940-LABEL: v_shuffle_v2i32_v4i32__5_0: 990; GFX940: ; %bb.0: 991; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 992; GFX940-NEXT: ;;#ASMSTART 993; GFX940-NEXT: ; def v[0:3] 994; GFX940-NEXT: ;;#ASMEND 995; GFX940-NEXT: v_mov_b32_e32 v6, 0 996; GFX940-NEXT: ;;#ASMSTART 997; GFX940-NEXT: ; def v[2:5] 998; GFX940-NEXT: ;;#ASMEND 999; GFX940-NEXT: s_nop 0 1000; GFX940-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[0:1] op_sel:[1,0] 1001; GFX940-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1] sc0 sc1 1002; GFX940-NEXT: s_waitcnt vmcnt(0) 1003; GFX940-NEXT: s_setpc_b64 s[30:31] 1004 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1005 %vec1 = call <4 x i32> asm "; def $0", "=v"() 1006 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 0> 1007 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1008 ret void 1009} 1010 1011define void @v_shuffle_v2i32_v4i32__6_0(ptr addrspace(1) inreg %ptr) { 1012; GFX900-LABEL: v_shuffle_v2i32_v4i32__6_0: 1013; GFX900: ; %bb.0: 1014; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1015; GFX900-NEXT: ;;#ASMSTART 1016; GFX900-NEXT: ; def v[0:3] 1017; GFX900-NEXT: ;;#ASMEND 1018; GFX900-NEXT: ;;#ASMSTART 1019; GFX900-NEXT: ; def v[1:4] 1020; GFX900-NEXT: ;;#ASMEND 1021; GFX900-NEXT: v_mov_b32_e32 v5, 0 1022; GFX900-NEXT: v_mov_b32_e32 v4, v0 1023; GFX900-NEXT: global_store_dwordx2 v5, v[3:4], s[16:17] 1024; GFX900-NEXT: s_waitcnt vmcnt(0) 1025; GFX900-NEXT: s_setpc_b64 s[30:31] 1026; 1027; GFX90A-LABEL: v_shuffle_v2i32_v4i32__6_0: 1028; GFX90A: ; %bb.0: 1029; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1030; GFX90A-NEXT: ;;#ASMSTART 1031; GFX90A-NEXT: ; def v[0:3] 1032; GFX90A-NEXT: ;;#ASMEND 1033; GFX90A-NEXT: ;;#ASMSTART 1034; GFX90A-NEXT: ; def v[2:5] 1035; GFX90A-NEXT: ;;#ASMEND 1036; GFX90A-NEXT: v_mov_b32_e32 v6, 0 1037; GFX90A-NEXT: v_mov_b32_e32 v5, v0 1038; GFX90A-NEXT: global_store_dwordx2 v6, v[4:5], s[16:17] 1039; GFX90A-NEXT: s_waitcnt vmcnt(0) 1040; GFX90A-NEXT: s_setpc_b64 s[30:31] 1041; 1042; GFX940-LABEL: v_shuffle_v2i32_v4i32__6_0: 1043; GFX940: ; %bb.0: 1044; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1045; GFX940-NEXT: ;;#ASMSTART 1046; GFX940-NEXT: ; def v[0:3] 1047; GFX940-NEXT: ;;#ASMEND 1048; GFX940-NEXT: v_mov_b32_e32 v6, 0 1049; GFX940-NEXT: ;;#ASMSTART 1050; GFX940-NEXT: ; def v[2:5] 1051; GFX940-NEXT: ;;#ASMEND 1052; GFX940-NEXT: s_nop 0 1053; GFX940-NEXT: v_mov_b32_e32 v5, v0 1054; GFX940-NEXT: global_store_dwordx2 v6, v[4:5], s[0:1] sc0 sc1 1055; GFX940-NEXT: s_waitcnt vmcnt(0) 1056; GFX940-NEXT: s_setpc_b64 s[30:31] 1057 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1058 %vec1 = call <4 x i32> asm "; def $0", "=v"() 1059 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 0> 1060 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1061 ret void 1062} 1063 1064define void @v_shuffle_v2i32_v4i32__u_1(ptr addrspace(1) inreg %ptr) { 1065; GFX900-LABEL: v_shuffle_v2i32_v4i32__u_1: 1066; GFX900: ; %bb.0: 1067; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1068; GFX900-NEXT: v_mov_b32_e32 v4, 0 1069; GFX900-NEXT: ;;#ASMSTART 1070; GFX900-NEXT: ; def v[0:3] 1071; GFX900-NEXT: ;;#ASMEND 1072; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 1073; GFX900-NEXT: s_waitcnt vmcnt(0) 1074; GFX900-NEXT: s_setpc_b64 s[30:31] 1075; 1076; GFX90A-LABEL: v_shuffle_v2i32_v4i32__u_1: 1077; GFX90A: ; %bb.0: 1078; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1079; GFX90A-NEXT: v_mov_b32_e32 v4, 0 1080; GFX90A-NEXT: ;;#ASMSTART 1081; GFX90A-NEXT: ; def v[0:3] 1082; GFX90A-NEXT: ;;#ASMEND 1083; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 1084; GFX90A-NEXT: s_waitcnt vmcnt(0) 1085; GFX90A-NEXT: s_setpc_b64 s[30:31] 1086; 1087; GFX940-LABEL: v_shuffle_v2i32_v4i32__u_1: 1088; GFX940: ; %bb.0: 1089; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1090; GFX940-NEXT: v_mov_b32_e32 v4, 0 1091; GFX940-NEXT: ;;#ASMSTART 1092; GFX940-NEXT: ; def v[0:3] 1093; GFX940-NEXT: ;;#ASMEND 1094; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 1095; GFX940-NEXT: s_waitcnt vmcnt(0) 1096; GFX940-NEXT: s_setpc_b64 s[30:31] 1097 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1098 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 poison, i32 1> 1099 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1100 ret void 1101} 1102 1103define void @v_shuffle_v2i32_v4i32__0_1(ptr addrspace(1) inreg %ptr) { 1104; GFX900-LABEL: v_shuffle_v2i32_v4i32__0_1: 1105; GFX900: ; %bb.0: 1106; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1107; GFX900-NEXT: v_mov_b32_e32 v4, 0 1108; GFX900-NEXT: ;;#ASMSTART 1109; GFX900-NEXT: ; def v[0:3] 1110; GFX900-NEXT: ;;#ASMEND 1111; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 1112; GFX900-NEXT: s_waitcnt vmcnt(0) 1113; GFX900-NEXT: s_setpc_b64 s[30:31] 1114; 1115; GFX90A-LABEL: v_shuffle_v2i32_v4i32__0_1: 1116; GFX90A: ; %bb.0: 1117; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1118; GFX90A-NEXT: v_mov_b32_e32 v4, 0 1119; GFX90A-NEXT: ;;#ASMSTART 1120; GFX90A-NEXT: ; def v[0:3] 1121; GFX90A-NEXT: ;;#ASMEND 1122; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 1123; GFX90A-NEXT: s_waitcnt vmcnt(0) 1124; GFX90A-NEXT: s_setpc_b64 s[30:31] 1125; 1126; GFX940-LABEL: v_shuffle_v2i32_v4i32__0_1: 1127; GFX940: ; %bb.0: 1128; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1129; GFX940-NEXT: v_mov_b32_e32 v4, 0 1130; GFX940-NEXT: ;;#ASMSTART 1131; GFX940-NEXT: ; def v[0:3] 1132; GFX940-NEXT: ;;#ASMEND 1133; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 1134; GFX940-NEXT: s_waitcnt vmcnt(0) 1135; GFX940-NEXT: s_setpc_b64 s[30:31] 1136 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1137 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 0, i32 1> 1138 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1139 ret void 1140} 1141 1142define void @v_shuffle_v2i32_v4i32__1_1(ptr addrspace(1) inreg %ptr) { 1143; GFX900-LABEL: v_shuffle_v2i32_v4i32__1_1: 1144; GFX900: ; %bb.0: 1145; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1146; GFX900-NEXT: ;;#ASMSTART 1147; GFX900-NEXT: ; def v[0:3] 1148; GFX900-NEXT: ;;#ASMEND 1149; GFX900-NEXT: v_mov_b32_e32 v4, 0 1150; GFX900-NEXT: v_mov_b32_e32 v2, v1 1151; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17] 1152; GFX900-NEXT: s_waitcnt vmcnt(0) 1153; GFX900-NEXT: s_setpc_b64 s[30:31] 1154; 1155; GFX90A-LABEL: v_shuffle_v2i32_v4i32__1_1: 1156; GFX90A: ; %bb.0: 1157; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1158; GFX90A-NEXT: ;;#ASMSTART 1159; GFX90A-NEXT: ; def v[0:3] 1160; GFX90A-NEXT: ;;#ASMEND 1161; GFX90A-NEXT: v_mov_b32_e32 v4, 0 1162; GFX90A-NEXT: v_mov_b32_e32 v0, v1 1163; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 1164; GFX90A-NEXT: s_waitcnt vmcnt(0) 1165; GFX90A-NEXT: s_setpc_b64 s[30:31] 1166; 1167; GFX940-LABEL: v_shuffle_v2i32_v4i32__1_1: 1168; GFX940: ; %bb.0: 1169; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1170; GFX940-NEXT: ;;#ASMSTART 1171; GFX940-NEXT: ; def v[0:3] 1172; GFX940-NEXT: ;;#ASMEND 1173; GFX940-NEXT: v_mov_b32_e32 v4, 0 1174; GFX940-NEXT: v_mov_b32_e32 v0, v1 1175; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 1176; GFX940-NEXT: s_waitcnt vmcnt(0) 1177; GFX940-NEXT: s_setpc_b64 s[30:31] 1178 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1179 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 1> 1180 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1181 ret void 1182} 1183 1184define void @v_shuffle_v2i32_v4i32__2_1(ptr addrspace(1) inreg %ptr) { 1185; GFX900-LABEL: v_shuffle_v2i32_v4i32__2_1: 1186; GFX900: ; %bb.0: 1187; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1188; GFX900-NEXT: ;;#ASMSTART 1189; GFX900-NEXT: ; def v[0:3] 1190; GFX900-NEXT: ;;#ASMEND 1191; GFX900-NEXT: v_mov_b32_e32 v4, 0 1192; GFX900-NEXT: v_mov_b32_e32 v3, v1 1193; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 1194; GFX900-NEXT: s_waitcnt vmcnt(0) 1195; GFX900-NEXT: s_setpc_b64 s[30:31] 1196; 1197; GFX90A-LABEL: v_shuffle_v2i32_v4i32__2_1: 1198; GFX90A: ; %bb.0: 1199; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1200; GFX90A-NEXT: ;;#ASMSTART 1201; GFX90A-NEXT: ; def v[0:3] 1202; GFX90A-NEXT: ;;#ASMEND 1203; GFX90A-NEXT: v_mov_b32_e32 v4, 0 1204; GFX90A-NEXT: v_mov_b32_e32 v3, v1 1205; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 1206; GFX90A-NEXT: s_waitcnt vmcnt(0) 1207; GFX90A-NEXT: s_setpc_b64 s[30:31] 1208; 1209; GFX940-LABEL: v_shuffle_v2i32_v4i32__2_1: 1210; GFX940: ; %bb.0: 1211; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1212; GFX940-NEXT: ;;#ASMSTART 1213; GFX940-NEXT: ; def v[0:3] 1214; GFX940-NEXT: ;;#ASMEND 1215; GFX940-NEXT: v_mov_b32_e32 v4, 0 1216; GFX940-NEXT: v_mov_b32_e32 v3, v1 1217; GFX940-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1 1218; GFX940-NEXT: s_waitcnt vmcnt(0) 1219; GFX940-NEXT: s_setpc_b64 s[30:31] 1220 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1221 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 1> 1222 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1223 ret void 1224} 1225 1226define void @v_shuffle_v2i32_v4i32__3_1(ptr addrspace(1) inreg %ptr) { 1227; GFX900-LABEL: v_shuffle_v2i32_v4i32__3_1: 1228; GFX900: ; %bb.0: 1229; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1230; GFX900-NEXT: ;;#ASMSTART 1231; GFX900-NEXT: ; def v[0:3] 1232; GFX900-NEXT: ;;#ASMEND 1233; GFX900-NEXT: v_mov_b32_e32 v4, 0 1234; GFX900-NEXT: v_mov_b32_e32 v0, v3 1235; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 1236; GFX900-NEXT: s_waitcnt vmcnt(0) 1237; GFX900-NEXT: s_setpc_b64 s[30:31] 1238; 1239; GFX90A-LABEL: v_shuffle_v2i32_v4i32__3_1: 1240; GFX90A: ; %bb.0: 1241; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1242; GFX90A-NEXT: ;;#ASMSTART 1243; GFX90A-NEXT: ; def v[0:3] 1244; GFX90A-NEXT: ;;#ASMEND 1245; GFX90A-NEXT: v_mov_b32_e32 v4, 0 1246; GFX90A-NEXT: v_mov_b32_e32 v0, v3 1247; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 1248; GFX90A-NEXT: s_waitcnt vmcnt(0) 1249; GFX90A-NEXT: s_setpc_b64 s[30:31] 1250; 1251; GFX940-LABEL: v_shuffle_v2i32_v4i32__3_1: 1252; GFX940: ; %bb.0: 1253; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1254; GFX940-NEXT: ;;#ASMSTART 1255; GFX940-NEXT: ; def v[0:3] 1256; GFX940-NEXT: ;;#ASMEND 1257; GFX940-NEXT: v_mov_b32_e32 v4, 0 1258; GFX940-NEXT: v_mov_b32_e32 v0, v3 1259; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 1260; GFX940-NEXT: s_waitcnt vmcnt(0) 1261; GFX940-NEXT: s_setpc_b64 s[30:31] 1262 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1263 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 1> 1264 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1265 ret void 1266} 1267 1268define void @v_shuffle_v2i32_v4i32__4_1(ptr addrspace(1) inreg %ptr) { 1269; GFX900-LABEL: v_shuffle_v2i32_v4i32__4_1: 1270; GFX900: ; %bb.0: 1271; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1272; GFX900-NEXT: v_mov_b32_e32 v4, 0 1273; GFX900-NEXT: ;;#ASMSTART 1274; GFX900-NEXT: ; def v[0:3] 1275; GFX900-NEXT: ;;#ASMEND 1276; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 1277; GFX900-NEXT: s_waitcnt vmcnt(0) 1278; GFX900-NEXT: s_setpc_b64 s[30:31] 1279; 1280; GFX90A-LABEL: v_shuffle_v2i32_v4i32__4_1: 1281; GFX90A: ; %bb.0: 1282; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1283; GFX90A-NEXT: v_mov_b32_e32 v4, 0 1284; GFX90A-NEXT: ;;#ASMSTART 1285; GFX90A-NEXT: ; def v[0:3] 1286; GFX90A-NEXT: ;;#ASMEND 1287; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 1288; GFX90A-NEXT: s_waitcnt vmcnt(0) 1289; GFX90A-NEXT: s_setpc_b64 s[30:31] 1290; 1291; GFX940-LABEL: v_shuffle_v2i32_v4i32__4_1: 1292; GFX940: ; %bb.0: 1293; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1294; GFX940-NEXT: v_mov_b32_e32 v4, 0 1295; GFX940-NEXT: ;;#ASMSTART 1296; GFX940-NEXT: ; def v[0:3] 1297; GFX940-NEXT: ;;#ASMEND 1298; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 1299; GFX940-NEXT: s_waitcnt vmcnt(0) 1300; GFX940-NEXT: s_setpc_b64 s[30:31] 1301 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1302 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 1> 1303 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1304 ret void 1305} 1306 1307define void @v_shuffle_v2i32_v4i32__5_1(ptr addrspace(1) inreg %ptr) { 1308; GFX900-LABEL: v_shuffle_v2i32_v4i32__5_1: 1309; GFX900: ; %bb.0: 1310; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1311; GFX900-NEXT: ;;#ASMSTART 1312; GFX900-NEXT: ; def v[0:3] 1313; GFX900-NEXT: ;;#ASMEND 1314; GFX900-NEXT: ;;#ASMSTART 1315; GFX900-NEXT: ; def v[2:5] 1316; GFX900-NEXT: ;;#ASMEND 1317; GFX900-NEXT: v_mov_b32_e32 v6, 0 1318; GFX900-NEXT: v_mov_b32_e32 v4, v1 1319; GFX900-NEXT: global_store_dwordx2 v6, v[3:4], s[16:17] 1320; GFX900-NEXT: s_waitcnt vmcnt(0) 1321; GFX900-NEXT: s_setpc_b64 s[30:31] 1322; 1323; GFX90A-LABEL: v_shuffle_v2i32_v4i32__5_1: 1324; GFX90A: ; %bb.0: 1325; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1326; GFX90A-NEXT: ;;#ASMSTART 1327; GFX90A-NEXT: ; def v[0:3] 1328; GFX90A-NEXT: ;;#ASMEND 1329; GFX90A-NEXT: v_mov_b32_e32 v6, 0 1330; GFX90A-NEXT: ;;#ASMSTART 1331; GFX90A-NEXT: ; def v[2:5] 1332; GFX90A-NEXT: ;;#ASMEND 1333; GFX90A-NEXT: v_mov_b32_e32 v0, v3 1334; GFX90A-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17] 1335; GFX90A-NEXT: s_waitcnt vmcnt(0) 1336; GFX90A-NEXT: s_setpc_b64 s[30:31] 1337; 1338; GFX940-LABEL: v_shuffle_v2i32_v4i32__5_1: 1339; GFX940: ; %bb.0: 1340; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1341; GFX940-NEXT: ;;#ASMSTART 1342; GFX940-NEXT: ; def v[0:3] 1343; GFX940-NEXT: ;;#ASMEND 1344; GFX940-NEXT: v_mov_b32_e32 v6, 0 1345; GFX940-NEXT: ;;#ASMSTART 1346; GFX940-NEXT: ; def v[2:5] 1347; GFX940-NEXT: ;;#ASMEND 1348; GFX940-NEXT: s_nop 0 1349; GFX940-NEXT: v_mov_b32_e32 v0, v3 1350; GFX940-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1] sc0 sc1 1351; GFX940-NEXT: s_waitcnt vmcnt(0) 1352; GFX940-NEXT: s_setpc_b64 s[30:31] 1353 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1354 %vec1 = call <4 x i32> asm "; def $0", "=v"() 1355 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 1> 1356 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1357 ret void 1358} 1359 1360define void @v_shuffle_v2i32_v4i32__6_1(ptr addrspace(1) inreg %ptr) { 1361; GFX900-LABEL: v_shuffle_v2i32_v4i32__6_1: 1362; GFX900: ; %bb.0: 1363; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1364; GFX900-NEXT: ;;#ASMSTART 1365; GFX900-NEXT: ; def v[0:3] 1366; GFX900-NEXT: ;;#ASMEND 1367; GFX900-NEXT: ;;#ASMSTART 1368; GFX900-NEXT: ; def v[2:5] 1369; GFX900-NEXT: ;;#ASMEND 1370; GFX900-NEXT: v_mov_b32_e32 v6, 0 1371; GFX900-NEXT: v_mov_b32_e32 v5, v1 1372; GFX900-NEXT: global_store_dwordx2 v6, v[4:5], s[16:17] 1373; GFX900-NEXT: s_waitcnt vmcnt(0) 1374; GFX900-NEXT: s_setpc_b64 s[30:31] 1375; 1376; GFX90A-LABEL: v_shuffle_v2i32_v4i32__6_1: 1377; GFX90A: ; %bb.0: 1378; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1379; GFX90A-NEXT: ;;#ASMSTART 1380; GFX90A-NEXT: ; def v[0:3] 1381; GFX90A-NEXT: ;;#ASMEND 1382; GFX90A-NEXT: ;;#ASMSTART 1383; GFX90A-NEXT: ; def v[2:5] 1384; GFX90A-NEXT: ;;#ASMEND 1385; GFX90A-NEXT: v_mov_b32_e32 v6, 0 1386; GFX90A-NEXT: v_mov_b32_e32 v5, v1 1387; GFX90A-NEXT: global_store_dwordx2 v6, v[4:5], s[16:17] 1388; GFX90A-NEXT: s_waitcnt vmcnt(0) 1389; GFX90A-NEXT: s_setpc_b64 s[30:31] 1390; 1391; GFX940-LABEL: v_shuffle_v2i32_v4i32__6_1: 1392; GFX940: ; %bb.0: 1393; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1394; GFX940-NEXT: ;;#ASMSTART 1395; GFX940-NEXT: ; def v[0:3] 1396; GFX940-NEXT: ;;#ASMEND 1397; GFX940-NEXT: v_mov_b32_e32 v6, 0 1398; GFX940-NEXT: ;;#ASMSTART 1399; GFX940-NEXT: ; def v[2:5] 1400; GFX940-NEXT: ;;#ASMEND 1401; GFX940-NEXT: s_nop 0 1402; GFX940-NEXT: v_mov_b32_e32 v5, v1 1403; GFX940-NEXT: global_store_dwordx2 v6, v[4:5], s[0:1] sc0 sc1 1404; GFX940-NEXT: s_waitcnt vmcnt(0) 1405; GFX940-NEXT: s_setpc_b64 s[30:31] 1406 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1407 %vec1 = call <4 x i32> asm "; def $0", "=v"() 1408 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 1> 1409 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1410 ret void 1411} 1412 1413define void @v_shuffle_v2i32_v4i32__u_2(ptr addrspace(1) inreg %ptr) { 1414; GFX900-LABEL: v_shuffle_v2i32_v4i32__u_2: 1415; GFX900: ; %bb.0: 1416; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1417; GFX900-NEXT: v_mov_b32_e32 v4, 0 1418; GFX900-NEXT: ;;#ASMSTART 1419; GFX900-NEXT: ; def v[0:3] 1420; GFX900-NEXT: ;;#ASMEND 1421; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17] 1422; GFX900-NEXT: s_waitcnt vmcnt(0) 1423; GFX900-NEXT: s_setpc_b64 s[30:31] 1424; 1425; GFX90A-LABEL: v_shuffle_v2i32_v4i32__u_2: 1426; GFX90A: ; %bb.0: 1427; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1428; GFX90A-NEXT: ;;#ASMSTART 1429; GFX90A-NEXT: ; def v[0:3] 1430; GFX90A-NEXT: ;;#ASMEND 1431; GFX90A-NEXT: v_mov_b32_e32 v4, 0 1432; GFX90A-NEXT: v_mov_b32_e32 v1, v2 1433; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 1434; GFX90A-NEXT: s_waitcnt vmcnt(0) 1435; GFX90A-NEXT: s_setpc_b64 s[30:31] 1436; 1437; GFX940-LABEL: v_shuffle_v2i32_v4i32__u_2: 1438; GFX940: ; %bb.0: 1439; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1440; GFX940-NEXT: ;;#ASMSTART 1441; GFX940-NEXT: ; def v[0:3] 1442; GFX940-NEXT: ;;#ASMEND 1443; GFX940-NEXT: v_mov_b32_e32 v4, 0 1444; GFX940-NEXT: v_mov_b32_e32 v1, v2 1445; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 1446; GFX940-NEXT: s_waitcnt vmcnt(0) 1447; GFX940-NEXT: s_setpc_b64 s[30:31] 1448 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1449 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 poison, i32 2> 1450 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1451 ret void 1452} 1453 1454define void @v_shuffle_v2i32_v4i32__0_2(ptr addrspace(1) inreg %ptr) { 1455; GFX900-LABEL: v_shuffle_v2i32_v4i32__0_2: 1456; GFX900: ; %bb.0: 1457; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1458; GFX900-NEXT: ;;#ASMSTART 1459; GFX900-NEXT: ; def v[0:3] 1460; GFX900-NEXT: ;;#ASMEND 1461; GFX900-NEXT: v_mov_b32_e32 v4, 0 1462; GFX900-NEXT: v_mov_b32_e32 v1, v2 1463; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 1464; GFX900-NEXT: s_waitcnt vmcnt(0) 1465; GFX900-NEXT: s_setpc_b64 s[30:31] 1466; 1467; GFX90A-LABEL: v_shuffle_v2i32_v4i32__0_2: 1468; GFX90A: ; %bb.0: 1469; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1470; GFX90A-NEXT: ;;#ASMSTART 1471; GFX90A-NEXT: ; def v[0:3] 1472; GFX90A-NEXT: ;;#ASMEND 1473; GFX90A-NEXT: v_mov_b32_e32 v4, 0 1474; GFX90A-NEXT: v_mov_b32_e32 v1, v2 1475; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 1476; GFX90A-NEXT: s_waitcnt vmcnt(0) 1477; GFX90A-NEXT: s_setpc_b64 s[30:31] 1478; 1479; GFX940-LABEL: v_shuffle_v2i32_v4i32__0_2: 1480; GFX940: ; %bb.0: 1481; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1482; GFX940-NEXT: ;;#ASMSTART 1483; GFX940-NEXT: ; def v[0:3] 1484; GFX940-NEXT: ;;#ASMEND 1485; GFX940-NEXT: v_mov_b32_e32 v4, 0 1486; GFX940-NEXT: v_mov_b32_e32 v1, v2 1487; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 1488; GFX940-NEXT: s_waitcnt vmcnt(0) 1489; GFX940-NEXT: s_setpc_b64 s[30:31] 1490 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1491 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 0, i32 2> 1492 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1493 ret void 1494} 1495 1496define void @v_shuffle_v2i32_v4i32__1_2(ptr addrspace(1) inreg %ptr) { 1497; GFX900-LABEL: v_shuffle_v2i32_v4i32__1_2: 1498; GFX900: ; %bb.0: 1499; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1500; GFX900-NEXT: v_mov_b32_e32 v4, 0 1501; GFX900-NEXT: ;;#ASMSTART 1502; GFX900-NEXT: ; def v[0:3] 1503; GFX900-NEXT: ;;#ASMEND 1504; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17] 1505; GFX900-NEXT: s_waitcnt vmcnt(0) 1506; GFX900-NEXT: s_setpc_b64 s[30:31] 1507; 1508; GFX90A-LABEL: v_shuffle_v2i32_v4i32__1_2: 1509; GFX90A: ; %bb.0: 1510; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1511; GFX90A-NEXT: ;;#ASMSTART 1512; GFX90A-NEXT: ; def v[0:3] 1513; GFX90A-NEXT: ;;#ASMEND 1514; GFX90A-NEXT: v_mov_b32_e32 v4, 0 1515; GFX90A-NEXT: v_mov_b32_e32 v0, v1 1516; GFX90A-NEXT: v_mov_b32_e32 v1, v2 1517; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 1518; GFX90A-NEXT: s_waitcnt vmcnt(0) 1519; GFX90A-NEXT: s_setpc_b64 s[30:31] 1520; 1521; GFX940-LABEL: v_shuffle_v2i32_v4i32__1_2: 1522; GFX940: ; %bb.0: 1523; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1524; GFX940-NEXT: ;;#ASMSTART 1525; GFX940-NEXT: ; def v[0:3] 1526; GFX940-NEXT: ;;#ASMEND 1527; GFX940-NEXT: v_mov_b32_e32 v4, 0 1528; GFX940-NEXT: v_mov_b32_e32 v0, v1 1529; GFX940-NEXT: v_mov_b32_e32 v1, v2 1530; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 1531; GFX940-NEXT: s_waitcnt vmcnt(0) 1532; GFX940-NEXT: s_setpc_b64 s[30:31] 1533 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1534 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 2> 1535 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1536 ret void 1537} 1538 1539define void @v_shuffle_v2i32_v4i32__2_2(ptr addrspace(1) inreg %ptr) { 1540; GFX900-LABEL: v_shuffle_v2i32_v4i32__2_2: 1541; GFX900: ; %bb.0: 1542; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1543; GFX900-NEXT: ;;#ASMSTART 1544; GFX900-NEXT: ; def v[0:3] 1545; GFX900-NEXT: ;;#ASMEND 1546; GFX900-NEXT: v_mov_b32_e32 v4, 0 1547; GFX900-NEXT: v_mov_b32_e32 v3, v2 1548; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 1549; GFX900-NEXT: s_waitcnt vmcnt(0) 1550; GFX900-NEXT: s_setpc_b64 s[30:31] 1551; 1552; GFX90A-LABEL: v_shuffle_v2i32_v4i32__2_2: 1553; GFX90A: ; %bb.0: 1554; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1555; GFX90A-NEXT: ;;#ASMSTART 1556; GFX90A-NEXT: ; def v[0:3] 1557; GFX90A-NEXT: ;;#ASMEND 1558; GFX90A-NEXT: v_mov_b32_e32 v4, 0 1559; GFX90A-NEXT: v_mov_b32_e32 v3, v2 1560; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 1561; GFX90A-NEXT: s_waitcnt vmcnt(0) 1562; GFX90A-NEXT: s_setpc_b64 s[30:31] 1563; 1564; GFX940-LABEL: v_shuffle_v2i32_v4i32__2_2: 1565; GFX940: ; %bb.0: 1566; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1567; GFX940-NEXT: ;;#ASMSTART 1568; GFX940-NEXT: ; def v[0:3] 1569; GFX940-NEXT: ;;#ASMEND 1570; GFX940-NEXT: v_mov_b32_e32 v4, 0 1571; GFX940-NEXT: v_mov_b32_e32 v3, v2 1572; GFX940-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1 1573; GFX940-NEXT: s_waitcnt vmcnt(0) 1574; GFX940-NEXT: s_setpc_b64 s[30:31] 1575 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1576 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 2> 1577 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1578 ret void 1579} 1580 1581define void @v_shuffle_v2i32_v4i32__3_2(ptr addrspace(1) inreg %ptr) { 1582; GFX900-LABEL: v_shuffle_v2i32_v4i32__3_2: 1583; GFX900: ; %bb.0: 1584; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1585; GFX900-NEXT: ;;#ASMSTART 1586; GFX900-NEXT: ; def v[0:3] 1587; GFX900-NEXT: ;;#ASMEND 1588; GFX900-NEXT: v_mov_b32_e32 v4, 0 1589; GFX900-NEXT: v_mov_b32_e32 v1, v3 1590; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17] 1591; GFX900-NEXT: s_waitcnt vmcnt(0) 1592; GFX900-NEXT: s_setpc_b64 s[30:31] 1593; 1594; GFX90A-LABEL: v_shuffle_v2i32_v4i32__3_2: 1595; GFX90A: ; %bb.0: 1596; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1597; GFX90A-NEXT: ;;#ASMSTART 1598; GFX90A-NEXT: ; def v[0:3] 1599; GFX90A-NEXT: ;;#ASMEND 1600; GFX90A-NEXT: v_mov_b32_e32 v4, 0 1601; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0] 1602; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 1603; GFX90A-NEXT: s_waitcnt vmcnt(0) 1604; GFX90A-NEXT: s_setpc_b64 s[30:31] 1605; 1606; GFX940-LABEL: v_shuffle_v2i32_v4i32__3_2: 1607; GFX940: ; %bb.0: 1608; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1609; GFX940-NEXT: ;;#ASMSTART 1610; GFX940-NEXT: ; def v[0:3] 1611; GFX940-NEXT: ;;#ASMEND 1612; GFX940-NEXT: v_mov_b32_e32 v4, 0 1613; GFX940-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0] 1614; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 1615; GFX940-NEXT: s_waitcnt vmcnt(0) 1616; GFX940-NEXT: s_setpc_b64 s[30:31] 1617 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1618 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 2> 1619 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1620 ret void 1621} 1622 1623define void @v_shuffle_v2i32_v4i32__4_2(ptr addrspace(1) inreg %ptr) { 1624; GFX900-LABEL: v_shuffle_v2i32_v4i32__4_2: 1625; GFX900: ; %bb.0: 1626; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1627; GFX900-NEXT: v_mov_b32_e32 v4, 0 1628; GFX900-NEXT: ;;#ASMSTART 1629; GFX900-NEXT: ; def v[0:3] 1630; GFX900-NEXT: ;;#ASMEND 1631; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17] 1632; GFX900-NEXT: s_waitcnt vmcnt(0) 1633; GFX900-NEXT: s_setpc_b64 s[30:31] 1634; 1635; GFX90A-LABEL: v_shuffle_v2i32_v4i32__4_2: 1636; GFX90A: ; %bb.0: 1637; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1638; GFX90A-NEXT: ;;#ASMSTART 1639; GFX90A-NEXT: ; def v[0:3] 1640; GFX90A-NEXT: ;;#ASMEND 1641; GFX90A-NEXT: v_mov_b32_e32 v4, 0 1642; GFX90A-NEXT: v_mov_b32_e32 v1, v2 1643; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 1644; GFX90A-NEXT: s_waitcnt vmcnt(0) 1645; GFX90A-NEXT: s_setpc_b64 s[30:31] 1646; 1647; GFX940-LABEL: v_shuffle_v2i32_v4i32__4_2: 1648; GFX940: ; %bb.0: 1649; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1650; GFX940-NEXT: ;;#ASMSTART 1651; GFX940-NEXT: ; def v[0:3] 1652; GFX940-NEXT: ;;#ASMEND 1653; GFX940-NEXT: v_mov_b32_e32 v4, 0 1654; GFX940-NEXT: v_mov_b32_e32 v1, v2 1655; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 1656; GFX940-NEXT: s_waitcnt vmcnt(0) 1657; GFX940-NEXT: s_setpc_b64 s[30:31] 1658 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1659 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 2> 1660 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1661 ret void 1662} 1663 1664define void @v_shuffle_v2i32_v4i32__5_2(ptr addrspace(1) inreg %ptr) { 1665; GFX900-LABEL: v_shuffle_v2i32_v4i32__5_2: 1666; GFX900: ; %bb.0: 1667; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1668; GFX900-NEXT: ;;#ASMSTART 1669; GFX900-NEXT: ; def v[0:3] 1670; GFX900-NEXT: ;;#ASMEND 1671; GFX900-NEXT: ;;#ASMSTART 1672; GFX900-NEXT: ; def v[3:6] 1673; GFX900-NEXT: ;;#ASMEND 1674; GFX900-NEXT: v_mov_b32_e32 v7, 0 1675; GFX900-NEXT: v_mov_b32_e32 v5, v2 1676; GFX900-NEXT: global_store_dwordx2 v7, v[4:5], s[16:17] 1677; GFX900-NEXT: s_waitcnt vmcnt(0) 1678; GFX900-NEXT: s_setpc_b64 s[30:31] 1679; 1680; GFX90A-LABEL: v_shuffle_v2i32_v4i32__5_2: 1681; GFX90A: ; %bb.0: 1682; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1683; GFX90A-NEXT: ;;#ASMSTART 1684; GFX90A-NEXT: ; def v[0:3] 1685; GFX90A-NEXT: ;;#ASMEND 1686; GFX90A-NEXT: v_mov_b32_e32 v8, 0 1687; GFX90A-NEXT: ;;#ASMSTART 1688; GFX90A-NEXT: ; def v[4:7] 1689; GFX90A-NEXT: ;;#ASMEND 1690; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[4:5], v[2:3] op_sel:[1,0] 1691; GFX90A-NEXT: global_store_dwordx2 v8, v[0:1], s[16:17] 1692; GFX90A-NEXT: s_waitcnt vmcnt(0) 1693; GFX90A-NEXT: s_setpc_b64 s[30:31] 1694; 1695; GFX940-LABEL: v_shuffle_v2i32_v4i32__5_2: 1696; GFX940: ; %bb.0: 1697; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1698; GFX940-NEXT: ;;#ASMSTART 1699; GFX940-NEXT: ; def v[0:3] 1700; GFX940-NEXT: ;;#ASMEND 1701; GFX940-NEXT: v_mov_b32_e32 v8, 0 1702; GFX940-NEXT: ;;#ASMSTART 1703; GFX940-NEXT: ; def v[4:7] 1704; GFX940-NEXT: ;;#ASMEND 1705; GFX940-NEXT: s_nop 0 1706; GFX940-NEXT: v_pk_mov_b32 v[0:1], v[4:5], v[2:3] op_sel:[1,0] 1707; GFX940-NEXT: global_store_dwordx2 v8, v[0:1], s[0:1] sc0 sc1 1708; GFX940-NEXT: s_waitcnt vmcnt(0) 1709; GFX940-NEXT: s_setpc_b64 s[30:31] 1710 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1711 %vec1 = call <4 x i32> asm "; def $0", "=v"() 1712 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 2> 1713 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1714 ret void 1715} 1716 1717define void @v_shuffle_v2i32_v4i32__6_2(ptr addrspace(1) inreg %ptr) { 1718; GFX900-LABEL: v_shuffle_v2i32_v4i32__6_2: 1719; GFX900: ; %bb.0: 1720; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1721; GFX900-NEXT: ;;#ASMSTART 1722; GFX900-NEXT: ; def v[0:3] 1723; GFX900-NEXT: ;;#ASMEND 1724; GFX900-NEXT: ;;#ASMSTART 1725; GFX900-NEXT: ; def v[3:6] 1726; GFX900-NEXT: ;;#ASMEND 1727; GFX900-NEXT: v_mov_b32_e32 v7, 0 1728; GFX900-NEXT: v_mov_b32_e32 v6, v2 1729; GFX900-NEXT: global_store_dwordx2 v7, v[5:6], s[16:17] 1730; GFX900-NEXT: s_waitcnt vmcnt(0) 1731; GFX900-NEXT: s_setpc_b64 s[30:31] 1732; 1733; GFX90A-LABEL: v_shuffle_v2i32_v4i32__6_2: 1734; GFX90A: ; %bb.0: 1735; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1736; GFX90A-NEXT: ;;#ASMSTART 1737; GFX90A-NEXT: ; def v[4:7] 1738; GFX90A-NEXT: ;;#ASMEND 1739; GFX90A-NEXT: v_mov_b32_e32 v8, 0 1740; GFX90A-NEXT: ;;#ASMSTART 1741; GFX90A-NEXT: ; def v[0:3] 1742; GFX90A-NEXT: ;;#ASMEND 1743; GFX90A-NEXT: v_mov_b32_e32 v7, v2 1744; GFX90A-NEXT: global_store_dwordx2 v8, v[6:7], s[16:17] 1745; GFX90A-NEXT: s_waitcnt vmcnt(0) 1746; GFX90A-NEXT: s_setpc_b64 s[30:31] 1747; 1748; GFX940-LABEL: v_shuffle_v2i32_v4i32__6_2: 1749; GFX940: ; %bb.0: 1750; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1751; GFX940-NEXT: ;;#ASMSTART 1752; GFX940-NEXT: ; def v[4:7] 1753; GFX940-NEXT: ;;#ASMEND 1754; GFX940-NEXT: v_mov_b32_e32 v8, 0 1755; GFX940-NEXT: ;;#ASMSTART 1756; GFX940-NEXT: ; def v[0:3] 1757; GFX940-NEXT: ;;#ASMEND 1758; GFX940-NEXT: s_nop 0 1759; GFX940-NEXT: v_mov_b32_e32 v7, v2 1760; GFX940-NEXT: global_store_dwordx2 v8, v[6:7], s[0:1] sc0 sc1 1761; GFX940-NEXT: s_waitcnt vmcnt(0) 1762; GFX940-NEXT: s_setpc_b64 s[30:31] 1763 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1764 %vec1 = call <4 x i32> asm "; def $0", "=v"() 1765 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 2> 1766 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1767 ret void 1768} 1769 1770define void @v_shuffle_v2i32_v4i32__u_3(ptr addrspace(1) inreg %ptr) { 1771; GFX900-LABEL: v_shuffle_v2i32_v4i32__u_3: 1772; GFX900: ; %bb.0: 1773; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1774; GFX900-NEXT: v_mov_b32_e32 v4, 0 1775; GFX900-NEXT: ;;#ASMSTART 1776; GFX900-NEXT: ; def v[0:3] 1777; GFX900-NEXT: ;;#ASMEND 1778; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 1779; GFX900-NEXT: s_waitcnt vmcnt(0) 1780; GFX900-NEXT: s_setpc_b64 s[30:31] 1781; 1782; GFX90A-LABEL: v_shuffle_v2i32_v4i32__u_3: 1783; GFX90A: ; %bb.0: 1784; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1785; GFX90A-NEXT: v_mov_b32_e32 v4, 0 1786; GFX90A-NEXT: ;;#ASMSTART 1787; GFX90A-NEXT: ; def v[0:3] 1788; GFX90A-NEXT: ;;#ASMEND 1789; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 1790; GFX90A-NEXT: s_waitcnt vmcnt(0) 1791; GFX90A-NEXT: s_setpc_b64 s[30:31] 1792; 1793; GFX940-LABEL: v_shuffle_v2i32_v4i32__u_3: 1794; GFX940: ; %bb.0: 1795; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1796; GFX940-NEXT: v_mov_b32_e32 v4, 0 1797; GFX940-NEXT: ;;#ASMSTART 1798; GFX940-NEXT: ; def v[0:3] 1799; GFX940-NEXT: ;;#ASMEND 1800; GFX940-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1 1801; GFX940-NEXT: s_waitcnt vmcnt(0) 1802; GFX940-NEXT: s_setpc_b64 s[30:31] 1803 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1804 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 poison, i32 3> 1805 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1806 ret void 1807} 1808 1809define void @v_shuffle_v2i32_v4i32__0_3(ptr addrspace(1) inreg %ptr) { 1810; GFX900-LABEL: v_shuffle_v2i32_v4i32__0_3: 1811; GFX900: ; %bb.0: 1812; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1813; GFX900-NEXT: ;;#ASMSTART 1814; GFX900-NEXT: ; def v[0:3] 1815; GFX900-NEXT: ;;#ASMEND 1816; GFX900-NEXT: v_mov_b32_e32 v4, 0 1817; GFX900-NEXT: v_mov_b32_e32 v1, v3 1818; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 1819; GFX900-NEXT: s_waitcnt vmcnt(0) 1820; GFX900-NEXT: s_setpc_b64 s[30:31] 1821; 1822; GFX90A-LABEL: v_shuffle_v2i32_v4i32__0_3: 1823; GFX90A: ; %bb.0: 1824; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1825; GFX90A-NEXT: ;;#ASMSTART 1826; GFX90A-NEXT: ; def v[0:3] 1827; GFX90A-NEXT: ;;#ASMEND 1828; GFX90A-NEXT: v_mov_b32_e32 v4, 0 1829; GFX90A-NEXT: v_mov_b32_e32 v1, v3 1830; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 1831; GFX90A-NEXT: s_waitcnt vmcnt(0) 1832; GFX90A-NEXT: s_setpc_b64 s[30:31] 1833; 1834; GFX940-LABEL: v_shuffle_v2i32_v4i32__0_3: 1835; GFX940: ; %bb.0: 1836; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1837; GFX940-NEXT: ;;#ASMSTART 1838; GFX940-NEXT: ; def v[0:3] 1839; GFX940-NEXT: ;;#ASMEND 1840; GFX940-NEXT: v_mov_b32_e32 v4, 0 1841; GFX940-NEXT: v_mov_b32_e32 v1, v3 1842; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 1843; GFX940-NEXT: s_waitcnt vmcnt(0) 1844; GFX940-NEXT: s_setpc_b64 s[30:31] 1845 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1846 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 0, i32 3> 1847 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1848 ret void 1849} 1850 1851define void @v_shuffle_v2i32_v4i32__1_3(ptr addrspace(1) inreg %ptr) { 1852; GFX900-LABEL: v_shuffle_v2i32_v4i32__1_3: 1853; GFX900: ; %bb.0: 1854; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1855; GFX900-NEXT: ;;#ASMSTART 1856; GFX900-NEXT: ; def v[0:3] 1857; GFX900-NEXT: ;;#ASMEND 1858; GFX900-NEXT: v_mov_b32_e32 v4, 0 1859; GFX900-NEXT: v_mov_b32_e32 v2, v3 1860; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17] 1861; GFX900-NEXT: s_waitcnt vmcnt(0) 1862; GFX900-NEXT: s_setpc_b64 s[30:31] 1863; 1864; GFX90A-LABEL: v_shuffle_v2i32_v4i32__1_3: 1865; GFX90A: ; %bb.0: 1866; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1867; GFX90A-NEXT: ;;#ASMSTART 1868; GFX90A-NEXT: ; def v[0:3] 1869; GFX90A-NEXT: ;;#ASMEND 1870; GFX90A-NEXT: v_mov_b32_e32 v4, 0 1871; GFX90A-NEXT: v_mov_b32_e32 v2, v1 1872; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 1873; GFX90A-NEXT: s_waitcnt vmcnt(0) 1874; GFX90A-NEXT: s_setpc_b64 s[30:31] 1875; 1876; GFX940-LABEL: v_shuffle_v2i32_v4i32__1_3: 1877; GFX940: ; %bb.0: 1878; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1879; GFX940-NEXT: ;;#ASMSTART 1880; GFX940-NEXT: ; def v[0:3] 1881; GFX940-NEXT: ;;#ASMEND 1882; GFX940-NEXT: v_mov_b32_e32 v4, 0 1883; GFX940-NEXT: v_mov_b32_e32 v2, v1 1884; GFX940-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1 1885; GFX940-NEXT: s_waitcnt vmcnt(0) 1886; GFX940-NEXT: s_setpc_b64 s[30:31] 1887 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1888 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 3> 1889 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1890 ret void 1891} 1892 1893define void @v_shuffle_v2i32_v4i32__2_3(ptr addrspace(1) inreg %ptr) { 1894; GFX900-LABEL: v_shuffle_v2i32_v4i32__2_3: 1895; GFX900: ; %bb.0: 1896; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1897; GFX900-NEXT: v_mov_b32_e32 v4, 0 1898; GFX900-NEXT: ;;#ASMSTART 1899; GFX900-NEXT: ; def v[0:3] 1900; GFX900-NEXT: ;;#ASMEND 1901; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 1902; GFX900-NEXT: s_waitcnt vmcnt(0) 1903; GFX900-NEXT: s_setpc_b64 s[30:31] 1904; 1905; GFX90A-LABEL: v_shuffle_v2i32_v4i32__2_3: 1906; GFX90A: ; %bb.0: 1907; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1908; GFX90A-NEXT: v_mov_b32_e32 v4, 0 1909; GFX90A-NEXT: ;;#ASMSTART 1910; GFX90A-NEXT: ; def v[0:3] 1911; GFX90A-NEXT: ;;#ASMEND 1912; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 1913; GFX90A-NEXT: s_waitcnt vmcnt(0) 1914; GFX90A-NEXT: s_setpc_b64 s[30:31] 1915; 1916; GFX940-LABEL: v_shuffle_v2i32_v4i32__2_3: 1917; GFX940: ; %bb.0: 1918; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1919; GFX940-NEXT: v_mov_b32_e32 v4, 0 1920; GFX940-NEXT: ;;#ASMSTART 1921; GFX940-NEXT: ; def v[0:3] 1922; GFX940-NEXT: ;;#ASMEND 1923; GFX940-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1 1924; GFX940-NEXT: s_waitcnt vmcnt(0) 1925; GFX940-NEXT: s_setpc_b64 s[30:31] 1926 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1927 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 3> 1928 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1929 ret void 1930} 1931 1932define void @v_shuffle_v2i32_v4i32__3_3(ptr addrspace(1) inreg %ptr) { 1933; GFX900-LABEL: v_shuffle_v2i32_v4i32__3_3: 1934; GFX900: ; %bb.0: 1935; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1936; GFX900-NEXT: ;;#ASMSTART 1937; GFX900-NEXT: ; def v[0:3] 1938; GFX900-NEXT: ;;#ASMEND 1939; GFX900-NEXT: v_mov_b32_e32 v4, 0 1940; GFX900-NEXT: v_mov_b32_e32 v2, v3 1941; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 1942; GFX900-NEXT: s_waitcnt vmcnt(0) 1943; GFX900-NEXT: s_setpc_b64 s[30:31] 1944; 1945; GFX90A-LABEL: v_shuffle_v2i32_v4i32__3_3: 1946; GFX90A: ; %bb.0: 1947; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1948; GFX90A-NEXT: ;;#ASMSTART 1949; GFX90A-NEXT: ; def v[0:3] 1950; GFX90A-NEXT: ;;#ASMEND 1951; GFX90A-NEXT: v_mov_b32_e32 v4, 0 1952; GFX90A-NEXT: v_mov_b32_e32 v2, v3 1953; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 1954; GFX90A-NEXT: s_waitcnt vmcnt(0) 1955; GFX90A-NEXT: s_setpc_b64 s[30:31] 1956; 1957; GFX940-LABEL: v_shuffle_v2i32_v4i32__3_3: 1958; GFX940: ; %bb.0: 1959; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1960; GFX940-NEXT: ;;#ASMSTART 1961; GFX940-NEXT: ; def v[0:3] 1962; GFX940-NEXT: ;;#ASMEND 1963; GFX940-NEXT: v_mov_b32_e32 v4, 0 1964; GFX940-NEXT: v_mov_b32_e32 v2, v3 1965; GFX940-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1 1966; GFX940-NEXT: s_waitcnt vmcnt(0) 1967; GFX940-NEXT: s_setpc_b64 s[30:31] 1968 %vec0 = call <4 x i32> asm "; def $0", "=v"() 1969 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 3> 1970 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 1971 ret void 1972} 1973 1974define void @v_shuffle_v2i32_v4i32__4_3(ptr addrspace(1) inreg %ptr) { 1975; GFX900-LABEL: v_shuffle_v2i32_v4i32__4_3: 1976; GFX900: ; %bb.0: 1977; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1978; GFX900-NEXT: v_mov_b32_e32 v4, 0 1979; GFX900-NEXT: ;;#ASMSTART 1980; GFX900-NEXT: ; def v[0:3] 1981; GFX900-NEXT: ;;#ASMEND 1982; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 1983; GFX900-NEXT: s_waitcnt vmcnt(0) 1984; GFX900-NEXT: s_setpc_b64 s[30:31] 1985; 1986; GFX90A-LABEL: v_shuffle_v2i32_v4i32__4_3: 1987; GFX90A: ; %bb.0: 1988; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1989; GFX90A-NEXT: v_mov_b32_e32 v4, 0 1990; GFX90A-NEXT: ;;#ASMSTART 1991; GFX90A-NEXT: ; def v[0:3] 1992; GFX90A-NEXT: ;;#ASMEND 1993; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 1994; GFX90A-NEXT: s_waitcnt vmcnt(0) 1995; GFX90A-NEXT: s_setpc_b64 s[30:31] 1996; 1997; GFX940-LABEL: v_shuffle_v2i32_v4i32__4_3: 1998; GFX940: ; %bb.0: 1999; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2000; GFX940-NEXT: v_mov_b32_e32 v4, 0 2001; GFX940-NEXT: ;;#ASMSTART 2002; GFX940-NEXT: ; def v[0:3] 2003; GFX940-NEXT: ;;#ASMEND 2004; GFX940-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1 2005; GFX940-NEXT: s_waitcnt vmcnt(0) 2006; GFX940-NEXT: s_setpc_b64 s[30:31] 2007 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2008 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 3> 2009 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2010 ret void 2011} 2012 2013define void @v_shuffle_v2i32_v4i32__5_3(ptr addrspace(1) inreg %ptr) { 2014; GFX900-LABEL: v_shuffle_v2i32_v4i32__5_3: 2015; GFX900: ; %bb.0: 2016; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2017; GFX900-NEXT: ;;#ASMSTART 2018; GFX900-NEXT: ; def v[4:7] 2019; GFX900-NEXT: ;;#ASMEND 2020; GFX900-NEXT: v_mov_b32_e32 v8, 0 2021; GFX900-NEXT: ;;#ASMSTART 2022; GFX900-NEXT: ; def v[0:3] 2023; GFX900-NEXT: ;;#ASMEND 2024; GFX900-NEXT: v_mov_b32_e32 v6, v3 2025; GFX900-NEXT: global_store_dwordx2 v8, v[5:6], s[16:17] 2026; GFX900-NEXT: s_waitcnt vmcnt(0) 2027; GFX900-NEXT: s_setpc_b64 s[30:31] 2028; 2029; GFX90A-LABEL: v_shuffle_v2i32_v4i32__5_3: 2030; GFX90A: ; %bb.0: 2031; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2032; GFX90A-NEXT: ;;#ASMSTART 2033; GFX90A-NEXT: ; def v[0:3] 2034; GFX90A-NEXT: ;;#ASMEND 2035; GFX90A-NEXT: v_mov_b32_e32 v8, 0 2036; GFX90A-NEXT: ;;#ASMSTART 2037; GFX90A-NEXT: ; def v[4:7] 2038; GFX90A-NEXT: ;;#ASMEND 2039; GFX90A-NEXT: v_mov_b32_e32 v2, v5 2040; GFX90A-NEXT: global_store_dwordx2 v8, v[2:3], s[16:17] 2041; GFX90A-NEXT: s_waitcnt vmcnt(0) 2042; GFX90A-NEXT: s_setpc_b64 s[30:31] 2043; 2044; GFX940-LABEL: v_shuffle_v2i32_v4i32__5_3: 2045; GFX940: ; %bb.0: 2046; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2047; GFX940-NEXT: ;;#ASMSTART 2048; GFX940-NEXT: ; def v[0:3] 2049; GFX940-NEXT: ;;#ASMEND 2050; GFX940-NEXT: v_mov_b32_e32 v8, 0 2051; GFX940-NEXT: ;;#ASMSTART 2052; GFX940-NEXT: ; def v[4:7] 2053; GFX940-NEXT: ;;#ASMEND 2054; GFX940-NEXT: s_nop 0 2055; GFX940-NEXT: v_mov_b32_e32 v2, v5 2056; GFX940-NEXT: global_store_dwordx2 v8, v[2:3], s[0:1] sc0 sc1 2057; GFX940-NEXT: s_waitcnt vmcnt(0) 2058; GFX940-NEXT: s_setpc_b64 s[30:31] 2059 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2060 %vec1 = call <4 x i32> asm "; def $0", "=v"() 2061 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 3> 2062 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2063 ret void 2064} 2065 2066define void @v_shuffle_v2i32_v4i32__6_3(ptr addrspace(1) inreg %ptr) { 2067; GFX900-LABEL: v_shuffle_v2i32_v4i32__6_3: 2068; GFX900: ; %bb.0: 2069; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2070; GFX900-NEXT: ;;#ASMSTART 2071; GFX900-NEXT: ; def v[4:7] 2072; GFX900-NEXT: ;;#ASMEND 2073; GFX900-NEXT: v_mov_b32_e32 v8, 0 2074; GFX900-NEXT: ;;#ASMSTART 2075; GFX900-NEXT: ; def v[0:3] 2076; GFX900-NEXT: ;;#ASMEND 2077; GFX900-NEXT: v_mov_b32_e32 v7, v3 2078; GFX900-NEXT: global_store_dwordx2 v8, v[6:7], s[16:17] 2079; GFX900-NEXT: s_waitcnt vmcnt(0) 2080; GFX900-NEXT: s_setpc_b64 s[30:31] 2081; 2082; GFX90A-LABEL: v_shuffle_v2i32_v4i32__6_3: 2083; GFX90A: ; %bb.0: 2084; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2085; GFX90A-NEXT: ;;#ASMSTART 2086; GFX90A-NEXT: ; def v[4:7] 2087; GFX90A-NEXT: ;;#ASMEND 2088; GFX90A-NEXT: v_mov_b32_e32 v8, 0 2089; GFX90A-NEXT: ;;#ASMSTART 2090; GFX90A-NEXT: ; def v[0:3] 2091; GFX90A-NEXT: ;;#ASMEND 2092; GFX90A-NEXT: v_mov_b32_e32 v7, v3 2093; GFX90A-NEXT: global_store_dwordx2 v8, v[6:7], s[16:17] 2094; GFX90A-NEXT: s_waitcnt vmcnt(0) 2095; GFX90A-NEXT: s_setpc_b64 s[30:31] 2096; 2097; GFX940-LABEL: v_shuffle_v2i32_v4i32__6_3: 2098; GFX940: ; %bb.0: 2099; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2100; GFX940-NEXT: ;;#ASMSTART 2101; GFX940-NEXT: ; def v[4:7] 2102; GFX940-NEXT: ;;#ASMEND 2103; GFX940-NEXT: v_mov_b32_e32 v8, 0 2104; GFX940-NEXT: ;;#ASMSTART 2105; GFX940-NEXT: ; def v[0:3] 2106; GFX940-NEXT: ;;#ASMEND 2107; GFX940-NEXT: s_nop 0 2108; GFX940-NEXT: v_mov_b32_e32 v7, v3 2109; GFX940-NEXT: global_store_dwordx2 v8, v[6:7], s[0:1] sc0 sc1 2110; GFX940-NEXT: s_waitcnt vmcnt(0) 2111; GFX940-NEXT: s_setpc_b64 s[30:31] 2112 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2113 %vec1 = call <4 x i32> asm "; def $0", "=v"() 2114 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 3> 2115 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2116 ret void 2117} 2118 2119define void @v_shuffle_v2i32_v4i32__u_4(ptr addrspace(1) inreg %ptr) { 2120; GFX9-LABEL: v_shuffle_v2i32_v4i32__u_4: 2121; GFX9: ; %bb.0: 2122; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2123; GFX9-NEXT: s_setpc_b64 s[30:31] 2124 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2125 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 poison, i32 4> 2126 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2127 ret void 2128} 2129 2130define void @v_shuffle_v2i32_v4i32__0_4(ptr addrspace(1) inreg %ptr) { 2131; GFX900-LABEL: v_shuffle_v2i32_v4i32__0_4: 2132; GFX900: ; %bb.0: 2133; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2134; GFX900-NEXT: v_mov_b32_e32 v4, 0 2135; GFX900-NEXT: ;;#ASMSTART 2136; GFX900-NEXT: ; def v[0:3] 2137; GFX900-NEXT: ;;#ASMEND 2138; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 2139; GFX900-NEXT: s_waitcnt vmcnt(0) 2140; GFX900-NEXT: s_setpc_b64 s[30:31] 2141; 2142; GFX90A-LABEL: v_shuffle_v2i32_v4i32__0_4: 2143; GFX90A: ; %bb.0: 2144; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2145; GFX90A-NEXT: v_mov_b32_e32 v4, 0 2146; GFX90A-NEXT: ;;#ASMSTART 2147; GFX90A-NEXT: ; def v[0:3] 2148; GFX90A-NEXT: ;;#ASMEND 2149; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 2150; GFX90A-NEXT: s_waitcnt vmcnt(0) 2151; GFX90A-NEXT: s_setpc_b64 s[30:31] 2152; 2153; GFX940-LABEL: v_shuffle_v2i32_v4i32__0_4: 2154; GFX940: ; %bb.0: 2155; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2156; GFX940-NEXT: v_mov_b32_e32 v4, 0 2157; GFX940-NEXT: ;;#ASMSTART 2158; GFX940-NEXT: ; def v[0:3] 2159; GFX940-NEXT: ;;#ASMEND 2160; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 2161; GFX940-NEXT: s_waitcnt vmcnt(0) 2162; GFX940-NEXT: s_setpc_b64 s[30:31] 2163 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2164 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 0, i32 4> 2165 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2166 ret void 2167} 2168 2169define void @v_shuffle_v2i32_v4i32__1_4(ptr addrspace(1) inreg %ptr) { 2170; GFX900-LABEL: v_shuffle_v2i32_v4i32__1_4: 2171; GFX900: ; %bb.0: 2172; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2173; GFX900-NEXT: v_mov_b32_e32 v4, 0 2174; GFX900-NEXT: ;;#ASMSTART 2175; GFX900-NEXT: ; def v[0:3] 2176; GFX900-NEXT: ;;#ASMEND 2177; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17] 2178; GFX900-NEXT: s_waitcnt vmcnt(0) 2179; GFX900-NEXT: s_setpc_b64 s[30:31] 2180; 2181; GFX90A-LABEL: v_shuffle_v2i32_v4i32__1_4: 2182; GFX90A: ; %bb.0: 2183; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2184; GFX90A-NEXT: ;;#ASMSTART 2185; GFX90A-NEXT: ; def v[0:3] 2186; GFX90A-NEXT: ;;#ASMEND 2187; GFX90A-NEXT: v_mov_b32_e32 v4, 0 2188; GFX90A-NEXT: v_mov_b32_e32 v0, v1 2189; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 2190; GFX90A-NEXT: s_waitcnt vmcnt(0) 2191; GFX90A-NEXT: s_setpc_b64 s[30:31] 2192; 2193; GFX940-LABEL: v_shuffle_v2i32_v4i32__1_4: 2194; GFX940: ; %bb.0: 2195; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2196; GFX940-NEXT: ;;#ASMSTART 2197; GFX940-NEXT: ; def v[0:3] 2198; GFX940-NEXT: ;;#ASMEND 2199; GFX940-NEXT: v_mov_b32_e32 v4, 0 2200; GFX940-NEXT: v_mov_b32_e32 v0, v1 2201; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 2202; GFX940-NEXT: s_waitcnt vmcnt(0) 2203; GFX940-NEXT: s_setpc_b64 s[30:31] 2204 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2205 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 4> 2206 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2207 ret void 2208} 2209 2210define void @v_shuffle_v2i32_v4i32__2_4(ptr addrspace(1) inreg %ptr) { 2211; GFX900-LABEL: v_shuffle_v2i32_v4i32__2_4: 2212; GFX900: ; %bb.0: 2213; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2214; GFX900-NEXT: v_mov_b32_e32 v4, 0 2215; GFX900-NEXT: ;;#ASMSTART 2216; GFX900-NEXT: ; def v[0:3] 2217; GFX900-NEXT: ;;#ASMEND 2218; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 2219; GFX900-NEXT: s_waitcnt vmcnt(0) 2220; GFX900-NEXT: s_setpc_b64 s[30:31] 2221; 2222; GFX90A-LABEL: v_shuffle_v2i32_v4i32__2_4: 2223; GFX90A: ; %bb.0: 2224; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2225; GFX90A-NEXT: v_mov_b32_e32 v4, 0 2226; GFX90A-NEXT: ;;#ASMSTART 2227; GFX90A-NEXT: ; def v[0:3] 2228; GFX90A-NEXT: ;;#ASMEND 2229; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 2230; GFX90A-NEXT: s_waitcnt vmcnt(0) 2231; GFX90A-NEXT: s_setpc_b64 s[30:31] 2232; 2233; GFX940-LABEL: v_shuffle_v2i32_v4i32__2_4: 2234; GFX940: ; %bb.0: 2235; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2236; GFX940-NEXT: v_mov_b32_e32 v4, 0 2237; GFX940-NEXT: ;;#ASMSTART 2238; GFX940-NEXT: ; def v[0:3] 2239; GFX940-NEXT: ;;#ASMEND 2240; GFX940-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1 2241; GFX940-NEXT: s_waitcnt vmcnt(0) 2242; GFX940-NEXT: s_setpc_b64 s[30:31] 2243 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2244 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 4> 2245 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2246 ret void 2247} 2248 2249define void @v_shuffle_v2i32_v4i32__3_4(ptr addrspace(1) inreg %ptr) { 2250; GFX900-LABEL: v_shuffle_v2i32_v4i32__3_4: 2251; GFX900: ; %bb.0: 2252; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2253; GFX900-NEXT: ;;#ASMSTART 2254; GFX900-NEXT: ; def v[0:3] 2255; GFX900-NEXT: ;;#ASMEND 2256; GFX900-NEXT: v_mov_b32_e32 v4, 0 2257; GFX900-NEXT: v_mov_b32_e32 v0, v3 2258; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 2259; GFX900-NEXT: s_waitcnt vmcnt(0) 2260; GFX900-NEXT: s_setpc_b64 s[30:31] 2261; 2262; GFX90A-LABEL: v_shuffle_v2i32_v4i32__3_4: 2263; GFX90A: ; %bb.0: 2264; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2265; GFX90A-NEXT: ;;#ASMSTART 2266; GFX90A-NEXT: ; def v[0:3] 2267; GFX90A-NEXT: ;;#ASMEND 2268; GFX90A-NEXT: v_mov_b32_e32 v4, 0 2269; GFX90A-NEXT: v_mov_b32_e32 v0, v3 2270; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 2271; GFX90A-NEXT: s_waitcnt vmcnt(0) 2272; GFX90A-NEXT: s_setpc_b64 s[30:31] 2273; 2274; GFX940-LABEL: v_shuffle_v2i32_v4i32__3_4: 2275; GFX940: ; %bb.0: 2276; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2277; GFX940-NEXT: ;;#ASMSTART 2278; GFX940-NEXT: ; def v[0:3] 2279; GFX940-NEXT: ;;#ASMEND 2280; GFX940-NEXT: v_mov_b32_e32 v4, 0 2281; GFX940-NEXT: v_mov_b32_e32 v0, v3 2282; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 2283; GFX940-NEXT: s_waitcnt vmcnt(0) 2284; GFX940-NEXT: s_setpc_b64 s[30:31] 2285 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2286 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 4> 2287 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2288 ret void 2289} 2290 2291define void @v_shuffle_v2i32_v4i32__4_4(ptr addrspace(1) inreg %ptr) { 2292; GFX9-LABEL: v_shuffle_v2i32_v4i32__4_4: 2293; GFX9: ; %bb.0: 2294; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2295; GFX9-NEXT: s_setpc_b64 s[30:31] 2296 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2297 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 4> 2298 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2299 ret void 2300} 2301 2302define void @v_shuffle_v2i32_v4i32__5_4(ptr addrspace(1) inreg %ptr) { 2303; GFX900-LABEL: v_shuffle_v2i32_v4i32__5_4: 2304; GFX900: ; %bb.0: 2305; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2306; GFX900-NEXT: ;;#ASMSTART 2307; GFX900-NEXT: ; def v[0:3] 2308; GFX900-NEXT: ;;#ASMEND 2309; GFX900-NEXT: v_mov_b32_e32 v4, 0 2310; GFX900-NEXT: v_mov_b32_e32 v2, v0 2311; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17] 2312; GFX900-NEXT: s_waitcnt vmcnt(0) 2313; GFX900-NEXT: s_setpc_b64 s[30:31] 2314; 2315; GFX90A-LABEL: v_shuffle_v2i32_v4i32__5_4: 2316; GFX90A: ; %bb.0: 2317; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2318; GFX90A-NEXT: ;;#ASMSTART 2319; GFX90A-NEXT: ; def v[0:3] 2320; GFX90A-NEXT: ;;#ASMEND 2321; GFX90A-NEXT: v_mov_b32_e32 v4, 0 2322; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0] 2323; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 2324; GFX90A-NEXT: s_waitcnt vmcnt(0) 2325; GFX90A-NEXT: s_setpc_b64 s[30:31] 2326; 2327; GFX940-LABEL: v_shuffle_v2i32_v4i32__5_4: 2328; GFX940: ; %bb.0: 2329; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2330; GFX940-NEXT: ;;#ASMSTART 2331; GFX940-NEXT: ; def v[0:3] 2332; GFX940-NEXT: ;;#ASMEND 2333; GFX940-NEXT: v_mov_b32_e32 v4, 0 2334; GFX940-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0] 2335; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 2336; GFX940-NEXT: s_waitcnt vmcnt(0) 2337; GFX940-NEXT: s_setpc_b64 s[30:31] 2338 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2339 %vec1 = call <4 x i32> asm "; def $0", "=v"() 2340 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 4> 2341 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2342 ret void 2343} 2344 2345define void @v_shuffle_v2i32_v4i32__6_4(ptr addrspace(1) inreg %ptr) { 2346; GFX900-LABEL: v_shuffle_v2i32_v4i32__6_4: 2347; GFX900: ; %bb.0: 2348; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2349; GFX900-NEXT: ;;#ASMSTART 2350; GFX900-NEXT: ; def v[0:3] 2351; GFX900-NEXT: ;;#ASMEND 2352; GFX900-NEXT: v_mov_b32_e32 v4, 0 2353; GFX900-NEXT: v_mov_b32_e32 v3, v0 2354; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 2355; GFX900-NEXT: s_waitcnt vmcnt(0) 2356; GFX900-NEXT: s_setpc_b64 s[30:31] 2357; 2358; GFX90A-LABEL: v_shuffle_v2i32_v4i32__6_4: 2359; GFX90A: ; %bb.0: 2360; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2361; GFX90A-NEXT: ;;#ASMSTART 2362; GFX90A-NEXT: ; def v[0:3] 2363; GFX90A-NEXT: ;;#ASMEND 2364; GFX90A-NEXT: v_mov_b32_e32 v4, 0 2365; GFX90A-NEXT: v_mov_b32_e32 v3, v0 2366; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 2367; GFX90A-NEXT: s_waitcnt vmcnt(0) 2368; GFX90A-NEXT: s_setpc_b64 s[30:31] 2369; 2370; GFX940-LABEL: v_shuffle_v2i32_v4i32__6_4: 2371; GFX940: ; %bb.0: 2372; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2373; GFX940-NEXT: ;;#ASMSTART 2374; GFX940-NEXT: ; def v[0:3] 2375; GFX940-NEXT: ;;#ASMEND 2376; GFX940-NEXT: v_mov_b32_e32 v4, 0 2377; GFX940-NEXT: v_mov_b32_e32 v3, v0 2378; GFX940-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1 2379; GFX940-NEXT: s_waitcnt vmcnt(0) 2380; GFX940-NEXT: s_setpc_b64 s[30:31] 2381 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2382 %vec1 = call <4 x i32> asm "; def $0", "=v"() 2383 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 4> 2384 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2385 ret void 2386} 2387 2388define void @v_shuffle_v2i32_v4i32__u_5(ptr addrspace(1) inreg %ptr) { 2389; GFX900-LABEL: v_shuffle_v2i32_v4i32__u_5: 2390; GFX900: ; %bb.0: 2391; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2392; GFX900-NEXT: v_mov_b32_e32 v4, 0 2393; GFX900-NEXT: ;;#ASMSTART 2394; GFX900-NEXT: ; def v[0:3] 2395; GFX900-NEXT: ;;#ASMEND 2396; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 2397; GFX900-NEXT: s_waitcnt vmcnt(0) 2398; GFX900-NEXT: s_setpc_b64 s[30:31] 2399; 2400; GFX90A-LABEL: v_shuffle_v2i32_v4i32__u_5: 2401; GFX90A: ; %bb.0: 2402; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2403; GFX90A-NEXT: v_mov_b32_e32 v4, 0 2404; GFX90A-NEXT: ;;#ASMSTART 2405; GFX90A-NEXT: ; def v[0:3] 2406; GFX90A-NEXT: ;;#ASMEND 2407; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 2408; GFX90A-NEXT: s_waitcnt vmcnt(0) 2409; GFX90A-NEXT: s_setpc_b64 s[30:31] 2410; 2411; GFX940-LABEL: v_shuffle_v2i32_v4i32__u_5: 2412; GFX940: ; %bb.0: 2413; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2414; GFX940-NEXT: v_mov_b32_e32 v4, 0 2415; GFX940-NEXT: ;;#ASMSTART 2416; GFX940-NEXT: ; def v[0:3] 2417; GFX940-NEXT: ;;#ASMEND 2418; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 2419; GFX940-NEXT: s_waitcnt vmcnt(0) 2420; GFX940-NEXT: s_setpc_b64 s[30:31] 2421 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2422 %vec1 = call <4 x i32> asm "; def $0", "=v"() 2423 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 poison, i32 5> 2424 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2425 ret void 2426} 2427 2428define void @v_shuffle_v2i32_v4i32__0_5(ptr addrspace(1) inreg %ptr) { 2429; GFX900-LABEL: v_shuffle_v2i32_v4i32__0_5: 2430; GFX900: ; %bb.0: 2431; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2432; GFX900-NEXT: ;;#ASMSTART 2433; GFX900-NEXT: ; def v[0:3] 2434; GFX900-NEXT: ;;#ASMEND 2435; GFX900-NEXT: ;;#ASMSTART 2436; GFX900-NEXT: ; def v[1:4] 2437; GFX900-NEXT: ;;#ASMEND 2438; GFX900-NEXT: v_mov_b32_e32 v5, 0 2439; GFX900-NEXT: v_mov_b32_e32 v1, v2 2440; GFX900-NEXT: global_store_dwordx2 v5, v[0:1], s[16:17] 2441; GFX900-NEXT: s_waitcnt vmcnt(0) 2442; GFX900-NEXT: s_setpc_b64 s[30:31] 2443; 2444; GFX90A-LABEL: v_shuffle_v2i32_v4i32__0_5: 2445; GFX90A: ; %bb.0: 2446; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2447; GFX90A-NEXT: ;;#ASMSTART 2448; GFX90A-NEXT: ; def v[0:3] 2449; GFX90A-NEXT: ;;#ASMEND 2450; GFX90A-NEXT: v_mov_b32_e32 v6, 0 2451; GFX90A-NEXT: ;;#ASMSTART 2452; GFX90A-NEXT: ; def v[2:5] 2453; GFX90A-NEXT: ;;#ASMEND 2454; GFX90A-NEXT: v_mov_b32_e32 v1, v3 2455; GFX90A-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17] 2456; GFX90A-NEXT: s_waitcnt vmcnt(0) 2457; GFX90A-NEXT: s_setpc_b64 s[30:31] 2458; 2459; GFX940-LABEL: v_shuffle_v2i32_v4i32__0_5: 2460; GFX940: ; %bb.0: 2461; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2462; GFX940-NEXT: ;;#ASMSTART 2463; GFX940-NEXT: ; def v[0:3] 2464; GFX940-NEXT: ;;#ASMEND 2465; GFX940-NEXT: v_mov_b32_e32 v6, 0 2466; GFX940-NEXT: ;;#ASMSTART 2467; GFX940-NEXT: ; def v[2:5] 2468; GFX940-NEXT: ;;#ASMEND 2469; GFX940-NEXT: s_nop 0 2470; GFX940-NEXT: v_mov_b32_e32 v1, v3 2471; GFX940-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1] sc0 sc1 2472; GFX940-NEXT: s_waitcnt vmcnt(0) 2473; GFX940-NEXT: s_setpc_b64 s[30:31] 2474 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2475 %vec1 = call <4 x i32> asm "; def $0", "=v"() 2476 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 0, i32 5> 2477 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2478 ret void 2479} 2480 2481define void @v_shuffle_v2i32_v4i32__1_5(ptr addrspace(1) inreg %ptr) { 2482; GFX900-LABEL: v_shuffle_v2i32_v4i32__1_5: 2483; GFX900: ; %bb.0: 2484; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2485; GFX900-NEXT: ;;#ASMSTART 2486; GFX900-NEXT: ; def v[0:3] 2487; GFX900-NEXT: ;;#ASMEND 2488; GFX900-NEXT: ;;#ASMSTART 2489; GFX900-NEXT: ; def v[2:5] 2490; GFX900-NEXT: ;;#ASMEND 2491; GFX900-NEXT: v_mov_b32_e32 v6, 0 2492; GFX900-NEXT: v_mov_b32_e32 v2, v3 2493; GFX900-NEXT: global_store_dwordx2 v6, v[1:2], s[16:17] 2494; GFX900-NEXT: s_waitcnt vmcnt(0) 2495; GFX900-NEXT: s_setpc_b64 s[30:31] 2496; 2497; GFX90A-LABEL: v_shuffle_v2i32_v4i32__1_5: 2498; GFX90A: ; %bb.0: 2499; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2500; GFX90A-NEXT: ;;#ASMSTART 2501; GFX90A-NEXT: ; def v[0:3] 2502; GFX90A-NEXT: ;;#ASMEND 2503; GFX90A-NEXT: ;;#ASMSTART 2504; GFX90A-NEXT: ; def v[2:5] 2505; GFX90A-NEXT: ;;#ASMEND 2506; GFX90A-NEXT: v_mov_b32_e32 v6, 0 2507; GFX90A-NEXT: v_mov_b32_e32 v2, v1 2508; GFX90A-NEXT: global_store_dwordx2 v6, v[2:3], s[16:17] 2509; GFX90A-NEXT: s_waitcnt vmcnt(0) 2510; GFX90A-NEXT: s_setpc_b64 s[30:31] 2511; 2512; GFX940-LABEL: v_shuffle_v2i32_v4i32__1_5: 2513; GFX940: ; %bb.0: 2514; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2515; GFX940-NEXT: ;;#ASMSTART 2516; GFX940-NEXT: ; def v[0:3] 2517; GFX940-NEXT: ;;#ASMEND 2518; GFX940-NEXT: v_mov_b32_e32 v6, 0 2519; GFX940-NEXT: ;;#ASMSTART 2520; GFX940-NEXT: ; def v[2:5] 2521; GFX940-NEXT: ;;#ASMEND 2522; GFX940-NEXT: s_nop 0 2523; GFX940-NEXT: v_mov_b32_e32 v2, v1 2524; GFX940-NEXT: global_store_dwordx2 v6, v[2:3], s[0:1] sc0 sc1 2525; GFX940-NEXT: s_waitcnt vmcnt(0) 2526; GFX940-NEXT: s_setpc_b64 s[30:31] 2527 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2528 %vec1 = call <4 x i32> asm "; def $0", "=v"() 2529 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 1, i32 5> 2530 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2531 ret void 2532} 2533 2534define void @v_shuffle_v2i32_v4i32__2_5(ptr addrspace(1) inreg %ptr) { 2535; GFX900-LABEL: v_shuffle_v2i32_v4i32__2_5: 2536; GFX900: ; %bb.0: 2537; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2538; GFX900-NEXT: ;;#ASMSTART 2539; GFX900-NEXT: ; def v[0:3] 2540; GFX900-NEXT: ;;#ASMEND 2541; GFX900-NEXT: ;;#ASMSTART 2542; GFX900-NEXT: ; def v[3:6] 2543; GFX900-NEXT: ;;#ASMEND 2544; GFX900-NEXT: v_mov_b32_e32 v7, 0 2545; GFX900-NEXT: v_mov_b32_e32 v3, v4 2546; GFX900-NEXT: global_store_dwordx2 v7, v[2:3], s[16:17] 2547; GFX900-NEXT: s_waitcnt vmcnt(0) 2548; GFX900-NEXT: s_setpc_b64 s[30:31] 2549; 2550; GFX90A-LABEL: v_shuffle_v2i32_v4i32__2_5: 2551; GFX90A: ; %bb.0: 2552; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2553; GFX90A-NEXT: ;;#ASMSTART 2554; GFX90A-NEXT: ; def v[0:3] 2555; GFX90A-NEXT: ;;#ASMEND 2556; GFX90A-NEXT: v_mov_b32_e32 v8, 0 2557; GFX90A-NEXT: ;;#ASMSTART 2558; GFX90A-NEXT: ; def v[4:7] 2559; GFX90A-NEXT: ;;#ASMEND 2560; GFX90A-NEXT: v_mov_b32_e32 v3, v5 2561; GFX90A-NEXT: global_store_dwordx2 v8, v[2:3], s[16:17] 2562; GFX90A-NEXT: s_waitcnt vmcnt(0) 2563; GFX90A-NEXT: s_setpc_b64 s[30:31] 2564; 2565; GFX940-LABEL: v_shuffle_v2i32_v4i32__2_5: 2566; GFX940: ; %bb.0: 2567; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2568; GFX940-NEXT: ;;#ASMSTART 2569; GFX940-NEXT: ; def v[0:3] 2570; GFX940-NEXT: ;;#ASMEND 2571; GFX940-NEXT: v_mov_b32_e32 v8, 0 2572; GFX940-NEXT: ;;#ASMSTART 2573; GFX940-NEXT: ; def v[4:7] 2574; GFX940-NEXT: ;;#ASMEND 2575; GFX940-NEXT: s_nop 0 2576; GFX940-NEXT: v_mov_b32_e32 v3, v5 2577; GFX940-NEXT: global_store_dwordx2 v8, v[2:3], s[0:1] sc0 sc1 2578; GFX940-NEXT: s_waitcnt vmcnt(0) 2579; GFX940-NEXT: s_setpc_b64 s[30:31] 2580 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2581 %vec1 = call <4 x i32> asm "; def $0", "=v"() 2582 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 2, i32 5> 2583 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2584 ret void 2585} 2586 2587define void @v_shuffle_v2i32_v4i32__3_5(ptr addrspace(1) inreg %ptr) { 2588; GFX900-LABEL: v_shuffle_v2i32_v4i32__3_5: 2589; GFX900: ; %bb.0: 2590; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2591; GFX900-NEXT: ;;#ASMSTART 2592; GFX900-NEXT: ; def v[4:7] 2593; GFX900-NEXT: ;;#ASMEND 2594; GFX900-NEXT: v_mov_b32_e32 v8, 0 2595; GFX900-NEXT: ;;#ASMSTART 2596; GFX900-NEXT: ; def v[0:3] 2597; GFX900-NEXT: ;;#ASMEND 2598; GFX900-NEXT: v_mov_b32_e32 v4, v3 2599; GFX900-NEXT: global_store_dwordx2 v8, v[4:5], s[16:17] 2600; GFX900-NEXT: s_waitcnt vmcnt(0) 2601; GFX900-NEXT: s_setpc_b64 s[30:31] 2602; 2603; GFX90A-LABEL: v_shuffle_v2i32_v4i32__3_5: 2604; GFX90A: ; %bb.0: 2605; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2606; GFX90A-NEXT: ;;#ASMSTART 2607; GFX90A-NEXT: ; def v[4:7] 2608; GFX90A-NEXT: ;;#ASMEND 2609; GFX90A-NEXT: v_mov_b32_e32 v8, 0 2610; GFX90A-NEXT: ;;#ASMSTART 2611; GFX90A-NEXT: ; def v[0:3] 2612; GFX90A-NEXT: ;;#ASMEND 2613; GFX90A-NEXT: v_mov_b32_e32 v4, v3 2614; GFX90A-NEXT: global_store_dwordx2 v8, v[4:5], s[16:17] 2615; GFX90A-NEXT: s_waitcnt vmcnt(0) 2616; GFX90A-NEXT: s_setpc_b64 s[30:31] 2617; 2618; GFX940-LABEL: v_shuffle_v2i32_v4i32__3_5: 2619; GFX940: ; %bb.0: 2620; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2621; GFX940-NEXT: ;;#ASMSTART 2622; GFX940-NEXT: ; def v[4:7] 2623; GFX940-NEXT: ;;#ASMEND 2624; GFX940-NEXT: v_mov_b32_e32 v8, 0 2625; GFX940-NEXT: ;;#ASMSTART 2626; GFX940-NEXT: ; def v[0:3] 2627; GFX940-NEXT: ;;#ASMEND 2628; GFX940-NEXT: s_nop 0 2629; GFX940-NEXT: v_mov_b32_e32 v4, v3 2630; GFX940-NEXT: global_store_dwordx2 v8, v[4:5], s[0:1] sc0 sc1 2631; GFX940-NEXT: s_waitcnt vmcnt(0) 2632; GFX940-NEXT: s_setpc_b64 s[30:31] 2633 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2634 %vec1 = call <4 x i32> asm "; def $0", "=v"() 2635 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 3, i32 5> 2636 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2637 ret void 2638} 2639 2640define void @v_shuffle_v2i32_v4i32__4_5(ptr addrspace(1) inreg %ptr) { 2641; GFX900-LABEL: v_shuffle_v2i32_v4i32__4_5: 2642; GFX900: ; %bb.0: 2643; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2644; GFX900-NEXT: v_mov_b32_e32 v4, 0 2645; GFX900-NEXT: ;;#ASMSTART 2646; GFX900-NEXT: ; def v[0:3] 2647; GFX900-NEXT: ;;#ASMEND 2648; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 2649; GFX900-NEXT: s_waitcnt vmcnt(0) 2650; GFX900-NEXT: s_setpc_b64 s[30:31] 2651; 2652; GFX90A-LABEL: v_shuffle_v2i32_v4i32__4_5: 2653; GFX90A: ; %bb.0: 2654; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2655; GFX90A-NEXT: v_mov_b32_e32 v4, 0 2656; GFX90A-NEXT: ;;#ASMSTART 2657; GFX90A-NEXT: ; def v[0:3] 2658; GFX90A-NEXT: ;;#ASMEND 2659; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 2660; GFX90A-NEXT: s_waitcnt vmcnt(0) 2661; GFX90A-NEXT: s_setpc_b64 s[30:31] 2662; 2663; GFX940-LABEL: v_shuffle_v2i32_v4i32__4_5: 2664; GFX940: ; %bb.0: 2665; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2666; GFX940-NEXT: v_mov_b32_e32 v4, 0 2667; GFX940-NEXT: ;;#ASMSTART 2668; GFX940-NEXT: ; def v[0:3] 2669; GFX940-NEXT: ;;#ASMEND 2670; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 2671; GFX940-NEXT: s_waitcnt vmcnt(0) 2672; GFX940-NEXT: s_setpc_b64 s[30:31] 2673 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2674 %vec1 = call <4 x i32> asm "; def $0", "=v"() 2675 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 4, i32 5> 2676 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2677 ret void 2678} 2679 2680define void @v_shuffle_v2i32_v4i32__5_5(ptr addrspace(1) inreg %ptr) { 2681; GFX900-LABEL: v_shuffle_v2i32_v4i32__5_5: 2682; GFX900: ; %bb.0: 2683; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2684; GFX900-NEXT: ;;#ASMSTART 2685; GFX900-NEXT: ; def v[0:3] 2686; GFX900-NEXT: ;;#ASMEND 2687; GFX900-NEXT: v_mov_b32_e32 v4, 0 2688; GFX900-NEXT: v_mov_b32_e32 v2, v1 2689; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17] 2690; GFX900-NEXT: s_waitcnt vmcnt(0) 2691; GFX900-NEXT: s_setpc_b64 s[30:31] 2692; 2693; GFX90A-LABEL: v_shuffle_v2i32_v4i32__5_5: 2694; GFX90A: ; %bb.0: 2695; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2696; GFX90A-NEXT: ;;#ASMSTART 2697; GFX90A-NEXT: ; def v[0:3] 2698; GFX90A-NEXT: ;;#ASMEND 2699; GFX90A-NEXT: v_mov_b32_e32 v4, 0 2700; GFX90A-NEXT: v_mov_b32_e32 v0, v1 2701; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 2702; GFX90A-NEXT: s_waitcnt vmcnt(0) 2703; GFX90A-NEXT: s_setpc_b64 s[30:31] 2704; 2705; GFX940-LABEL: v_shuffle_v2i32_v4i32__5_5: 2706; GFX940: ; %bb.0: 2707; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2708; GFX940-NEXT: ;;#ASMSTART 2709; GFX940-NEXT: ; def v[0:3] 2710; GFX940-NEXT: ;;#ASMEND 2711; GFX940-NEXT: v_mov_b32_e32 v4, 0 2712; GFX940-NEXT: v_mov_b32_e32 v0, v1 2713; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 2714; GFX940-NEXT: s_waitcnt vmcnt(0) 2715; GFX940-NEXT: s_setpc_b64 s[30:31] 2716 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2717 %vec1 = call <4 x i32> asm "; def $0", "=v"() 2718 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 5> 2719 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2720 ret void 2721} 2722 2723define void @v_shuffle_v2i32_v4i32__6_5(ptr addrspace(1) inreg %ptr) { 2724; GFX900-LABEL: v_shuffle_v2i32_v4i32__6_5: 2725; GFX900: ; %bb.0: 2726; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2727; GFX900-NEXT: ;;#ASMSTART 2728; GFX900-NEXT: ; def v[0:3] 2729; GFX900-NEXT: ;;#ASMEND 2730; GFX900-NEXT: v_mov_b32_e32 v4, 0 2731; GFX900-NEXT: v_mov_b32_e32 v3, v1 2732; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 2733; GFX900-NEXT: s_waitcnt vmcnt(0) 2734; GFX900-NEXT: s_setpc_b64 s[30:31] 2735; 2736; GFX90A-LABEL: v_shuffle_v2i32_v4i32__6_5: 2737; GFX90A: ; %bb.0: 2738; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2739; GFX90A-NEXT: ;;#ASMSTART 2740; GFX90A-NEXT: ; def v[0:3] 2741; GFX90A-NEXT: ;;#ASMEND 2742; GFX90A-NEXT: v_mov_b32_e32 v4, 0 2743; GFX90A-NEXT: v_mov_b32_e32 v3, v1 2744; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 2745; GFX90A-NEXT: s_waitcnt vmcnt(0) 2746; GFX90A-NEXT: s_setpc_b64 s[30:31] 2747; 2748; GFX940-LABEL: v_shuffle_v2i32_v4i32__6_5: 2749; GFX940: ; %bb.0: 2750; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2751; GFX940-NEXT: ;;#ASMSTART 2752; GFX940-NEXT: ; def v[0:3] 2753; GFX940-NEXT: ;;#ASMEND 2754; GFX940-NEXT: v_mov_b32_e32 v4, 0 2755; GFX940-NEXT: v_mov_b32_e32 v3, v1 2756; GFX940-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1 2757; GFX940-NEXT: s_waitcnt vmcnt(0) 2758; GFX940-NEXT: s_setpc_b64 s[30:31] 2759 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2760 %vec1 = call <4 x i32> asm "; def $0", "=v"() 2761 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 5> 2762 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2763 ret void 2764} 2765 2766define void @v_shuffle_v2i32_v4i32__u_6(ptr addrspace(1) inreg %ptr) { 2767; GFX900-LABEL: v_shuffle_v2i32_v4i32__u_6: 2768; GFX900: ; %bb.0: 2769; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2770; GFX900-NEXT: v_mov_b32_e32 v4, 0 2771; GFX900-NEXT: ;;#ASMSTART 2772; GFX900-NEXT: ; def v[0:3] 2773; GFX900-NEXT: ;;#ASMEND 2774; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17] 2775; GFX900-NEXT: s_waitcnt vmcnt(0) 2776; GFX900-NEXT: s_setpc_b64 s[30:31] 2777; 2778; GFX90A-LABEL: v_shuffle_v2i32_v4i32__u_6: 2779; GFX90A: ; %bb.0: 2780; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2781; GFX90A-NEXT: ;;#ASMSTART 2782; GFX90A-NEXT: ; def v[0:3] 2783; GFX90A-NEXT: ;;#ASMEND 2784; GFX90A-NEXT: v_mov_b32_e32 v4, 0 2785; GFX90A-NEXT: v_mov_b32_e32 v1, v2 2786; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 2787; GFX90A-NEXT: s_waitcnt vmcnt(0) 2788; GFX90A-NEXT: s_setpc_b64 s[30:31] 2789; 2790; GFX940-LABEL: v_shuffle_v2i32_v4i32__u_6: 2791; GFX940: ; %bb.0: 2792; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2793; GFX940-NEXT: ;;#ASMSTART 2794; GFX940-NEXT: ; def v[0:3] 2795; GFX940-NEXT: ;;#ASMEND 2796; GFX940-NEXT: v_mov_b32_e32 v4, 0 2797; GFX940-NEXT: v_mov_b32_e32 v1, v2 2798; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 2799; GFX940-NEXT: s_waitcnt vmcnt(0) 2800; GFX940-NEXT: s_setpc_b64 s[30:31] 2801 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2802 %vec1 = call <4 x i32> asm "; def $0", "=v"() 2803 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 poison, i32 6> 2804 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2805 ret void 2806} 2807 2808define void @v_shuffle_v2i32_v4i32__0_6(ptr addrspace(1) inreg %ptr) { 2809; GFX900-LABEL: v_shuffle_v2i32_v4i32__0_6: 2810; GFX900: ; %bb.0: 2811; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2812; GFX900-NEXT: ;;#ASMSTART 2813; GFX900-NEXT: ; def v[0:3] 2814; GFX900-NEXT: ;;#ASMEND 2815; GFX900-NEXT: ;;#ASMSTART 2816; GFX900-NEXT: ; def v[1:4] 2817; GFX900-NEXT: ;;#ASMEND 2818; GFX900-NEXT: v_mov_b32_e32 v5, 0 2819; GFX900-NEXT: v_mov_b32_e32 v1, v3 2820; GFX900-NEXT: global_store_dwordx2 v5, v[0:1], s[16:17] 2821; GFX900-NEXT: s_waitcnt vmcnt(0) 2822; GFX900-NEXT: s_setpc_b64 s[30:31] 2823; 2824; GFX90A-LABEL: v_shuffle_v2i32_v4i32__0_6: 2825; GFX90A: ; %bb.0: 2826; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2827; GFX90A-NEXT: ;;#ASMSTART 2828; GFX90A-NEXT: ; def v[0:3] 2829; GFX90A-NEXT: ;;#ASMEND 2830; GFX90A-NEXT: v_mov_b32_e32 v6, 0 2831; GFX90A-NEXT: ;;#ASMSTART 2832; GFX90A-NEXT: ; def v[2:5] 2833; GFX90A-NEXT: ;;#ASMEND 2834; GFX90A-NEXT: v_mov_b32_e32 v1, v4 2835; GFX90A-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17] 2836; GFX90A-NEXT: s_waitcnt vmcnt(0) 2837; GFX90A-NEXT: s_setpc_b64 s[30:31] 2838; 2839; GFX940-LABEL: v_shuffle_v2i32_v4i32__0_6: 2840; GFX940: ; %bb.0: 2841; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2842; GFX940-NEXT: ;;#ASMSTART 2843; GFX940-NEXT: ; def v[0:3] 2844; GFX940-NEXT: ;;#ASMEND 2845; GFX940-NEXT: v_mov_b32_e32 v6, 0 2846; GFX940-NEXT: ;;#ASMSTART 2847; GFX940-NEXT: ; def v[2:5] 2848; GFX940-NEXT: ;;#ASMEND 2849; GFX940-NEXT: s_nop 0 2850; GFX940-NEXT: v_mov_b32_e32 v1, v4 2851; GFX940-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1] sc0 sc1 2852; GFX940-NEXT: s_waitcnt vmcnt(0) 2853; GFX940-NEXT: s_setpc_b64 s[30:31] 2854 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2855 %vec1 = call <4 x i32> asm "; def $0", "=v"() 2856 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 0, i32 6> 2857 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2858 ret void 2859} 2860 2861define void @v_shuffle_v2i32_v4i32__1_6(ptr addrspace(1) inreg %ptr) { 2862; GFX900-LABEL: v_shuffle_v2i32_v4i32__1_6: 2863; GFX900: ; %bb.0: 2864; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2865; GFX900-NEXT: ;;#ASMSTART 2866; GFX900-NEXT: ; def v[0:3] 2867; GFX900-NEXT: ;;#ASMEND 2868; GFX900-NEXT: ;;#ASMSTART 2869; GFX900-NEXT: ; def v[2:5] 2870; GFX900-NEXT: ;;#ASMEND 2871; GFX900-NEXT: v_mov_b32_e32 v6, 0 2872; GFX900-NEXT: v_mov_b32_e32 v2, v4 2873; GFX900-NEXT: global_store_dwordx2 v6, v[1:2], s[16:17] 2874; GFX900-NEXT: s_waitcnt vmcnt(0) 2875; GFX900-NEXT: s_setpc_b64 s[30:31] 2876; 2877; GFX90A-LABEL: v_shuffle_v2i32_v4i32__1_6: 2878; GFX90A: ; %bb.0: 2879; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2880; GFX90A-NEXT: ;;#ASMSTART 2881; GFX90A-NEXT: ; def v[0:3] 2882; GFX90A-NEXT: ;;#ASMEND 2883; GFX90A-NEXT: v_mov_b32_e32 v6, 0 2884; GFX90A-NEXT: ;;#ASMSTART 2885; GFX90A-NEXT: ; def v[2:5] 2886; GFX90A-NEXT: ;;#ASMEND 2887; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[4:5] op_sel:[1,0] 2888; GFX90A-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17] 2889; GFX90A-NEXT: s_waitcnt vmcnt(0) 2890; GFX90A-NEXT: s_setpc_b64 s[30:31] 2891; 2892; GFX940-LABEL: v_shuffle_v2i32_v4i32__1_6: 2893; GFX940: ; %bb.0: 2894; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2895; GFX940-NEXT: ;;#ASMSTART 2896; GFX940-NEXT: ; def v[0:3] 2897; GFX940-NEXT: ;;#ASMEND 2898; GFX940-NEXT: v_mov_b32_e32 v6, 0 2899; GFX940-NEXT: ;;#ASMSTART 2900; GFX940-NEXT: ; def v[2:5] 2901; GFX940-NEXT: ;;#ASMEND 2902; GFX940-NEXT: s_nop 0 2903; GFX940-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[4:5] op_sel:[1,0] 2904; GFX940-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1] sc0 sc1 2905; GFX940-NEXT: s_waitcnt vmcnt(0) 2906; GFX940-NEXT: s_setpc_b64 s[30:31] 2907 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2908 %vec1 = call <4 x i32> asm "; def $0", "=v"() 2909 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 1, i32 6> 2910 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2911 ret void 2912} 2913 2914define void @v_shuffle_v2i32_v4i32__2_6(ptr addrspace(1) inreg %ptr) { 2915; GFX900-LABEL: v_shuffle_v2i32_v4i32__2_6: 2916; GFX900: ; %bb.0: 2917; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2918; GFX900-NEXT: ;;#ASMSTART 2919; GFX900-NEXT: ; def v[0:3] 2920; GFX900-NEXT: ;;#ASMEND 2921; GFX900-NEXT: ;;#ASMSTART 2922; GFX900-NEXT: ; def v[3:6] 2923; GFX900-NEXT: ;;#ASMEND 2924; GFX900-NEXT: v_mov_b32_e32 v7, 0 2925; GFX900-NEXT: v_mov_b32_e32 v3, v5 2926; GFX900-NEXT: global_store_dwordx2 v7, v[2:3], s[16:17] 2927; GFX900-NEXT: s_waitcnt vmcnt(0) 2928; GFX900-NEXT: s_setpc_b64 s[30:31] 2929; 2930; GFX90A-LABEL: v_shuffle_v2i32_v4i32__2_6: 2931; GFX90A: ; %bb.0: 2932; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2933; GFX90A-NEXT: ;;#ASMSTART 2934; GFX90A-NEXT: ; def v[0:3] 2935; GFX90A-NEXT: ;;#ASMEND 2936; GFX90A-NEXT: v_mov_b32_e32 v8, 0 2937; GFX90A-NEXT: ;;#ASMSTART 2938; GFX90A-NEXT: ; def v[4:7] 2939; GFX90A-NEXT: ;;#ASMEND 2940; GFX90A-NEXT: v_mov_b32_e32 v3, v6 2941; GFX90A-NEXT: global_store_dwordx2 v8, v[2:3], s[16:17] 2942; GFX90A-NEXT: s_waitcnt vmcnt(0) 2943; GFX90A-NEXT: s_setpc_b64 s[30:31] 2944; 2945; GFX940-LABEL: v_shuffle_v2i32_v4i32__2_6: 2946; GFX940: ; %bb.0: 2947; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2948; GFX940-NEXT: ;;#ASMSTART 2949; GFX940-NEXT: ; def v[0:3] 2950; GFX940-NEXT: ;;#ASMEND 2951; GFX940-NEXT: v_mov_b32_e32 v8, 0 2952; GFX940-NEXT: ;;#ASMSTART 2953; GFX940-NEXT: ; def v[4:7] 2954; GFX940-NEXT: ;;#ASMEND 2955; GFX940-NEXT: s_nop 0 2956; GFX940-NEXT: v_mov_b32_e32 v3, v6 2957; GFX940-NEXT: global_store_dwordx2 v8, v[2:3], s[0:1] sc0 sc1 2958; GFX940-NEXT: s_waitcnt vmcnt(0) 2959; GFX940-NEXT: s_setpc_b64 s[30:31] 2960 %vec0 = call <4 x i32> asm "; def $0", "=v"() 2961 %vec1 = call <4 x i32> asm "; def $0", "=v"() 2962 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 2, i32 6> 2963 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 2964 ret void 2965} 2966 2967define void @v_shuffle_v2i32_v4i32__3_6(ptr addrspace(1) inreg %ptr) { 2968; GFX900-LABEL: v_shuffle_v2i32_v4i32__3_6: 2969; GFX900: ; %bb.0: 2970; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2971; GFX900-NEXT: ;;#ASMSTART 2972; GFX900-NEXT: ; def v[4:7] 2973; GFX900-NEXT: ;;#ASMEND 2974; GFX900-NEXT: v_mov_b32_e32 v8, 0 2975; GFX900-NEXT: ;;#ASMSTART 2976; GFX900-NEXT: ; def v[0:3] 2977; GFX900-NEXT: ;;#ASMEND 2978; GFX900-NEXT: v_mov_b32_e32 v5, v3 2979; GFX900-NEXT: global_store_dwordx2 v8, v[5:6], s[16:17] 2980; GFX900-NEXT: s_waitcnt vmcnt(0) 2981; GFX900-NEXT: s_setpc_b64 s[30:31] 2982; 2983; GFX90A-LABEL: v_shuffle_v2i32_v4i32__3_6: 2984; GFX90A: ; %bb.0: 2985; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2986; GFX90A-NEXT: ;;#ASMSTART 2987; GFX90A-NEXT: ; def v[0:3] 2988; GFX90A-NEXT: ;;#ASMEND 2989; GFX90A-NEXT: v_mov_b32_e32 v8, 0 2990; GFX90A-NEXT: ;;#ASMSTART 2991; GFX90A-NEXT: ; def v[4:7] 2992; GFX90A-NEXT: ;;#ASMEND 2993; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[6:7] op_sel:[1,0] 2994; GFX90A-NEXT: global_store_dwordx2 v8, v[0:1], s[16:17] 2995; GFX90A-NEXT: s_waitcnt vmcnt(0) 2996; GFX90A-NEXT: s_setpc_b64 s[30:31] 2997; 2998; GFX940-LABEL: v_shuffle_v2i32_v4i32__3_6: 2999; GFX940: ; %bb.0: 3000; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3001; GFX940-NEXT: ;;#ASMSTART 3002; GFX940-NEXT: ; def v[0:3] 3003; GFX940-NEXT: ;;#ASMEND 3004; GFX940-NEXT: v_mov_b32_e32 v8, 0 3005; GFX940-NEXT: ;;#ASMSTART 3006; GFX940-NEXT: ; def v[4:7] 3007; GFX940-NEXT: ;;#ASMEND 3008; GFX940-NEXT: s_nop 0 3009; GFX940-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[6:7] op_sel:[1,0] 3010; GFX940-NEXT: global_store_dwordx2 v8, v[0:1], s[0:1] sc0 sc1 3011; GFX940-NEXT: s_waitcnt vmcnt(0) 3012; GFX940-NEXT: s_setpc_b64 s[30:31] 3013 %vec0 = call <4 x i32> asm "; def $0", "=v"() 3014 %vec1 = call <4 x i32> asm "; def $0", "=v"() 3015 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 3, i32 6> 3016 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 3017 ret void 3018} 3019 3020define void @v_shuffle_v2i32_v4i32__4_6(ptr addrspace(1) inreg %ptr) { 3021; GFX900-LABEL: v_shuffle_v2i32_v4i32__4_6: 3022; GFX900: ; %bb.0: 3023; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3024; GFX900-NEXT: ;;#ASMSTART 3025; GFX900-NEXT: ; def v[0:3] 3026; GFX900-NEXT: ;;#ASMEND 3027; GFX900-NEXT: v_mov_b32_e32 v4, 0 3028; GFX900-NEXT: v_mov_b32_e32 v1, v2 3029; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 3030; GFX900-NEXT: s_waitcnt vmcnt(0) 3031; GFX900-NEXT: s_setpc_b64 s[30:31] 3032; 3033; GFX90A-LABEL: v_shuffle_v2i32_v4i32__4_6: 3034; GFX90A: ; %bb.0: 3035; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3036; GFX90A-NEXT: ;;#ASMSTART 3037; GFX90A-NEXT: ; def v[0:3] 3038; GFX90A-NEXT: ;;#ASMEND 3039; GFX90A-NEXT: v_mov_b32_e32 v4, 0 3040; GFX90A-NEXT: v_mov_b32_e32 v1, v2 3041; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 3042; GFX90A-NEXT: s_waitcnt vmcnt(0) 3043; GFX90A-NEXT: s_setpc_b64 s[30:31] 3044; 3045; GFX940-LABEL: v_shuffle_v2i32_v4i32__4_6: 3046; GFX940: ; %bb.0: 3047; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3048; GFX940-NEXT: ;;#ASMSTART 3049; GFX940-NEXT: ; def v[0:3] 3050; GFX940-NEXT: ;;#ASMEND 3051; GFX940-NEXT: v_mov_b32_e32 v4, 0 3052; GFX940-NEXT: v_mov_b32_e32 v1, v2 3053; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 3054; GFX940-NEXT: s_waitcnt vmcnt(0) 3055; GFX940-NEXT: s_setpc_b64 s[30:31] 3056 %vec0 = call <4 x i32> asm "; def $0", "=v"() 3057 %vec1 = call <4 x i32> asm "; def $0", "=v"() 3058 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 4, i32 6> 3059 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 3060 ret void 3061} 3062 3063define void @v_shuffle_v2i32_v4i32__5_6(ptr addrspace(1) inreg %ptr) { 3064; GFX900-LABEL: v_shuffle_v2i32_v4i32__5_6: 3065; GFX900: ; %bb.0: 3066; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3067; GFX900-NEXT: v_mov_b32_e32 v4, 0 3068; GFX900-NEXT: ;;#ASMSTART 3069; GFX900-NEXT: ; def v[0:3] 3070; GFX900-NEXT: ;;#ASMEND 3071; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17] 3072; GFX900-NEXT: s_waitcnt vmcnt(0) 3073; GFX900-NEXT: s_setpc_b64 s[30:31] 3074; 3075; GFX90A-LABEL: v_shuffle_v2i32_v4i32__5_6: 3076; GFX90A: ; %bb.0: 3077; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3078; GFX90A-NEXT: ;;#ASMSTART 3079; GFX90A-NEXT: ; def v[0:3] 3080; GFX90A-NEXT: ;;#ASMEND 3081; GFX90A-NEXT: v_mov_b32_e32 v4, 0 3082; GFX90A-NEXT: v_mov_b32_e32 v0, v1 3083; GFX90A-NEXT: v_mov_b32_e32 v1, v2 3084; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 3085; GFX90A-NEXT: s_waitcnt vmcnt(0) 3086; GFX90A-NEXT: s_setpc_b64 s[30:31] 3087; 3088; GFX940-LABEL: v_shuffle_v2i32_v4i32__5_6: 3089; GFX940: ; %bb.0: 3090; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3091; GFX940-NEXT: ;;#ASMSTART 3092; GFX940-NEXT: ; def v[0:3] 3093; GFX940-NEXT: ;;#ASMEND 3094; GFX940-NEXT: v_mov_b32_e32 v4, 0 3095; GFX940-NEXT: v_mov_b32_e32 v0, v1 3096; GFX940-NEXT: v_mov_b32_e32 v1, v2 3097; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 3098; GFX940-NEXT: s_waitcnt vmcnt(0) 3099; GFX940-NEXT: s_setpc_b64 s[30:31] 3100 %vec0 = call <4 x i32> asm "; def $0", "=v"() 3101 %vec1 = call <4 x i32> asm "; def $0", "=v"() 3102 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 6> 3103 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 3104 ret void 3105} 3106 3107define void @v_shuffle_v2i32_v4i32__6_6(ptr addrspace(1) inreg %ptr) { 3108; GFX900-LABEL: v_shuffle_v2i32_v4i32__6_6: 3109; GFX900: ; %bb.0: 3110; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3111; GFX900-NEXT: ;;#ASMSTART 3112; GFX900-NEXT: ; def v[0:3] 3113; GFX900-NEXT: ;;#ASMEND 3114; GFX900-NEXT: v_mov_b32_e32 v4, 0 3115; GFX900-NEXT: v_mov_b32_e32 v3, v2 3116; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 3117; GFX900-NEXT: s_waitcnt vmcnt(0) 3118; GFX900-NEXT: s_setpc_b64 s[30:31] 3119; 3120; GFX90A-LABEL: v_shuffle_v2i32_v4i32__6_6: 3121; GFX90A: ; %bb.0: 3122; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3123; GFX90A-NEXT: ;;#ASMSTART 3124; GFX90A-NEXT: ; def v[0:3] 3125; GFX90A-NEXT: ;;#ASMEND 3126; GFX90A-NEXT: v_mov_b32_e32 v4, 0 3127; GFX90A-NEXT: v_mov_b32_e32 v3, v2 3128; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 3129; GFX90A-NEXT: s_waitcnt vmcnt(0) 3130; GFX90A-NEXT: s_setpc_b64 s[30:31] 3131; 3132; GFX940-LABEL: v_shuffle_v2i32_v4i32__6_6: 3133; GFX940: ; %bb.0: 3134; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3135; GFX940-NEXT: ;;#ASMSTART 3136; GFX940-NEXT: ; def v[0:3] 3137; GFX940-NEXT: ;;#ASMEND 3138; GFX940-NEXT: v_mov_b32_e32 v4, 0 3139; GFX940-NEXT: v_mov_b32_e32 v3, v2 3140; GFX940-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1 3141; GFX940-NEXT: s_waitcnt vmcnt(0) 3142; GFX940-NEXT: s_setpc_b64 s[30:31] 3143 %vec0 = call <4 x i32> asm "; def $0", "=v"() 3144 %vec1 = call <4 x i32> asm "; def $0", "=v"() 3145 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 6> 3146 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 3147 ret void 3148} 3149 3150define void @v_shuffle_v2i32_v4i32__u_7(ptr addrspace(1) inreg %ptr) { 3151; GFX900-LABEL: v_shuffle_v2i32_v4i32__u_7: 3152; GFX900: ; %bb.0: 3153; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3154; GFX900-NEXT: v_mov_b32_e32 v4, 0 3155; GFX900-NEXT: ;;#ASMSTART 3156; GFX900-NEXT: ; def v[0:3] 3157; GFX900-NEXT: ;;#ASMEND 3158; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 3159; GFX900-NEXT: s_waitcnt vmcnt(0) 3160; GFX900-NEXT: s_setpc_b64 s[30:31] 3161; 3162; GFX90A-LABEL: v_shuffle_v2i32_v4i32__u_7: 3163; GFX90A: ; %bb.0: 3164; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3165; GFX90A-NEXT: v_mov_b32_e32 v4, 0 3166; GFX90A-NEXT: ;;#ASMSTART 3167; GFX90A-NEXT: ; def v[0:3] 3168; GFX90A-NEXT: ;;#ASMEND 3169; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 3170; GFX90A-NEXT: s_waitcnt vmcnt(0) 3171; GFX90A-NEXT: s_setpc_b64 s[30:31] 3172; 3173; GFX940-LABEL: v_shuffle_v2i32_v4i32__u_7: 3174; GFX940: ; %bb.0: 3175; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3176; GFX940-NEXT: v_mov_b32_e32 v4, 0 3177; GFX940-NEXT: ;;#ASMSTART 3178; GFX940-NEXT: ; def v[0:3] 3179; GFX940-NEXT: ;;#ASMEND 3180; GFX940-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1 3181; GFX940-NEXT: s_waitcnt vmcnt(0) 3182; GFX940-NEXT: s_setpc_b64 s[30:31] 3183 %vec0 = call <4 x i32> asm "; def $0", "=v"() 3184 %vec1 = call <4 x i32> asm "; def $0", "=v"() 3185 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 poison, i32 7> 3186 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 3187 ret void 3188} 3189 3190define void @v_shuffle_v2i32_v4i32__0_7(ptr addrspace(1) inreg %ptr) { 3191; GFX900-LABEL: v_shuffle_v2i32_v4i32__0_7: 3192; GFX900: ; %bb.0: 3193; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3194; GFX900-NEXT: ;;#ASMSTART 3195; GFX900-NEXT: ; def v[0:3] 3196; GFX900-NEXT: ;;#ASMEND 3197; GFX900-NEXT: ;;#ASMSTART 3198; GFX900-NEXT: ; def v[1:4] 3199; GFX900-NEXT: ;;#ASMEND 3200; GFX900-NEXT: v_mov_b32_e32 v5, 0 3201; GFX900-NEXT: v_mov_b32_e32 v1, v4 3202; GFX900-NEXT: global_store_dwordx2 v5, v[0:1], s[16:17] 3203; GFX900-NEXT: s_waitcnt vmcnt(0) 3204; GFX900-NEXT: s_setpc_b64 s[30:31] 3205; 3206; GFX90A-LABEL: v_shuffle_v2i32_v4i32__0_7: 3207; GFX90A: ; %bb.0: 3208; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3209; GFX90A-NEXT: ;;#ASMSTART 3210; GFX90A-NEXT: ; def v[0:3] 3211; GFX90A-NEXT: ;;#ASMEND 3212; GFX90A-NEXT: v_mov_b32_e32 v6, 0 3213; GFX90A-NEXT: ;;#ASMSTART 3214; GFX90A-NEXT: ; def v[2:5] 3215; GFX90A-NEXT: ;;#ASMEND 3216; GFX90A-NEXT: v_mov_b32_e32 v1, v5 3217; GFX90A-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17] 3218; GFX90A-NEXT: s_waitcnt vmcnt(0) 3219; GFX90A-NEXT: s_setpc_b64 s[30:31] 3220; 3221; GFX940-LABEL: v_shuffle_v2i32_v4i32__0_7: 3222; GFX940: ; %bb.0: 3223; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3224; GFX940-NEXT: ;;#ASMSTART 3225; GFX940-NEXT: ; def v[0:3] 3226; GFX940-NEXT: ;;#ASMEND 3227; GFX940-NEXT: v_mov_b32_e32 v6, 0 3228; GFX940-NEXT: ;;#ASMSTART 3229; GFX940-NEXT: ; def v[2:5] 3230; GFX940-NEXT: ;;#ASMEND 3231; GFX940-NEXT: s_nop 0 3232; GFX940-NEXT: v_mov_b32_e32 v1, v5 3233; GFX940-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1] sc0 sc1 3234; GFX940-NEXT: s_waitcnt vmcnt(0) 3235; GFX940-NEXT: s_setpc_b64 s[30:31] 3236 %vec0 = call <4 x i32> asm "; def $0", "=v"() 3237 %vec1 = call <4 x i32> asm "; def $0", "=v"() 3238 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 0, i32 7> 3239 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 3240 ret void 3241} 3242 3243define void @v_shuffle_v2i32_v4i32__1_7(ptr addrspace(1) inreg %ptr) { 3244; GFX900-LABEL: v_shuffle_v2i32_v4i32__1_7: 3245; GFX900: ; %bb.0: 3246; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3247; GFX900-NEXT: ;;#ASMSTART 3248; GFX900-NEXT: ; def v[0:3] 3249; GFX900-NEXT: ;;#ASMEND 3250; GFX900-NEXT: ;;#ASMSTART 3251; GFX900-NEXT: ; def v[2:5] 3252; GFX900-NEXT: ;;#ASMEND 3253; GFX900-NEXT: v_mov_b32_e32 v6, 0 3254; GFX900-NEXT: v_mov_b32_e32 v2, v5 3255; GFX900-NEXT: global_store_dwordx2 v6, v[1:2], s[16:17] 3256; GFX900-NEXT: s_waitcnt vmcnt(0) 3257; GFX900-NEXT: s_setpc_b64 s[30:31] 3258; 3259; GFX90A-LABEL: v_shuffle_v2i32_v4i32__1_7: 3260; GFX90A: ; %bb.0: 3261; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3262; GFX90A-NEXT: ;;#ASMSTART 3263; GFX90A-NEXT: ; def v[0:3] 3264; GFX90A-NEXT: ;;#ASMEND 3265; GFX90A-NEXT: ;;#ASMSTART 3266; GFX90A-NEXT: ; def v[2:5] 3267; GFX90A-NEXT: ;;#ASMEND 3268; GFX90A-NEXT: v_mov_b32_e32 v6, 0 3269; GFX90A-NEXT: v_mov_b32_e32 v4, v1 3270; GFX90A-NEXT: global_store_dwordx2 v6, v[4:5], s[16:17] 3271; GFX90A-NEXT: s_waitcnt vmcnt(0) 3272; GFX90A-NEXT: s_setpc_b64 s[30:31] 3273; 3274; GFX940-LABEL: v_shuffle_v2i32_v4i32__1_7: 3275; GFX940: ; %bb.0: 3276; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3277; GFX940-NEXT: ;;#ASMSTART 3278; GFX940-NEXT: ; def v[0:3] 3279; GFX940-NEXT: ;;#ASMEND 3280; GFX940-NEXT: v_mov_b32_e32 v6, 0 3281; GFX940-NEXT: ;;#ASMSTART 3282; GFX940-NEXT: ; def v[2:5] 3283; GFX940-NEXT: ;;#ASMEND 3284; GFX940-NEXT: s_nop 0 3285; GFX940-NEXT: v_mov_b32_e32 v4, v1 3286; GFX940-NEXT: global_store_dwordx2 v6, v[4:5], s[0:1] sc0 sc1 3287; GFX940-NEXT: s_waitcnt vmcnt(0) 3288; GFX940-NEXT: s_setpc_b64 s[30:31] 3289 %vec0 = call <4 x i32> asm "; def $0", "=v"() 3290 %vec1 = call <4 x i32> asm "; def $0", "=v"() 3291 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 1, i32 7> 3292 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 3293 ret void 3294} 3295 3296define void @v_shuffle_v2i32_v4i32__2_7(ptr addrspace(1) inreg %ptr) { 3297; GFX900-LABEL: v_shuffle_v2i32_v4i32__2_7: 3298; GFX900: ; %bb.0: 3299; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3300; GFX900-NEXT: ;;#ASMSTART 3301; GFX900-NEXT: ; def v[0:3] 3302; GFX900-NEXT: ;;#ASMEND 3303; GFX900-NEXT: ;;#ASMSTART 3304; GFX900-NEXT: ; def v[3:6] 3305; GFX900-NEXT: ;;#ASMEND 3306; GFX900-NEXT: v_mov_b32_e32 v7, 0 3307; GFX900-NEXT: v_mov_b32_e32 v3, v6 3308; GFX900-NEXT: global_store_dwordx2 v7, v[2:3], s[16:17] 3309; GFX900-NEXT: s_waitcnt vmcnt(0) 3310; GFX900-NEXT: s_setpc_b64 s[30:31] 3311; 3312; GFX90A-LABEL: v_shuffle_v2i32_v4i32__2_7: 3313; GFX90A: ; %bb.0: 3314; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3315; GFX90A-NEXT: ;;#ASMSTART 3316; GFX90A-NEXT: ; def v[0:3] 3317; GFX90A-NEXT: ;;#ASMEND 3318; GFX90A-NEXT: v_mov_b32_e32 v8, 0 3319; GFX90A-NEXT: ;;#ASMSTART 3320; GFX90A-NEXT: ; def v[4:7] 3321; GFX90A-NEXT: ;;#ASMEND 3322; GFX90A-NEXT: v_mov_b32_e32 v3, v7 3323; GFX90A-NEXT: global_store_dwordx2 v8, v[2:3], s[16:17] 3324; GFX90A-NEXT: s_waitcnt vmcnt(0) 3325; GFX90A-NEXT: s_setpc_b64 s[30:31] 3326; 3327; GFX940-LABEL: v_shuffle_v2i32_v4i32__2_7: 3328; GFX940: ; %bb.0: 3329; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3330; GFX940-NEXT: ;;#ASMSTART 3331; GFX940-NEXT: ; def v[0:3] 3332; GFX940-NEXT: ;;#ASMEND 3333; GFX940-NEXT: v_mov_b32_e32 v8, 0 3334; GFX940-NEXT: ;;#ASMSTART 3335; GFX940-NEXT: ; def v[4:7] 3336; GFX940-NEXT: ;;#ASMEND 3337; GFX940-NEXT: s_nop 0 3338; GFX940-NEXT: v_mov_b32_e32 v3, v7 3339; GFX940-NEXT: global_store_dwordx2 v8, v[2:3], s[0:1] sc0 sc1 3340; GFX940-NEXT: s_waitcnt vmcnt(0) 3341; GFX940-NEXT: s_setpc_b64 s[30:31] 3342 %vec0 = call <4 x i32> asm "; def $0", "=v"() 3343 %vec1 = call <4 x i32> asm "; def $0", "=v"() 3344 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 2, i32 7> 3345 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 3346 ret void 3347} 3348 3349define void @v_shuffle_v2i32_v4i32__3_7(ptr addrspace(1) inreg %ptr) { 3350; GFX900-LABEL: v_shuffle_v2i32_v4i32__3_7: 3351; GFX900: ; %bb.0: 3352; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3353; GFX900-NEXT: ;;#ASMSTART 3354; GFX900-NEXT: ; def v[4:7] 3355; GFX900-NEXT: ;;#ASMEND 3356; GFX900-NEXT: v_mov_b32_e32 v8, 0 3357; GFX900-NEXT: ;;#ASMSTART 3358; GFX900-NEXT: ; def v[0:3] 3359; GFX900-NEXT: ;;#ASMEND 3360; GFX900-NEXT: v_mov_b32_e32 v6, v3 3361; GFX900-NEXT: global_store_dwordx2 v8, v[6:7], s[16:17] 3362; GFX900-NEXT: s_waitcnt vmcnt(0) 3363; GFX900-NEXT: s_setpc_b64 s[30:31] 3364; 3365; GFX90A-LABEL: v_shuffle_v2i32_v4i32__3_7: 3366; GFX90A: ; %bb.0: 3367; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3368; GFX90A-NEXT: ;;#ASMSTART 3369; GFX90A-NEXT: ; def v[4:7] 3370; GFX90A-NEXT: ;;#ASMEND 3371; GFX90A-NEXT: v_mov_b32_e32 v8, 0 3372; GFX90A-NEXT: ;;#ASMSTART 3373; GFX90A-NEXT: ; def v[0:3] 3374; GFX90A-NEXT: ;;#ASMEND 3375; GFX90A-NEXT: v_mov_b32_e32 v6, v3 3376; GFX90A-NEXT: global_store_dwordx2 v8, v[6:7], s[16:17] 3377; GFX90A-NEXT: s_waitcnt vmcnt(0) 3378; GFX90A-NEXT: s_setpc_b64 s[30:31] 3379; 3380; GFX940-LABEL: v_shuffle_v2i32_v4i32__3_7: 3381; GFX940: ; %bb.0: 3382; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3383; GFX940-NEXT: ;;#ASMSTART 3384; GFX940-NEXT: ; def v[4:7] 3385; GFX940-NEXT: ;;#ASMEND 3386; GFX940-NEXT: v_mov_b32_e32 v8, 0 3387; GFX940-NEXT: ;;#ASMSTART 3388; GFX940-NEXT: ; def v[0:3] 3389; GFX940-NEXT: ;;#ASMEND 3390; GFX940-NEXT: s_nop 0 3391; GFX940-NEXT: v_mov_b32_e32 v6, v3 3392; GFX940-NEXT: global_store_dwordx2 v8, v[6:7], s[0:1] sc0 sc1 3393; GFX940-NEXT: s_waitcnt vmcnt(0) 3394; GFX940-NEXT: s_setpc_b64 s[30:31] 3395 %vec0 = call <4 x i32> asm "; def $0", "=v"() 3396 %vec1 = call <4 x i32> asm "; def $0", "=v"() 3397 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 3, i32 7> 3398 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 3399 ret void 3400} 3401 3402define void @v_shuffle_v2i32_v4i32__4_7(ptr addrspace(1) inreg %ptr) { 3403; GFX900-LABEL: v_shuffle_v2i32_v4i32__4_7: 3404; GFX900: ; %bb.0: 3405; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3406; GFX900-NEXT: ;;#ASMSTART 3407; GFX900-NEXT: ; def v[0:3] 3408; GFX900-NEXT: ;;#ASMEND 3409; GFX900-NEXT: v_mov_b32_e32 v4, 0 3410; GFX900-NEXT: v_mov_b32_e32 v1, v3 3411; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 3412; GFX900-NEXT: s_waitcnt vmcnt(0) 3413; GFX900-NEXT: s_setpc_b64 s[30:31] 3414; 3415; GFX90A-LABEL: v_shuffle_v2i32_v4i32__4_7: 3416; GFX90A: ; %bb.0: 3417; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3418; GFX90A-NEXT: ;;#ASMSTART 3419; GFX90A-NEXT: ; def v[0:3] 3420; GFX90A-NEXT: ;;#ASMEND 3421; GFX90A-NEXT: v_mov_b32_e32 v4, 0 3422; GFX90A-NEXT: v_mov_b32_e32 v1, v3 3423; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] 3424; GFX90A-NEXT: s_waitcnt vmcnt(0) 3425; GFX90A-NEXT: s_setpc_b64 s[30:31] 3426; 3427; GFX940-LABEL: v_shuffle_v2i32_v4i32__4_7: 3428; GFX940: ; %bb.0: 3429; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3430; GFX940-NEXT: ;;#ASMSTART 3431; GFX940-NEXT: ; def v[0:3] 3432; GFX940-NEXT: ;;#ASMEND 3433; GFX940-NEXT: v_mov_b32_e32 v4, 0 3434; GFX940-NEXT: v_mov_b32_e32 v1, v3 3435; GFX940-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1 3436; GFX940-NEXT: s_waitcnt vmcnt(0) 3437; GFX940-NEXT: s_setpc_b64 s[30:31] 3438 %vec0 = call <4 x i32> asm "; def $0", "=v"() 3439 %vec1 = call <4 x i32> asm "; def $0", "=v"() 3440 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 4, i32 7> 3441 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 3442 ret void 3443} 3444 3445define void @v_shuffle_v2i32_v4i32__5_7(ptr addrspace(1) inreg %ptr) { 3446; GFX900-LABEL: v_shuffle_v2i32_v4i32__5_7: 3447; GFX900: ; %bb.0: 3448; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3449; GFX900-NEXT: ;;#ASMSTART 3450; GFX900-NEXT: ; def v[0:3] 3451; GFX900-NEXT: ;;#ASMEND 3452; GFX900-NEXT: v_mov_b32_e32 v4, 0 3453; GFX900-NEXT: v_mov_b32_e32 v2, v3 3454; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17] 3455; GFX900-NEXT: s_waitcnt vmcnt(0) 3456; GFX900-NEXT: s_setpc_b64 s[30:31] 3457; 3458; GFX90A-LABEL: v_shuffle_v2i32_v4i32__5_7: 3459; GFX90A: ; %bb.0: 3460; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3461; GFX90A-NEXT: ;;#ASMSTART 3462; GFX90A-NEXT: ; def v[0:3] 3463; GFX90A-NEXT: ;;#ASMEND 3464; GFX90A-NEXT: v_mov_b32_e32 v4, 0 3465; GFX90A-NEXT: v_mov_b32_e32 v2, v1 3466; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 3467; GFX90A-NEXT: s_waitcnt vmcnt(0) 3468; GFX90A-NEXT: s_setpc_b64 s[30:31] 3469; 3470; GFX940-LABEL: v_shuffle_v2i32_v4i32__5_7: 3471; GFX940: ; %bb.0: 3472; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3473; GFX940-NEXT: ;;#ASMSTART 3474; GFX940-NEXT: ; def v[0:3] 3475; GFX940-NEXT: ;;#ASMEND 3476; GFX940-NEXT: v_mov_b32_e32 v4, 0 3477; GFX940-NEXT: v_mov_b32_e32 v2, v1 3478; GFX940-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1 3479; GFX940-NEXT: s_waitcnt vmcnt(0) 3480; GFX940-NEXT: s_setpc_b64 s[30:31] 3481 %vec0 = call <4 x i32> asm "; def $0", "=v"() 3482 %vec1 = call <4 x i32> asm "; def $0", "=v"() 3483 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 7> 3484 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 3485 ret void 3486} 3487 3488define void @v_shuffle_v2i32_v4i32__6_7(ptr addrspace(1) inreg %ptr) { 3489; GFX900-LABEL: v_shuffle_v2i32_v4i32__6_7: 3490; GFX900: ; %bb.0: 3491; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3492; GFX900-NEXT: v_mov_b32_e32 v4, 0 3493; GFX900-NEXT: ;;#ASMSTART 3494; GFX900-NEXT: ; def v[0:3] 3495; GFX900-NEXT: ;;#ASMEND 3496; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 3497; GFX900-NEXT: s_waitcnt vmcnt(0) 3498; GFX900-NEXT: s_setpc_b64 s[30:31] 3499; 3500; GFX90A-LABEL: v_shuffle_v2i32_v4i32__6_7: 3501; GFX90A: ; %bb.0: 3502; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3503; GFX90A-NEXT: v_mov_b32_e32 v4, 0 3504; GFX90A-NEXT: ;;#ASMSTART 3505; GFX90A-NEXT: ; def v[0:3] 3506; GFX90A-NEXT: ;;#ASMEND 3507; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] 3508; GFX90A-NEXT: s_waitcnt vmcnt(0) 3509; GFX90A-NEXT: s_setpc_b64 s[30:31] 3510; 3511; GFX940-LABEL: v_shuffle_v2i32_v4i32__6_7: 3512; GFX940: ; %bb.0: 3513; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3514; GFX940-NEXT: v_mov_b32_e32 v4, 0 3515; GFX940-NEXT: ;;#ASMSTART 3516; GFX940-NEXT: ; def v[0:3] 3517; GFX940-NEXT: ;;#ASMEND 3518; GFX940-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1 3519; GFX940-NEXT: s_waitcnt vmcnt(0) 3520; GFX940-NEXT: s_setpc_b64 s[30:31] 3521 %vec0 = call <4 x i32> asm "; def $0", "=v"() 3522 %vec1 = call <4 x i32> asm "; def $0", "=v"() 3523 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 7> 3524 store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8 3525 ret void 3526} 3527 3528define void @s_shuffle_v2i32_v4i32__u_u() { 3529; GFX9-LABEL: s_shuffle_v2i32_v4i32__u_u: 3530; GFX9: ; %bb.0: 3531; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3532; GFX9-NEXT: ;;#ASMSTART 3533; GFX9-NEXT: ; use s[8:9] 3534; GFX9-NEXT: ;;#ASMEND 3535; GFX9-NEXT: s_setpc_b64 s[30:31] 3536 %vec0 = call <4 x i32> asm "; def $0", "=s"() 3537 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> poison 3538 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 3539 ret void 3540} 3541 3542define void @s_shuffle_v2i32_v4i32__0_u() { 3543; GFX900-LABEL: s_shuffle_v2i32_v4i32__0_u: 3544; GFX900: ; %bb.0: 3545; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3546; GFX900-NEXT: ;;#ASMSTART 3547; GFX900-NEXT: ; def s[8:11] 3548; GFX900-NEXT: ;;#ASMEND 3549; GFX900-NEXT: ;;#ASMSTART 3550; GFX900-NEXT: ; use s[8:9] 3551; GFX900-NEXT: ;;#ASMEND 3552; GFX900-NEXT: s_setpc_b64 s[30:31] 3553; 3554; GFX90A-LABEL: s_shuffle_v2i32_v4i32__0_u: 3555; GFX90A: ; %bb.0: 3556; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3557; GFX90A-NEXT: ;;#ASMSTART 3558; GFX90A-NEXT: ; def s[8:11] 3559; GFX90A-NEXT: ;;#ASMEND 3560; GFX90A-NEXT: ;;#ASMSTART 3561; GFX90A-NEXT: ; use s[8:9] 3562; GFX90A-NEXT: ;;#ASMEND 3563; GFX90A-NEXT: s_setpc_b64 s[30:31] 3564; 3565; GFX940-LABEL: s_shuffle_v2i32_v4i32__0_u: 3566; GFX940: ; %bb.0: 3567; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3568; GFX940-NEXT: ;;#ASMSTART 3569; GFX940-NEXT: ; def s[8:11] 3570; GFX940-NEXT: ;;#ASMEND 3571; GFX940-NEXT: s_nop 0 3572; GFX940-NEXT: ;;#ASMSTART 3573; GFX940-NEXT: ; use s[8:9] 3574; GFX940-NEXT: ;;#ASMEND 3575; GFX940-NEXT: s_setpc_b64 s[30:31] 3576 %vec0 = call <4 x i32> asm "; def $0", "=s"() 3577 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 0, i32 poison> 3578 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 3579 ret void 3580} 3581 3582define void @s_shuffle_v2i32_v4i32__1_u() { 3583; GFX900-LABEL: s_shuffle_v2i32_v4i32__1_u: 3584; GFX900: ; %bb.0: 3585; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3586; GFX900-NEXT: ;;#ASMSTART 3587; GFX900-NEXT: ; def s[4:7] 3588; GFX900-NEXT: ;;#ASMEND 3589; GFX900-NEXT: s_mov_b32 s8, s5 3590; GFX900-NEXT: ;;#ASMSTART 3591; GFX900-NEXT: ; use s[8:9] 3592; GFX900-NEXT: ;;#ASMEND 3593; GFX900-NEXT: s_setpc_b64 s[30:31] 3594; 3595; GFX90A-LABEL: s_shuffle_v2i32_v4i32__1_u: 3596; GFX90A: ; %bb.0: 3597; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3598; GFX90A-NEXT: ;;#ASMSTART 3599; GFX90A-NEXT: ; def s[4:7] 3600; GFX90A-NEXT: ;;#ASMEND 3601; GFX90A-NEXT: s_mov_b32 s8, s5 3602; GFX90A-NEXT: ;;#ASMSTART 3603; GFX90A-NEXT: ; use s[8:9] 3604; GFX90A-NEXT: ;;#ASMEND 3605; GFX90A-NEXT: s_setpc_b64 s[30:31] 3606; 3607; GFX940-LABEL: s_shuffle_v2i32_v4i32__1_u: 3608; GFX940: ; %bb.0: 3609; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3610; GFX940-NEXT: ;;#ASMSTART 3611; GFX940-NEXT: ; def s[0:3] 3612; GFX940-NEXT: ;;#ASMEND 3613; GFX940-NEXT: s_mov_b32 s8, s1 3614; GFX940-NEXT: ;;#ASMSTART 3615; GFX940-NEXT: ; use s[8:9] 3616; GFX940-NEXT: ;;#ASMEND 3617; GFX940-NEXT: s_setpc_b64 s[30:31] 3618 %vec0 = call <4 x i32> asm "; def $0", "=s"() 3619 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 poison> 3620 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 3621 ret void 3622} 3623 3624define void @s_shuffle_v2i32_v4i32__2_u() { 3625; GFX900-LABEL: s_shuffle_v2i32_v4i32__2_u: 3626; GFX900: ; %bb.0: 3627; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3628; GFX900-NEXT: ;;#ASMSTART 3629; GFX900-NEXT: ; def s[4:7] 3630; GFX900-NEXT: ;;#ASMEND 3631; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 3632; GFX900-NEXT: ;;#ASMSTART 3633; GFX900-NEXT: ; use s[8:9] 3634; GFX900-NEXT: ;;#ASMEND 3635; GFX900-NEXT: s_setpc_b64 s[30:31] 3636; 3637; GFX90A-LABEL: s_shuffle_v2i32_v4i32__2_u: 3638; GFX90A: ; %bb.0: 3639; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3640; GFX90A-NEXT: ;;#ASMSTART 3641; GFX90A-NEXT: ; def s[4:7] 3642; GFX90A-NEXT: ;;#ASMEND 3643; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 3644; GFX90A-NEXT: ;;#ASMSTART 3645; GFX90A-NEXT: ; use s[8:9] 3646; GFX90A-NEXT: ;;#ASMEND 3647; GFX90A-NEXT: s_setpc_b64 s[30:31] 3648; 3649; GFX940-LABEL: s_shuffle_v2i32_v4i32__2_u: 3650; GFX940: ; %bb.0: 3651; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3652; GFX940-NEXT: ;;#ASMSTART 3653; GFX940-NEXT: ; def s[0:3] 3654; GFX940-NEXT: ;;#ASMEND 3655; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 3656; GFX940-NEXT: ;;#ASMSTART 3657; GFX940-NEXT: ; use s[8:9] 3658; GFX940-NEXT: ;;#ASMEND 3659; GFX940-NEXT: s_setpc_b64 s[30:31] 3660 %vec0 = call <4 x i32> asm "; def $0", "=s"() 3661 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 poison> 3662 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 3663 ret void 3664} 3665 3666define void @s_shuffle_v2i32_v4i32__3_u() { 3667; GFX900-LABEL: s_shuffle_v2i32_v4i32__3_u: 3668; GFX900: ; %bb.0: 3669; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3670; GFX900-NEXT: ;;#ASMSTART 3671; GFX900-NEXT: ; def s[4:7] 3672; GFX900-NEXT: ;;#ASMEND 3673; GFX900-NEXT: s_mov_b32 s8, s7 3674; GFX900-NEXT: ;;#ASMSTART 3675; GFX900-NEXT: ; use s[8:9] 3676; GFX900-NEXT: ;;#ASMEND 3677; GFX900-NEXT: s_setpc_b64 s[30:31] 3678; 3679; GFX90A-LABEL: s_shuffle_v2i32_v4i32__3_u: 3680; GFX90A: ; %bb.0: 3681; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3682; GFX90A-NEXT: ;;#ASMSTART 3683; GFX90A-NEXT: ; def s[4:7] 3684; GFX90A-NEXT: ;;#ASMEND 3685; GFX90A-NEXT: s_mov_b32 s8, s7 3686; GFX90A-NEXT: ;;#ASMSTART 3687; GFX90A-NEXT: ; use s[8:9] 3688; GFX90A-NEXT: ;;#ASMEND 3689; GFX90A-NEXT: s_setpc_b64 s[30:31] 3690; 3691; GFX940-LABEL: s_shuffle_v2i32_v4i32__3_u: 3692; GFX940: ; %bb.0: 3693; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3694; GFX940-NEXT: ;;#ASMSTART 3695; GFX940-NEXT: ; def s[0:3] 3696; GFX940-NEXT: ;;#ASMEND 3697; GFX940-NEXT: s_mov_b32 s8, s3 3698; GFX940-NEXT: ;;#ASMSTART 3699; GFX940-NEXT: ; use s[8:9] 3700; GFX940-NEXT: ;;#ASMEND 3701; GFX940-NEXT: s_setpc_b64 s[30:31] 3702 %vec0 = call <4 x i32> asm "; def $0", "=s"() 3703 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 poison> 3704 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 3705 ret void 3706} 3707 3708define void @s_shuffle_v2i32_v4i32__4_u() { 3709; GFX9-LABEL: s_shuffle_v2i32_v4i32__4_u: 3710; GFX9: ; %bb.0: 3711; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3712; GFX9-NEXT: ;;#ASMSTART 3713; GFX9-NEXT: ; use s[8:9] 3714; GFX9-NEXT: ;;#ASMEND 3715; GFX9-NEXT: s_setpc_b64 s[30:31] 3716 %vec0 = call <4 x i32> asm "; def $0", "=s"() 3717 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 poison> 3718 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 3719 ret void 3720} 3721 3722define void @s_shuffle_v2i32_v4i32__5_u() { 3723; GFX900-LABEL: s_shuffle_v2i32_v4i32__5_u: 3724; GFX900: ; %bb.0: 3725; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3726; GFX900-NEXT: ;;#ASMSTART 3727; GFX900-NEXT: ; def s[4:7] 3728; GFX900-NEXT: ;;#ASMEND 3729; GFX900-NEXT: s_mov_b32 s8, s5 3730; GFX900-NEXT: ;;#ASMSTART 3731; GFX900-NEXT: ; use s[8:9] 3732; GFX900-NEXT: ;;#ASMEND 3733; GFX900-NEXT: s_setpc_b64 s[30:31] 3734; 3735; GFX90A-LABEL: s_shuffle_v2i32_v4i32__5_u: 3736; GFX90A: ; %bb.0: 3737; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3738; GFX90A-NEXT: ;;#ASMSTART 3739; GFX90A-NEXT: ; def s[4:7] 3740; GFX90A-NEXT: ;;#ASMEND 3741; GFX90A-NEXT: s_mov_b32 s8, s5 3742; GFX90A-NEXT: ;;#ASMSTART 3743; GFX90A-NEXT: ; use s[8:9] 3744; GFX90A-NEXT: ;;#ASMEND 3745; GFX90A-NEXT: s_setpc_b64 s[30:31] 3746; 3747; GFX940-LABEL: s_shuffle_v2i32_v4i32__5_u: 3748; GFX940: ; %bb.0: 3749; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3750; GFX940-NEXT: ;;#ASMSTART 3751; GFX940-NEXT: ; def s[0:3] 3752; GFX940-NEXT: ;;#ASMEND 3753; GFX940-NEXT: s_mov_b32 s8, s1 3754; GFX940-NEXT: ;;#ASMSTART 3755; GFX940-NEXT: ; use s[8:9] 3756; GFX940-NEXT: ;;#ASMEND 3757; GFX940-NEXT: s_setpc_b64 s[30:31] 3758 %vec0 = call <4 x i32> asm "; def $0", "=s"() 3759 %vec1 = call <4 x i32> asm "; def $0", "=s"() 3760 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 poison> 3761 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 3762 ret void 3763} 3764 3765define void @s_shuffle_v2i32_v4i32__6_u() { 3766; GFX900-LABEL: s_shuffle_v2i32_v4i32__6_u: 3767; GFX900: ; %bb.0: 3768; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3769; GFX900-NEXT: ;;#ASMSTART 3770; GFX900-NEXT: ; def s[4:7] 3771; GFX900-NEXT: ;;#ASMEND 3772; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 3773; GFX900-NEXT: ;;#ASMSTART 3774; GFX900-NEXT: ; use s[8:9] 3775; GFX900-NEXT: ;;#ASMEND 3776; GFX900-NEXT: s_setpc_b64 s[30:31] 3777; 3778; GFX90A-LABEL: s_shuffle_v2i32_v4i32__6_u: 3779; GFX90A: ; %bb.0: 3780; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3781; GFX90A-NEXT: ;;#ASMSTART 3782; GFX90A-NEXT: ; def s[4:7] 3783; GFX90A-NEXT: ;;#ASMEND 3784; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 3785; GFX90A-NEXT: ;;#ASMSTART 3786; GFX90A-NEXT: ; use s[8:9] 3787; GFX90A-NEXT: ;;#ASMEND 3788; GFX90A-NEXT: s_setpc_b64 s[30:31] 3789; 3790; GFX940-LABEL: s_shuffle_v2i32_v4i32__6_u: 3791; GFX940: ; %bb.0: 3792; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3793; GFX940-NEXT: ;;#ASMSTART 3794; GFX940-NEXT: ; def s[0:3] 3795; GFX940-NEXT: ;;#ASMEND 3796; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 3797; GFX940-NEXT: ;;#ASMSTART 3798; GFX940-NEXT: ; use s[8:9] 3799; GFX940-NEXT: ;;#ASMEND 3800; GFX940-NEXT: s_setpc_b64 s[30:31] 3801 %vec0 = call <4 x i32> asm "; def $0", "=s"() 3802 %vec1 = call <4 x i32> asm "; def $0", "=s"() 3803 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 poison> 3804 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 3805 ret void 3806} 3807 3808define void @s_shuffle_v2i32_v4i32__7_u() { 3809; GFX900-LABEL: s_shuffle_v2i32_v4i32__7_u: 3810; GFX900: ; %bb.0: 3811; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3812; GFX900-NEXT: ;;#ASMSTART 3813; GFX900-NEXT: ; def s[4:7] 3814; GFX900-NEXT: ;;#ASMEND 3815; GFX900-NEXT: s_mov_b32 s8, s7 3816; GFX900-NEXT: ;;#ASMSTART 3817; GFX900-NEXT: ; use s[8:9] 3818; GFX900-NEXT: ;;#ASMEND 3819; GFX900-NEXT: s_setpc_b64 s[30:31] 3820; 3821; GFX90A-LABEL: s_shuffle_v2i32_v4i32__7_u: 3822; GFX90A: ; %bb.0: 3823; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3824; GFX90A-NEXT: ;;#ASMSTART 3825; GFX90A-NEXT: ; def s[4:7] 3826; GFX90A-NEXT: ;;#ASMEND 3827; GFX90A-NEXT: s_mov_b32 s8, s7 3828; GFX90A-NEXT: ;;#ASMSTART 3829; GFX90A-NEXT: ; use s[8:9] 3830; GFX90A-NEXT: ;;#ASMEND 3831; GFX90A-NEXT: s_setpc_b64 s[30:31] 3832; 3833; GFX940-LABEL: s_shuffle_v2i32_v4i32__7_u: 3834; GFX940: ; %bb.0: 3835; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3836; GFX940-NEXT: ;;#ASMSTART 3837; GFX940-NEXT: ; def s[0:3] 3838; GFX940-NEXT: ;;#ASMEND 3839; GFX940-NEXT: s_mov_b32 s8, s3 3840; GFX940-NEXT: ;;#ASMSTART 3841; GFX940-NEXT: ; use s[8:9] 3842; GFX940-NEXT: ;;#ASMEND 3843; GFX940-NEXT: s_setpc_b64 s[30:31] 3844 %vec0 = call <4 x i32> asm "; def $0", "=s"() 3845 %vec1 = call <4 x i32> asm "; def $0", "=s"() 3846 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 poison> 3847 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 3848 ret void 3849} 3850 3851define void @s_shuffle_v2i32_v4i32__7_0() { 3852; GFX900-LABEL: s_shuffle_v2i32_v4i32__7_0: 3853; GFX900: ; %bb.0: 3854; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3855; GFX900-NEXT: ;;#ASMSTART 3856; GFX900-NEXT: ; def s[8:11] 3857; GFX900-NEXT: ;;#ASMEND 3858; GFX900-NEXT: ;;#ASMSTART 3859; GFX900-NEXT: ; def s[4:7] 3860; GFX900-NEXT: ;;#ASMEND 3861; GFX900-NEXT: s_mov_b32 s8, s11 3862; GFX900-NEXT: s_mov_b32 s9, s4 3863; GFX900-NEXT: ;;#ASMSTART 3864; GFX900-NEXT: ; use s[8:9] 3865; GFX900-NEXT: ;;#ASMEND 3866; GFX900-NEXT: s_setpc_b64 s[30:31] 3867; 3868; GFX90A-LABEL: s_shuffle_v2i32_v4i32__7_0: 3869; GFX90A: ; %bb.0: 3870; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3871; GFX90A-NEXT: ;;#ASMSTART 3872; GFX90A-NEXT: ; def s[8:11] 3873; GFX90A-NEXT: ;;#ASMEND 3874; GFX90A-NEXT: ;;#ASMSTART 3875; GFX90A-NEXT: ; def s[4:7] 3876; GFX90A-NEXT: ;;#ASMEND 3877; GFX90A-NEXT: s_mov_b32 s8, s11 3878; GFX90A-NEXT: s_mov_b32 s9, s4 3879; GFX90A-NEXT: ;;#ASMSTART 3880; GFX90A-NEXT: ; use s[8:9] 3881; GFX90A-NEXT: ;;#ASMEND 3882; GFX90A-NEXT: s_setpc_b64 s[30:31] 3883; 3884; GFX940-LABEL: s_shuffle_v2i32_v4i32__7_0: 3885; GFX940: ; %bb.0: 3886; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3887; GFX940-NEXT: ;;#ASMSTART 3888; GFX940-NEXT: ; def s[0:3] 3889; GFX940-NEXT: ;;#ASMEND 3890; GFX940-NEXT: ;;#ASMSTART 3891; GFX940-NEXT: ; def s[4:7] 3892; GFX940-NEXT: ;;#ASMEND 3893; GFX940-NEXT: s_mov_b32 s8, s7 3894; GFX940-NEXT: s_mov_b32 s9, s0 3895; GFX940-NEXT: ;;#ASMSTART 3896; GFX940-NEXT: ; use s[8:9] 3897; GFX940-NEXT: ;;#ASMEND 3898; GFX940-NEXT: s_setpc_b64 s[30:31] 3899 %vec0 = call <4 x i32> asm "; def $0", "=s"() 3900 %vec1 = call <4 x i32> asm "; def $0", "=s"() 3901 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 0> 3902 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 3903 ret void 3904} 3905 3906define void @s_shuffle_v2i32_v4i32__7_1() { 3907; GFX900-LABEL: s_shuffle_v2i32_v4i32__7_1: 3908; GFX900: ; %bb.0: 3909; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3910; GFX900-NEXT: ;;#ASMSTART 3911; GFX900-NEXT: ; def s[8:11] 3912; GFX900-NEXT: ;;#ASMEND 3913; GFX900-NEXT: ;;#ASMSTART 3914; GFX900-NEXT: ; def s[4:7] 3915; GFX900-NEXT: ;;#ASMEND 3916; GFX900-NEXT: s_mov_b32 s8, s7 3917; GFX900-NEXT: ;;#ASMSTART 3918; GFX900-NEXT: ; use s[8:9] 3919; GFX900-NEXT: ;;#ASMEND 3920; GFX900-NEXT: s_setpc_b64 s[30:31] 3921; 3922; GFX90A-LABEL: s_shuffle_v2i32_v4i32__7_1: 3923; GFX90A: ; %bb.0: 3924; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3925; GFX90A-NEXT: ;;#ASMSTART 3926; GFX90A-NEXT: ; def s[8:11] 3927; GFX90A-NEXT: ;;#ASMEND 3928; GFX90A-NEXT: ;;#ASMSTART 3929; GFX90A-NEXT: ; def s[4:7] 3930; GFX90A-NEXT: ;;#ASMEND 3931; GFX90A-NEXT: s_mov_b32 s8, s7 3932; GFX90A-NEXT: ;;#ASMSTART 3933; GFX90A-NEXT: ; use s[8:9] 3934; GFX90A-NEXT: ;;#ASMEND 3935; GFX90A-NEXT: s_setpc_b64 s[30:31] 3936; 3937; GFX940-LABEL: s_shuffle_v2i32_v4i32__7_1: 3938; GFX940: ; %bb.0: 3939; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3940; GFX940-NEXT: ;;#ASMSTART 3941; GFX940-NEXT: ; def s[8:11] 3942; GFX940-NEXT: ;;#ASMEND 3943; GFX940-NEXT: ;;#ASMSTART 3944; GFX940-NEXT: ; def s[0:3] 3945; GFX940-NEXT: ;;#ASMEND 3946; GFX940-NEXT: s_mov_b32 s8, s3 3947; GFX940-NEXT: ;;#ASMSTART 3948; GFX940-NEXT: ; use s[8:9] 3949; GFX940-NEXT: ;;#ASMEND 3950; GFX940-NEXT: s_setpc_b64 s[30:31] 3951 %vec0 = call <4 x i32> asm "; def $0", "=s"() 3952 %vec1 = call <4 x i32> asm "; def $0", "=s"() 3953 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 1> 3954 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 3955 ret void 3956} 3957 3958define void @s_shuffle_v2i32_v4i32__7_2() { 3959; GFX900-LABEL: s_shuffle_v2i32_v4i32__7_2: 3960; GFX900: ; %bb.0: 3961; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3962; GFX900-NEXT: ;;#ASMSTART 3963; GFX900-NEXT: ; def s[8:11] 3964; GFX900-NEXT: ;;#ASMEND 3965; GFX900-NEXT: ;;#ASMSTART 3966; GFX900-NEXT: ; def s[4:7] 3967; GFX900-NEXT: ;;#ASMEND 3968; GFX900-NEXT: s_mov_b32 s8, s11 3969; GFX900-NEXT: s_mov_b32 s9, s6 3970; GFX900-NEXT: ;;#ASMSTART 3971; GFX900-NEXT: ; use s[8:9] 3972; GFX900-NEXT: ;;#ASMEND 3973; GFX900-NEXT: s_setpc_b64 s[30:31] 3974; 3975; GFX90A-LABEL: s_shuffle_v2i32_v4i32__7_2: 3976; GFX90A: ; %bb.0: 3977; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3978; GFX90A-NEXT: ;;#ASMSTART 3979; GFX90A-NEXT: ; def s[8:11] 3980; GFX90A-NEXT: ;;#ASMEND 3981; GFX90A-NEXT: ;;#ASMSTART 3982; GFX90A-NEXT: ; def s[4:7] 3983; GFX90A-NEXT: ;;#ASMEND 3984; GFX90A-NEXT: s_mov_b32 s8, s11 3985; GFX90A-NEXT: s_mov_b32 s9, s6 3986; GFX90A-NEXT: ;;#ASMSTART 3987; GFX90A-NEXT: ; use s[8:9] 3988; GFX90A-NEXT: ;;#ASMEND 3989; GFX90A-NEXT: s_setpc_b64 s[30:31] 3990; 3991; GFX940-LABEL: s_shuffle_v2i32_v4i32__7_2: 3992; GFX940: ; %bb.0: 3993; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3994; GFX940-NEXT: ;;#ASMSTART 3995; GFX940-NEXT: ; def s[0:3] 3996; GFX940-NEXT: ;;#ASMEND 3997; GFX940-NEXT: ;;#ASMSTART 3998; GFX940-NEXT: ; def s[4:7] 3999; GFX940-NEXT: ;;#ASMEND 4000; GFX940-NEXT: s_mov_b32 s8, s7 4001; GFX940-NEXT: s_mov_b32 s9, s2 4002; GFX940-NEXT: ;;#ASMSTART 4003; GFX940-NEXT: ; use s[8:9] 4004; GFX940-NEXT: ;;#ASMEND 4005; GFX940-NEXT: s_setpc_b64 s[30:31] 4006 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4007 %vec1 = call <4 x i32> asm "; def $0", "=s"() 4008 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 2> 4009 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4010 ret void 4011} 4012 4013define void @s_shuffle_v2i32_v4i32__7_3() { 4014; GFX900-LABEL: s_shuffle_v2i32_v4i32__7_3: 4015; GFX900: ; %bb.0: 4016; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4017; GFX900-NEXT: ;;#ASMSTART 4018; GFX900-NEXT: ; def s[4:7] 4019; GFX900-NEXT: ;;#ASMEND 4020; GFX900-NEXT: ;;#ASMSTART 4021; GFX900-NEXT: ; def s[8:11] 4022; GFX900-NEXT: ;;#ASMEND 4023; GFX900-NEXT: s_mov_b32 s6, s11 4024; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 4025; GFX900-NEXT: ;;#ASMSTART 4026; GFX900-NEXT: ; use s[8:9] 4027; GFX900-NEXT: ;;#ASMEND 4028; GFX900-NEXT: s_setpc_b64 s[30:31] 4029; 4030; GFX90A-LABEL: s_shuffle_v2i32_v4i32__7_3: 4031; GFX90A: ; %bb.0: 4032; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4033; GFX90A-NEXT: ;;#ASMSTART 4034; GFX90A-NEXT: ; def s[4:7] 4035; GFX90A-NEXT: ;;#ASMEND 4036; GFX90A-NEXT: ;;#ASMSTART 4037; GFX90A-NEXT: ; def s[8:11] 4038; GFX90A-NEXT: ;;#ASMEND 4039; GFX90A-NEXT: s_mov_b32 s6, s11 4040; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 4041; GFX90A-NEXT: ;;#ASMSTART 4042; GFX90A-NEXT: ; use s[8:9] 4043; GFX90A-NEXT: ;;#ASMEND 4044; GFX90A-NEXT: s_setpc_b64 s[30:31] 4045; 4046; GFX940-LABEL: s_shuffle_v2i32_v4i32__7_3: 4047; GFX940: ; %bb.0: 4048; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4049; GFX940-NEXT: ;;#ASMSTART 4050; GFX940-NEXT: ; def s[0:3] 4051; GFX940-NEXT: ;;#ASMEND 4052; GFX940-NEXT: ;;#ASMSTART 4053; GFX940-NEXT: ; def s[4:7] 4054; GFX940-NEXT: ;;#ASMEND 4055; GFX940-NEXT: s_mov_b32 s2, s7 4056; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 4057; GFX940-NEXT: ;;#ASMSTART 4058; GFX940-NEXT: ; use s[8:9] 4059; GFX940-NEXT: ;;#ASMEND 4060; GFX940-NEXT: s_setpc_b64 s[30:31] 4061 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4062 %vec1 = call <4 x i32> asm "; def $0", "=s"() 4063 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 3> 4064 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4065 ret void 4066} 4067 4068define void @s_shuffle_v2i32_v4i32__7_4() { 4069; GFX900-LABEL: s_shuffle_v2i32_v4i32__7_4: 4070; GFX900: ; %bb.0: 4071; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4072; GFX900-NEXT: ;;#ASMSTART 4073; GFX900-NEXT: ; def s[4:7] 4074; GFX900-NEXT: ;;#ASMEND 4075; GFX900-NEXT: s_mov_b32 s8, s7 4076; GFX900-NEXT: s_mov_b32 s9, s4 4077; GFX900-NEXT: ;;#ASMSTART 4078; GFX900-NEXT: ; use s[8:9] 4079; GFX900-NEXT: ;;#ASMEND 4080; GFX900-NEXT: s_setpc_b64 s[30:31] 4081; 4082; GFX90A-LABEL: s_shuffle_v2i32_v4i32__7_4: 4083; GFX90A: ; %bb.0: 4084; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4085; GFX90A-NEXT: ;;#ASMSTART 4086; GFX90A-NEXT: ; def s[4:7] 4087; GFX90A-NEXT: ;;#ASMEND 4088; GFX90A-NEXT: s_mov_b32 s8, s7 4089; GFX90A-NEXT: s_mov_b32 s9, s4 4090; GFX90A-NEXT: ;;#ASMSTART 4091; GFX90A-NEXT: ; use s[8:9] 4092; GFX90A-NEXT: ;;#ASMEND 4093; GFX90A-NEXT: s_setpc_b64 s[30:31] 4094; 4095; GFX940-LABEL: s_shuffle_v2i32_v4i32__7_4: 4096; GFX940: ; %bb.0: 4097; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4098; GFX940-NEXT: ;;#ASMSTART 4099; GFX940-NEXT: ; def s[0:3] 4100; GFX940-NEXT: ;;#ASMEND 4101; GFX940-NEXT: s_mov_b32 s8, s3 4102; GFX940-NEXT: s_mov_b32 s9, s0 4103; GFX940-NEXT: ;;#ASMSTART 4104; GFX940-NEXT: ; use s[8:9] 4105; GFX940-NEXT: ;;#ASMEND 4106; GFX940-NEXT: s_setpc_b64 s[30:31] 4107 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4108 %vec1 = call <4 x i32> asm "; def $0", "=s"() 4109 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 4> 4110 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4111 ret void 4112} 4113 4114define void @s_shuffle_v2i32_v4i32__7_5() { 4115; GFX9-LABEL: s_shuffle_v2i32_v4i32__7_5: 4116; GFX9: ; %bb.0: 4117; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4118; GFX9-NEXT: ;;#ASMSTART 4119; GFX9-NEXT: ; def s[8:11] 4120; GFX9-NEXT: ;;#ASMEND 4121; GFX9-NEXT: s_mov_b32 s8, s11 4122; GFX9-NEXT: ;;#ASMSTART 4123; GFX9-NEXT: ; use s[8:9] 4124; GFX9-NEXT: ;;#ASMEND 4125; GFX9-NEXT: s_setpc_b64 s[30:31] 4126 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4127 %vec1 = call <4 x i32> asm "; def $0", "=s"() 4128 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 5> 4129 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4130 ret void 4131} 4132 4133define void @s_shuffle_v2i32_v4i32__7_6() { 4134; GFX900-LABEL: s_shuffle_v2i32_v4i32__7_6: 4135; GFX900: ; %bb.0: 4136; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4137; GFX900-NEXT: ;;#ASMSTART 4138; GFX900-NEXT: ; def s[4:7] 4139; GFX900-NEXT: ;;#ASMEND 4140; GFX900-NEXT: s_mov_b32 s8, s7 4141; GFX900-NEXT: s_mov_b32 s9, s6 4142; GFX900-NEXT: ;;#ASMSTART 4143; GFX900-NEXT: ; use s[8:9] 4144; GFX900-NEXT: ;;#ASMEND 4145; GFX900-NEXT: s_setpc_b64 s[30:31] 4146; 4147; GFX90A-LABEL: s_shuffle_v2i32_v4i32__7_6: 4148; GFX90A: ; %bb.0: 4149; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4150; GFX90A-NEXT: ;;#ASMSTART 4151; GFX90A-NEXT: ; def s[4:7] 4152; GFX90A-NEXT: ;;#ASMEND 4153; GFX90A-NEXT: s_mov_b32 s8, s7 4154; GFX90A-NEXT: s_mov_b32 s9, s6 4155; GFX90A-NEXT: ;;#ASMSTART 4156; GFX90A-NEXT: ; use s[8:9] 4157; GFX90A-NEXT: ;;#ASMEND 4158; GFX90A-NEXT: s_setpc_b64 s[30:31] 4159; 4160; GFX940-LABEL: s_shuffle_v2i32_v4i32__7_6: 4161; GFX940: ; %bb.0: 4162; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4163; GFX940-NEXT: ;;#ASMSTART 4164; GFX940-NEXT: ; def s[0:3] 4165; GFX940-NEXT: ;;#ASMEND 4166; GFX940-NEXT: s_mov_b32 s8, s3 4167; GFX940-NEXT: s_mov_b32 s9, s2 4168; GFX940-NEXT: ;;#ASMSTART 4169; GFX940-NEXT: ; use s[8:9] 4170; GFX940-NEXT: ;;#ASMEND 4171; GFX940-NEXT: s_setpc_b64 s[30:31] 4172 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4173 %vec1 = call <4 x i32> asm "; def $0", "=s"() 4174 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 6> 4175 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4176 ret void 4177} 4178 4179define void @s_shuffle_v2i32_v4i32__7_7() { 4180; GFX900-LABEL: s_shuffle_v2i32_v4i32__7_7: 4181; GFX900: ; %bb.0: 4182; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4183; GFX900-NEXT: ;;#ASMSTART 4184; GFX900-NEXT: ; def s[4:7] 4185; GFX900-NEXT: ;;#ASMEND 4186; GFX900-NEXT: s_mov_b32 s6, s7 4187; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 4188; GFX900-NEXT: ;;#ASMSTART 4189; GFX900-NEXT: ; use s[8:9] 4190; GFX900-NEXT: ;;#ASMEND 4191; GFX900-NEXT: s_setpc_b64 s[30:31] 4192; 4193; GFX90A-LABEL: s_shuffle_v2i32_v4i32__7_7: 4194; GFX90A: ; %bb.0: 4195; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4196; GFX90A-NEXT: ;;#ASMSTART 4197; GFX90A-NEXT: ; def s[4:7] 4198; GFX90A-NEXT: ;;#ASMEND 4199; GFX90A-NEXT: s_mov_b32 s6, s7 4200; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 4201; GFX90A-NEXT: ;;#ASMSTART 4202; GFX90A-NEXT: ; use s[8:9] 4203; GFX90A-NEXT: ;;#ASMEND 4204; GFX90A-NEXT: s_setpc_b64 s[30:31] 4205; 4206; GFX940-LABEL: s_shuffle_v2i32_v4i32__7_7: 4207; GFX940: ; %bb.0: 4208; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4209; GFX940-NEXT: ;;#ASMSTART 4210; GFX940-NEXT: ; def s[0:3] 4211; GFX940-NEXT: ;;#ASMEND 4212; GFX940-NEXT: s_mov_b32 s2, s3 4213; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 4214; GFX940-NEXT: ;;#ASMSTART 4215; GFX940-NEXT: ; use s[8:9] 4216; GFX940-NEXT: ;;#ASMEND 4217; GFX940-NEXT: s_setpc_b64 s[30:31] 4218 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4219 %vec1 = call <4 x i32> asm "; def $0", "=s"() 4220 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 7> 4221 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4222 ret void 4223} 4224 4225define void @s_shuffle_v2i32_v4i32__u_0() { 4226; GFX900-LABEL: s_shuffle_v2i32_v4i32__u_0: 4227; GFX900: ; %bb.0: 4228; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4229; GFX900-NEXT: ;;#ASMSTART 4230; GFX900-NEXT: ; def s[4:7] 4231; GFX900-NEXT: ;;#ASMEND 4232; GFX900-NEXT: s_mov_b32 s9, s4 4233; GFX900-NEXT: ;;#ASMSTART 4234; GFX900-NEXT: ; use s[8:9] 4235; GFX900-NEXT: ;;#ASMEND 4236; GFX900-NEXT: s_setpc_b64 s[30:31] 4237; 4238; GFX90A-LABEL: s_shuffle_v2i32_v4i32__u_0: 4239; GFX90A: ; %bb.0: 4240; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4241; GFX90A-NEXT: ;;#ASMSTART 4242; GFX90A-NEXT: ; def s[4:7] 4243; GFX90A-NEXT: ;;#ASMEND 4244; GFX90A-NEXT: s_mov_b32 s9, s4 4245; GFX90A-NEXT: ;;#ASMSTART 4246; GFX90A-NEXT: ; use s[8:9] 4247; GFX90A-NEXT: ;;#ASMEND 4248; GFX90A-NEXT: s_setpc_b64 s[30:31] 4249; 4250; GFX940-LABEL: s_shuffle_v2i32_v4i32__u_0: 4251; GFX940: ; %bb.0: 4252; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4253; GFX940-NEXT: ;;#ASMSTART 4254; GFX940-NEXT: ; def s[0:3] 4255; GFX940-NEXT: ;;#ASMEND 4256; GFX940-NEXT: s_mov_b32 s9, s0 4257; GFX940-NEXT: ;;#ASMSTART 4258; GFX940-NEXT: ; use s[8:9] 4259; GFX940-NEXT: ;;#ASMEND 4260; GFX940-NEXT: s_setpc_b64 s[30:31] 4261 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4262 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 poison, i32 0> 4263 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4264 ret void 4265} 4266 4267define void @s_shuffle_v2i32_v4i32__0_0() { 4268; GFX9-LABEL: s_shuffle_v2i32_v4i32__0_0: 4269; GFX9: ; %bb.0: 4270; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4271; GFX9-NEXT: ;;#ASMSTART 4272; GFX9-NEXT: ; def s[8:11] 4273; GFX9-NEXT: ;;#ASMEND 4274; GFX9-NEXT: s_mov_b32 s9, s8 4275; GFX9-NEXT: ;;#ASMSTART 4276; GFX9-NEXT: ; use s[8:9] 4277; GFX9-NEXT: ;;#ASMEND 4278; GFX9-NEXT: s_setpc_b64 s[30:31] 4279 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4280 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> zeroinitializer 4281 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4282 ret void 4283} 4284 4285define void @s_shuffle_v2i32_v4i32__1_0() { 4286; GFX900-LABEL: s_shuffle_v2i32_v4i32__1_0: 4287; GFX900: ; %bb.0: 4288; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4289; GFX900-NEXT: ;;#ASMSTART 4290; GFX900-NEXT: ; def s[4:7] 4291; GFX900-NEXT: ;;#ASMEND 4292; GFX900-NEXT: s_mov_b32 s8, s5 4293; GFX900-NEXT: s_mov_b32 s9, s4 4294; GFX900-NEXT: ;;#ASMSTART 4295; GFX900-NEXT: ; use s[8:9] 4296; GFX900-NEXT: ;;#ASMEND 4297; GFX900-NEXT: s_setpc_b64 s[30:31] 4298; 4299; GFX90A-LABEL: s_shuffle_v2i32_v4i32__1_0: 4300; GFX90A: ; %bb.0: 4301; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4302; GFX90A-NEXT: ;;#ASMSTART 4303; GFX90A-NEXT: ; def s[4:7] 4304; GFX90A-NEXT: ;;#ASMEND 4305; GFX90A-NEXT: s_mov_b32 s8, s5 4306; GFX90A-NEXT: s_mov_b32 s9, s4 4307; GFX90A-NEXT: ;;#ASMSTART 4308; GFX90A-NEXT: ; use s[8:9] 4309; GFX90A-NEXT: ;;#ASMEND 4310; GFX90A-NEXT: s_setpc_b64 s[30:31] 4311; 4312; GFX940-LABEL: s_shuffle_v2i32_v4i32__1_0: 4313; GFX940: ; %bb.0: 4314; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4315; GFX940-NEXT: ;;#ASMSTART 4316; GFX940-NEXT: ; def s[0:3] 4317; GFX940-NEXT: ;;#ASMEND 4318; GFX940-NEXT: s_mov_b32 s8, s1 4319; GFX940-NEXT: s_mov_b32 s9, s0 4320; GFX940-NEXT: ;;#ASMSTART 4321; GFX940-NEXT: ; use s[8:9] 4322; GFX940-NEXT: ;;#ASMEND 4323; GFX940-NEXT: s_setpc_b64 s[30:31] 4324 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4325 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 0> 4326 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4327 ret void 4328} 4329 4330define void @s_shuffle_v2i32_v4i32__2_0() { 4331; GFX900-LABEL: s_shuffle_v2i32_v4i32__2_0: 4332; GFX900: ; %bb.0: 4333; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4334; GFX900-NEXT: ;;#ASMSTART 4335; GFX900-NEXT: ; def s[4:7] 4336; GFX900-NEXT: ;;#ASMEND 4337; GFX900-NEXT: s_mov_b32 s7, s4 4338; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 4339; GFX900-NEXT: ;;#ASMSTART 4340; GFX900-NEXT: ; use s[8:9] 4341; GFX900-NEXT: ;;#ASMEND 4342; GFX900-NEXT: s_setpc_b64 s[30:31] 4343; 4344; GFX90A-LABEL: s_shuffle_v2i32_v4i32__2_0: 4345; GFX90A: ; %bb.0: 4346; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4347; GFX90A-NEXT: ;;#ASMSTART 4348; GFX90A-NEXT: ; def s[4:7] 4349; GFX90A-NEXT: ;;#ASMEND 4350; GFX90A-NEXT: s_mov_b32 s7, s4 4351; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 4352; GFX90A-NEXT: ;;#ASMSTART 4353; GFX90A-NEXT: ; use s[8:9] 4354; GFX90A-NEXT: ;;#ASMEND 4355; GFX90A-NEXT: s_setpc_b64 s[30:31] 4356; 4357; GFX940-LABEL: s_shuffle_v2i32_v4i32__2_0: 4358; GFX940: ; %bb.0: 4359; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4360; GFX940-NEXT: ;;#ASMSTART 4361; GFX940-NEXT: ; def s[0:3] 4362; GFX940-NEXT: ;;#ASMEND 4363; GFX940-NEXT: s_mov_b32 s3, s0 4364; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 4365; GFX940-NEXT: ;;#ASMSTART 4366; GFX940-NEXT: ; use s[8:9] 4367; GFX940-NEXT: ;;#ASMEND 4368; GFX940-NEXT: s_setpc_b64 s[30:31] 4369 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4370 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 0> 4371 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4372 ret void 4373} 4374 4375define void @s_shuffle_v2i32_v4i32__3_0() { 4376; GFX900-LABEL: s_shuffle_v2i32_v4i32__3_0: 4377; GFX900: ; %bb.0: 4378; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4379; GFX900-NEXT: ;;#ASMSTART 4380; GFX900-NEXT: ; def s[4:7] 4381; GFX900-NEXT: ;;#ASMEND 4382; GFX900-NEXT: s_mov_b32 s8, s7 4383; GFX900-NEXT: s_mov_b32 s9, s4 4384; GFX900-NEXT: ;;#ASMSTART 4385; GFX900-NEXT: ; use s[8:9] 4386; GFX900-NEXT: ;;#ASMEND 4387; GFX900-NEXT: s_setpc_b64 s[30:31] 4388; 4389; GFX90A-LABEL: s_shuffle_v2i32_v4i32__3_0: 4390; GFX90A: ; %bb.0: 4391; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4392; GFX90A-NEXT: ;;#ASMSTART 4393; GFX90A-NEXT: ; def s[4:7] 4394; GFX90A-NEXT: ;;#ASMEND 4395; GFX90A-NEXT: s_mov_b32 s8, s7 4396; GFX90A-NEXT: s_mov_b32 s9, s4 4397; GFX90A-NEXT: ;;#ASMSTART 4398; GFX90A-NEXT: ; use s[8:9] 4399; GFX90A-NEXT: ;;#ASMEND 4400; GFX90A-NEXT: s_setpc_b64 s[30:31] 4401; 4402; GFX940-LABEL: s_shuffle_v2i32_v4i32__3_0: 4403; GFX940: ; %bb.0: 4404; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4405; GFX940-NEXT: ;;#ASMSTART 4406; GFX940-NEXT: ; def s[0:3] 4407; GFX940-NEXT: ;;#ASMEND 4408; GFX940-NEXT: s_mov_b32 s8, s3 4409; GFX940-NEXT: s_mov_b32 s9, s0 4410; GFX940-NEXT: ;;#ASMSTART 4411; GFX940-NEXT: ; use s[8:9] 4412; GFX940-NEXT: ;;#ASMEND 4413; GFX940-NEXT: s_setpc_b64 s[30:31] 4414 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4415 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 0> 4416 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4417 ret void 4418} 4419 4420define void @s_shuffle_v2i32_v4i32__4_0() { 4421; GFX900-LABEL: s_shuffle_v2i32_v4i32__4_0: 4422; GFX900: ; %bb.0: 4423; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4424; GFX900-NEXT: ;;#ASMSTART 4425; GFX900-NEXT: ; def s[4:7] 4426; GFX900-NEXT: ;;#ASMEND 4427; GFX900-NEXT: s_mov_b32 s9, s4 4428; GFX900-NEXT: ;;#ASMSTART 4429; GFX900-NEXT: ; use s[8:9] 4430; GFX900-NEXT: ;;#ASMEND 4431; GFX900-NEXT: s_setpc_b64 s[30:31] 4432; 4433; GFX90A-LABEL: s_shuffle_v2i32_v4i32__4_0: 4434; GFX90A: ; %bb.0: 4435; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4436; GFX90A-NEXT: ;;#ASMSTART 4437; GFX90A-NEXT: ; def s[4:7] 4438; GFX90A-NEXT: ;;#ASMEND 4439; GFX90A-NEXT: s_mov_b32 s9, s4 4440; GFX90A-NEXT: ;;#ASMSTART 4441; GFX90A-NEXT: ; use s[8:9] 4442; GFX90A-NEXT: ;;#ASMEND 4443; GFX90A-NEXT: s_setpc_b64 s[30:31] 4444; 4445; GFX940-LABEL: s_shuffle_v2i32_v4i32__4_0: 4446; GFX940: ; %bb.0: 4447; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4448; GFX940-NEXT: ;;#ASMSTART 4449; GFX940-NEXT: ; def s[0:3] 4450; GFX940-NEXT: ;;#ASMEND 4451; GFX940-NEXT: s_mov_b32 s9, s0 4452; GFX940-NEXT: ;;#ASMSTART 4453; GFX940-NEXT: ; use s[8:9] 4454; GFX940-NEXT: ;;#ASMEND 4455; GFX940-NEXT: s_setpc_b64 s[30:31] 4456 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4457 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 0> 4458 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4459 ret void 4460} 4461 4462define void @s_shuffle_v2i32_v4i32__5_0() { 4463; GFX900-LABEL: s_shuffle_v2i32_v4i32__5_0: 4464; GFX900: ; %bb.0: 4465; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4466; GFX900-NEXT: ;;#ASMSTART 4467; GFX900-NEXT: ; def s[8:11] 4468; GFX900-NEXT: ;;#ASMEND 4469; GFX900-NEXT: ;;#ASMSTART 4470; GFX900-NEXT: ; def s[4:7] 4471; GFX900-NEXT: ;;#ASMEND 4472; GFX900-NEXT: s_mov_b32 s8, s9 4473; GFX900-NEXT: s_mov_b32 s9, s4 4474; GFX900-NEXT: ;;#ASMSTART 4475; GFX900-NEXT: ; use s[8:9] 4476; GFX900-NEXT: ;;#ASMEND 4477; GFX900-NEXT: s_setpc_b64 s[30:31] 4478; 4479; GFX90A-LABEL: s_shuffle_v2i32_v4i32__5_0: 4480; GFX90A: ; %bb.0: 4481; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4482; GFX90A-NEXT: ;;#ASMSTART 4483; GFX90A-NEXT: ; def s[8:11] 4484; GFX90A-NEXT: ;;#ASMEND 4485; GFX90A-NEXT: ;;#ASMSTART 4486; GFX90A-NEXT: ; def s[4:7] 4487; GFX90A-NEXT: ;;#ASMEND 4488; GFX90A-NEXT: s_mov_b32 s8, s9 4489; GFX90A-NEXT: s_mov_b32 s9, s4 4490; GFX90A-NEXT: ;;#ASMSTART 4491; GFX90A-NEXT: ; use s[8:9] 4492; GFX90A-NEXT: ;;#ASMEND 4493; GFX90A-NEXT: s_setpc_b64 s[30:31] 4494; 4495; GFX940-LABEL: s_shuffle_v2i32_v4i32__5_0: 4496; GFX940: ; %bb.0: 4497; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4498; GFX940-NEXT: ;;#ASMSTART 4499; GFX940-NEXT: ; def s[0:3] 4500; GFX940-NEXT: ;;#ASMEND 4501; GFX940-NEXT: ;;#ASMSTART 4502; GFX940-NEXT: ; def s[4:7] 4503; GFX940-NEXT: ;;#ASMEND 4504; GFX940-NEXT: s_mov_b32 s8, s5 4505; GFX940-NEXT: s_mov_b32 s9, s0 4506; GFX940-NEXT: ;;#ASMSTART 4507; GFX940-NEXT: ; use s[8:9] 4508; GFX940-NEXT: ;;#ASMEND 4509; GFX940-NEXT: s_setpc_b64 s[30:31] 4510 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4511 %vec1 = call <4 x i32> asm "; def $0", "=s"() 4512 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 0> 4513 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4514 ret void 4515} 4516 4517define void @s_shuffle_v2i32_v4i32__6_0() { 4518; GFX900-LABEL: s_shuffle_v2i32_v4i32__6_0: 4519; GFX900: ; %bb.0: 4520; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4521; GFX900-NEXT: ;;#ASMSTART 4522; GFX900-NEXT: ; def s[8:11] 4523; GFX900-NEXT: ;;#ASMEND 4524; GFX900-NEXT: ;;#ASMSTART 4525; GFX900-NEXT: ; def s[4:7] 4526; GFX900-NEXT: ;;#ASMEND 4527; GFX900-NEXT: s_mov_b32 s11, s4 4528; GFX900-NEXT: s_mov_b64 s[8:9], s[10:11] 4529; GFX900-NEXT: ;;#ASMSTART 4530; GFX900-NEXT: ; use s[8:9] 4531; GFX900-NEXT: ;;#ASMEND 4532; GFX900-NEXT: s_setpc_b64 s[30:31] 4533; 4534; GFX90A-LABEL: s_shuffle_v2i32_v4i32__6_0: 4535; GFX90A: ; %bb.0: 4536; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4537; GFX90A-NEXT: ;;#ASMSTART 4538; GFX90A-NEXT: ; def s[8:11] 4539; GFX90A-NEXT: ;;#ASMEND 4540; GFX90A-NEXT: ;;#ASMSTART 4541; GFX90A-NEXT: ; def s[4:7] 4542; GFX90A-NEXT: ;;#ASMEND 4543; GFX90A-NEXT: s_mov_b32 s11, s4 4544; GFX90A-NEXT: s_mov_b64 s[8:9], s[10:11] 4545; GFX90A-NEXT: ;;#ASMSTART 4546; GFX90A-NEXT: ; use s[8:9] 4547; GFX90A-NEXT: ;;#ASMEND 4548; GFX90A-NEXT: s_setpc_b64 s[30:31] 4549; 4550; GFX940-LABEL: s_shuffle_v2i32_v4i32__6_0: 4551; GFX940: ; %bb.0: 4552; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4553; GFX940-NEXT: ;;#ASMSTART 4554; GFX940-NEXT: ; def s[4:7] 4555; GFX940-NEXT: ;;#ASMEND 4556; GFX940-NEXT: ;;#ASMSTART 4557; GFX940-NEXT: ; def s[0:3] 4558; GFX940-NEXT: ;;#ASMEND 4559; GFX940-NEXT: s_mov_b32 s7, s0 4560; GFX940-NEXT: s_mov_b64 s[8:9], s[6:7] 4561; GFX940-NEXT: ;;#ASMSTART 4562; GFX940-NEXT: ; use s[8:9] 4563; GFX940-NEXT: ;;#ASMEND 4564; GFX940-NEXT: s_setpc_b64 s[30:31] 4565 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4566 %vec1 = call <4 x i32> asm "; def $0", "=s"() 4567 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 0> 4568 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4569 ret void 4570} 4571 4572define void @s_shuffle_v2i32_v4i32__u_1() { 4573; GFX900-LABEL: s_shuffle_v2i32_v4i32__u_1: 4574; GFX900: ; %bb.0: 4575; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4576; GFX900-NEXT: ;;#ASMSTART 4577; GFX900-NEXT: ; def s[8:11] 4578; GFX900-NEXT: ;;#ASMEND 4579; GFX900-NEXT: ;;#ASMSTART 4580; GFX900-NEXT: ; use s[8:9] 4581; GFX900-NEXT: ;;#ASMEND 4582; GFX900-NEXT: s_setpc_b64 s[30:31] 4583; 4584; GFX90A-LABEL: s_shuffle_v2i32_v4i32__u_1: 4585; GFX90A: ; %bb.0: 4586; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4587; GFX90A-NEXT: ;;#ASMSTART 4588; GFX90A-NEXT: ; def s[8:11] 4589; GFX90A-NEXT: ;;#ASMEND 4590; GFX90A-NEXT: ;;#ASMSTART 4591; GFX90A-NEXT: ; use s[8:9] 4592; GFX90A-NEXT: ;;#ASMEND 4593; GFX90A-NEXT: s_setpc_b64 s[30:31] 4594; 4595; GFX940-LABEL: s_shuffle_v2i32_v4i32__u_1: 4596; GFX940: ; %bb.0: 4597; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4598; GFX940-NEXT: ;;#ASMSTART 4599; GFX940-NEXT: ; def s[8:11] 4600; GFX940-NEXT: ;;#ASMEND 4601; GFX940-NEXT: s_nop 0 4602; GFX940-NEXT: ;;#ASMSTART 4603; GFX940-NEXT: ; use s[8:9] 4604; GFX940-NEXT: ;;#ASMEND 4605; GFX940-NEXT: s_setpc_b64 s[30:31] 4606 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4607 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 poison, i32 1> 4608 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4609 ret void 4610} 4611 4612define void @s_shuffle_v2i32_v4i32__0_1() { 4613; GFX900-LABEL: s_shuffle_v2i32_v4i32__0_1: 4614; GFX900: ; %bb.0: 4615; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4616; GFX900-NEXT: ;;#ASMSTART 4617; GFX900-NEXT: ; def s[8:11] 4618; GFX900-NEXT: ;;#ASMEND 4619; GFX900-NEXT: ;;#ASMSTART 4620; GFX900-NEXT: ; use s[8:9] 4621; GFX900-NEXT: ;;#ASMEND 4622; GFX900-NEXT: s_setpc_b64 s[30:31] 4623; 4624; GFX90A-LABEL: s_shuffle_v2i32_v4i32__0_1: 4625; GFX90A: ; %bb.0: 4626; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4627; GFX90A-NEXT: ;;#ASMSTART 4628; GFX90A-NEXT: ; def s[8:11] 4629; GFX90A-NEXT: ;;#ASMEND 4630; GFX90A-NEXT: ;;#ASMSTART 4631; GFX90A-NEXT: ; use s[8:9] 4632; GFX90A-NEXT: ;;#ASMEND 4633; GFX90A-NEXT: s_setpc_b64 s[30:31] 4634; 4635; GFX940-LABEL: s_shuffle_v2i32_v4i32__0_1: 4636; GFX940: ; %bb.0: 4637; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4638; GFX940-NEXT: ;;#ASMSTART 4639; GFX940-NEXT: ; def s[8:11] 4640; GFX940-NEXT: ;;#ASMEND 4641; GFX940-NEXT: s_nop 0 4642; GFX940-NEXT: ;;#ASMSTART 4643; GFX940-NEXT: ; use s[8:9] 4644; GFX940-NEXT: ;;#ASMEND 4645; GFX940-NEXT: s_setpc_b64 s[30:31] 4646 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4647 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 0, i32 1> 4648 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4649 ret void 4650} 4651 4652define void @s_shuffle_v2i32_v4i32__1_1() { 4653; GFX9-LABEL: s_shuffle_v2i32_v4i32__1_1: 4654; GFX9: ; %bb.0: 4655; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4656; GFX9-NEXT: ;;#ASMSTART 4657; GFX9-NEXT: ; def s[8:11] 4658; GFX9-NEXT: ;;#ASMEND 4659; GFX9-NEXT: s_mov_b32 s8, s9 4660; GFX9-NEXT: ;;#ASMSTART 4661; GFX9-NEXT: ; use s[8:9] 4662; GFX9-NEXT: ;;#ASMEND 4663; GFX9-NEXT: s_setpc_b64 s[30:31] 4664 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4665 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 1> 4666 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4667 ret void 4668} 4669 4670define void @s_shuffle_v2i32_v4i32__2_1() { 4671; GFX900-LABEL: s_shuffle_v2i32_v4i32__2_1: 4672; GFX900: ; %bb.0: 4673; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4674; GFX900-NEXT: ;;#ASMSTART 4675; GFX900-NEXT: ; def s[4:7] 4676; GFX900-NEXT: ;;#ASMEND 4677; GFX900-NEXT: s_mov_b32 s7, s5 4678; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 4679; GFX900-NEXT: ;;#ASMSTART 4680; GFX900-NEXT: ; use s[8:9] 4681; GFX900-NEXT: ;;#ASMEND 4682; GFX900-NEXT: s_setpc_b64 s[30:31] 4683; 4684; GFX90A-LABEL: s_shuffle_v2i32_v4i32__2_1: 4685; GFX90A: ; %bb.0: 4686; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4687; GFX90A-NEXT: ;;#ASMSTART 4688; GFX90A-NEXT: ; def s[4:7] 4689; GFX90A-NEXT: ;;#ASMEND 4690; GFX90A-NEXT: s_mov_b32 s7, s5 4691; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 4692; GFX90A-NEXT: ;;#ASMSTART 4693; GFX90A-NEXT: ; use s[8:9] 4694; GFX90A-NEXT: ;;#ASMEND 4695; GFX90A-NEXT: s_setpc_b64 s[30:31] 4696; 4697; GFX940-LABEL: s_shuffle_v2i32_v4i32__2_1: 4698; GFX940: ; %bb.0: 4699; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4700; GFX940-NEXT: ;;#ASMSTART 4701; GFX940-NEXT: ; def s[0:3] 4702; GFX940-NEXT: ;;#ASMEND 4703; GFX940-NEXT: s_mov_b32 s3, s1 4704; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 4705; GFX940-NEXT: ;;#ASMSTART 4706; GFX940-NEXT: ; use s[8:9] 4707; GFX940-NEXT: ;;#ASMEND 4708; GFX940-NEXT: s_setpc_b64 s[30:31] 4709 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4710 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 1> 4711 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4712 ret void 4713} 4714 4715define void @s_shuffle_v2i32_v4i32__3_1() { 4716; GFX9-LABEL: s_shuffle_v2i32_v4i32__3_1: 4717; GFX9: ; %bb.0: 4718; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4719; GFX9-NEXT: ;;#ASMSTART 4720; GFX9-NEXT: ; def s[8:11] 4721; GFX9-NEXT: ;;#ASMEND 4722; GFX9-NEXT: s_mov_b32 s8, s11 4723; GFX9-NEXT: ;;#ASMSTART 4724; GFX9-NEXT: ; use s[8:9] 4725; GFX9-NEXT: ;;#ASMEND 4726; GFX9-NEXT: s_setpc_b64 s[30:31] 4727 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4728 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 1> 4729 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4730 ret void 4731} 4732 4733define void @s_shuffle_v2i32_v4i32__4_1() { 4734; GFX900-LABEL: s_shuffle_v2i32_v4i32__4_1: 4735; GFX900: ; %bb.0: 4736; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4737; GFX900-NEXT: ;;#ASMSTART 4738; GFX900-NEXT: ; def s[8:11] 4739; GFX900-NEXT: ;;#ASMEND 4740; GFX900-NEXT: ;;#ASMSTART 4741; GFX900-NEXT: ; use s[8:9] 4742; GFX900-NEXT: ;;#ASMEND 4743; GFX900-NEXT: s_setpc_b64 s[30:31] 4744; 4745; GFX90A-LABEL: s_shuffle_v2i32_v4i32__4_1: 4746; GFX90A: ; %bb.0: 4747; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4748; GFX90A-NEXT: ;;#ASMSTART 4749; GFX90A-NEXT: ; def s[8:11] 4750; GFX90A-NEXT: ;;#ASMEND 4751; GFX90A-NEXT: ;;#ASMSTART 4752; GFX90A-NEXT: ; use s[8:9] 4753; GFX90A-NEXT: ;;#ASMEND 4754; GFX90A-NEXT: s_setpc_b64 s[30:31] 4755; 4756; GFX940-LABEL: s_shuffle_v2i32_v4i32__4_1: 4757; GFX940: ; %bb.0: 4758; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4759; GFX940-NEXT: ;;#ASMSTART 4760; GFX940-NEXT: ; def s[8:11] 4761; GFX940-NEXT: ;;#ASMEND 4762; GFX940-NEXT: s_nop 0 4763; GFX940-NEXT: ;;#ASMSTART 4764; GFX940-NEXT: ; use s[8:9] 4765; GFX940-NEXT: ;;#ASMEND 4766; GFX940-NEXT: s_setpc_b64 s[30:31] 4767 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4768 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 1> 4769 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4770 ret void 4771} 4772 4773define void @s_shuffle_v2i32_v4i32__5_1() { 4774; GFX900-LABEL: s_shuffle_v2i32_v4i32__5_1: 4775; GFX900: ; %bb.0: 4776; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4777; GFX900-NEXT: ;;#ASMSTART 4778; GFX900-NEXT: ; def s[8:11] 4779; GFX900-NEXT: ;;#ASMEND 4780; GFX900-NEXT: ;;#ASMSTART 4781; GFX900-NEXT: ; def s[4:7] 4782; GFX900-NEXT: ;;#ASMEND 4783; GFX900-NEXT: s_mov_b32 s8, s5 4784; GFX900-NEXT: ;;#ASMSTART 4785; GFX900-NEXT: ; use s[8:9] 4786; GFX900-NEXT: ;;#ASMEND 4787; GFX900-NEXT: s_setpc_b64 s[30:31] 4788; 4789; GFX90A-LABEL: s_shuffle_v2i32_v4i32__5_1: 4790; GFX90A: ; %bb.0: 4791; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4792; GFX90A-NEXT: ;;#ASMSTART 4793; GFX90A-NEXT: ; def s[8:11] 4794; GFX90A-NEXT: ;;#ASMEND 4795; GFX90A-NEXT: ;;#ASMSTART 4796; GFX90A-NEXT: ; def s[4:7] 4797; GFX90A-NEXT: ;;#ASMEND 4798; GFX90A-NEXT: s_mov_b32 s8, s5 4799; GFX90A-NEXT: ;;#ASMSTART 4800; GFX90A-NEXT: ; use s[8:9] 4801; GFX90A-NEXT: ;;#ASMEND 4802; GFX90A-NEXT: s_setpc_b64 s[30:31] 4803; 4804; GFX940-LABEL: s_shuffle_v2i32_v4i32__5_1: 4805; GFX940: ; %bb.0: 4806; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4807; GFX940-NEXT: ;;#ASMSTART 4808; GFX940-NEXT: ; def s[8:11] 4809; GFX940-NEXT: ;;#ASMEND 4810; GFX940-NEXT: ;;#ASMSTART 4811; GFX940-NEXT: ; def s[0:3] 4812; GFX940-NEXT: ;;#ASMEND 4813; GFX940-NEXT: s_mov_b32 s8, s1 4814; GFX940-NEXT: ;;#ASMSTART 4815; GFX940-NEXT: ; use s[8:9] 4816; GFX940-NEXT: ;;#ASMEND 4817; GFX940-NEXT: s_setpc_b64 s[30:31] 4818 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4819 %vec1 = call <4 x i32> asm "; def $0", "=s"() 4820 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 1> 4821 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4822 ret void 4823} 4824 4825define void @s_shuffle_v2i32_v4i32__6_1() { 4826; GFX900-LABEL: s_shuffle_v2i32_v4i32__6_1: 4827; GFX900: ; %bb.0: 4828; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4829; GFX900-NEXT: ;;#ASMSTART 4830; GFX900-NEXT: ; def s[8:11] 4831; GFX900-NEXT: ;;#ASMEND 4832; GFX900-NEXT: ;;#ASMSTART 4833; GFX900-NEXT: ; def s[4:7] 4834; GFX900-NEXT: ;;#ASMEND 4835; GFX900-NEXT: s_mov_b32 s11, s5 4836; GFX900-NEXT: s_mov_b64 s[8:9], s[10:11] 4837; GFX900-NEXT: ;;#ASMSTART 4838; GFX900-NEXT: ; use s[8:9] 4839; GFX900-NEXT: ;;#ASMEND 4840; GFX900-NEXT: s_setpc_b64 s[30:31] 4841; 4842; GFX90A-LABEL: s_shuffle_v2i32_v4i32__6_1: 4843; GFX90A: ; %bb.0: 4844; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4845; GFX90A-NEXT: ;;#ASMSTART 4846; GFX90A-NEXT: ; def s[8:11] 4847; GFX90A-NEXT: ;;#ASMEND 4848; GFX90A-NEXT: ;;#ASMSTART 4849; GFX90A-NEXT: ; def s[4:7] 4850; GFX90A-NEXT: ;;#ASMEND 4851; GFX90A-NEXT: s_mov_b32 s11, s5 4852; GFX90A-NEXT: s_mov_b64 s[8:9], s[10:11] 4853; GFX90A-NEXT: ;;#ASMSTART 4854; GFX90A-NEXT: ; use s[8:9] 4855; GFX90A-NEXT: ;;#ASMEND 4856; GFX90A-NEXT: s_setpc_b64 s[30:31] 4857; 4858; GFX940-LABEL: s_shuffle_v2i32_v4i32__6_1: 4859; GFX940: ; %bb.0: 4860; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4861; GFX940-NEXT: ;;#ASMSTART 4862; GFX940-NEXT: ; def s[4:7] 4863; GFX940-NEXT: ;;#ASMEND 4864; GFX940-NEXT: ;;#ASMSTART 4865; GFX940-NEXT: ; def s[0:3] 4866; GFX940-NEXT: ;;#ASMEND 4867; GFX940-NEXT: s_mov_b32 s7, s1 4868; GFX940-NEXT: s_mov_b64 s[8:9], s[6:7] 4869; GFX940-NEXT: ;;#ASMSTART 4870; GFX940-NEXT: ; use s[8:9] 4871; GFX940-NEXT: ;;#ASMEND 4872; GFX940-NEXT: s_setpc_b64 s[30:31] 4873 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4874 %vec1 = call <4 x i32> asm "; def $0", "=s"() 4875 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 1> 4876 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4877 ret void 4878} 4879 4880define void @s_shuffle_v2i32_v4i32__u_2() { 4881; GFX900-LABEL: s_shuffle_v2i32_v4i32__u_2: 4882; GFX900: ; %bb.0: 4883; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4884; GFX900-NEXT: ;;#ASMSTART 4885; GFX900-NEXT: ; def s[4:7] 4886; GFX900-NEXT: ;;#ASMEND 4887; GFX900-NEXT: s_mov_b32 s9, s6 4888; GFX900-NEXT: ;;#ASMSTART 4889; GFX900-NEXT: ; use s[8:9] 4890; GFX900-NEXT: ;;#ASMEND 4891; GFX900-NEXT: s_setpc_b64 s[30:31] 4892; 4893; GFX90A-LABEL: s_shuffle_v2i32_v4i32__u_2: 4894; GFX90A: ; %bb.0: 4895; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4896; GFX90A-NEXT: ;;#ASMSTART 4897; GFX90A-NEXT: ; def s[4:7] 4898; GFX90A-NEXT: ;;#ASMEND 4899; GFX90A-NEXT: s_mov_b32 s9, s6 4900; GFX90A-NEXT: ;;#ASMSTART 4901; GFX90A-NEXT: ; use s[8:9] 4902; GFX90A-NEXT: ;;#ASMEND 4903; GFX90A-NEXT: s_setpc_b64 s[30:31] 4904; 4905; GFX940-LABEL: s_shuffle_v2i32_v4i32__u_2: 4906; GFX940: ; %bb.0: 4907; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4908; GFX940-NEXT: ;;#ASMSTART 4909; GFX940-NEXT: ; def s[0:3] 4910; GFX940-NEXT: ;;#ASMEND 4911; GFX940-NEXT: s_mov_b32 s9, s2 4912; GFX940-NEXT: ;;#ASMSTART 4913; GFX940-NEXT: ; use s[8:9] 4914; GFX940-NEXT: ;;#ASMEND 4915; GFX940-NEXT: s_setpc_b64 s[30:31] 4916 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4917 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 poison, i32 2> 4918 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4919 ret void 4920} 4921 4922define void @s_shuffle_v2i32_v4i32__0_2() { 4923; GFX9-LABEL: s_shuffle_v2i32_v4i32__0_2: 4924; GFX9: ; %bb.0: 4925; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4926; GFX9-NEXT: ;;#ASMSTART 4927; GFX9-NEXT: ; def s[8:11] 4928; GFX9-NEXT: ;;#ASMEND 4929; GFX9-NEXT: s_mov_b32 s9, s10 4930; GFX9-NEXT: ;;#ASMSTART 4931; GFX9-NEXT: ; use s[8:9] 4932; GFX9-NEXT: ;;#ASMEND 4933; GFX9-NEXT: s_setpc_b64 s[30:31] 4934 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4935 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 0, i32 2> 4936 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4937 ret void 4938} 4939 4940define void @s_shuffle_v2i32_v4i32__1_2() { 4941; GFX900-LABEL: s_shuffle_v2i32_v4i32__1_2: 4942; GFX900: ; %bb.0: 4943; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4944; GFX900-NEXT: ;;#ASMSTART 4945; GFX900-NEXT: ; def s[4:7] 4946; GFX900-NEXT: ;;#ASMEND 4947; GFX900-NEXT: s_mov_b32 s8, s5 4948; GFX900-NEXT: s_mov_b32 s9, s6 4949; GFX900-NEXT: ;;#ASMSTART 4950; GFX900-NEXT: ; use s[8:9] 4951; GFX900-NEXT: ;;#ASMEND 4952; GFX900-NEXT: s_setpc_b64 s[30:31] 4953; 4954; GFX90A-LABEL: s_shuffle_v2i32_v4i32__1_2: 4955; GFX90A: ; %bb.0: 4956; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4957; GFX90A-NEXT: ;;#ASMSTART 4958; GFX90A-NEXT: ; def s[4:7] 4959; GFX90A-NEXT: ;;#ASMEND 4960; GFX90A-NEXT: s_mov_b32 s8, s5 4961; GFX90A-NEXT: s_mov_b32 s9, s6 4962; GFX90A-NEXT: ;;#ASMSTART 4963; GFX90A-NEXT: ; use s[8:9] 4964; GFX90A-NEXT: ;;#ASMEND 4965; GFX90A-NEXT: s_setpc_b64 s[30:31] 4966; 4967; GFX940-LABEL: s_shuffle_v2i32_v4i32__1_2: 4968; GFX940: ; %bb.0: 4969; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4970; GFX940-NEXT: ;;#ASMSTART 4971; GFX940-NEXT: ; def s[0:3] 4972; GFX940-NEXT: ;;#ASMEND 4973; GFX940-NEXT: s_mov_b32 s8, s1 4974; GFX940-NEXT: s_mov_b32 s9, s2 4975; GFX940-NEXT: ;;#ASMSTART 4976; GFX940-NEXT: ; use s[8:9] 4977; GFX940-NEXT: ;;#ASMEND 4978; GFX940-NEXT: s_setpc_b64 s[30:31] 4979 %vec0 = call <4 x i32> asm "; def $0", "=s"() 4980 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 2> 4981 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 4982 ret void 4983} 4984 4985define void @s_shuffle_v2i32_v4i32__2_2() { 4986; GFX900-LABEL: s_shuffle_v2i32_v4i32__2_2: 4987; GFX900: ; %bb.0: 4988; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4989; GFX900-NEXT: ;;#ASMSTART 4990; GFX900-NEXT: ; def s[4:7] 4991; GFX900-NEXT: ;;#ASMEND 4992; GFX900-NEXT: s_mov_b32 s7, s6 4993; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 4994; GFX900-NEXT: ;;#ASMSTART 4995; GFX900-NEXT: ; use s[8:9] 4996; GFX900-NEXT: ;;#ASMEND 4997; GFX900-NEXT: s_setpc_b64 s[30:31] 4998; 4999; GFX90A-LABEL: s_shuffle_v2i32_v4i32__2_2: 5000; GFX90A: ; %bb.0: 5001; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5002; GFX90A-NEXT: ;;#ASMSTART 5003; GFX90A-NEXT: ; def s[4:7] 5004; GFX90A-NEXT: ;;#ASMEND 5005; GFX90A-NEXT: s_mov_b32 s7, s6 5006; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 5007; GFX90A-NEXT: ;;#ASMSTART 5008; GFX90A-NEXT: ; use s[8:9] 5009; GFX90A-NEXT: ;;#ASMEND 5010; GFX90A-NEXT: s_setpc_b64 s[30:31] 5011; 5012; GFX940-LABEL: s_shuffle_v2i32_v4i32__2_2: 5013; GFX940: ; %bb.0: 5014; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5015; GFX940-NEXT: ;;#ASMSTART 5016; GFX940-NEXT: ; def s[0:3] 5017; GFX940-NEXT: ;;#ASMEND 5018; GFX940-NEXT: s_mov_b32 s3, s2 5019; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 5020; GFX940-NEXT: ;;#ASMSTART 5021; GFX940-NEXT: ; use s[8:9] 5022; GFX940-NEXT: ;;#ASMEND 5023; GFX940-NEXT: s_setpc_b64 s[30:31] 5024 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5025 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 2> 5026 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5027 ret void 5028} 5029 5030define void @s_shuffle_v2i32_v4i32__3_2() { 5031; GFX900-LABEL: s_shuffle_v2i32_v4i32__3_2: 5032; GFX900: ; %bb.0: 5033; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5034; GFX900-NEXT: ;;#ASMSTART 5035; GFX900-NEXT: ; def s[4:7] 5036; GFX900-NEXT: ;;#ASMEND 5037; GFX900-NEXT: s_mov_b32 s8, s7 5038; GFX900-NEXT: s_mov_b32 s9, s6 5039; GFX900-NEXT: ;;#ASMSTART 5040; GFX900-NEXT: ; use s[8:9] 5041; GFX900-NEXT: ;;#ASMEND 5042; GFX900-NEXT: s_setpc_b64 s[30:31] 5043; 5044; GFX90A-LABEL: s_shuffle_v2i32_v4i32__3_2: 5045; GFX90A: ; %bb.0: 5046; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5047; GFX90A-NEXT: ;;#ASMSTART 5048; GFX90A-NEXT: ; def s[4:7] 5049; GFX90A-NEXT: ;;#ASMEND 5050; GFX90A-NEXT: s_mov_b32 s8, s7 5051; GFX90A-NEXT: s_mov_b32 s9, s6 5052; GFX90A-NEXT: ;;#ASMSTART 5053; GFX90A-NEXT: ; use s[8:9] 5054; GFX90A-NEXT: ;;#ASMEND 5055; GFX90A-NEXT: s_setpc_b64 s[30:31] 5056; 5057; GFX940-LABEL: s_shuffle_v2i32_v4i32__3_2: 5058; GFX940: ; %bb.0: 5059; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5060; GFX940-NEXT: ;;#ASMSTART 5061; GFX940-NEXT: ; def s[0:3] 5062; GFX940-NEXT: ;;#ASMEND 5063; GFX940-NEXT: s_mov_b32 s8, s3 5064; GFX940-NEXT: s_mov_b32 s9, s2 5065; GFX940-NEXT: ;;#ASMSTART 5066; GFX940-NEXT: ; use s[8:9] 5067; GFX940-NEXT: ;;#ASMEND 5068; GFX940-NEXT: s_setpc_b64 s[30:31] 5069 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5070 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 2> 5071 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5072 ret void 5073} 5074 5075define void @s_shuffle_v2i32_v4i32__4_2() { 5076; GFX900-LABEL: s_shuffle_v2i32_v4i32__4_2: 5077; GFX900: ; %bb.0: 5078; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5079; GFX900-NEXT: ;;#ASMSTART 5080; GFX900-NEXT: ; def s[4:7] 5081; GFX900-NEXT: ;;#ASMEND 5082; GFX900-NEXT: s_mov_b32 s9, s6 5083; GFX900-NEXT: ;;#ASMSTART 5084; GFX900-NEXT: ; use s[8:9] 5085; GFX900-NEXT: ;;#ASMEND 5086; GFX900-NEXT: s_setpc_b64 s[30:31] 5087; 5088; GFX90A-LABEL: s_shuffle_v2i32_v4i32__4_2: 5089; GFX90A: ; %bb.0: 5090; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5091; GFX90A-NEXT: ;;#ASMSTART 5092; GFX90A-NEXT: ; def s[4:7] 5093; GFX90A-NEXT: ;;#ASMEND 5094; GFX90A-NEXT: s_mov_b32 s9, s6 5095; GFX90A-NEXT: ;;#ASMSTART 5096; GFX90A-NEXT: ; use s[8:9] 5097; GFX90A-NEXT: ;;#ASMEND 5098; GFX90A-NEXT: s_setpc_b64 s[30:31] 5099; 5100; GFX940-LABEL: s_shuffle_v2i32_v4i32__4_2: 5101; GFX940: ; %bb.0: 5102; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5103; GFX940-NEXT: ;;#ASMSTART 5104; GFX940-NEXT: ; def s[0:3] 5105; GFX940-NEXT: ;;#ASMEND 5106; GFX940-NEXT: s_mov_b32 s9, s2 5107; GFX940-NEXT: ;;#ASMSTART 5108; GFX940-NEXT: ; use s[8:9] 5109; GFX940-NEXT: ;;#ASMEND 5110; GFX940-NEXT: s_setpc_b64 s[30:31] 5111 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5112 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 2> 5113 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5114 ret void 5115} 5116 5117define void @s_shuffle_v2i32_v4i32__5_2() { 5118; GFX900-LABEL: s_shuffle_v2i32_v4i32__5_2: 5119; GFX900: ; %bb.0: 5120; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5121; GFX900-NEXT: ;;#ASMSTART 5122; GFX900-NEXT: ; def s[8:11] 5123; GFX900-NEXT: ;;#ASMEND 5124; GFX900-NEXT: ;;#ASMSTART 5125; GFX900-NEXT: ; def s[4:7] 5126; GFX900-NEXT: ;;#ASMEND 5127; GFX900-NEXT: s_mov_b32 s8, s9 5128; GFX900-NEXT: s_mov_b32 s9, s6 5129; GFX900-NEXT: ;;#ASMSTART 5130; GFX900-NEXT: ; use s[8:9] 5131; GFX900-NEXT: ;;#ASMEND 5132; GFX900-NEXT: s_setpc_b64 s[30:31] 5133; 5134; GFX90A-LABEL: s_shuffle_v2i32_v4i32__5_2: 5135; GFX90A: ; %bb.0: 5136; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5137; GFX90A-NEXT: ;;#ASMSTART 5138; GFX90A-NEXT: ; def s[8:11] 5139; GFX90A-NEXT: ;;#ASMEND 5140; GFX90A-NEXT: ;;#ASMSTART 5141; GFX90A-NEXT: ; def s[4:7] 5142; GFX90A-NEXT: ;;#ASMEND 5143; GFX90A-NEXT: s_mov_b32 s8, s9 5144; GFX90A-NEXT: s_mov_b32 s9, s6 5145; GFX90A-NEXT: ;;#ASMSTART 5146; GFX90A-NEXT: ; use s[8:9] 5147; GFX90A-NEXT: ;;#ASMEND 5148; GFX90A-NEXT: s_setpc_b64 s[30:31] 5149; 5150; GFX940-LABEL: s_shuffle_v2i32_v4i32__5_2: 5151; GFX940: ; %bb.0: 5152; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5153; GFX940-NEXT: ;;#ASMSTART 5154; GFX940-NEXT: ; def s[0:3] 5155; GFX940-NEXT: ;;#ASMEND 5156; GFX940-NEXT: ;;#ASMSTART 5157; GFX940-NEXT: ; def s[4:7] 5158; GFX940-NEXT: ;;#ASMEND 5159; GFX940-NEXT: s_mov_b32 s8, s5 5160; GFX940-NEXT: s_mov_b32 s9, s2 5161; GFX940-NEXT: ;;#ASMSTART 5162; GFX940-NEXT: ; use s[8:9] 5163; GFX940-NEXT: ;;#ASMEND 5164; GFX940-NEXT: s_setpc_b64 s[30:31] 5165 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5166 %vec1 = call <4 x i32> asm "; def $0", "=s"() 5167 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 2> 5168 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5169 ret void 5170} 5171 5172define void @s_shuffle_v2i32_v4i32__6_2() { 5173; GFX900-LABEL: s_shuffle_v2i32_v4i32__6_2: 5174; GFX900: ; %bb.0: 5175; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5176; GFX900-NEXT: ;;#ASMSTART 5177; GFX900-NEXT: ; def s[8:11] 5178; GFX900-NEXT: ;;#ASMEND 5179; GFX900-NEXT: ;;#ASMSTART 5180; GFX900-NEXT: ; def s[4:7] 5181; GFX900-NEXT: ;;#ASMEND 5182; GFX900-NEXT: s_mov_b32 s11, s6 5183; GFX900-NEXT: s_mov_b64 s[8:9], s[10:11] 5184; GFX900-NEXT: ;;#ASMSTART 5185; GFX900-NEXT: ; use s[8:9] 5186; GFX900-NEXT: ;;#ASMEND 5187; GFX900-NEXT: s_setpc_b64 s[30:31] 5188; 5189; GFX90A-LABEL: s_shuffle_v2i32_v4i32__6_2: 5190; GFX90A: ; %bb.0: 5191; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5192; GFX90A-NEXT: ;;#ASMSTART 5193; GFX90A-NEXT: ; def s[8:11] 5194; GFX90A-NEXT: ;;#ASMEND 5195; GFX90A-NEXT: ;;#ASMSTART 5196; GFX90A-NEXT: ; def s[4:7] 5197; GFX90A-NEXT: ;;#ASMEND 5198; GFX90A-NEXT: s_mov_b32 s11, s6 5199; GFX90A-NEXT: s_mov_b64 s[8:9], s[10:11] 5200; GFX90A-NEXT: ;;#ASMSTART 5201; GFX90A-NEXT: ; use s[8:9] 5202; GFX90A-NEXT: ;;#ASMEND 5203; GFX90A-NEXT: s_setpc_b64 s[30:31] 5204; 5205; GFX940-LABEL: s_shuffle_v2i32_v4i32__6_2: 5206; GFX940: ; %bb.0: 5207; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5208; GFX940-NEXT: ;;#ASMSTART 5209; GFX940-NEXT: ; def s[4:7] 5210; GFX940-NEXT: ;;#ASMEND 5211; GFX940-NEXT: ;;#ASMSTART 5212; GFX940-NEXT: ; def s[0:3] 5213; GFX940-NEXT: ;;#ASMEND 5214; GFX940-NEXT: s_mov_b32 s7, s2 5215; GFX940-NEXT: s_mov_b64 s[8:9], s[6:7] 5216; GFX940-NEXT: ;;#ASMSTART 5217; GFX940-NEXT: ; use s[8:9] 5218; GFX940-NEXT: ;;#ASMEND 5219; GFX940-NEXT: s_setpc_b64 s[30:31] 5220 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5221 %vec1 = call <4 x i32> asm "; def $0", "=s"() 5222 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 2> 5223 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5224 ret void 5225} 5226 5227define void @s_shuffle_v2i32_v4i32__u_3() { 5228; GFX900-LABEL: s_shuffle_v2i32_v4i32__u_3: 5229; GFX900: ; %bb.0: 5230; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5231; GFX900-NEXT: ;;#ASMSTART 5232; GFX900-NEXT: ; def s[4:7] 5233; GFX900-NEXT: ;;#ASMEND 5234; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 5235; GFX900-NEXT: ;;#ASMSTART 5236; GFX900-NEXT: ; use s[8:9] 5237; GFX900-NEXT: ;;#ASMEND 5238; GFX900-NEXT: s_setpc_b64 s[30:31] 5239; 5240; GFX90A-LABEL: s_shuffle_v2i32_v4i32__u_3: 5241; GFX90A: ; %bb.0: 5242; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5243; GFX90A-NEXT: ;;#ASMSTART 5244; GFX90A-NEXT: ; def s[4:7] 5245; GFX90A-NEXT: ;;#ASMEND 5246; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 5247; GFX90A-NEXT: ;;#ASMSTART 5248; GFX90A-NEXT: ; use s[8:9] 5249; GFX90A-NEXT: ;;#ASMEND 5250; GFX90A-NEXT: s_setpc_b64 s[30:31] 5251; 5252; GFX940-LABEL: s_shuffle_v2i32_v4i32__u_3: 5253; GFX940: ; %bb.0: 5254; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5255; GFX940-NEXT: ;;#ASMSTART 5256; GFX940-NEXT: ; def s[0:3] 5257; GFX940-NEXT: ;;#ASMEND 5258; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 5259; GFX940-NEXT: ;;#ASMSTART 5260; GFX940-NEXT: ; use s[8:9] 5261; GFX940-NEXT: ;;#ASMEND 5262; GFX940-NEXT: s_setpc_b64 s[30:31] 5263 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5264 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 poison, i32 3> 5265 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5266 ret void 5267} 5268 5269define void @s_shuffle_v2i32_v4i32__0_3() { 5270; GFX9-LABEL: s_shuffle_v2i32_v4i32__0_3: 5271; GFX9: ; %bb.0: 5272; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5273; GFX9-NEXT: ;;#ASMSTART 5274; GFX9-NEXT: ; def s[8:11] 5275; GFX9-NEXT: ;;#ASMEND 5276; GFX9-NEXT: s_mov_b32 s9, s11 5277; GFX9-NEXT: ;;#ASMSTART 5278; GFX9-NEXT: ; use s[8:9] 5279; GFX9-NEXT: ;;#ASMEND 5280; GFX9-NEXT: s_setpc_b64 s[30:31] 5281 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5282 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 0, i32 3> 5283 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5284 ret void 5285} 5286 5287define void @s_shuffle_v2i32_v4i32__1_3() { 5288; GFX900-LABEL: s_shuffle_v2i32_v4i32__1_3: 5289; GFX900: ; %bb.0: 5290; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5291; GFX900-NEXT: ;;#ASMSTART 5292; GFX900-NEXT: ; def s[4:7] 5293; GFX900-NEXT: ;;#ASMEND 5294; GFX900-NEXT: s_mov_b32 s6, s5 5295; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 5296; GFX900-NEXT: ;;#ASMSTART 5297; GFX900-NEXT: ; use s[8:9] 5298; GFX900-NEXT: ;;#ASMEND 5299; GFX900-NEXT: s_setpc_b64 s[30:31] 5300; 5301; GFX90A-LABEL: s_shuffle_v2i32_v4i32__1_3: 5302; GFX90A: ; %bb.0: 5303; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5304; GFX90A-NEXT: ;;#ASMSTART 5305; GFX90A-NEXT: ; def s[4:7] 5306; GFX90A-NEXT: ;;#ASMEND 5307; GFX90A-NEXT: s_mov_b32 s6, s5 5308; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 5309; GFX90A-NEXT: ;;#ASMSTART 5310; GFX90A-NEXT: ; use s[8:9] 5311; GFX90A-NEXT: ;;#ASMEND 5312; GFX90A-NEXT: s_setpc_b64 s[30:31] 5313; 5314; GFX940-LABEL: s_shuffle_v2i32_v4i32__1_3: 5315; GFX940: ; %bb.0: 5316; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5317; GFX940-NEXT: ;;#ASMSTART 5318; GFX940-NEXT: ; def s[0:3] 5319; GFX940-NEXT: ;;#ASMEND 5320; GFX940-NEXT: s_mov_b32 s2, s1 5321; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 5322; GFX940-NEXT: ;;#ASMSTART 5323; GFX940-NEXT: ; use s[8:9] 5324; GFX940-NEXT: ;;#ASMEND 5325; GFX940-NEXT: s_setpc_b64 s[30:31] 5326 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5327 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 3> 5328 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5329 ret void 5330} 5331 5332define void @s_shuffle_v2i32_v4i32__2_3() { 5333; GFX900-LABEL: s_shuffle_v2i32_v4i32__2_3: 5334; GFX900: ; %bb.0: 5335; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5336; GFX900-NEXT: ;;#ASMSTART 5337; GFX900-NEXT: ; def s[4:7] 5338; GFX900-NEXT: ;;#ASMEND 5339; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 5340; GFX900-NEXT: ;;#ASMSTART 5341; GFX900-NEXT: ; use s[8:9] 5342; GFX900-NEXT: ;;#ASMEND 5343; GFX900-NEXT: s_setpc_b64 s[30:31] 5344; 5345; GFX90A-LABEL: s_shuffle_v2i32_v4i32__2_3: 5346; GFX90A: ; %bb.0: 5347; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5348; GFX90A-NEXT: ;;#ASMSTART 5349; GFX90A-NEXT: ; def s[4:7] 5350; GFX90A-NEXT: ;;#ASMEND 5351; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 5352; GFX90A-NEXT: ;;#ASMSTART 5353; GFX90A-NEXT: ; use s[8:9] 5354; GFX90A-NEXT: ;;#ASMEND 5355; GFX90A-NEXT: s_setpc_b64 s[30:31] 5356; 5357; GFX940-LABEL: s_shuffle_v2i32_v4i32__2_3: 5358; GFX940: ; %bb.0: 5359; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5360; GFX940-NEXT: ;;#ASMSTART 5361; GFX940-NEXT: ; def s[0:3] 5362; GFX940-NEXT: ;;#ASMEND 5363; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 5364; GFX940-NEXT: ;;#ASMSTART 5365; GFX940-NEXT: ; use s[8:9] 5366; GFX940-NEXT: ;;#ASMEND 5367; GFX940-NEXT: s_setpc_b64 s[30:31] 5368 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5369 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 3> 5370 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5371 ret void 5372} 5373 5374define void @s_shuffle_v2i32_v4i32__3_3() { 5375; GFX900-LABEL: s_shuffle_v2i32_v4i32__3_3: 5376; GFX900: ; %bb.0: 5377; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5378; GFX900-NEXT: ;;#ASMSTART 5379; GFX900-NEXT: ; def s[4:7] 5380; GFX900-NEXT: ;;#ASMEND 5381; GFX900-NEXT: s_mov_b32 s6, s7 5382; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 5383; GFX900-NEXT: ;;#ASMSTART 5384; GFX900-NEXT: ; use s[8:9] 5385; GFX900-NEXT: ;;#ASMEND 5386; GFX900-NEXT: s_setpc_b64 s[30:31] 5387; 5388; GFX90A-LABEL: s_shuffle_v2i32_v4i32__3_3: 5389; GFX90A: ; %bb.0: 5390; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5391; GFX90A-NEXT: ;;#ASMSTART 5392; GFX90A-NEXT: ; def s[4:7] 5393; GFX90A-NEXT: ;;#ASMEND 5394; GFX90A-NEXT: s_mov_b32 s6, s7 5395; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 5396; GFX90A-NEXT: ;;#ASMSTART 5397; GFX90A-NEXT: ; use s[8:9] 5398; GFX90A-NEXT: ;;#ASMEND 5399; GFX90A-NEXT: s_setpc_b64 s[30:31] 5400; 5401; GFX940-LABEL: s_shuffle_v2i32_v4i32__3_3: 5402; GFX940: ; %bb.0: 5403; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5404; GFX940-NEXT: ;;#ASMSTART 5405; GFX940-NEXT: ; def s[0:3] 5406; GFX940-NEXT: ;;#ASMEND 5407; GFX940-NEXT: s_mov_b32 s2, s3 5408; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 5409; GFX940-NEXT: ;;#ASMSTART 5410; GFX940-NEXT: ; use s[8:9] 5411; GFX940-NEXT: ;;#ASMEND 5412; GFX940-NEXT: s_setpc_b64 s[30:31] 5413 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5414 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 3> 5415 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5416 ret void 5417} 5418 5419define void @s_shuffle_v2i32_v4i32__4_3() { 5420; GFX900-LABEL: s_shuffle_v2i32_v4i32__4_3: 5421; GFX900: ; %bb.0: 5422; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5423; GFX900-NEXT: ;;#ASMSTART 5424; GFX900-NEXT: ; def s[4:7] 5425; GFX900-NEXT: ;;#ASMEND 5426; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 5427; GFX900-NEXT: ;;#ASMSTART 5428; GFX900-NEXT: ; use s[8:9] 5429; GFX900-NEXT: ;;#ASMEND 5430; GFX900-NEXT: s_setpc_b64 s[30:31] 5431; 5432; GFX90A-LABEL: s_shuffle_v2i32_v4i32__4_3: 5433; GFX90A: ; %bb.0: 5434; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5435; GFX90A-NEXT: ;;#ASMSTART 5436; GFX90A-NEXT: ; def s[4:7] 5437; GFX90A-NEXT: ;;#ASMEND 5438; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 5439; GFX90A-NEXT: ;;#ASMSTART 5440; GFX90A-NEXT: ; use s[8:9] 5441; GFX90A-NEXT: ;;#ASMEND 5442; GFX90A-NEXT: s_setpc_b64 s[30:31] 5443; 5444; GFX940-LABEL: s_shuffle_v2i32_v4i32__4_3: 5445; GFX940: ; %bb.0: 5446; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5447; GFX940-NEXT: ;;#ASMSTART 5448; GFX940-NEXT: ; def s[0:3] 5449; GFX940-NEXT: ;;#ASMEND 5450; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 5451; GFX940-NEXT: ;;#ASMSTART 5452; GFX940-NEXT: ; use s[8:9] 5453; GFX940-NEXT: ;;#ASMEND 5454; GFX940-NEXT: s_setpc_b64 s[30:31] 5455 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5456 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 3> 5457 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5458 ret void 5459} 5460 5461define void @s_shuffle_v2i32_v4i32__5_3() { 5462; GFX900-LABEL: s_shuffle_v2i32_v4i32__5_3: 5463; GFX900: ; %bb.0: 5464; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5465; GFX900-NEXT: ;;#ASMSTART 5466; GFX900-NEXT: ; def s[4:7] 5467; GFX900-NEXT: ;;#ASMEND 5468; GFX900-NEXT: ;;#ASMSTART 5469; GFX900-NEXT: ; def s[8:11] 5470; GFX900-NEXT: ;;#ASMEND 5471; GFX900-NEXT: s_mov_b32 s6, s9 5472; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 5473; GFX900-NEXT: ;;#ASMSTART 5474; GFX900-NEXT: ; use s[8:9] 5475; GFX900-NEXT: ;;#ASMEND 5476; GFX900-NEXT: s_setpc_b64 s[30:31] 5477; 5478; GFX90A-LABEL: s_shuffle_v2i32_v4i32__5_3: 5479; GFX90A: ; %bb.0: 5480; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5481; GFX90A-NEXT: ;;#ASMSTART 5482; GFX90A-NEXT: ; def s[4:7] 5483; GFX90A-NEXT: ;;#ASMEND 5484; GFX90A-NEXT: ;;#ASMSTART 5485; GFX90A-NEXT: ; def s[8:11] 5486; GFX90A-NEXT: ;;#ASMEND 5487; GFX90A-NEXT: s_mov_b32 s6, s9 5488; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 5489; GFX90A-NEXT: ;;#ASMSTART 5490; GFX90A-NEXT: ; use s[8:9] 5491; GFX90A-NEXT: ;;#ASMEND 5492; GFX90A-NEXT: s_setpc_b64 s[30:31] 5493; 5494; GFX940-LABEL: s_shuffle_v2i32_v4i32__5_3: 5495; GFX940: ; %bb.0: 5496; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5497; GFX940-NEXT: ;;#ASMSTART 5498; GFX940-NEXT: ; def s[0:3] 5499; GFX940-NEXT: ;;#ASMEND 5500; GFX940-NEXT: ;;#ASMSTART 5501; GFX940-NEXT: ; def s[4:7] 5502; GFX940-NEXT: ;;#ASMEND 5503; GFX940-NEXT: s_mov_b32 s2, s5 5504; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 5505; GFX940-NEXT: ;;#ASMSTART 5506; GFX940-NEXT: ; use s[8:9] 5507; GFX940-NEXT: ;;#ASMEND 5508; GFX940-NEXT: s_setpc_b64 s[30:31] 5509 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5510 %vec1 = call <4 x i32> asm "; def $0", "=s"() 5511 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 3> 5512 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5513 ret void 5514} 5515 5516define void @s_shuffle_v2i32_v4i32__6_3() { 5517; GFX900-LABEL: s_shuffle_v2i32_v4i32__6_3: 5518; GFX900: ; %bb.0: 5519; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5520; GFX900-NEXT: ;;#ASMSTART 5521; GFX900-NEXT: ; def s[8:11] 5522; GFX900-NEXT: ;;#ASMEND 5523; GFX900-NEXT: ;;#ASMSTART 5524; GFX900-NEXT: ; def s[4:7] 5525; GFX900-NEXT: ;;#ASMEND 5526; GFX900-NEXT: s_mov_b32 s11, s7 5527; GFX900-NEXT: s_mov_b64 s[8:9], s[10:11] 5528; GFX900-NEXT: ;;#ASMSTART 5529; GFX900-NEXT: ; use s[8:9] 5530; GFX900-NEXT: ;;#ASMEND 5531; GFX900-NEXT: s_setpc_b64 s[30:31] 5532; 5533; GFX90A-LABEL: s_shuffle_v2i32_v4i32__6_3: 5534; GFX90A: ; %bb.0: 5535; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5536; GFX90A-NEXT: ;;#ASMSTART 5537; GFX90A-NEXT: ; def s[8:11] 5538; GFX90A-NEXT: ;;#ASMEND 5539; GFX90A-NEXT: ;;#ASMSTART 5540; GFX90A-NEXT: ; def s[4:7] 5541; GFX90A-NEXT: ;;#ASMEND 5542; GFX90A-NEXT: s_mov_b32 s11, s7 5543; GFX90A-NEXT: s_mov_b64 s[8:9], s[10:11] 5544; GFX90A-NEXT: ;;#ASMSTART 5545; GFX90A-NEXT: ; use s[8:9] 5546; GFX90A-NEXT: ;;#ASMEND 5547; GFX90A-NEXT: s_setpc_b64 s[30:31] 5548; 5549; GFX940-LABEL: s_shuffle_v2i32_v4i32__6_3: 5550; GFX940: ; %bb.0: 5551; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5552; GFX940-NEXT: ;;#ASMSTART 5553; GFX940-NEXT: ; def s[4:7] 5554; GFX940-NEXT: ;;#ASMEND 5555; GFX940-NEXT: ;;#ASMSTART 5556; GFX940-NEXT: ; def s[0:3] 5557; GFX940-NEXT: ;;#ASMEND 5558; GFX940-NEXT: s_mov_b32 s7, s3 5559; GFX940-NEXT: s_mov_b64 s[8:9], s[6:7] 5560; GFX940-NEXT: ;;#ASMSTART 5561; GFX940-NEXT: ; use s[8:9] 5562; GFX940-NEXT: ;;#ASMEND 5563; GFX940-NEXT: s_setpc_b64 s[30:31] 5564 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5565 %vec1 = call <4 x i32> asm "; def $0", "=s"() 5566 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 3> 5567 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5568 ret void 5569} 5570 5571define void @s_shuffle_v2i32_v4i32__u_4() { 5572; GFX9-LABEL: s_shuffle_v2i32_v4i32__u_4: 5573; GFX9: ; %bb.0: 5574; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5575; GFX9-NEXT: ;;#ASMSTART 5576; GFX9-NEXT: ; use s[8:9] 5577; GFX9-NEXT: ;;#ASMEND 5578; GFX9-NEXT: s_setpc_b64 s[30:31] 5579 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5580 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 poison, i32 4> 5581 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5582 ret void 5583} 5584 5585define void @s_shuffle_v2i32_v4i32__0_4() { 5586; GFX900-LABEL: s_shuffle_v2i32_v4i32__0_4: 5587; GFX900: ; %bb.0: 5588; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5589; GFX900-NEXT: ;;#ASMSTART 5590; GFX900-NEXT: ; def s[8:11] 5591; GFX900-NEXT: ;;#ASMEND 5592; GFX900-NEXT: ;;#ASMSTART 5593; GFX900-NEXT: ; use s[8:9] 5594; GFX900-NEXT: ;;#ASMEND 5595; GFX900-NEXT: s_setpc_b64 s[30:31] 5596; 5597; GFX90A-LABEL: s_shuffle_v2i32_v4i32__0_4: 5598; GFX90A: ; %bb.0: 5599; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5600; GFX90A-NEXT: ;;#ASMSTART 5601; GFX90A-NEXT: ; def s[8:11] 5602; GFX90A-NEXT: ;;#ASMEND 5603; GFX90A-NEXT: ;;#ASMSTART 5604; GFX90A-NEXT: ; use s[8:9] 5605; GFX90A-NEXT: ;;#ASMEND 5606; GFX90A-NEXT: s_setpc_b64 s[30:31] 5607; 5608; GFX940-LABEL: s_shuffle_v2i32_v4i32__0_4: 5609; GFX940: ; %bb.0: 5610; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5611; GFX940-NEXT: ;;#ASMSTART 5612; GFX940-NEXT: ; def s[8:11] 5613; GFX940-NEXT: ;;#ASMEND 5614; GFX940-NEXT: s_nop 0 5615; GFX940-NEXT: ;;#ASMSTART 5616; GFX940-NEXT: ; use s[8:9] 5617; GFX940-NEXT: ;;#ASMEND 5618; GFX940-NEXT: s_setpc_b64 s[30:31] 5619 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5620 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 0, i32 4> 5621 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5622 ret void 5623} 5624 5625define void @s_shuffle_v2i32_v4i32__1_4() { 5626; GFX900-LABEL: s_shuffle_v2i32_v4i32__1_4: 5627; GFX900: ; %bb.0: 5628; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5629; GFX900-NEXT: ;;#ASMSTART 5630; GFX900-NEXT: ; def s[4:7] 5631; GFX900-NEXT: ;;#ASMEND 5632; GFX900-NEXT: s_mov_b32 s8, s5 5633; GFX900-NEXT: ;;#ASMSTART 5634; GFX900-NEXT: ; use s[8:9] 5635; GFX900-NEXT: ;;#ASMEND 5636; GFX900-NEXT: s_setpc_b64 s[30:31] 5637; 5638; GFX90A-LABEL: s_shuffle_v2i32_v4i32__1_4: 5639; GFX90A: ; %bb.0: 5640; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5641; GFX90A-NEXT: ;;#ASMSTART 5642; GFX90A-NEXT: ; def s[4:7] 5643; GFX90A-NEXT: ;;#ASMEND 5644; GFX90A-NEXT: s_mov_b32 s8, s5 5645; GFX90A-NEXT: ;;#ASMSTART 5646; GFX90A-NEXT: ; use s[8:9] 5647; GFX90A-NEXT: ;;#ASMEND 5648; GFX90A-NEXT: s_setpc_b64 s[30:31] 5649; 5650; GFX940-LABEL: s_shuffle_v2i32_v4i32__1_4: 5651; GFX940: ; %bb.0: 5652; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5653; GFX940-NEXT: ;;#ASMSTART 5654; GFX940-NEXT: ; def s[0:3] 5655; GFX940-NEXT: ;;#ASMEND 5656; GFX940-NEXT: s_mov_b32 s8, s1 5657; GFX940-NEXT: ;;#ASMSTART 5658; GFX940-NEXT: ; use s[8:9] 5659; GFX940-NEXT: ;;#ASMEND 5660; GFX940-NEXT: s_setpc_b64 s[30:31] 5661 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5662 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 4> 5663 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5664 ret void 5665} 5666 5667define void @s_shuffle_v2i32_v4i32__2_4() { 5668; GFX900-LABEL: s_shuffle_v2i32_v4i32__2_4: 5669; GFX900: ; %bb.0: 5670; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5671; GFX900-NEXT: ;;#ASMSTART 5672; GFX900-NEXT: ; def s[4:7] 5673; GFX900-NEXT: ;;#ASMEND 5674; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 5675; GFX900-NEXT: ;;#ASMSTART 5676; GFX900-NEXT: ; use s[8:9] 5677; GFX900-NEXT: ;;#ASMEND 5678; GFX900-NEXT: s_setpc_b64 s[30:31] 5679; 5680; GFX90A-LABEL: s_shuffle_v2i32_v4i32__2_4: 5681; GFX90A: ; %bb.0: 5682; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5683; GFX90A-NEXT: ;;#ASMSTART 5684; GFX90A-NEXT: ; def s[4:7] 5685; GFX90A-NEXT: ;;#ASMEND 5686; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 5687; GFX90A-NEXT: ;;#ASMSTART 5688; GFX90A-NEXT: ; use s[8:9] 5689; GFX90A-NEXT: ;;#ASMEND 5690; GFX90A-NEXT: s_setpc_b64 s[30:31] 5691; 5692; GFX940-LABEL: s_shuffle_v2i32_v4i32__2_4: 5693; GFX940: ; %bb.0: 5694; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5695; GFX940-NEXT: ;;#ASMSTART 5696; GFX940-NEXT: ; def s[0:3] 5697; GFX940-NEXT: ;;#ASMEND 5698; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 5699; GFX940-NEXT: ;;#ASMSTART 5700; GFX940-NEXT: ; use s[8:9] 5701; GFX940-NEXT: ;;#ASMEND 5702; GFX940-NEXT: s_setpc_b64 s[30:31] 5703 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5704 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 4> 5705 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5706 ret void 5707} 5708 5709define void @s_shuffle_v2i32_v4i32__3_4() { 5710; GFX900-LABEL: s_shuffle_v2i32_v4i32__3_4: 5711; GFX900: ; %bb.0: 5712; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5713; GFX900-NEXT: ;;#ASMSTART 5714; GFX900-NEXT: ; def s[4:7] 5715; GFX900-NEXT: ;;#ASMEND 5716; GFX900-NEXT: s_mov_b32 s8, s7 5717; GFX900-NEXT: ;;#ASMSTART 5718; GFX900-NEXT: ; use s[8:9] 5719; GFX900-NEXT: ;;#ASMEND 5720; GFX900-NEXT: s_setpc_b64 s[30:31] 5721; 5722; GFX90A-LABEL: s_shuffle_v2i32_v4i32__3_4: 5723; GFX90A: ; %bb.0: 5724; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5725; GFX90A-NEXT: ;;#ASMSTART 5726; GFX90A-NEXT: ; def s[4:7] 5727; GFX90A-NEXT: ;;#ASMEND 5728; GFX90A-NEXT: s_mov_b32 s8, s7 5729; GFX90A-NEXT: ;;#ASMSTART 5730; GFX90A-NEXT: ; use s[8:9] 5731; GFX90A-NEXT: ;;#ASMEND 5732; GFX90A-NEXT: s_setpc_b64 s[30:31] 5733; 5734; GFX940-LABEL: s_shuffle_v2i32_v4i32__3_4: 5735; GFX940: ; %bb.0: 5736; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5737; GFX940-NEXT: ;;#ASMSTART 5738; GFX940-NEXT: ; def s[0:3] 5739; GFX940-NEXT: ;;#ASMEND 5740; GFX940-NEXT: s_mov_b32 s8, s3 5741; GFX940-NEXT: ;;#ASMSTART 5742; GFX940-NEXT: ; use s[8:9] 5743; GFX940-NEXT: ;;#ASMEND 5744; GFX940-NEXT: s_setpc_b64 s[30:31] 5745 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5746 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 4> 5747 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5748 ret void 5749} 5750 5751define void @s_shuffle_v2i32_v4i32__4_4() { 5752; GFX9-LABEL: s_shuffle_v2i32_v4i32__4_4: 5753; GFX9: ; %bb.0: 5754; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5755; GFX9-NEXT: ;;#ASMSTART 5756; GFX9-NEXT: ; use s[8:9] 5757; GFX9-NEXT: ;;#ASMEND 5758; GFX9-NEXT: s_setpc_b64 s[30:31] 5759 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5760 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 4> 5761 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5762 ret void 5763} 5764 5765define void @s_shuffle_v2i32_v4i32__5_4() { 5766; GFX900-LABEL: s_shuffle_v2i32_v4i32__5_4: 5767; GFX900: ; %bb.0: 5768; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5769; GFX900-NEXT: ;;#ASMSTART 5770; GFX900-NEXT: ; def s[4:7] 5771; GFX900-NEXT: ;;#ASMEND 5772; GFX900-NEXT: s_mov_b32 s8, s5 5773; GFX900-NEXT: s_mov_b32 s9, s4 5774; GFX900-NEXT: ;;#ASMSTART 5775; GFX900-NEXT: ; use s[8:9] 5776; GFX900-NEXT: ;;#ASMEND 5777; GFX900-NEXT: s_setpc_b64 s[30:31] 5778; 5779; GFX90A-LABEL: s_shuffle_v2i32_v4i32__5_4: 5780; GFX90A: ; %bb.0: 5781; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5782; GFX90A-NEXT: ;;#ASMSTART 5783; GFX90A-NEXT: ; def s[4:7] 5784; GFX90A-NEXT: ;;#ASMEND 5785; GFX90A-NEXT: s_mov_b32 s8, s5 5786; GFX90A-NEXT: s_mov_b32 s9, s4 5787; GFX90A-NEXT: ;;#ASMSTART 5788; GFX90A-NEXT: ; use s[8:9] 5789; GFX90A-NEXT: ;;#ASMEND 5790; GFX90A-NEXT: s_setpc_b64 s[30:31] 5791; 5792; GFX940-LABEL: s_shuffle_v2i32_v4i32__5_4: 5793; GFX940: ; %bb.0: 5794; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5795; GFX940-NEXT: ;;#ASMSTART 5796; GFX940-NEXT: ; def s[0:3] 5797; GFX940-NEXT: ;;#ASMEND 5798; GFX940-NEXT: s_mov_b32 s8, s1 5799; GFX940-NEXT: s_mov_b32 s9, s0 5800; GFX940-NEXT: ;;#ASMSTART 5801; GFX940-NEXT: ; use s[8:9] 5802; GFX940-NEXT: ;;#ASMEND 5803; GFX940-NEXT: s_setpc_b64 s[30:31] 5804 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5805 %vec1 = call <4 x i32> asm "; def $0", "=s"() 5806 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 4> 5807 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5808 ret void 5809} 5810 5811define void @s_shuffle_v2i32_v4i32__6_4() { 5812; GFX900-LABEL: s_shuffle_v2i32_v4i32__6_4: 5813; GFX900: ; %bb.0: 5814; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5815; GFX900-NEXT: ;;#ASMSTART 5816; GFX900-NEXT: ; def s[4:7] 5817; GFX900-NEXT: ;;#ASMEND 5818; GFX900-NEXT: s_mov_b32 s7, s4 5819; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 5820; GFX900-NEXT: ;;#ASMSTART 5821; GFX900-NEXT: ; use s[8:9] 5822; GFX900-NEXT: ;;#ASMEND 5823; GFX900-NEXT: s_setpc_b64 s[30:31] 5824; 5825; GFX90A-LABEL: s_shuffle_v2i32_v4i32__6_4: 5826; GFX90A: ; %bb.0: 5827; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5828; GFX90A-NEXT: ;;#ASMSTART 5829; GFX90A-NEXT: ; def s[4:7] 5830; GFX90A-NEXT: ;;#ASMEND 5831; GFX90A-NEXT: s_mov_b32 s7, s4 5832; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 5833; GFX90A-NEXT: ;;#ASMSTART 5834; GFX90A-NEXT: ; use s[8:9] 5835; GFX90A-NEXT: ;;#ASMEND 5836; GFX90A-NEXT: s_setpc_b64 s[30:31] 5837; 5838; GFX940-LABEL: s_shuffle_v2i32_v4i32__6_4: 5839; GFX940: ; %bb.0: 5840; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5841; GFX940-NEXT: ;;#ASMSTART 5842; GFX940-NEXT: ; def s[0:3] 5843; GFX940-NEXT: ;;#ASMEND 5844; GFX940-NEXT: s_mov_b32 s3, s0 5845; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 5846; GFX940-NEXT: ;;#ASMSTART 5847; GFX940-NEXT: ; use s[8:9] 5848; GFX940-NEXT: ;;#ASMEND 5849; GFX940-NEXT: s_setpc_b64 s[30:31] 5850 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5851 %vec1 = call <4 x i32> asm "; def $0", "=s"() 5852 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 4> 5853 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5854 ret void 5855} 5856 5857define void @s_shuffle_v2i32_v4i32__u_5() { 5858; GFX900-LABEL: s_shuffle_v2i32_v4i32__u_5: 5859; GFX900: ; %bb.0: 5860; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5861; GFX900-NEXT: ;;#ASMSTART 5862; GFX900-NEXT: ; def s[8:11] 5863; GFX900-NEXT: ;;#ASMEND 5864; GFX900-NEXT: ;;#ASMSTART 5865; GFX900-NEXT: ; use s[8:9] 5866; GFX900-NEXT: ;;#ASMEND 5867; GFX900-NEXT: s_setpc_b64 s[30:31] 5868; 5869; GFX90A-LABEL: s_shuffle_v2i32_v4i32__u_5: 5870; GFX90A: ; %bb.0: 5871; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5872; GFX90A-NEXT: ;;#ASMSTART 5873; GFX90A-NEXT: ; def s[8:11] 5874; GFX90A-NEXT: ;;#ASMEND 5875; GFX90A-NEXT: ;;#ASMSTART 5876; GFX90A-NEXT: ; use s[8:9] 5877; GFX90A-NEXT: ;;#ASMEND 5878; GFX90A-NEXT: s_setpc_b64 s[30:31] 5879; 5880; GFX940-LABEL: s_shuffle_v2i32_v4i32__u_5: 5881; GFX940: ; %bb.0: 5882; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5883; GFX940-NEXT: ;;#ASMSTART 5884; GFX940-NEXT: ; def s[8:11] 5885; GFX940-NEXT: ;;#ASMEND 5886; GFX940-NEXT: s_nop 0 5887; GFX940-NEXT: ;;#ASMSTART 5888; GFX940-NEXT: ; use s[8:9] 5889; GFX940-NEXT: ;;#ASMEND 5890; GFX940-NEXT: s_setpc_b64 s[30:31] 5891 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5892 %vec1 = call <4 x i32> asm "; def $0", "=s"() 5893 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 poison, i32 5> 5894 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5895 ret void 5896} 5897 5898define void @s_shuffle_v2i32_v4i32__0_5() { 5899; GFX900-LABEL: s_shuffle_v2i32_v4i32__0_5: 5900; GFX900: ; %bb.0: 5901; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5902; GFX900-NEXT: ;;#ASMSTART 5903; GFX900-NEXT: ; def s[8:11] 5904; GFX900-NEXT: ;;#ASMEND 5905; GFX900-NEXT: ;;#ASMSTART 5906; GFX900-NEXT: ; def s[4:7] 5907; GFX900-NEXT: ;;#ASMEND 5908; GFX900-NEXT: s_mov_b32 s9, s5 5909; GFX900-NEXT: ;;#ASMSTART 5910; GFX900-NEXT: ; use s[8:9] 5911; GFX900-NEXT: ;;#ASMEND 5912; GFX900-NEXT: s_setpc_b64 s[30:31] 5913; 5914; GFX90A-LABEL: s_shuffle_v2i32_v4i32__0_5: 5915; GFX90A: ; %bb.0: 5916; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5917; GFX90A-NEXT: ;;#ASMSTART 5918; GFX90A-NEXT: ; def s[8:11] 5919; GFX90A-NEXT: ;;#ASMEND 5920; GFX90A-NEXT: ;;#ASMSTART 5921; GFX90A-NEXT: ; def s[4:7] 5922; GFX90A-NEXT: ;;#ASMEND 5923; GFX90A-NEXT: s_mov_b32 s9, s5 5924; GFX90A-NEXT: ;;#ASMSTART 5925; GFX90A-NEXT: ; use s[8:9] 5926; GFX90A-NEXT: ;;#ASMEND 5927; GFX90A-NEXT: s_setpc_b64 s[30:31] 5928; 5929; GFX940-LABEL: s_shuffle_v2i32_v4i32__0_5: 5930; GFX940: ; %bb.0: 5931; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5932; GFX940-NEXT: ;;#ASMSTART 5933; GFX940-NEXT: ; def s[8:11] 5934; GFX940-NEXT: ;;#ASMEND 5935; GFX940-NEXT: ;;#ASMSTART 5936; GFX940-NEXT: ; def s[0:3] 5937; GFX940-NEXT: ;;#ASMEND 5938; GFX940-NEXT: s_mov_b32 s9, s1 5939; GFX940-NEXT: ;;#ASMSTART 5940; GFX940-NEXT: ; use s[8:9] 5941; GFX940-NEXT: ;;#ASMEND 5942; GFX940-NEXT: s_setpc_b64 s[30:31] 5943 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5944 %vec1 = call <4 x i32> asm "; def $0", "=s"() 5945 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 0, i32 5> 5946 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5947 ret void 5948} 5949 5950define void @s_shuffle_v2i32_v4i32__1_5() { 5951; GFX900-LABEL: s_shuffle_v2i32_v4i32__1_5: 5952; GFX900: ; %bb.0: 5953; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5954; GFX900-NEXT: ;;#ASMSTART 5955; GFX900-NEXT: ; def s[8:11] 5956; GFX900-NEXT: ;;#ASMEND 5957; GFX900-NEXT: ;;#ASMSTART 5958; GFX900-NEXT: ; def s[4:7] 5959; GFX900-NEXT: ;;#ASMEND 5960; GFX900-NEXT: s_mov_b32 s8, s5 5961; GFX900-NEXT: ;;#ASMSTART 5962; GFX900-NEXT: ; use s[8:9] 5963; GFX900-NEXT: ;;#ASMEND 5964; GFX900-NEXT: s_setpc_b64 s[30:31] 5965; 5966; GFX90A-LABEL: s_shuffle_v2i32_v4i32__1_5: 5967; GFX90A: ; %bb.0: 5968; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5969; GFX90A-NEXT: ;;#ASMSTART 5970; GFX90A-NEXT: ; def s[8:11] 5971; GFX90A-NEXT: ;;#ASMEND 5972; GFX90A-NEXT: ;;#ASMSTART 5973; GFX90A-NEXT: ; def s[4:7] 5974; GFX90A-NEXT: ;;#ASMEND 5975; GFX90A-NEXT: s_mov_b32 s8, s5 5976; GFX90A-NEXT: ;;#ASMSTART 5977; GFX90A-NEXT: ; use s[8:9] 5978; GFX90A-NEXT: ;;#ASMEND 5979; GFX90A-NEXT: s_setpc_b64 s[30:31] 5980; 5981; GFX940-LABEL: s_shuffle_v2i32_v4i32__1_5: 5982; GFX940: ; %bb.0: 5983; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5984; GFX940-NEXT: ;;#ASMSTART 5985; GFX940-NEXT: ; def s[8:11] 5986; GFX940-NEXT: ;;#ASMEND 5987; GFX940-NEXT: ;;#ASMSTART 5988; GFX940-NEXT: ; def s[0:3] 5989; GFX940-NEXT: ;;#ASMEND 5990; GFX940-NEXT: s_mov_b32 s8, s1 5991; GFX940-NEXT: ;;#ASMSTART 5992; GFX940-NEXT: ; use s[8:9] 5993; GFX940-NEXT: ;;#ASMEND 5994; GFX940-NEXT: s_setpc_b64 s[30:31] 5995 %vec0 = call <4 x i32> asm "; def $0", "=s"() 5996 %vec1 = call <4 x i32> asm "; def $0", "=s"() 5997 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 1, i32 5> 5998 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 5999 ret void 6000} 6001 6002define void @s_shuffle_v2i32_v4i32__2_5() { 6003; GFX900-LABEL: s_shuffle_v2i32_v4i32__2_5: 6004; GFX900: ; %bb.0: 6005; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6006; GFX900-NEXT: ;;#ASMSTART 6007; GFX900-NEXT: ; def s[4:7] 6008; GFX900-NEXT: ;;#ASMEND 6009; GFX900-NEXT: ;;#ASMSTART 6010; GFX900-NEXT: ; def s[8:11] 6011; GFX900-NEXT: ;;#ASMEND 6012; GFX900-NEXT: s_mov_b32 s7, s9 6013; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 6014; GFX900-NEXT: ;;#ASMSTART 6015; GFX900-NEXT: ; use s[8:9] 6016; GFX900-NEXT: ;;#ASMEND 6017; GFX900-NEXT: s_setpc_b64 s[30:31] 6018; 6019; GFX90A-LABEL: s_shuffle_v2i32_v4i32__2_5: 6020; GFX90A: ; %bb.0: 6021; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6022; GFX90A-NEXT: ;;#ASMSTART 6023; GFX90A-NEXT: ; def s[4:7] 6024; GFX90A-NEXT: ;;#ASMEND 6025; GFX90A-NEXT: ;;#ASMSTART 6026; GFX90A-NEXT: ; def s[8:11] 6027; GFX90A-NEXT: ;;#ASMEND 6028; GFX90A-NEXT: s_mov_b32 s7, s9 6029; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 6030; GFX90A-NEXT: ;;#ASMSTART 6031; GFX90A-NEXT: ; use s[8:9] 6032; GFX90A-NEXT: ;;#ASMEND 6033; GFX90A-NEXT: s_setpc_b64 s[30:31] 6034; 6035; GFX940-LABEL: s_shuffle_v2i32_v4i32__2_5: 6036; GFX940: ; %bb.0: 6037; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6038; GFX940-NEXT: ;;#ASMSTART 6039; GFX940-NEXT: ; def s[0:3] 6040; GFX940-NEXT: ;;#ASMEND 6041; GFX940-NEXT: ;;#ASMSTART 6042; GFX940-NEXT: ; def s[4:7] 6043; GFX940-NEXT: ;;#ASMEND 6044; GFX940-NEXT: s_mov_b32 s3, s5 6045; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 6046; GFX940-NEXT: ;;#ASMSTART 6047; GFX940-NEXT: ; use s[8:9] 6048; GFX940-NEXT: ;;#ASMEND 6049; GFX940-NEXT: s_setpc_b64 s[30:31] 6050 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6051 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6052 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 2, i32 5> 6053 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6054 ret void 6055} 6056 6057define void @s_shuffle_v2i32_v4i32__3_5() { 6058; GFX900-LABEL: s_shuffle_v2i32_v4i32__3_5: 6059; GFX900: ; %bb.0: 6060; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6061; GFX900-NEXT: ;;#ASMSTART 6062; GFX900-NEXT: ; def s[8:11] 6063; GFX900-NEXT: ;;#ASMEND 6064; GFX900-NEXT: ;;#ASMSTART 6065; GFX900-NEXT: ; def s[4:7] 6066; GFX900-NEXT: ;;#ASMEND 6067; GFX900-NEXT: s_mov_b32 s8, s7 6068; GFX900-NEXT: ;;#ASMSTART 6069; GFX900-NEXT: ; use s[8:9] 6070; GFX900-NEXT: ;;#ASMEND 6071; GFX900-NEXT: s_setpc_b64 s[30:31] 6072; 6073; GFX90A-LABEL: s_shuffle_v2i32_v4i32__3_5: 6074; GFX90A: ; %bb.0: 6075; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6076; GFX90A-NEXT: ;;#ASMSTART 6077; GFX90A-NEXT: ; def s[8:11] 6078; GFX90A-NEXT: ;;#ASMEND 6079; GFX90A-NEXT: ;;#ASMSTART 6080; GFX90A-NEXT: ; def s[4:7] 6081; GFX90A-NEXT: ;;#ASMEND 6082; GFX90A-NEXT: s_mov_b32 s8, s7 6083; GFX90A-NEXT: ;;#ASMSTART 6084; GFX90A-NEXT: ; use s[8:9] 6085; GFX90A-NEXT: ;;#ASMEND 6086; GFX90A-NEXT: s_setpc_b64 s[30:31] 6087; 6088; GFX940-LABEL: s_shuffle_v2i32_v4i32__3_5: 6089; GFX940: ; %bb.0: 6090; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6091; GFX940-NEXT: ;;#ASMSTART 6092; GFX940-NEXT: ; def s[8:11] 6093; GFX940-NEXT: ;;#ASMEND 6094; GFX940-NEXT: ;;#ASMSTART 6095; GFX940-NEXT: ; def s[0:3] 6096; GFX940-NEXT: ;;#ASMEND 6097; GFX940-NEXT: s_mov_b32 s8, s3 6098; GFX940-NEXT: ;;#ASMSTART 6099; GFX940-NEXT: ; use s[8:9] 6100; GFX940-NEXT: ;;#ASMEND 6101; GFX940-NEXT: s_setpc_b64 s[30:31] 6102 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6103 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6104 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 3, i32 5> 6105 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6106 ret void 6107} 6108 6109define void @s_shuffle_v2i32_v4i32__4_5() { 6110; GFX900-LABEL: s_shuffle_v2i32_v4i32__4_5: 6111; GFX900: ; %bb.0: 6112; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6113; GFX900-NEXT: ;;#ASMSTART 6114; GFX900-NEXT: ; def s[8:11] 6115; GFX900-NEXT: ;;#ASMEND 6116; GFX900-NEXT: ;;#ASMSTART 6117; GFX900-NEXT: ; use s[8:9] 6118; GFX900-NEXT: ;;#ASMEND 6119; GFX900-NEXT: s_setpc_b64 s[30:31] 6120; 6121; GFX90A-LABEL: s_shuffle_v2i32_v4i32__4_5: 6122; GFX90A: ; %bb.0: 6123; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6124; GFX90A-NEXT: ;;#ASMSTART 6125; GFX90A-NEXT: ; def s[8:11] 6126; GFX90A-NEXT: ;;#ASMEND 6127; GFX90A-NEXT: ;;#ASMSTART 6128; GFX90A-NEXT: ; use s[8:9] 6129; GFX90A-NEXT: ;;#ASMEND 6130; GFX90A-NEXT: s_setpc_b64 s[30:31] 6131; 6132; GFX940-LABEL: s_shuffle_v2i32_v4i32__4_5: 6133; GFX940: ; %bb.0: 6134; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6135; GFX940-NEXT: ;;#ASMSTART 6136; GFX940-NEXT: ; def s[8:11] 6137; GFX940-NEXT: ;;#ASMEND 6138; GFX940-NEXT: s_nop 0 6139; GFX940-NEXT: ;;#ASMSTART 6140; GFX940-NEXT: ; use s[8:9] 6141; GFX940-NEXT: ;;#ASMEND 6142; GFX940-NEXT: s_setpc_b64 s[30:31] 6143 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6144 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6145 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 4, i32 5> 6146 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6147 ret void 6148} 6149 6150define void @s_shuffle_v2i32_v4i32__5_5() { 6151; GFX9-LABEL: s_shuffle_v2i32_v4i32__5_5: 6152; GFX9: ; %bb.0: 6153; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6154; GFX9-NEXT: ;;#ASMSTART 6155; GFX9-NEXT: ; def s[8:11] 6156; GFX9-NEXT: ;;#ASMEND 6157; GFX9-NEXT: s_mov_b32 s8, s9 6158; GFX9-NEXT: ;;#ASMSTART 6159; GFX9-NEXT: ; use s[8:9] 6160; GFX9-NEXT: ;;#ASMEND 6161; GFX9-NEXT: s_setpc_b64 s[30:31] 6162 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6163 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6164 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 5> 6165 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6166 ret void 6167} 6168 6169define void @s_shuffle_v2i32_v4i32__6_5() { 6170; GFX900-LABEL: s_shuffle_v2i32_v4i32__6_5: 6171; GFX900: ; %bb.0: 6172; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6173; GFX900-NEXT: ;;#ASMSTART 6174; GFX900-NEXT: ; def s[4:7] 6175; GFX900-NEXT: ;;#ASMEND 6176; GFX900-NEXT: s_mov_b32 s7, s5 6177; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 6178; GFX900-NEXT: ;;#ASMSTART 6179; GFX900-NEXT: ; use s[8:9] 6180; GFX900-NEXT: ;;#ASMEND 6181; GFX900-NEXT: s_setpc_b64 s[30:31] 6182; 6183; GFX90A-LABEL: s_shuffle_v2i32_v4i32__6_5: 6184; GFX90A: ; %bb.0: 6185; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6186; GFX90A-NEXT: ;;#ASMSTART 6187; GFX90A-NEXT: ; def s[4:7] 6188; GFX90A-NEXT: ;;#ASMEND 6189; GFX90A-NEXT: s_mov_b32 s7, s5 6190; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 6191; GFX90A-NEXT: ;;#ASMSTART 6192; GFX90A-NEXT: ; use s[8:9] 6193; GFX90A-NEXT: ;;#ASMEND 6194; GFX90A-NEXT: s_setpc_b64 s[30:31] 6195; 6196; GFX940-LABEL: s_shuffle_v2i32_v4i32__6_5: 6197; GFX940: ; %bb.0: 6198; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6199; GFX940-NEXT: ;;#ASMSTART 6200; GFX940-NEXT: ; def s[0:3] 6201; GFX940-NEXT: ;;#ASMEND 6202; GFX940-NEXT: s_mov_b32 s3, s1 6203; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 6204; GFX940-NEXT: ;;#ASMSTART 6205; GFX940-NEXT: ; use s[8:9] 6206; GFX940-NEXT: ;;#ASMEND 6207; GFX940-NEXT: s_setpc_b64 s[30:31] 6208 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6209 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6210 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 5> 6211 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6212 ret void 6213} 6214 6215define void @s_shuffle_v2i32_v4i32__u_6() { 6216; GFX900-LABEL: s_shuffle_v2i32_v4i32__u_6: 6217; GFX900: ; %bb.0: 6218; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6219; GFX900-NEXT: ;;#ASMSTART 6220; GFX900-NEXT: ; def s[4:7] 6221; GFX900-NEXT: ;;#ASMEND 6222; GFX900-NEXT: s_mov_b32 s9, s6 6223; GFX900-NEXT: ;;#ASMSTART 6224; GFX900-NEXT: ; use s[8:9] 6225; GFX900-NEXT: ;;#ASMEND 6226; GFX900-NEXT: s_setpc_b64 s[30:31] 6227; 6228; GFX90A-LABEL: s_shuffle_v2i32_v4i32__u_6: 6229; GFX90A: ; %bb.0: 6230; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6231; GFX90A-NEXT: ;;#ASMSTART 6232; GFX90A-NEXT: ; def s[4:7] 6233; GFX90A-NEXT: ;;#ASMEND 6234; GFX90A-NEXT: s_mov_b32 s9, s6 6235; GFX90A-NEXT: ;;#ASMSTART 6236; GFX90A-NEXT: ; use s[8:9] 6237; GFX90A-NEXT: ;;#ASMEND 6238; GFX90A-NEXT: s_setpc_b64 s[30:31] 6239; 6240; GFX940-LABEL: s_shuffle_v2i32_v4i32__u_6: 6241; GFX940: ; %bb.0: 6242; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6243; GFX940-NEXT: ;;#ASMSTART 6244; GFX940-NEXT: ; def s[0:3] 6245; GFX940-NEXT: ;;#ASMEND 6246; GFX940-NEXT: s_mov_b32 s9, s2 6247; GFX940-NEXT: ;;#ASMSTART 6248; GFX940-NEXT: ; use s[8:9] 6249; GFX940-NEXT: ;;#ASMEND 6250; GFX940-NEXT: s_setpc_b64 s[30:31] 6251 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6252 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6253 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 poison, i32 6> 6254 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6255 ret void 6256} 6257 6258define void @s_shuffle_v2i32_v4i32__0_6() { 6259; GFX900-LABEL: s_shuffle_v2i32_v4i32__0_6: 6260; GFX900: ; %bb.0: 6261; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6262; GFX900-NEXT: ;;#ASMSTART 6263; GFX900-NEXT: ; def s[8:11] 6264; GFX900-NEXT: ;;#ASMEND 6265; GFX900-NEXT: ;;#ASMSTART 6266; GFX900-NEXT: ; def s[4:7] 6267; GFX900-NEXT: ;;#ASMEND 6268; GFX900-NEXT: s_mov_b32 s9, s6 6269; GFX900-NEXT: ;;#ASMSTART 6270; GFX900-NEXT: ; use s[8:9] 6271; GFX900-NEXT: ;;#ASMEND 6272; GFX900-NEXT: s_setpc_b64 s[30:31] 6273; 6274; GFX90A-LABEL: s_shuffle_v2i32_v4i32__0_6: 6275; GFX90A: ; %bb.0: 6276; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6277; GFX90A-NEXT: ;;#ASMSTART 6278; GFX90A-NEXT: ; def s[8:11] 6279; GFX90A-NEXT: ;;#ASMEND 6280; GFX90A-NEXT: ;;#ASMSTART 6281; GFX90A-NEXT: ; def s[4:7] 6282; GFX90A-NEXT: ;;#ASMEND 6283; GFX90A-NEXT: s_mov_b32 s9, s6 6284; GFX90A-NEXT: ;;#ASMSTART 6285; GFX90A-NEXT: ; use s[8:9] 6286; GFX90A-NEXT: ;;#ASMEND 6287; GFX90A-NEXT: s_setpc_b64 s[30:31] 6288; 6289; GFX940-LABEL: s_shuffle_v2i32_v4i32__0_6: 6290; GFX940: ; %bb.0: 6291; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6292; GFX940-NEXT: ;;#ASMSTART 6293; GFX940-NEXT: ; def s[8:11] 6294; GFX940-NEXT: ;;#ASMEND 6295; GFX940-NEXT: ;;#ASMSTART 6296; GFX940-NEXT: ; def s[0:3] 6297; GFX940-NEXT: ;;#ASMEND 6298; GFX940-NEXT: s_mov_b32 s9, s2 6299; GFX940-NEXT: ;;#ASMSTART 6300; GFX940-NEXT: ; use s[8:9] 6301; GFX940-NEXT: ;;#ASMEND 6302; GFX940-NEXT: s_setpc_b64 s[30:31] 6303 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6304 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6305 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 0, i32 6> 6306 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6307 ret void 6308} 6309 6310define void @s_shuffle_v2i32_v4i32__1_6() { 6311; GFX900-LABEL: s_shuffle_v2i32_v4i32__1_6: 6312; GFX900: ; %bb.0: 6313; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6314; GFX900-NEXT: ;;#ASMSTART 6315; GFX900-NEXT: ; def s[8:11] 6316; GFX900-NEXT: ;;#ASMEND 6317; GFX900-NEXT: ;;#ASMSTART 6318; GFX900-NEXT: ; def s[4:7] 6319; GFX900-NEXT: ;;#ASMEND 6320; GFX900-NEXT: s_mov_b32 s8, s5 6321; GFX900-NEXT: s_mov_b32 s9, s10 6322; GFX900-NEXT: ;;#ASMSTART 6323; GFX900-NEXT: ; use s[8:9] 6324; GFX900-NEXT: ;;#ASMEND 6325; GFX900-NEXT: s_setpc_b64 s[30:31] 6326; 6327; GFX90A-LABEL: s_shuffle_v2i32_v4i32__1_6: 6328; GFX90A: ; %bb.0: 6329; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6330; GFX90A-NEXT: ;;#ASMSTART 6331; GFX90A-NEXT: ; def s[8:11] 6332; GFX90A-NEXT: ;;#ASMEND 6333; GFX90A-NEXT: ;;#ASMSTART 6334; GFX90A-NEXT: ; def s[4:7] 6335; GFX90A-NEXT: ;;#ASMEND 6336; GFX90A-NEXT: s_mov_b32 s8, s5 6337; GFX90A-NEXT: s_mov_b32 s9, s10 6338; GFX90A-NEXT: ;;#ASMSTART 6339; GFX90A-NEXT: ; use s[8:9] 6340; GFX90A-NEXT: ;;#ASMEND 6341; GFX90A-NEXT: s_setpc_b64 s[30:31] 6342; 6343; GFX940-LABEL: s_shuffle_v2i32_v4i32__1_6: 6344; GFX940: ; %bb.0: 6345; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6346; GFX940-NEXT: ;;#ASMSTART 6347; GFX940-NEXT: ; def s[0:3] 6348; GFX940-NEXT: ;;#ASMEND 6349; GFX940-NEXT: ;;#ASMSTART 6350; GFX940-NEXT: ; def s[4:7] 6351; GFX940-NEXT: ;;#ASMEND 6352; GFX940-NEXT: s_mov_b32 s8, s1 6353; GFX940-NEXT: s_mov_b32 s9, s6 6354; GFX940-NEXT: ;;#ASMSTART 6355; GFX940-NEXT: ; use s[8:9] 6356; GFX940-NEXT: ;;#ASMEND 6357; GFX940-NEXT: s_setpc_b64 s[30:31] 6358 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6359 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6360 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 1, i32 6> 6361 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6362 ret void 6363} 6364 6365define void @s_shuffle_v2i32_v4i32__2_6() { 6366; GFX900-LABEL: s_shuffle_v2i32_v4i32__2_6: 6367; GFX900: ; %bb.0: 6368; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6369; GFX900-NEXT: ;;#ASMSTART 6370; GFX900-NEXT: ; def s[4:7] 6371; GFX900-NEXT: ;;#ASMEND 6372; GFX900-NEXT: ;;#ASMSTART 6373; GFX900-NEXT: ; def s[8:11] 6374; GFX900-NEXT: ;;#ASMEND 6375; GFX900-NEXT: s_mov_b32 s7, s10 6376; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 6377; GFX900-NEXT: ;;#ASMSTART 6378; GFX900-NEXT: ; use s[8:9] 6379; GFX900-NEXT: ;;#ASMEND 6380; GFX900-NEXT: s_setpc_b64 s[30:31] 6381; 6382; GFX90A-LABEL: s_shuffle_v2i32_v4i32__2_6: 6383; GFX90A: ; %bb.0: 6384; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6385; GFX90A-NEXT: ;;#ASMSTART 6386; GFX90A-NEXT: ; def s[4:7] 6387; GFX90A-NEXT: ;;#ASMEND 6388; GFX90A-NEXT: ;;#ASMSTART 6389; GFX90A-NEXT: ; def s[8:11] 6390; GFX90A-NEXT: ;;#ASMEND 6391; GFX90A-NEXT: s_mov_b32 s7, s10 6392; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 6393; GFX90A-NEXT: ;;#ASMSTART 6394; GFX90A-NEXT: ; use s[8:9] 6395; GFX90A-NEXT: ;;#ASMEND 6396; GFX90A-NEXT: s_setpc_b64 s[30:31] 6397; 6398; GFX940-LABEL: s_shuffle_v2i32_v4i32__2_6: 6399; GFX940: ; %bb.0: 6400; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6401; GFX940-NEXT: ;;#ASMSTART 6402; GFX940-NEXT: ; def s[0:3] 6403; GFX940-NEXT: ;;#ASMEND 6404; GFX940-NEXT: ;;#ASMSTART 6405; GFX940-NEXT: ; def s[4:7] 6406; GFX940-NEXT: ;;#ASMEND 6407; GFX940-NEXT: s_mov_b32 s3, s6 6408; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 6409; GFX940-NEXT: ;;#ASMSTART 6410; GFX940-NEXT: ; use s[8:9] 6411; GFX940-NEXT: ;;#ASMEND 6412; GFX940-NEXT: s_setpc_b64 s[30:31] 6413 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6414 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6415 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 2, i32 6> 6416 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6417 ret void 6418} 6419 6420define void @s_shuffle_v2i32_v4i32__3_6() { 6421; GFX900-LABEL: s_shuffle_v2i32_v4i32__3_6: 6422; GFX900: ; %bb.0: 6423; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6424; GFX900-NEXT: ;;#ASMSTART 6425; GFX900-NEXT: ; def s[8:11] 6426; GFX900-NEXT: ;;#ASMEND 6427; GFX900-NEXT: ;;#ASMSTART 6428; GFX900-NEXT: ; def s[4:7] 6429; GFX900-NEXT: ;;#ASMEND 6430; GFX900-NEXT: s_mov_b32 s8, s7 6431; GFX900-NEXT: s_mov_b32 s9, s10 6432; GFX900-NEXT: ;;#ASMSTART 6433; GFX900-NEXT: ; use s[8:9] 6434; GFX900-NEXT: ;;#ASMEND 6435; GFX900-NEXT: s_setpc_b64 s[30:31] 6436; 6437; GFX90A-LABEL: s_shuffle_v2i32_v4i32__3_6: 6438; GFX90A: ; %bb.0: 6439; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6440; GFX90A-NEXT: ;;#ASMSTART 6441; GFX90A-NEXT: ; def s[8:11] 6442; GFX90A-NEXT: ;;#ASMEND 6443; GFX90A-NEXT: ;;#ASMSTART 6444; GFX90A-NEXT: ; def s[4:7] 6445; GFX90A-NEXT: ;;#ASMEND 6446; GFX90A-NEXT: s_mov_b32 s8, s7 6447; GFX90A-NEXT: s_mov_b32 s9, s10 6448; GFX90A-NEXT: ;;#ASMSTART 6449; GFX90A-NEXT: ; use s[8:9] 6450; GFX90A-NEXT: ;;#ASMEND 6451; GFX90A-NEXT: s_setpc_b64 s[30:31] 6452; 6453; GFX940-LABEL: s_shuffle_v2i32_v4i32__3_6: 6454; GFX940: ; %bb.0: 6455; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6456; GFX940-NEXT: ;;#ASMSTART 6457; GFX940-NEXT: ; def s[0:3] 6458; GFX940-NEXT: ;;#ASMEND 6459; GFX940-NEXT: ;;#ASMSTART 6460; GFX940-NEXT: ; def s[4:7] 6461; GFX940-NEXT: ;;#ASMEND 6462; GFX940-NEXT: s_mov_b32 s8, s3 6463; GFX940-NEXT: s_mov_b32 s9, s6 6464; GFX940-NEXT: ;;#ASMSTART 6465; GFX940-NEXT: ; use s[8:9] 6466; GFX940-NEXT: ;;#ASMEND 6467; GFX940-NEXT: s_setpc_b64 s[30:31] 6468 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6469 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6470 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 3, i32 6> 6471 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6472 ret void 6473} 6474 6475define void @s_shuffle_v2i32_v4i32__4_6() { 6476; GFX9-LABEL: s_shuffle_v2i32_v4i32__4_6: 6477; GFX9: ; %bb.0: 6478; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6479; GFX9-NEXT: ;;#ASMSTART 6480; GFX9-NEXT: ; def s[8:11] 6481; GFX9-NEXT: ;;#ASMEND 6482; GFX9-NEXT: s_mov_b32 s9, s10 6483; GFX9-NEXT: ;;#ASMSTART 6484; GFX9-NEXT: ; use s[8:9] 6485; GFX9-NEXT: ;;#ASMEND 6486; GFX9-NEXT: s_setpc_b64 s[30:31] 6487 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6488 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6489 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 4, i32 6> 6490 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6491 ret void 6492} 6493 6494define void @s_shuffle_v2i32_v4i32__5_6() { 6495; GFX900-LABEL: s_shuffle_v2i32_v4i32__5_6: 6496; GFX900: ; %bb.0: 6497; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6498; GFX900-NEXT: ;;#ASMSTART 6499; GFX900-NEXT: ; def s[4:7] 6500; GFX900-NEXT: ;;#ASMEND 6501; GFX900-NEXT: s_mov_b32 s8, s5 6502; GFX900-NEXT: s_mov_b32 s9, s6 6503; GFX900-NEXT: ;;#ASMSTART 6504; GFX900-NEXT: ; use s[8:9] 6505; GFX900-NEXT: ;;#ASMEND 6506; GFX900-NEXT: s_setpc_b64 s[30:31] 6507; 6508; GFX90A-LABEL: s_shuffle_v2i32_v4i32__5_6: 6509; GFX90A: ; %bb.0: 6510; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6511; GFX90A-NEXT: ;;#ASMSTART 6512; GFX90A-NEXT: ; def s[4:7] 6513; GFX90A-NEXT: ;;#ASMEND 6514; GFX90A-NEXT: s_mov_b32 s8, s5 6515; GFX90A-NEXT: s_mov_b32 s9, s6 6516; GFX90A-NEXT: ;;#ASMSTART 6517; GFX90A-NEXT: ; use s[8:9] 6518; GFX90A-NEXT: ;;#ASMEND 6519; GFX90A-NEXT: s_setpc_b64 s[30:31] 6520; 6521; GFX940-LABEL: s_shuffle_v2i32_v4i32__5_6: 6522; GFX940: ; %bb.0: 6523; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6524; GFX940-NEXT: ;;#ASMSTART 6525; GFX940-NEXT: ; def s[0:3] 6526; GFX940-NEXT: ;;#ASMEND 6527; GFX940-NEXT: s_mov_b32 s8, s1 6528; GFX940-NEXT: s_mov_b32 s9, s2 6529; GFX940-NEXT: ;;#ASMSTART 6530; GFX940-NEXT: ; use s[8:9] 6531; GFX940-NEXT: ;;#ASMEND 6532; GFX940-NEXT: s_setpc_b64 s[30:31] 6533 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6534 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6535 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 6> 6536 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6537 ret void 6538} 6539 6540define void @s_shuffle_v2i32_v4i32__6_6() { 6541; GFX900-LABEL: s_shuffle_v2i32_v4i32__6_6: 6542; GFX900: ; %bb.0: 6543; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6544; GFX900-NEXT: ;;#ASMSTART 6545; GFX900-NEXT: ; def s[4:7] 6546; GFX900-NEXT: ;;#ASMEND 6547; GFX900-NEXT: s_mov_b32 s7, s6 6548; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 6549; GFX900-NEXT: ;;#ASMSTART 6550; GFX900-NEXT: ; use s[8:9] 6551; GFX900-NEXT: ;;#ASMEND 6552; GFX900-NEXT: s_setpc_b64 s[30:31] 6553; 6554; GFX90A-LABEL: s_shuffle_v2i32_v4i32__6_6: 6555; GFX90A: ; %bb.0: 6556; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6557; GFX90A-NEXT: ;;#ASMSTART 6558; GFX90A-NEXT: ; def s[4:7] 6559; GFX90A-NEXT: ;;#ASMEND 6560; GFX90A-NEXT: s_mov_b32 s7, s6 6561; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 6562; GFX90A-NEXT: ;;#ASMSTART 6563; GFX90A-NEXT: ; use s[8:9] 6564; GFX90A-NEXT: ;;#ASMEND 6565; GFX90A-NEXT: s_setpc_b64 s[30:31] 6566; 6567; GFX940-LABEL: s_shuffle_v2i32_v4i32__6_6: 6568; GFX940: ; %bb.0: 6569; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6570; GFX940-NEXT: ;;#ASMSTART 6571; GFX940-NEXT: ; def s[0:3] 6572; GFX940-NEXT: ;;#ASMEND 6573; GFX940-NEXT: s_mov_b32 s3, s2 6574; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 6575; GFX940-NEXT: ;;#ASMSTART 6576; GFX940-NEXT: ; use s[8:9] 6577; GFX940-NEXT: ;;#ASMEND 6578; GFX940-NEXT: s_setpc_b64 s[30:31] 6579 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6580 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6581 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 6> 6582 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6583 ret void 6584} 6585 6586define void @s_shuffle_v2i32_v4i32__u_7() { 6587; GFX900-LABEL: s_shuffle_v2i32_v4i32__u_7: 6588; GFX900: ; %bb.0: 6589; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6590; GFX900-NEXT: ;;#ASMSTART 6591; GFX900-NEXT: ; def s[4:7] 6592; GFX900-NEXT: ;;#ASMEND 6593; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 6594; GFX900-NEXT: ;;#ASMSTART 6595; GFX900-NEXT: ; use s[8:9] 6596; GFX900-NEXT: ;;#ASMEND 6597; GFX900-NEXT: s_setpc_b64 s[30:31] 6598; 6599; GFX90A-LABEL: s_shuffle_v2i32_v4i32__u_7: 6600; GFX90A: ; %bb.0: 6601; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6602; GFX90A-NEXT: ;;#ASMSTART 6603; GFX90A-NEXT: ; def s[4:7] 6604; GFX90A-NEXT: ;;#ASMEND 6605; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 6606; GFX90A-NEXT: ;;#ASMSTART 6607; GFX90A-NEXT: ; use s[8:9] 6608; GFX90A-NEXT: ;;#ASMEND 6609; GFX90A-NEXT: s_setpc_b64 s[30:31] 6610; 6611; GFX940-LABEL: s_shuffle_v2i32_v4i32__u_7: 6612; GFX940: ; %bb.0: 6613; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6614; GFX940-NEXT: ;;#ASMSTART 6615; GFX940-NEXT: ; def s[0:3] 6616; GFX940-NEXT: ;;#ASMEND 6617; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 6618; GFX940-NEXT: ;;#ASMSTART 6619; GFX940-NEXT: ; use s[8:9] 6620; GFX940-NEXT: ;;#ASMEND 6621; GFX940-NEXT: s_setpc_b64 s[30:31] 6622 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6623 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6624 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 poison, i32 7> 6625 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6626 ret void 6627} 6628 6629define void @s_shuffle_v2i32_v4i32__0_7() { 6630; GFX900-LABEL: s_shuffle_v2i32_v4i32__0_7: 6631; GFX900: ; %bb.0: 6632; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6633; GFX900-NEXT: ;;#ASMSTART 6634; GFX900-NEXT: ; def s[8:11] 6635; GFX900-NEXT: ;;#ASMEND 6636; GFX900-NEXT: ;;#ASMSTART 6637; GFX900-NEXT: ; def s[4:7] 6638; GFX900-NEXT: ;;#ASMEND 6639; GFX900-NEXT: s_mov_b32 s9, s7 6640; GFX900-NEXT: ;;#ASMSTART 6641; GFX900-NEXT: ; use s[8:9] 6642; GFX900-NEXT: ;;#ASMEND 6643; GFX900-NEXT: s_setpc_b64 s[30:31] 6644; 6645; GFX90A-LABEL: s_shuffle_v2i32_v4i32__0_7: 6646; GFX90A: ; %bb.0: 6647; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6648; GFX90A-NEXT: ;;#ASMSTART 6649; GFX90A-NEXT: ; def s[8:11] 6650; GFX90A-NEXT: ;;#ASMEND 6651; GFX90A-NEXT: ;;#ASMSTART 6652; GFX90A-NEXT: ; def s[4:7] 6653; GFX90A-NEXT: ;;#ASMEND 6654; GFX90A-NEXT: s_mov_b32 s9, s7 6655; GFX90A-NEXT: ;;#ASMSTART 6656; GFX90A-NEXT: ; use s[8:9] 6657; GFX90A-NEXT: ;;#ASMEND 6658; GFX90A-NEXT: s_setpc_b64 s[30:31] 6659; 6660; GFX940-LABEL: s_shuffle_v2i32_v4i32__0_7: 6661; GFX940: ; %bb.0: 6662; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6663; GFX940-NEXT: ;;#ASMSTART 6664; GFX940-NEXT: ; def s[8:11] 6665; GFX940-NEXT: ;;#ASMEND 6666; GFX940-NEXT: ;;#ASMSTART 6667; GFX940-NEXT: ; def s[0:3] 6668; GFX940-NEXT: ;;#ASMEND 6669; GFX940-NEXT: s_mov_b32 s9, s3 6670; GFX940-NEXT: ;;#ASMSTART 6671; GFX940-NEXT: ; use s[8:9] 6672; GFX940-NEXT: ;;#ASMEND 6673; GFX940-NEXT: s_setpc_b64 s[30:31] 6674 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6675 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6676 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 0, i32 7> 6677 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6678 ret void 6679} 6680 6681define void @s_shuffle_v2i32_v4i32__1_7() { 6682; GFX900-LABEL: s_shuffle_v2i32_v4i32__1_7: 6683; GFX900: ; %bb.0: 6684; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6685; GFX900-NEXT: ;;#ASMSTART 6686; GFX900-NEXT: ; def s[8:11] 6687; GFX900-NEXT: ;;#ASMEND 6688; GFX900-NEXT: ;;#ASMSTART 6689; GFX900-NEXT: ; def s[4:7] 6690; GFX900-NEXT: ;;#ASMEND 6691; GFX900-NEXT: s_mov_b32 s10, s5 6692; GFX900-NEXT: s_mov_b64 s[8:9], s[10:11] 6693; GFX900-NEXT: ;;#ASMSTART 6694; GFX900-NEXT: ; use s[8:9] 6695; GFX900-NEXT: ;;#ASMEND 6696; GFX900-NEXT: s_setpc_b64 s[30:31] 6697; 6698; GFX90A-LABEL: s_shuffle_v2i32_v4i32__1_7: 6699; GFX90A: ; %bb.0: 6700; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6701; GFX90A-NEXT: ;;#ASMSTART 6702; GFX90A-NEXT: ; def s[8:11] 6703; GFX90A-NEXT: ;;#ASMEND 6704; GFX90A-NEXT: ;;#ASMSTART 6705; GFX90A-NEXT: ; def s[4:7] 6706; GFX90A-NEXT: ;;#ASMEND 6707; GFX90A-NEXT: s_mov_b32 s10, s5 6708; GFX90A-NEXT: s_mov_b64 s[8:9], s[10:11] 6709; GFX90A-NEXT: ;;#ASMSTART 6710; GFX90A-NEXT: ; use s[8:9] 6711; GFX90A-NEXT: ;;#ASMEND 6712; GFX90A-NEXT: s_setpc_b64 s[30:31] 6713; 6714; GFX940-LABEL: s_shuffle_v2i32_v4i32__1_7: 6715; GFX940: ; %bb.0: 6716; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6717; GFX940-NEXT: ;;#ASMSTART 6718; GFX940-NEXT: ; def s[4:7] 6719; GFX940-NEXT: ;;#ASMEND 6720; GFX940-NEXT: ;;#ASMSTART 6721; GFX940-NEXT: ; def s[0:3] 6722; GFX940-NEXT: ;;#ASMEND 6723; GFX940-NEXT: s_mov_b32 s6, s1 6724; GFX940-NEXT: s_mov_b64 s[8:9], s[6:7] 6725; GFX940-NEXT: ;;#ASMSTART 6726; GFX940-NEXT: ; use s[8:9] 6727; GFX940-NEXT: ;;#ASMEND 6728; GFX940-NEXT: s_setpc_b64 s[30:31] 6729 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6730 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6731 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 1, i32 7> 6732 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6733 ret void 6734} 6735 6736define void @s_shuffle_v2i32_v4i32__2_7() { 6737; GFX900-LABEL: s_shuffle_v2i32_v4i32__2_7: 6738; GFX900: ; %bb.0: 6739; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6740; GFX900-NEXT: ;;#ASMSTART 6741; GFX900-NEXT: ; def s[4:7] 6742; GFX900-NEXT: ;;#ASMEND 6743; GFX900-NEXT: ;;#ASMSTART 6744; GFX900-NEXT: ; def s[8:11] 6745; GFX900-NEXT: ;;#ASMEND 6746; GFX900-NEXT: s_mov_b32 s7, s11 6747; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 6748; GFX900-NEXT: ;;#ASMSTART 6749; GFX900-NEXT: ; use s[8:9] 6750; GFX900-NEXT: ;;#ASMEND 6751; GFX900-NEXT: s_setpc_b64 s[30:31] 6752; 6753; GFX90A-LABEL: s_shuffle_v2i32_v4i32__2_7: 6754; GFX90A: ; %bb.0: 6755; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6756; GFX90A-NEXT: ;;#ASMSTART 6757; GFX90A-NEXT: ; def s[4:7] 6758; GFX90A-NEXT: ;;#ASMEND 6759; GFX90A-NEXT: ;;#ASMSTART 6760; GFX90A-NEXT: ; def s[8:11] 6761; GFX90A-NEXT: ;;#ASMEND 6762; GFX90A-NEXT: s_mov_b32 s7, s11 6763; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 6764; GFX90A-NEXT: ;;#ASMSTART 6765; GFX90A-NEXT: ; use s[8:9] 6766; GFX90A-NEXT: ;;#ASMEND 6767; GFX90A-NEXT: s_setpc_b64 s[30:31] 6768; 6769; GFX940-LABEL: s_shuffle_v2i32_v4i32__2_7: 6770; GFX940: ; %bb.0: 6771; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6772; GFX940-NEXT: ;;#ASMSTART 6773; GFX940-NEXT: ; def s[0:3] 6774; GFX940-NEXT: ;;#ASMEND 6775; GFX940-NEXT: ;;#ASMSTART 6776; GFX940-NEXT: ; def s[4:7] 6777; GFX940-NEXT: ;;#ASMEND 6778; GFX940-NEXT: s_mov_b32 s3, s7 6779; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 6780; GFX940-NEXT: ;;#ASMSTART 6781; GFX940-NEXT: ; use s[8:9] 6782; GFX940-NEXT: ;;#ASMEND 6783; GFX940-NEXT: s_setpc_b64 s[30:31] 6784 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6785 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6786 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 2, i32 7> 6787 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6788 ret void 6789} 6790 6791define void @s_shuffle_v2i32_v4i32__3_7() { 6792; GFX900-LABEL: s_shuffle_v2i32_v4i32__3_7: 6793; GFX900: ; %bb.0: 6794; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6795; GFX900-NEXT: ;;#ASMSTART 6796; GFX900-NEXT: ; def s[8:11] 6797; GFX900-NEXT: ;;#ASMEND 6798; GFX900-NEXT: ;;#ASMSTART 6799; GFX900-NEXT: ; def s[4:7] 6800; GFX900-NEXT: ;;#ASMEND 6801; GFX900-NEXT: s_mov_b32 s10, s7 6802; GFX900-NEXT: s_mov_b64 s[8:9], s[10:11] 6803; GFX900-NEXT: ;;#ASMSTART 6804; GFX900-NEXT: ; use s[8:9] 6805; GFX900-NEXT: ;;#ASMEND 6806; GFX900-NEXT: s_setpc_b64 s[30:31] 6807; 6808; GFX90A-LABEL: s_shuffle_v2i32_v4i32__3_7: 6809; GFX90A: ; %bb.0: 6810; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6811; GFX90A-NEXT: ;;#ASMSTART 6812; GFX90A-NEXT: ; def s[8:11] 6813; GFX90A-NEXT: ;;#ASMEND 6814; GFX90A-NEXT: ;;#ASMSTART 6815; GFX90A-NEXT: ; def s[4:7] 6816; GFX90A-NEXT: ;;#ASMEND 6817; GFX90A-NEXT: s_mov_b32 s10, s7 6818; GFX90A-NEXT: s_mov_b64 s[8:9], s[10:11] 6819; GFX90A-NEXT: ;;#ASMSTART 6820; GFX90A-NEXT: ; use s[8:9] 6821; GFX90A-NEXT: ;;#ASMEND 6822; GFX90A-NEXT: s_setpc_b64 s[30:31] 6823; 6824; GFX940-LABEL: s_shuffle_v2i32_v4i32__3_7: 6825; GFX940: ; %bb.0: 6826; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6827; GFX940-NEXT: ;;#ASMSTART 6828; GFX940-NEXT: ; def s[4:7] 6829; GFX940-NEXT: ;;#ASMEND 6830; GFX940-NEXT: ;;#ASMSTART 6831; GFX940-NEXT: ; def s[0:3] 6832; GFX940-NEXT: ;;#ASMEND 6833; GFX940-NEXT: s_mov_b32 s6, s3 6834; GFX940-NEXT: s_mov_b64 s[8:9], s[6:7] 6835; GFX940-NEXT: ;;#ASMSTART 6836; GFX940-NEXT: ; use s[8:9] 6837; GFX940-NEXT: ;;#ASMEND 6838; GFX940-NEXT: s_setpc_b64 s[30:31] 6839 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6840 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6841 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 3, i32 7> 6842 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6843 ret void 6844} 6845 6846define void @s_shuffle_v2i32_v4i32__4_7() { 6847; GFX9-LABEL: s_shuffle_v2i32_v4i32__4_7: 6848; GFX9: ; %bb.0: 6849; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6850; GFX9-NEXT: ;;#ASMSTART 6851; GFX9-NEXT: ; def s[8:11] 6852; GFX9-NEXT: ;;#ASMEND 6853; GFX9-NEXT: s_mov_b32 s9, s11 6854; GFX9-NEXT: ;;#ASMSTART 6855; GFX9-NEXT: ; use s[8:9] 6856; GFX9-NEXT: ;;#ASMEND 6857; GFX9-NEXT: s_setpc_b64 s[30:31] 6858 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6859 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6860 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 4, i32 7> 6861 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6862 ret void 6863} 6864 6865define void @s_shuffle_v2i32_v4i32__5_7() { 6866; GFX900-LABEL: s_shuffle_v2i32_v4i32__5_7: 6867; GFX900: ; %bb.0: 6868; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6869; GFX900-NEXT: ;;#ASMSTART 6870; GFX900-NEXT: ; def s[4:7] 6871; GFX900-NEXT: ;;#ASMEND 6872; GFX900-NEXT: s_mov_b32 s6, s5 6873; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 6874; GFX900-NEXT: ;;#ASMSTART 6875; GFX900-NEXT: ; use s[8:9] 6876; GFX900-NEXT: ;;#ASMEND 6877; GFX900-NEXT: s_setpc_b64 s[30:31] 6878; 6879; GFX90A-LABEL: s_shuffle_v2i32_v4i32__5_7: 6880; GFX90A: ; %bb.0: 6881; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6882; GFX90A-NEXT: ;;#ASMSTART 6883; GFX90A-NEXT: ; def s[4:7] 6884; GFX90A-NEXT: ;;#ASMEND 6885; GFX90A-NEXT: s_mov_b32 s6, s5 6886; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 6887; GFX90A-NEXT: ;;#ASMSTART 6888; GFX90A-NEXT: ; use s[8:9] 6889; GFX90A-NEXT: ;;#ASMEND 6890; GFX90A-NEXT: s_setpc_b64 s[30:31] 6891; 6892; GFX940-LABEL: s_shuffle_v2i32_v4i32__5_7: 6893; GFX940: ; %bb.0: 6894; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6895; GFX940-NEXT: ;;#ASMSTART 6896; GFX940-NEXT: ; def s[0:3] 6897; GFX940-NEXT: ;;#ASMEND 6898; GFX940-NEXT: s_mov_b32 s2, s1 6899; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 6900; GFX940-NEXT: ;;#ASMSTART 6901; GFX940-NEXT: ; use s[8:9] 6902; GFX940-NEXT: ;;#ASMEND 6903; GFX940-NEXT: s_setpc_b64 s[30:31] 6904 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6905 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6906 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 7> 6907 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6908 ret void 6909} 6910 6911define void @s_shuffle_v2i32_v4i32__6_7() { 6912; GFX900-LABEL: s_shuffle_v2i32_v4i32__6_7: 6913; GFX900: ; %bb.0: 6914; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6915; GFX900-NEXT: ;;#ASMSTART 6916; GFX900-NEXT: ; def s[4:7] 6917; GFX900-NEXT: ;;#ASMEND 6918; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7] 6919; GFX900-NEXT: ;;#ASMSTART 6920; GFX900-NEXT: ; use s[8:9] 6921; GFX900-NEXT: ;;#ASMEND 6922; GFX900-NEXT: s_setpc_b64 s[30:31] 6923; 6924; GFX90A-LABEL: s_shuffle_v2i32_v4i32__6_7: 6925; GFX90A: ; %bb.0: 6926; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6927; GFX90A-NEXT: ;;#ASMSTART 6928; GFX90A-NEXT: ; def s[4:7] 6929; GFX90A-NEXT: ;;#ASMEND 6930; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7] 6931; GFX90A-NEXT: ;;#ASMSTART 6932; GFX90A-NEXT: ; use s[8:9] 6933; GFX90A-NEXT: ;;#ASMEND 6934; GFX90A-NEXT: s_setpc_b64 s[30:31] 6935; 6936; GFX940-LABEL: s_shuffle_v2i32_v4i32__6_7: 6937; GFX940: ; %bb.0: 6938; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6939; GFX940-NEXT: ;;#ASMSTART 6940; GFX940-NEXT: ; def s[0:3] 6941; GFX940-NEXT: ;;#ASMEND 6942; GFX940-NEXT: s_mov_b64 s[8:9], s[2:3] 6943; GFX940-NEXT: ;;#ASMSTART 6944; GFX940-NEXT: ; use s[8:9] 6945; GFX940-NEXT: ;;#ASMEND 6946; GFX940-NEXT: s_setpc_b64 s[30:31] 6947 %vec0 = call <4 x i32> asm "; def $0", "=s"() 6948 %vec1 = call <4 x i32> asm "; def $0", "=s"() 6949 %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 7> 6950 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf) 6951 ret void 6952} 6953;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: 6954; GFX90APLUS: {{.*}} 6955