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_v2i64_v2i64__u_u(ptr addrspace(1) inreg %ptr) { 8; GFX9-LABEL: v_shuffle_v2i64_v2i64__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 <2 x i64> asm "; def $0", "=v"() 13 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> poison 14 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 15 ret void 16} 17 18define void @v_shuffle_v2i64_v2i64__0_u(ptr addrspace(1) inreg %ptr) { 19; GFX900-LABEL: v_shuffle_v2i64_v2i64__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_dwordx4 v4, v[0:3], 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_v2i64_v2i64__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_dwordx4 v4, v[0:3], 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_v2i64_v2i64__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_dwordx4 v4, v[0:3], s[0:1] sc0 sc1 49; GFX940-NEXT: s_waitcnt vmcnt(0) 50; GFX940-NEXT: s_setpc_b64 s[30:31] 51 %vec0 = call <2 x i64> asm "; def $0", "=v"() 52 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 0, i32 poison> 53 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 54 ret void 55} 56 57define void @v_shuffle_v2i64_v2i64__1_u(ptr addrspace(1) inreg %ptr) { 58; GFX900-LABEL: v_shuffle_v2i64_v2i64__1_u: 59; GFX900: ; %bb.0: 60; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 61; GFX900-NEXT: ;;#ASMSTART 62; GFX900-NEXT: ; def v[0:3] 63; GFX900-NEXT: ;;#ASMEND 64; GFX900-NEXT: v_mov_b32_e32 v4, 0 65; GFX900-NEXT: v_mov_b32_e32 v0, v2 66; GFX900-NEXT: v_mov_b32_e32 v1, v3 67; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 68; GFX900-NEXT: s_waitcnt vmcnt(0) 69; GFX900-NEXT: s_setpc_b64 s[30:31] 70; 71; GFX90A-LABEL: v_shuffle_v2i64_v2i64__1_u: 72; GFX90A: ; %bb.0: 73; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 74; GFX90A-NEXT: ;;#ASMSTART 75; GFX90A-NEXT: ; def v[0:3] 76; GFX90A-NEXT: ;;#ASMEND 77; GFX90A-NEXT: v_mov_b32_e32 v4, 0 78; GFX90A-NEXT: v_mov_b32_e32 v0, v2 79; GFX90A-NEXT: v_mov_b32_e32 v1, v3 80; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 81; GFX90A-NEXT: s_waitcnt vmcnt(0) 82; GFX90A-NEXT: s_setpc_b64 s[30:31] 83; 84; GFX940-LABEL: v_shuffle_v2i64_v2i64__1_u: 85; GFX940: ; %bb.0: 86; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 87; GFX940-NEXT: ;;#ASMSTART 88; GFX940-NEXT: ; def v[0:3] 89; GFX940-NEXT: ;;#ASMEND 90; GFX940-NEXT: v_mov_b32_e32 v4, 0 91; GFX940-NEXT: v_mov_b32_e32 v0, v2 92; GFX940-NEXT: v_mov_b32_e32 v1, v3 93; GFX940-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1 94; GFX940-NEXT: s_waitcnt vmcnt(0) 95; GFX940-NEXT: s_setpc_b64 s[30:31] 96 %vec0 = call <2 x i64> asm "; def $0", "=v"() 97 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 1, i32 poison> 98 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 99 ret void 100} 101 102define void @v_shuffle_v2i64_v2i64__2_u(ptr addrspace(1) inreg %ptr) { 103; GFX9-LABEL: v_shuffle_v2i64_v2i64__2_u: 104; GFX9: ; %bb.0: 105; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 106; GFX9-NEXT: s_setpc_b64 s[30:31] 107 %vec0 = call <2 x i64> asm "; def $0", "=v"() 108 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 2, i32 poison> 109 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 110 ret void 111} 112 113define void @v_shuffle_v2i64_v2i64__3_u(ptr addrspace(1) inreg %ptr) { 114; GFX900-LABEL: v_shuffle_v2i64_v2i64__3_u: 115; GFX900: ; %bb.0: 116; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 117; GFX900-NEXT: ;;#ASMSTART 118; GFX900-NEXT: ; def v[0:3] 119; GFX900-NEXT: ;;#ASMEND 120; GFX900-NEXT: v_mov_b32_e32 v4, 0 121; GFX900-NEXT: v_mov_b32_e32 v0, v2 122; GFX900-NEXT: v_mov_b32_e32 v1, v3 123; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 124; GFX900-NEXT: s_waitcnt vmcnt(0) 125; GFX900-NEXT: s_setpc_b64 s[30:31] 126; 127; GFX90A-LABEL: v_shuffle_v2i64_v2i64__3_u: 128; GFX90A: ; %bb.0: 129; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 130; GFX90A-NEXT: ;;#ASMSTART 131; GFX90A-NEXT: ; def v[0:3] 132; GFX90A-NEXT: ;;#ASMEND 133; GFX90A-NEXT: v_mov_b32_e32 v4, 0 134; GFX90A-NEXT: v_mov_b32_e32 v0, v2 135; GFX90A-NEXT: v_mov_b32_e32 v1, v3 136; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 137; GFX90A-NEXT: s_waitcnt vmcnt(0) 138; GFX90A-NEXT: s_setpc_b64 s[30:31] 139; 140; GFX940-LABEL: v_shuffle_v2i64_v2i64__3_u: 141; GFX940: ; %bb.0: 142; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 143; GFX940-NEXT: ;;#ASMSTART 144; GFX940-NEXT: ; def v[0:3] 145; GFX940-NEXT: ;;#ASMEND 146; GFX940-NEXT: v_mov_b32_e32 v4, 0 147; GFX940-NEXT: v_mov_b32_e32 v0, v2 148; GFX940-NEXT: v_mov_b32_e32 v1, v3 149; GFX940-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1 150; GFX940-NEXT: s_waitcnt vmcnt(0) 151; GFX940-NEXT: s_setpc_b64 s[30:31] 152 %vec0 = call <2 x i64> asm "; def $0", "=v"() 153 %vec1 = call <2 x i64> asm "; def $0", "=v"() 154 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 poison> 155 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 156 ret void 157} 158 159define void @v_shuffle_v2i64_v2i64__3_0(ptr addrspace(1) inreg %ptr) { 160; GFX900-LABEL: v_shuffle_v2i64_v2i64__3_0: 161; GFX900: ; %bb.0: 162; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 163; GFX900-NEXT: ;;#ASMSTART 164; GFX900-NEXT: ; def v[0:3] 165; GFX900-NEXT: ;;#ASMEND 166; GFX900-NEXT: ;;#ASMSTART 167; GFX900-NEXT: ; def v[2:5] 168; GFX900-NEXT: ;;#ASMEND 169; GFX900-NEXT: v_mov_b32_e32 v6, 0 170; GFX900-NEXT: v_mov_b32_e32 v2, v4 171; GFX900-NEXT: v_mov_b32_e32 v3, v5 172; GFX900-NEXT: v_mov_b32_e32 v4, v0 173; GFX900-NEXT: v_mov_b32_e32 v5, v1 174; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17] 175; GFX900-NEXT: s_waitcnt vmcnt(0) 176; GFX900-NEXT: s_setpc_b64 s[30:31] 177; 178; GFX90A-LABEL: v_shuffle_v2i64_v2i64__3_0: 179; GFX90A: ; %bb.0: 180; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 181; GFX90A-NEXT: ;;#ASMSTART 182; GFX90A-NEXT: ; def v[0:3] 183; GFX90A-NEXT: ;;#ASMEND 184; GFX90A-NEXT: ;;#ASMSTART 185; GFX90A-NEXT: ; def v[2:5] 186; GFX90A-NEXT: ;;#ASMEND 187; GFX90A-NEXT: v_mov_b32_e32 v6, 0 188; GFX90A-NEXT: v_mov_b32_e32 v2, v4 189; GFX90A-NEXT: v_mov_b32_e32 v3, v5 190; GFX90A-NEXT: v_mov_b32_e32 v4, v0 191; GFX90A-NEXT: v_mov_b32_e32 v5, v1 192; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17] 193; GFX90A-NEXT: s_waitcnt vmcnt(0) 194; GFX90A-NEXT: s_setpc_b64 s[30:31] 195; 196; GFX940-LABEL: v_shuffle_v2i64_v2i64__3_0: 197; GFX940: ; %bb.0: 198; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 199; GFX940-NEXT: ;;#ASMSTART 200; GFX940-NEXT: ; def v[0:3] 201; GFX940-NEXT: ;;#ASMEND 202; GFX940-NEXT: v_mov_b32_e32 v6, 0 203; GFX940-NEXT: ;;#ASMSTART 204; GFX940-NEXT: ; def v[2:5] 205; GFX940-NEXT: ;;#ASMEND 206; GFX940-NEXT: s_nop 0 207; GFX940-NEXT: v_mov_b32_e32 v2, v4 208; GFX940-NEXT: v_mov_b32_e32 v3, v5 209; GFX940-NEXT: v_mov_b32_e32 v4, v0 210; GFX940-NEXT: v_mov_b32_e32 v5, v1 211; GFX940-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1] sc0 sc1 212; GFX940-NEXT: s_waitcnt vmcnt(0) 213; GFX940-NEXT: s_setpc_b64 s[30:31] 214 %vec0 = call <2 x i64> asm "; def $0", "=v"() 215 %vec1 = call <2 x i64> asm "; def $0", "=v"() 216 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 0> 217 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 218 ret void 219} 220 221define void @v_shuffle_v2i64_v2i64__3_1(ptr addrspace(1) inreg %ptr) { 222; GFX900-LABEL: v_shuffle_v2i64_v2i64__3_1: 223; GFX900: ; %bb.0: 224; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 225; GFX900-NEXT: ;;#ASMSTART 226; GFX900-NEXT: ; def v[0:3] 227; GFX900-NEXT: ;;#ASMEND 228; GFX900-NEXT: v_mov_b32_e32 v8, 0 229; GFX900-NEXT: ;;#ASMSTART 230; GFX900-NEXT: ; def v[4:7] 231; GFX900-NEXT: ;;#ASMEND 232; GFX900-NEXT: v_mov_b32_e32 v0, v6 233; GFX900-NEXT: v_mov_b32_e32 v1, v7 234; GFX900-NEXT: global_store_dwordx4 v8, v[0:3], s[16:17] 235; GFX900-NEXT: s_waitcnt vmcnt(0) 236; GFX900-NEXT: s_setpc_b64 s[30:31] 237; 238; GFX90A-LABEL: v_shuffle_v2i64_v2i64__3_1: 239; GFX90A: ; %bb.0: 240; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 241; GFX90A-NEXT: ;;#ASMSTART 242; GFX90A-NEXT: ; def v[0:3] 243; GFX90A-NEXT: ;;#ASMEND 244; GFX90A-NEXT: v_mov_b32_e32 v8, 0 245; GFX90A-NEXT: ;;#ASMSTART 246; GFX90A-NEXT: ; def v[4:7] 247; GFX90A-NEXT: ;;#ASMEND 248; GFX90A-NEXT: v_mov_b32_e32 v0, v6 249; GFX90A-NEXT: v_mov_b32_e32 v1, v7 250; GFX90A-NEXT: global_store_dwordx4 v8, v[0:3], s[16:17] 251; GFX90A-NEXT: s_waitcnt vmcnt(0) 252; GFX90A-NEXT: s_setpc_b64 s[30:31] 253; 254; GFX940-LABEL: v_shuffle_v2i64_v2i64__3_1: 255; GFX940: ; %bb.0: 256; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 257; GFX940-NEXT: ;;#ASMSTART 258; GFX940-NEXT: ; def v[0:3] 259; GFX940-NEXT: ;;#ASMEND 260; GFX940-NEXT: v_mov_b32_e32 v8, 0 261; GFX940-NEXT: ;;#ASMSTART 262; GFX940-NEXT: ; def v[4:7] 263; GFX940-NEXT: ;;#ASMEND 264; GFX940-NEXT: s_nop 0 265; GFX940-NEXT: v_mov_b32_e32 v0, v6 266; GFX940-NEXT: v_mov_b32_e32 v1, v7 267; GFX940-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1] sc0 sc1 268; GFX940-NEXT: s_waitcnt vmcnt(0) 269; GFX940-NEXT: s_setpc_b64 s[30:31] 270 %vec0 = call <2 x i64> asm "; def $0", "=v"() 271 %vec1 = call <2 x i64> asm "; def $0", "=v"() 272 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 1> 273 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 274 ret void 275} 276 277define void @v_shuffle_v2i64_v2i64__3_2(ptr addrspace(1) inreg %ptr) { 278; GFX900-LABEL: v_shuffle_v2i64_v2i64__3_2: 279; GFX900: ; %bb.0: 280; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 281; GFX900-NEXT: v_mov_b32_e32 v6, 0 282; GFX900-NEXT: ;;#ASMSTART 283; GFX900-NEXT: ; def v[0:3] 284; GFX900-NEXT: ;;#ASMEND 285; GFX900-NEXT: v_mov_b32_e32 v4, v0 286; GFX900-NEXT: v_mov_b32_e32 v5, v1 287; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17] 288; GFX900-NEXT: s_waitcnt vmcnt(0) 289; GFX900-NEXT: s_setpc_b64 s[30:31] 290; 291; GFX90A-LABEL: v_shuffle_v2i64_v2i64__3_2: 292; GFX90A: ; %bb.0: 293; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 294; GFX90A-NEXT: v_mov_b32_e32 v6, 0 295; GFX90A-NEXT: ;;#ASMSTART 296; GFX90A-NEXT: ; def v[0:3] 297; GFX90A-NEXT: ;;#ASMEND 298; GFX90A-NEXT: v_mov_b32_e32 v4, v0 299; GFX90A-NEXT: v_mov_b32_e32 v5, v1 300; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17] 301; GFX90A-NEXT: s_waitcnt vmcnt(0) 302; GFX90A-NEXT: s_setpc_b64 s[30:31] 303; 304; GFX940-LABEL: v_shuffle_v2i64_v2i64__3_2: 305; GFX940: ; %bb.0: 306; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 307; GFX940-NEXT: v_mov_b32_e32 v6, 0 308; GFX940-NEXT: ;;#ASMSTART 309; GFX940-NEXT: ; def v[0:3] 310; GFX940-NEXT: ;;#ASMEND 311; GFX940-NEXT: s_nop 0 312; GFX940-NEXT: v_mov_b32_e32 v4, v0 313; GFX940-NEXT: v_mov_b32_e32 v5, v1 314; GFX940-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1] sc0 sc1 315; GFX940-NEXT: s_waitcnt vmcnt(0) 316; GFX940-NEXT: s_setpc_b64 s[30:31] 317 %vec0 = call <2 x i64> asm "; def $0", "=v"() 318 %vec1 = call <2 x i64> asm "; def $0", "=v"() 319 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 2> 320 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 321 ret void 322} 323 324define void @v_shuffle_v2i64_v2i64__3_3(ptr addrspace(1) inreg %ptr) { 325; GFX900-LABEL: v_shuffle_v2i64_v2i64__3_3: 326; GFX900: ; %bb.0: 327; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 328; GFX900-NEXT: ;;#ASMSTART 329; GFX900-NEXT: ; def v[0:3] 330; GFX900-NEXT: ;;#ASMEND 331; GFX900-NEXT: v_mov_b32_e32 v4, 0 332; GFX900-NEXT: v_mov_b32_e32 v0, v2 333; GFX900-NEXT: v_mov_b32_e32 v1, v3 334; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 335; GFX900-NEXT: s_waitcnt vmcnt(0) 336; GFX900-NEXT: s_setpc_b64 s[30:31] 337; 338; GFX90A-LABEL: v_shuffle_v2i64_v2i64__3_3: 339; GFX90A: ; %bb.0: 340; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 341; GFX90A-NEXT: ;;#ASMSTART 342; GFX90A-NEXT: ; def v[0:3] 343; GFX90A-NEXT: ;;#ASMEND 344; GFX90A-NEXT: v_mov_b32_e32 v4, 0 345; GFX90A-NEXT: v_mov_b32_e32 v0, v2 346; GFX90A-NEXT: v_mov_b32_e32 v1, v3 347; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 348; GFX90A-NEXT: s_waitcnt vmcnt(0) 349; GFX90A-NEXT: s_setpc_b64 s[30:31] 350; 351; GFX940-LABEL: v_shuffle_v2i64_v2i64__3_3: 352; GFX940: ; %bb.0: 353; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 354; GFX940-NEXT: ;;#ASMSTART 355; GFX940-NEXT: ; def v[0:3] 356; GFX940-NEXT: ;;#ASMEND 357; GFX940-NEXT: v_mov_b32_e32 v4, 0 358; GFX940-NEXT: v_mov_b32_e32 v0, v2 359; GFX940-NEXT: v_mov_b32_e32 v1, v3 360; GFX940-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1 361; GFX940-NEXT: s_waitcnt vmcnt(0) 362; GFX940-NEXT: s_setpc_b64 s[30:31] 363 %vec0 = call <2 x i64> asm "; def $0", "=v"() 364 %vec1 = call <2 x i64> asm "; def $0", "=v"() 365 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 3> 366 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 367 ret void 368} 369 370define void @v_shuffle_v2i64_v2i64__u_0(ptr addrspace(1) inreg %ptr) { 371; GFX900-LABEL: v_shuffle_v2i64_v2i64__u_0: 372; GFX900: ; %bb.0: 373; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 374; GFX900-NEXT: ;;#ASMSTART 375; GFX900-NEXT: ; def v[0:3] 376; GFX900-NEXT: ;;#ASMEND 377; GFX900-NEXT: v_mov_b32_e32 v4, 0 378; GFX900-NEXT: v_mov_b32_e32 v2, v0 379; GFX900-NEXT: v_mov_b32_e32 v3, v1 380; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 381; GFX900-NEXT: s_waitcnt vmcnt(0) 382; GFX900-NEXT: s_setpc_b64 s[30:31] 383; 384; GFX90A-LABEL: v_shuffle_v2i64_v2i64__u_0: 385; GFX90A: ; %bb.0: 386; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 387; GFX90A-NEXT: ;;#ASMSTART 388; GFX90A-NEXT: ; def v[0:3] 389; GFX90A-NEXT: ;;#ASMEND 390; GFX90A-NEXT: v_mov_b32_e32 v4, 0 391; GFX90A-NEXT: v_mov_b32_e32 v2, v0 392; GFX90A-NEXT: v_mov_b32_e32 v3, v1 393; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 394; GFX90A-NEXT: s_waitcnt vmcnt(0) 395; GFX90A-NEXT: s_setpc_b64 s[30:31] 396; 397; GFX940-LABEL: v_shuffle_v2i64_v2i64__u_0: 398; GFX940: ; %bb.0: 399; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 400; GFX940-NEXT: ;;#ASMSTART 401; GFX940-NEXT: ; def v[0:3] 402; GFX940-NEXT: ;;#ASMEND 403; GFX940-NEXT: v_mov_b32_e32 v4, 0 404; GFX940-NEXT: v_mov_b32_e32 v2, v0 405; GFX940-NEXT: v_mov_b32_e32 v3, v1 406; GFX940-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1 407; GFX940-NEXT: s_waitcnt vmcnt(0) 408; GFX940-NEXT: s_setpc_b64 s[30:31] 409 %vec0 = call <2 x i64> asm "; def $0", "=v"() 410 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 poison, i32 0> 411 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 412 ret void 413} 414 415define void @v_shuffle_v2i64_v2i64__0_0(ptr addrspace(1) inreg %ptr) { 416; GFX900-LABEL: v_shuffle_v2i64_v2i64__0_0: 417; GFX900: ; %bb.0: 418; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 419; GFX900-NEXT: ;;#ASMSTART 420; GFX900-NEXT: ; def v[0:3] 421; GFX900-NEXT: ;;#ASMEND 422; GFX900-NEXT: v_mov_b32_e32 v4, 0 423; GFX900-NEXT: v_mov_b32_e32 v2, v0 424; GFX900-NEXT: v_mov_b32_e32 v3, v1 425; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 426; GFX900-NEXT: s_waitcnt vmcnt(0) 427; GFX900-NEXT: s_setpc_b64 s[30:31] 428; 429; GFX90A-LABEL: v_shuffle_v2i64_v2i64__0_0: 430; GFX90A: ; %bb.0: 431; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 432; GFX90A-NEXT: ;;#ASMSTART 433; GFX90A-NEXT: ; def v[0:3] 434; GFX90A-NEXT: ;;#ASMEND 435; GFX90A-NEXT: v_mov_b32_e32 v4, 0 436; GFX90A-NEXT: v_mov_b32_e32 v2, v0 437; GFX90A-NEXT: v_mov_b32_e32 v3, v1 438; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 439; GFX90A-NEXT: s_waitcnt vmcnt(0) 440; GFX90A-NEXT: s_setpc_b64 s[30:31] 441; 442; GFX940-LABEL: v_shuffle_v2i64_v2i64__0_0: 443; GFX940: ; %bb.0: 444; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 445; GFX940-NEXT: ;;#ASMSTART 446; GFX940-NEXT: ; def v[0:3] 447; GFX940-NEXT: ;;#ASMEND 448; GFX940-NEXT: v_mov_b32_e32 v4, 0 449; GFX940-NEXT: v_mov_b32_e32 v2, v0 450; GFX940-NEXT: v_mov_b32_e32 v3, v1 451; GFX940-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1 452; GFX940-NEXT: s_waitcnt vmcnt(0) 453; GFX940-NEXT: s_setpc_b64 s[30:31] 454 %vec0 = call <2 x i64> asm "; def $0", "=v"() 455 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> zeroinitializer 456 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 457 ret void 458} 459 460define void @v_shuffle_v2i64_v2i64__1_0(ptr addrspace(1) inreg %ptr) { 461; GFX900-LABEL: v_shuffle_v2i64_v2i64__1_0: 462; GFX900: ; %bb.0: 463; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 464; GFX900-NEXT: v_mov_b32_e32 v6, 0 465; GFX900-NEXT: ;;#ASMSTART 466; GFX900-NEXT: ; def v[0:3] 467; GFX900-NEXT: ;;#ASMEND 468; GFX900-NEXT: v_mov_b32_e32 v4, v0 469; GFX900-NEXT: v_mov_b32_e32 v5, v1 470; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17] 471; GFX900-NEXT: s_waitcnt vmcnt(0) 472; GFX900-NEXT: s_setpc_b64 s[30:31] 473; 474; GFX90A-LABEL: v_shuffle_v2i64_v2i64__1_0: 475; GFX90A: ; %bb.0: 476; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 477; GFX90A-NEXT: v_mov_b32_e32 v6, 0 478; GFX90A-NEXT: ;;#ASMSTART 479; GFX90A-NEXT: ; def v[0:3] 480; GFX90A-NEXT: ;;#ASMEND 481; GFX90A-NEXT: v_mov_b32_e32 v4, v0 482; GFX90A-NEXT: v_mov_b32_e32 v5, v1 483; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17] 484; GFX90A-NEXT: s_waitcnt vmcnt(0) 485; GFX90A-NEXT: s_setpc_b64 s[30:31] 486; 487; GFX940-LABEL: v_shuffle_v2i64_v2i64__1_0: 488; GFX940: ; %bb.0: 489; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 490; GFX940-NEXT: v_mov_b32_e32 v6, 0 491; GFX940-NEXT: ;;#ASMSTART 492; GFX940-NEXT: ; def v[0:3] 493; GFX940-NEXT: ;;#ASMEND 494; GFX940-NEXT: s_nop 0 495; GFX940-NEXT: v_mov_b32_e32 v4, v0 496; GFX940-NEXT: v_mov_b32_e32 v5, v1 497; GFX940-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1] sc0 sc1 498; GFX940-NEXT: s_waitcnt vmcnt(0) 499; GFX940-NEXT: s_setpc_b64 s[30:31] 500 %vec0 = call <2 x i64> asm "; def $0", "=v"() 501 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 1, i32 0> 502 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 503 ret void 504} 505 506define void @v_shuffle_v2i64_v2i64__2_0(ptr addrspace(1) inreg %ptr) { 507; GFX900-LABEL: v_shuffle_v2i64_v2i64__2_0: 508; GFX900: ; %bb.0: 509; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 510; GFX900-NEXT: ;;#ASMSTART 511; GFX900-NEXT: ; def v[0:3] 512; GFX900-NEXT: ;;#ASMEND 513; GFX900-NEXT: v_mov_b32_e32 v4, 0 514; GFX900-NEXT: v_mov_b32_e32 v2, v0 515; GFX900-NEXT: v_mov_b32_e32 v3, v1 516; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 517; GFX900-NEXT: s_waitcnt vmcnt(0) 518; GFX900-NEXT: s_setpc_b64 s[30:31] 519; 520; GFX90A-LABEL: v_shuffle_v2i64_v2i64__2_0: 521; GFX90A: ; %bb.0: 522; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 523; GFX90A-NEXT: ;;#ASMSTART 524; GFX90A-NEXT: ; def v[0:3] 525; GFX90A-NEXT: ;;#ASMEND 526; GFX90A-NEXT: v_mov_b32_e32 v4, 0 527; GFX90A-NEXT: v_mov_b32_e32 v2, v0 528; GFX90A-NEXT: v_mov_b32_e32 v3, v1 529; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 530; GFX90A-NEXT: s_waitcnt vmcnt(0) 531; GFX90A-NEXT: s_setpc_b64 s[30:31] 532; 533; GFX940-LABEL: v_shuffle_v2i64_v2i64__2_0: 534; GFX940: ; %bb.0: 535; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 536; GFX940-NEXT: ;;#ASMSTART 537; GFX940-NEXT: ; def v[0:3] 538; GFX940-NEXT: ;;#ASMEND 539; GFX940-NEXT: v_mov_b32_e32 v4, 0 540; GFX940-NEXT: v_mov_b32_e32 v2, v0 541; GFX940-NEXT: v_mov_b32_e32 v3, v1 542; GFX940-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1 543; GFX940-NEXT: s_waitcnt vmcnt(0) 544; GFX940-NEXT: s_setpc_b64 s[30:31] 545 %vec0 = call <2 x i64> asm "; def $0", "=v"() 546 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 2, i32 0> 547 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 548 ret void 549} 550 551define void @v_shuffle_v2i64_v2i64__u_1(ptr addrspace(1) inreg %ptr) { 552; GFX900-LABEL: v_shuffle_v2i64_v2i64__u_1: 553; GFX900: ; %bb.0: 554; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 555; GFX900-NEXT: v_mov_b32_e32 v4, 0 556; GFX900-NEXT: ;;#ASMSTART 557; GFX900-NEXT: ; def v[0:3] 558; GFX900-NEXT: ;;#ASMEND 559; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 560; GFX900-NEXT: s_waitcnt vmcnt(0) 561; GFX900-NEXT: s_setpc_b64 s[30:31] 562; 563; GFX90A-LABEL: v_shuffle_v2i64_v2i64__u_1: 564; GFX90A: ; %bb.0: 565; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 566; GFX90A-NEXT: v_mov_b32_e32 v4, 0 567; GFX90A-NEXT: ;;#ASMSTART 568; GFX90A-NEXT: ; def v[0:3] 569; GFX90A-NEXT: ;;#ASMEND 570; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 571; GFX90A-NEXT: s_waitcnt vmcnt(0) 572; GFX90A-NEXT: s_setpc_b64 s[30:31] 573; 574; GFX940-LABEL: v_shuffle_v2i64_v2i64__u_1: 575; GFX940: ; %bb.0: 576; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 577; GFX940-NEXT: v_mov_b32_e32 v4, 0 578; GFX940-NEXT: ;;#ASMSTART 579; GFX940-NEXT: ; def v[0:3] 580; GFX940-NEXT: ;;#ASMEND 581; GFX940-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1 582; GFX940-NEXT: s_waitcnt vmcnt(0) 583; GFX940-NEXT: s_setpc_b64 s[30:31] 584 %vec0 = call <2 x i64> asm "; def $0", "=v"() 585 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 poison, i32 1> 586 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 587 ret void 588} 589 590define void @v_shuffle_v2i64_v2i64__0_1(ptr addrspace(1) inreg %ptr) { 591; GFX900-LABEL: v_shuffle_v2i64_v2i64__0_1: 592; GFX900: ; %bb.0: 593; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 594; GFX900-NEXT: v_mov_b32_e32 v4, 0 595; GFX900-NEXT: ;;#ASMSTART 596; GFX900-NEXT: ; def v[0:3] 597; GFX900-NEXT: ;;#ASMEND 598; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 599; GFX900-NEXT: s_waitcnt vmcnt(0) 600; GFX900-NEXT: s_setpc_b64 s[30:31] 601; 602; GFX90A-LABEL: v_shuffle_v2i64_v2i64__0_1: 603; GFX90A: ; %bb.0: 604; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 605; GFX90A-NEXT: v_mov_b32_e32 v4, 0 606; GFX90A-NEXT: ;;#ASMSTART 607; GFX90A-NEXT: ; def v[0:3] 608; GFX90A-NEXT: ;;#ASMEND 609; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 610; GFX90A-NEXT: s_waitcnt vmcnt(0) 611; GFX90A-NEXT: s_setpc_b64 s[30:31] 612; 613; GFX940-LABEL: v_shuffle_v2i64_v2i64__0_1: 614; GFX940: ; %bb.0: 615; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 616; GFX940-NEXT: v_mov_b32_e32 v4, 0 617; GFX940-NEXT: ;;#ASMSTART 618; GFX940-NEXT: ; def v[0:3] 619; GFX940-NEXT: ;;#ASMEND 620; GFX940-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1 621; GFX940-NEXT: s_waitcnt vmcnt(0) 622; GFX940-NEXT: s_setpc_b64 s[30:31] 623 %vec0 = call <2 x i64> asm "; def $0", "=v"() 624 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 0, i32 1> 625 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 626 ret void 627} 628 629define void @v_shuffle_v2i64_v2i64__1_1(ptr addrspace(1) inreg %ptr) { 630; GFX900-LABEL: v_shuffle_v2i64_v2i64__1_1: 631; GFX900: ; %bb.0: 632; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 633; GFX900-NEXT: ;;#ASMSTART 634; GFX900-NEXT: ; def v[0:3] 635; GFX900-NEXT: ;;#ASMEND 636; GFX900-NEXT: v_mov_b32_e32 v4, 0 637; GFX900-NEXT: v_mov_b32_e32 v0, v2 638; GFX900-NEXT: v_mov_b32_e32 v1, v3 639; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 640; GFX900-NEXT: s_waitcnt vmcnt(0) 641; GFX900-NEXT: s_setpc_b64 s[30:31] 642; 643; GFX90A-LABEL: v_shuffle_v2i64_v2i64__1_1: 644; GFX90A: ; %bb.0: 645; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 646; GFX90A-NEXT: ;;#ASMSTART 647; GFX90A-NEXT: ; def v[0:3] 648; GFX90A-NEXT: ;;#ASMEND 649; GFX90A-NEXT: v_mov_b32_e32 v4, 0 650; GFX90A-NEXT: v_mov_b32_e32 v0, v2 651; GFX90A-NEXT: v_mov_b32_e32 v1, v3 652; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 653; GFX90A-NEXT: s_waitcnt vmcnt(0) 654; GFX90A-NEXT: s_setpc_b64 s[30:31] 655; 656; GFX940-LABEL: v_shuffle_v2i64_v2i64__1_1: 657; GFX940: ; %bb.0: 658; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 659; GFX940-NEXT: ;;#ASMSTART 660; GFX940-NEXT: ; def v[0:3] 661; GFX940-NEXT: ;;#ASMEND 662; GFX940-NEXT: v_mov_b32_e32 v4, 0 663; GFX940-NEXT: v_mov_b32_e32 v0, v2 664; GFX940-NEXT: v_mov_b32_e32 v1, v3 665; GFX940-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1 666; GFX940-NEXT: s_waitcnt vmcnt(0) 667; GFX940-NEXT: s_setpc_b64 s[30:31] 668 %vec0 = call <2 x i64> asm "; def $0", "=v"() 669 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 1, i32 1> 670 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 671 ret void 672} 673 674define void @v_shuffle_v2i64_v2i64__2_1(ptr addrspace(1) inreg %ptr) { 675; GFX900-LABEL: v_shuffle_v2i64_v2i64__2_1: 676; GFX900: ; %bb.0: 677; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 678; GFX900-NEXT: v_mov_b32_e32 v4, 0 679; GFX900-NEXT: ;;#ASMSTART 680; GFX900-NEXT: ; def v[0:3] 681; GFX900-NEXT: ;;#ASMEND 682; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 683; GFX900-NEXT: s_waitcnt vmcnt(0) 684; GFX900-NEXT: s_setpc_b64 s[30:31] 685; 686; GFX90A-LABEL: v_shuffle_v2i64_v2i64__2_1: 687; GFX90A: ; %bb.0: 688; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 689; GFX90A-NEXT: v_mov_b32_e32 v4, 0 690; GFX90A-NEXT: ;;#ASMSTART 691; GFX90A-NEXT: ; def v[0:3] 692; GFX90A-NEXT: ;;#ASMEND 693; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 694; GFX90A-NEXT: s_waitcnt vmcnt(0) 695; GFX90A-NEXT: s_setpc_b64 s[30:31] 696; 697; GFX940-LABEL: v_shuffle_v2i64_v2i64__2_1: 698; GFX940: ; %bb.0: 699; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 700; GFX940-NEXT: v_mov_b32_e32 v4, 0 701; GFX940-NEXT: ;;#ASMSTART 702; GFX940-NEXT: ; def v[0:3] 703; GFX940-NEXT: ;;#ASMEND 704; GFX940-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1 705; GFX940-NEXT: s_waitcnt vmcnt(0) 706; GFX940-NEXT: s_setpc_b64 s[30:31] 707 %vec0 = call <2 x i64> asm "; def $0", "=v"() 708 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 2, i32 1> 709 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 710 ret void 711} 712 713define void @v_shuffle_v2i64_v2i64__u_2(ptr addrspace(1) inreg %ptr) { 714; GFX9-LABEL: v_shuffle_v2i64_v2i64__u_2: 715; GFX9: ; %bb.0: 716; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 717; GFX9-NEXT: s_setpc_b64 s[30:31] 718 %vec0 = call <2 x i64> asm "; def $0", "=v"() 719 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 poison, i32 2> 720 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 721 ret void 722} 723 724define void @v_shuffle_v2i64_v2i64__0_2(ptr addrspace(1) inreg %ptr) { 725; GFX900-LABEL: v_shuffle_v2i64_v2i64__0_2: 726; GFX900: ; %bb.0: 727; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 728; GFX900-NEXT: v_mov_b32_e32 v4, 0 729; GFX900-NEXT: ;;#ASMSTART 730; GFX900-NEXT: ; def v[0:3] 731; GFX900-NEXT: ;;#ASMEND 732; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 733; GFX900-NEXT: s_waitcnt vmcnt(0) 734; GFX900-NEXT: s_setpc_b64 s[30:31] 735; 736; GFX90A-LABEL: v_shuffle_v2i64_v2i64__0_2: 737; GFX90A: ; %bb.0: 738; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 739; GFX90A-NEXT: v_mov_b32_e32 v4, 0 740; GFX90A-NEXT: ;;#ASMSTART 741; GFX90A-NEXT: ; def v[0:3] 742; GFX90A-NEXT: ;;#ASMEND 743; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 744; GFX90A-NEXT: s_waitcnt vmcnt(0) 745; GFX90A-NEXT: s_setpc_b64 s[30:31] 746; 747; GFX940-LABEL: v_shuffle_v2i64_v2i64__0_2: 748; GFX940: ; %bb.0: 749; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 750; GFX940-NEXT: v_mov_b32_e32 v4, 0 751; GFX940-NEXT: ;;#ASMSTART 752; GFX940-NEXT: ; def v[0:3] 753; GFX940-NEXT: ;;#ASMEND 754; GFX940-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1 755; GFX940-NEXT: s_waitcnt vmcnt(0) 756; GFX940-NEXT: s_setpc_b64 s[30:31] 757 %vec0 = call <2 x i64> asm "; def $0", "=v"() 758 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 0, i32 2> 759 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 760 ret void 761} 762 763define void @v_shuffle_v2i64_v2i64__1_2(ptr addrspace(1) inreg %ptr) { 764; GFX900-LABEL: v_shuffle_v2i64_v2i64__1_2: 765; GFX900: ; %bb.0: 766; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 767; GFX900-NEXT: ;;#ASMSTART 768; GFX900-NEXT: ; def v[0:3] 769; GFX900-NEXT: ;;#ASMEND 770; GFX900-NEXT: v_mov_b32_e32 v4, 0 771; GFX900-NEXT: v_mov_b32_e32 v0, v2 772; GFX900-NEXT: v_mov_b32_e32 v1, v3 773; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 774; GFX900-NEXT: s_waitcnt vmcnt(0) 775; GFX900-NEXT: s_setpc_b64 s[30:31] 776; 777; GFX90A-LABEL: v_shuffle_v2i64_v2i64__1_2: 778; GFX90A: ; %bb.0: 779; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 780; GFX90A-NEXT: ;;#ASMSTART 781; GFX90A-NEXT: ; def v[0:3] 782; GFX90A-NEXT: ;;#ASMEND 783; GFX90A-NEXT: v_mov_b32_e32 v4, 0 784; GFX90A-NEXT: v_mov_b32_e32 v0, v2 785; GFX90A-NEXT: v_mov_b32_e32 v1, v3 786; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 787; GFX90A-NEXT: s_waitcnt vmcnt(0) 788; GFX90A-NEXT: s_setpc_b64 s[30:31] 789; 790; GFX940-LABEL: v_shuffle_v2i64_v2i64__1_2: 791; GFX940: ; %bb.0: 792; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 793; GFX940-NEXT: ;;#ASMSTART 794; GFX940-NEXT: ; def v[0:3] 795; GFX940-NEXT: ;;#ASMEND 796; GFX940-NEXT: v_mov_b32_e32 v4, 0 797; GFX940-NEXT: v_mov_b32_e32 v0, v2 798; GFX940-NEXT: v_mov_b32_e32 v1, v3 799; GFX940-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1 800; GFX940-NEXT: s_waitcnt vmcnt(0) 801; GFX940-NEXT: s_setpc_b64 s[30:31] 802 %vec0 = call <2 x i64> asm "; def $0", "=v"() 803 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 1, i32 2> 804 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 805 ret void 806} 807 808define void @v_shuffle_v2i64_v2i64__2_2(ptr addrspace(1) inreg %ptr) { 809; GFX9-LABEL: v_shuffle_v2i64_v2i64__2_2: 810; GFX9: ; %bb.0: 811; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 812; GFX9-NEXT: s_setpc_b64 s[30:31] 813 %vec0 = call <2 x i64> asm "; def $0", "=v"() 814 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 2, i32 2> 815 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 816 ret void 817} 818 819define void @v_shuffle_v2i64_v2i64__u_3(ptr addrspace(1) inreg %ptr) { 820; GFX900-LABEL: v_shuffle_v2i64_v2i64__u_3: 821; GFX900: ; %bb.0: 822; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 823; GFX900-NEXT: v_mov_b32_e32 v4, 0 824; GFX900-NEXT: ;;#ASMSTART 825; GFX900-NEXT: ; def v[0:3] 826; GFX900-NEXT: ;;#ASMEND 827; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 828; GFX900-NEXT: s_waitcnt vmcnt(0) 829; GFX900-NEXT: s_setpc_b64 s[30:31] 830; 831; GFX90A-LABEL: v_shuffle_v2i64_v2i64__u_3: 832; GFX90A: ; %bb.0: 833; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 834; GFX90A-NEXT: v_mov_b32_e32 v4, 0 835; GFX90A-NEXT: ;;#ASMSTART 836; GFX90A-NEXT: ; def v[0:3] 837; GFX90A-NEXT: ;;#ASMEND 838; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 839; GFX90A-NEXT: s_waitcnt vmcnt(0) 840; GFX90A-NEXT: s_setpc_b64 s[30:31] 841; 842; GFX940-LABEL: v_shuffle_v2i64_v2i64__u_3: 843; GFX940: ; %bb.0: 844; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 845; GFX940-NEXT: v_mov_b32_e32 v4, 0 846; GFX940-NEXT: ;;#ASMSTART 847; GFX940-NEXT: ; def v[0:3] 848; GFX940-NEXT: ;;#ASMEND 849; GFX940-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1 850; GFX940-NEXT: s_waitcnt vmcnt(0) 851; GFX940-NEXT: s_setpc_b64 s[30:31] 852 %vec0 = call <2 x i64> asm "; def $0", "=v"() 853 %vec1 = call <2 x i64> asm "; def $0", "=v"() 854 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 poison, i32 3> 855 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 856 ret void 857} 858 859define void @v_shuffle_v2i64_v2i64__0_3(ptr addrspace(1) inreg %ptr) { 860; GFX900-LABEL: v_shuffle_v2i64_v2i64__0_3: 861; GFX900: ; %bb.0: 862; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 863; GFX900-NEXT: ;;#ASMSTART 864; GFX900-NEXT: ; def v[0:3] 865; GFX900-NEXT: ;;#ASMEND 866; GFX900-NEXT: ;;#ASMSTART 867; GFX900-NEXT: ; def v[2:5] 868; GFX900-NEXT: ;;#ASMEND 869; GFX900-NEXT: v_mov_b32_e32 v6, 0 870; GFX900-NEXT: v_mov_b32_e32 v2, v4 871; GFX900-NEXT: v_mov_b32_e32 v3, v5 872; GFX900-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17] 873; GFX900-NEXT: s_waitcnt vmcnt(0) 874; GFX900-NEXT: s_setpc_b64 s[30:31] 875; 876; GFX90A-LABEL: v_shuffle_v2i64_v2i64__0_3: 877; GFX90A: ; %bb.0: 878; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 879; GFX90A-NEXT: ;;#ASMSTART 880; GFX90A-NEXT: ; def v[0:3] 881; GFX90A-NEXT: ;;#ASMEND 882; GFX90A-NEXT: ;;#ASMSTART 883; GFX90A-NEXT: ; def v[2:5] 884; GFX90A-NEXT: ;;#ASMEND 885; GFX90A-NEXT: v_mov_b32_e32 v6, 0 886; GFX90A-NEXT: v_mov_b32_e32 v2, v4 887; GFX90A-NEXT: v_mov_b32_e32 v3, v5 888; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17] 889; GFX90A-NEXT: s_waitcnt vmcnt(0) 890; GFX90A-NEXT: s_setpc_b64 s[30:31] 891; 892; GFX940-LABEL: v_shuffle_v2i64_v2i64__0_3: 893; GFX940: ; %bb.0: 894; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 895; GFX940-NEXT: ;;#ASMSTART 896; GFX940-NEXT: ; def v[0:3] 897; GFX940-NEXT: ;;#ASMEND 898; GFX940-NEXT: v_mov_b32_e32 v6, 0 899; GFX940-NEXT: ;;#ASMSTART 900; GFX940-NEXT: ; def v[2:5] 901; GFX940-NEXT: ;;#ASMEND 902; GFX940-NEXT: s_nop 0 903; GFX940-NEXT: v_mov_b32_e32 v2, v4 904; GFX940-NEXT: v_mov_b32_e32 v3, v5 905; GFX940-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1] sc0 sc1 906; GFX940-NEXT: s_waitcnt vmcnt(0) 907; GFX940-NEXT: s_setpc_b64 s[30:31] 908 %vec0 = call <2 x i64> asm "; def $0", "=v"() 909 %vec1 = call <2 x i64> asm "; def $0", "=v"() 910 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 0, i32 3> 911 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 912 ret void 913} 914 915define void @v_shuffle_v2i64_v2i64__1_3(ptr addrspace(1) inreg %ptr) { 916; GFX900-LABEL: v_shuffle_v2i64_v2i64__1_3: 917; GFX900: ; %bb.0: 918; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 919; GFX900-NEXT: ;;#ASMSTART 920; GFX900-NEXT: ; def v[4:7] 921; GFX900-NEXT: ;;#ASMEND 922; GFX900-NEXT: v_mov_b32_e32 v8, 0 923; GFX900-NEXT: ;;#ASMSTART 924; GFX900-NEXT: ; def v[0:3] 925; GFX900-NEXT: ;;#ASMEND 926; GFX900-NEXT: v_mov_b32_e32 v4, v2 927; GFX900-NEXT: v_mov_b32_e32 v5, v3 928; GFX900-NEXT: global_store_dwordx4 v8, v[4:7], s[16:17] 929; GFX900-NEXT: s_waitcnt vmcnt(0) 930; GFX900-NEXT: s_setpc_b64 s[30:31] 931; 932; GFX90A-LABEL: v_shuffle_v2i64_v2i64__1_3: 933; GFX90A: ; %bb.0: 934; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 935; GFX90A-NEXT: ;;#ASMSTART 936; GFX90A-NEXT: ; def v[4:7] 937; GFX90A-NEXT: ;;#ASMEND 938; GFX90A-NEXT: v_mov_b32_e32 v8, 0 939; GFX90A-NEXT: ;;#ASMSTART 940; GFX90A-NEXT: ; def v[0:3] 941; GFX90A-NEXT: ;;#ASMEND 942; GFX90A-NEXT: v_mov_b32_e32 v4, v2 943; GFX90A-NEXT: v_mov_b32_e32 v5, v3 944; GFX90A-NEXT: global_store_dwordx4 v8, v[4:7], s[16:17] 945; GFX90A-NEXT: s_waitcnt vmcnt(0) 946; GFX90A-NEXT: s_setpc_b64 s[30:31] 947; 948; GFX940-LABEL: v_shuffle_v2i64_v2i64__1_3: 949; GFX940: ; %bb.0: 950; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 951; GFX940-NEXT: ;;#ASMSTART 952; GFX940-NEXT: ; def v[4:7] 953; GFX940-NEXT: ;;#ASMEND 954; GFX940-NEXT: v_mov_b32_e32 v8, 0 955; GFX940-NEXT: ;;#ASMSTART 956; GFX940-NEXT: ; def v[0:3] 957; GFX940-NEXT: ;;#ASMEND 958; GFX940-NEXT: s_nop 0 959; GFX940-NEXT: v_mov_b32_e32 v4, v2 960; GFX940-NEXT: v_mov_b32_e32 v5, v3 961; GFX940-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1] sc0 sc1 962; GFX940-NEXT: s_waitcnt vmcnt(0) 963; GFX940-NEXT: s_setpc_b64 s[30:31] 964 %vec0 = call <2 x i64> asm "; def $0", "=v"() 965 %vec1 = call <2 x i64> asm "; def $0", "=v"() 966 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 1, i32 3> 967 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 968 ret void 969} 970 971define void @v_shuffle_v2i64_v2i64__2_3(ptr addrspace(1) inreg %ptr) { 972; GFX900-LABEL: v_shuffle_v2i64_v2i64__2_3: 973; GFX900: ; %bb.0: 974; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 975; GFX900-NEXT: v_mov_b32_e32 v4, 0 976; GFX900-NEXT: ;;#ASMSTART 977; GFX900-NEXT: ; def v[0:3] 978; GFX900-NEXT: ;;#ASMEND 979; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 980; GFX900-NEXT: s_waitcnt vmcnt(0) 981; GFX900-NEXT: s_setpc_b64 s[30:31] 982; 983; GFX90A-LABEL: v_shuffle_v2i64_v2i64__2_3: 984; GFX90A: ; %bb.0: 985; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 986; GFX90A-NEXT: v_mov_b32_e32 v4, 0 987; GFX90A-NEXT: ;;#ASMSTART 988; GFX90A-NEXT: ; def v[0:3] 989; GFX90A-NEXT: ;;#ASMEND 990; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17] 991; GFX90A-NEXT: s_waitcnt vmcnt(0) 992; GFX90A-NEXT: s_setpc_b64 s[30:31] 993; 994; GFX940-LABEL: v_shuffle_v2i64_v2i64__2_3: 995; GFX940: ; %bb.0: 996; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 997; GFX940-NEXT: v_mov_b32_e32 v4, 0 998; GFX940-NEXT: ;;#ASMSTART 999; GFX940-NEXT: ; def v[0:3] 1000; GFX940-NEXT: ;;#ASMEND 1001; GFX940-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1 1002; GFX940-NEXT: s_waitcnt vmcnt(0) 1003; GFX940-NEXT: s_setpc_b64 s[30:31] 1004 %vec0 = call <2 x i64> asm "; def $0", "=v"() 1005 %vec1 = call <2 x i64> asm "; def $0", "=v"() 1006 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 2, i32 3> 1007 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16 1008 ret void 1009} 1010 1011define void @s_shuffle_v2i64_v2i64__u_u() { 1012; GFX9-LABEL: s_shuffle_v2i64_v2i64__u_u: 1013; GFX9: ; %bb.0: 1014; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1015; GFX9-NEXT: ;;#ASMSTART 1016; GFX9-NEXT: ; use s[8:11] 1017; GFX9-NEXT: ;;#ASMEND 1018; GFX9-NEXT: s_setpc_b64 s[30:31] 1019 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1020 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> poison 1021 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1022 ret void 1023} 1024 1025define void @s_shuffle_v2i64_v2i64__0_u() { 1026; GFX900-LABEL: s_shuffle_v2i64_v2i64__0_u: 1027; GFX900: ; %bb.0: 1028; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1029; GFX900-NEXT: ;;#ASMSTART 1030; GFX900-NEXT: ; def s[8:11] 1031; GFX900-NEXT: ;;#ASMEND 1032; GFX900-NEXT: ;;#ASMSTART 1033; GFX900-NEXT: ; use s[8:11] 1034; GFX900-NEXT: ;;#ASMEND 1035; GFX900-NEXT: s_setpc_b64 s[30:31] 1036; 1037; GFX90A-LABEL: s_shuffle_v2i64_v2i64__0_u: 1038; GFX90A: ; %bb.0: 1039; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1040; GFX90A-NEXT: ;;#ASMSTART 1041; GFX90A-NEXT: ; def s[8:11] 1042; GFX90A-NEXT: ;;#ASMEND 1043; GFX90A-NEXT: ;;#ASMSTART 1044; GFX90A-NEXT: ; use s[8:11] 1045; GFX90A-NEXT: ;;#ASMEND 1046; GFX90A-NEXT: s_setpc_b64 s[30:31] 1047; 1048; GFX940-LABEL: s_shuffle_v2i64_v2i64__0_u: 1049; GFX940: ; %bb.0: 1050; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1051; GFX940-NEXT: ;;#ASMSTART 1052; GFX940-NEXT: ; def s[8:11] 1053; GFX940-NEXT: ;;#ASMEND 1054; GFX940-NEXT: s_nop 0 1055; GFX940-NEXT: ;;#ASMSTART 1056; GFX940-NEXT: ; use s[8:11] 1057; GFX940-NEXT: ;;#ASMEND 1058; GFX940-NEXT: s_setpc_b64 s[30:31] 1059 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1060 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 0, i32 poison> 1061 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1062 ret void 1063} 1064 1065define void @s_shuffle_v2i64_v2i64__1_u() { 1066; GFX900-LABEL: s_shuffle_v2i64_v2i64__1_u: 1067; GFX900: ; %bb.0: 1068; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1069; GFX900-NEXT: ;;#ASMSTART 1070; GFX900-NEXT: ; def s[4:7] 1071; GFX900-NEXT: ;;#ASMEND 1072; GFX900-NEXT: s_mov_b32 s8, s6 1073; GFX900-NEXT: s_mov_b32 s9, s7 1074; GFX900-NEXT: ;;#ASMSTART 1075; GFX900-NEXT: ; use s[8:11] 1076; GFX900-NEXT: ;;#ASMEND 1077; GFX900-NEXT: s_setpc_b64 s[30:31] 1078; 1079; GFX90A-LABEL: s_shuffle_v2i64_v2i64__1_u: 1080; GFX90A: ; %bb.0: 1081; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1082; GFX90A-NEXT: ;;#ASMSTART 1083; GFX90A-NEXT: ; def s[4:7] 1084; GFX90A-NEXT: ;;#ASMEND 1085; GFX90A-NEXT: s_mov_b32 s8, s6 1086; GFX90A-NEXT: s_mov_b32 s9, s7 1087; GFX90A-NEXT: ;;#ASMSTART 1088; GFX90A-NEXT: ; use s[8:11] 1089; GFX90A-NEXT: ;;#ASMEND 1090; GFX90A-NEXT: s_setpc_b64 s[30:31] 1091; 1092; GFX940-LABEL: s_shuffle_v2i64_v2i64__1_u: 1093; GFX940: ; %bb.0: 1094; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1095; GFX940-NEXT: ;;#ASMSTART 1096; GFX940-NEXT: ; def s[0:3] 1097; GFX940-NEXT: ;;#ASMEND 1098; GFX940-NEXT: s_mov_b32 s8, s2 1099; GFX940-NEXT: s_mov_b32 s9, s3 1100; GFX940-NEXT: ;;#ASMSTART 1101; GFX940-NEXT: ; use s[8:11] 1102; GFX940-NEXT: ;;#ASMEND 1103; GFX940-NEXT: s_setpc_b64 s[30:31] 1104 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1105 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 1, i32 poison> 1106 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1107 ret void 1108} 1109 1110define void @s_shuffle_v2i64_v2i64__2_u() { 1111; GFX9-LABEL: s_shuffle_v2i64_v2i64__2_u: 1112; GFX9: ; %bb.0: 1113; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1114; GFX9-NEXT: ;;#ASMSTART 1115; GFX9-NEXT: ; use s[8:11] 1116; GFX9-NEXT: ;;#ASMEND 1117; GFX9-NEXT: s_setpc_b64 s[30:31] 1118 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1119 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 2, i32 poison> 1120 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1121 ret void 1122} 1123 1124define void @s_shuffle_v2i64_v2i64__3_u() { 1125; GFX900-LABEL: s_shuffle_v2i64_v2i64__3_u: 1126; GFX900: ; %bb.0: 1127; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1128; GFX900-NEXT: ;;#ASMSTART 1129; GFX900-NEXT: ; def s[4:7] 1130; GFX900-NEXT: ;;#ASMEND 1131; GFX900-NEXT: s_mov_b32 s8, s6 1132; GFX900-NEXT: s_mov_b32 s9, s7 1133; GFX900-NEXT: ;;#ASMSTART 1134; GFX900-NEXT: ; use s[8:11] 1135; GFX900-NEXT: ;;#ASMEND 1136; GFX900-NEXT: s_setpc_b64 s[30:31] 1137; 1138; GFX90A-LABEL: s_shuffle_v2i64_v2i64__3_u: 1139; GFX90A: ; %bb.0: 1140; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1141; GFX90A-NEXT: ;;#ASMSTART 1142; GFX90A-NEXT: ; def s[4:7] 1143; GFX90A-NEXT: ;;#ASMEND 1144; GFX90A-NEXT: s_mov_b32 s8, s6 1145; GFX90A-NEXT: s_mov_b32 s9, s7 1146; GFX90A-NEXT: ;;#ASMSTART 1147; GFX90A-NEXT: ; use s[8:11] 1148; GFX90A-NEXT: ;;#ASMEND 1149; GFX90A-NEXT: s_setpc_b64 s[30:31] 1150; 1151; GFX940-LABEL: s_shuffle_v2i64_v2i64__3_u: 1152; GFX940: ; %bb.0: 1153; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1154; GFX940-NEXT: ;;#ASMSTART 1155; GFX940-NEXT: ; def s[0:3] 1156; GFX940-NEXT: ;;#ASMEND 1157; GFX940-NEXT: s_mov_b32 s8, s2 1158; GFX940-NEXT: s_mov_b32 s9, s3 1159; GFX940-NEXT: ;;#ASMSTART 1160; GFX940-NEXT: ; use s[8:11] 1161; GFX940-NEXT: ;;#ASMEND 1162; GFX940-NEXT: s_setpc_b64 s[30:31] 1163 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1164 %vec1 = call <2 x i64> asm "; def $0", "=s"() 1165 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 poison> 1166 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1167 ret void 1168} 1169 1170define void @s_shuffle_v2i64_v2i64__3_0() { 1171; GFX900-LABEL: s_shuffle_v2i64_v2i64__3_0: 1172; GFX900: ; %bb.0: 1173; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1174; GFX900-NEXT: ;;#ASMSTART 1175; GFX900-NEXT: ; def s[8:11] 1176; GFX900-NEXT: ;;#ASMEND 1177; GFX900-NEXT: ;;#ASMSTART 1178; GFX900-NEXT: ; def s[4:7] 1179; GFX900-NEXT: ;;#ASMEND 1180; GFX900-NEXT: s_mov_b32 s8, s10 1181; GFX900-NEXT: s_mov_b32 s9, s11 1182; GFX900-NEXT: s_mov_b32 s10, s4 1183; GFX900-NEXT: s_mov_b32 s11, s5 1184; GFX900-NEXT: ;;#ASMSTART 1185; GFX900-NEXT: ; use s[8:11] 1186; GFX900-NEXT: ;;#ASMEND 1187; GFX900-NEXT: s_setpc_b64 s[30:31] 1188; 1189; GFX90A-LABEL: s_shuffle_v2i64_v2i64__3_0: 1190; GFX90A: ; %bb.0: 1191; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1192; GFX90A-NEXT: ;;#ASMSTART 1193; GFX90A-NEXT: ; def s[8:11] 1194; GFX90A-NEXT: ;;#ASMEND 1195; GFX90A-NEXT: ;;#ASMSTART 1196; GFX90A-NEXT: ; def s[4:7] 1197; GFX90A-NEXT: ;;#ASMEND 1198; GFX90A-NEXT: s_mov_b32 s8, s10 1199; GFX90A-NEXT: s_mov_b32 s9, s11 1200; GFX90A-NEXT: s_mov_b32 s10, s4 1201; GFX90A-NEXT: s_mov_b32 s11, s5 1202; GFX90A-NEXT: ;;#ASMSTART 1203; GFX90A-NEXT: ; use s[8:11] 1204; GFX90A-NEXT: ;;#ASMEND 1205; GFX90A-NEXT: s_setpc_b64 s[30:31] 1206; 1207; GFX940-LABEL: s_shuffle_v2i64_v2i64__3_0: 1208; GFX940: ; %bb.0: 1209; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1210; GFX940-NEXT: ;;#ASMSTART 1211; GFX940-NEXT: ; def s[0:3] 1212; GFX940-NEXT: ;;#ASMEND 1213; GFX940-NEXT: ;;#ASMSTART 1214; GFX940-NEXT: ; def s[4:7] 1215; GFX940-NEXT: ;;#ASMEND 1216; GFX940-NEXT: s_mov_b32 s8, s6 1217; GFX940-NEXT: s_mov_b32 s9, s7 1218; GFX940-NEXT: s_mov_b32 s10, s0 1219; GFX940-NEXT: s_mov_b32 s11, s1 1220; GFX940-NEXT: ;;#ASMSTART 1221; GFX940-NEXT: ; use s[8:11] 1222; GFX940-NEXT: ;;#ASMEND 1223; GFX940-NEXT: s_setpc_b64 s[30:31] 1224 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1225 %vec1 = call <2 x i64> asm "; def $0", "=s"() 1226 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 0> 1227 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1228 ret void 1229} 1230 1231define void @s_shuffle_v2i64_v2i64__3_1() { 1232; GFX900-LABEL: s_shuffle_v2i64_v2i64__3_1: 1233; GFX900: ; %bb.0: 1234; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1235; GFX900-NEXT: ;;#ASMSTART 1236; GFX900-NEXT: ; def s[8:11] 1237; GFX900-NEXT: ;;#ASMEND 1238; GFX900-NEXT: ;;#ASMSTART 1239; GFX900-NEXT: ; def s[4:7] 1240; GFX900-NEXT: ;;#ASMEND 1241; GFX900-NEXT: s_mov_b32 s8, s6 1242; GFX900-NEXT: s_mov_b32 s9, s7 1243; GFX900-NEXT: ;;#ASMSTART 1244; GFX900-NEXT: ; use s[8:11] 1245; GFX900-NEXT: ;;#ASMEND 1246; GFX900-NEXT: s_setpc_b64 s[30:31] 1247; 1248; GFX90A-LABEL: s_shuffle_v2i64_v2i64__3_1: 1249; GFX90A: ; %bb.0: 1250; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1251; GFX90A-NEXT: ;;#ASMSTART 1252; GFX90A-NEXT: ; def s[8:11] 1253; GFX90A-NEXT: ;;#ASMEND 1254; GFX90A-NEXT: ;;#ASMSTART 1255; GFX90A-NEXT: ; def s[4:7] 1256; GFX90A-NEXT: ;;#ASMEND 1257; GFX90A-NEXT: s_mov_b32 s8, s6 1258; GFX90A-NEXT: s_mov_b32 s9, s7 1259; GFX90A-NEXT: ;;#ASMSTART 1260; GFX90A-NEXT: ; use s[8:11] 1261; GFX90A-NEXT: ;;#ASMEND 1262; GFX90A-NEXT: s_setpc_b64 s[30:31] 1263; 1264; GFX940-LABEL: s_shuffle_v2i64_v2i64__3_1: 1265; GFX940: ; %bb.0: 1266; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1267; GFX940-NEXT: ;;#ASMSTART 1268; GFX940-NEXT: ; def s[8:11] 1269; GFX940-NEXT: ;;#ASMEND 1270; GFX940-NEXT: ;;#ASMSTART 1271; GFX940-NEXT: ; def s[0:3] 1272; GFX940-NEXT: ;;#ASMEND 1273; GFX940-NEXT: s_mov_b32 s8, s2 1274; GFX940-NEXT: s_mov_b32 s9, s3 1275; GFX940-NEXT: ;;#ASMSTART 1276; GFX940-NEXT: ; use s[8:11] 1277; GFX940-NEXT: ;;#ASMEND 1278; GFX940-NEXT: s_setpc_b64 s[30:31] 1279 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1280 %vec1 = call <2 x i64> asm "; def $0", "=s"() 1281 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 1> 1282 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1283 ret void 1284} 1285 1286define void @s_shuffle_v2i64_v2i64__3_2() { 1287; GFX900-LABEL: s_shuffle_v2i64_v2i64__3_2: 1288; GFX900: ; %bb.0: 1289; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1290; GFX900-NEXT: ;;#ASMSTART 1291; GFX900-NEXT: ; def s[4:7] 1292; GFX900-NEXT: ;;#ASMEND 1293; GFX900-NEXT: s_mov_b32 s8, s6 1294; GFX900-NEXT: s_mov_b32 s9, s7 1295; GFX900-NEXT: s_mov_b32 s10, s4 1296; GFX900-NEXT: s_mov_b32 s11, s5 1297; GFX900-NEXT: ;;#ASMSTART 1298; GFX900-NEXT: ; use s[8:11] 1299; GFX900-NEXT: ;;#ASMEND 1300; GFX900-NEXT: s_setpc_b64 s[30:31] 1301; 1302; GFX90A-LABEL: s_shuffle_v2i64_v2i64__3_2: 1303; GFX90A: ; %bb.0: 1304; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1305; GFX90A-NEXT: ;;#ASMSTART 1306; GFX90A-NEXT: ; def s[4:7] 1307; GFX90A-NEXT: ;;#ASMEND 1308; GFX90A-NEXT: s_mov_b32 s8, s6 1309; GFX90A-NEXT: s_mov_b32 s9, s7 1310; GFX90A-NEXT: s_mov_b32 s10, s4 1311; GFX90A-NEXT: s_mov_b32 s11, s5 1312; GFX90A-NEXT: ;;#ASMSTART 1313; GFX90A-NEXT: ; use s[8:11] 1314; GFX90A-NEXT: ;;#ASMEND 1315; GFX90A-NEXT: s_setpc_b64 s[30:31] 1316; 1317; GFX940-LABEL: s_shuffle_v2i64_v2i64__3_2: 1318; GFX940: ; %bb.0: 1319; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1320; GFX940-NEXT: ;;#ASMSTART 1321; GFX940-NEXT: ; def s[0:3] 1322; GFX940-NEXT: ;;#ASMEND 1323; GFX940-NEXT: s_mov_b32 s8, s2 1324; GFX940-NEXT: s_mov_b32 s9, s3 1325; GFX940-NEXT: s_mov_b32 s10, s0 1326; GFX940-NEXT: s_mov_b32 s11, s1 1327; GFX940-NEXT: ;;#ASMSTART 1328; GFX940-NEXT: ; use s[8:11] 1329; GFX940-NEXT: ;;#ASMEND 1330; GFX940-NEXT: s_setpc_b64 s[30:31] 1331 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1332 %vec1 = call <2 x i64> asm "; def $0", "=s"() 1333 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 2> 1334 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1335 ret void 1336} 1337 1338define void @s_shuffle_v2i64_v2i64__3_3() { 1339; GFX9-LABEL: s_shuffle_v2i64_v2i64__3_3: 1340; GFX9: ; %bb.0: 1341; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1342; GFX9-NEXT: ;;#ASMSTART 1343; GFX9-NEXT: ; def s[8:11] 1344; GFX9-NEXT: ;;#ASMEND 1345; GFX9-NEXT: s_mov_b32 s8, s10 1346; GFX9-NEXT: s_mov_b32 s9, s11 1347; GFX9-NEXT: ;;#ASMSTART 1348; GFX9-NEXT: ; use s[8:11] 1349; GFX9-NEXT: ;;#ASMEND 1350; GFX9-NEXT: s_setpc_b64 s[30:31] 1351 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1352 %vec1 = call <2 x i64> asm "; def $0", "=s"() 1353 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 3> 1354 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1355 ret void 1356} 1357 1358define void @s_shuffle_v2i64_v2i64__u_0() { 1359; GFX900-LABEL: s_shuffle_v2i64_v2i64__u_0: 1360; GFX900: ; %bb.0: 1361; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1362; GFX900-NEXT: ;;#ASMSTART 1363; GFX900-NEXT: ; def s[4:7] 1364; GFX900-NEXT: ;;#ASMEND 1365; GFX900-NEXT: s_mov_b32 s10, s4 1366; GFX900-NEXT: s_mov_b32 s11, s5 1367; GFX900-NEXT: ;;#ASMSTART 1368; GFX900-NEXT: ; use s[8:11] 1369; GFX900-NEXT: ;;#ASMEND 1370; GFX900-NEXT: s_setpc_b64 s[30:31] 1371; 1372; GFX90A-LABEL: s_shuffle_v2i64_v2i64__u_0: 1373; GFX90A: ; %bb.0: 1374; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1375; GFX90A-NEXT: ;;#ASMSTART 1376; GFX90A-NEXT: ; def s[4:7] 1377; GFX90A-NEXT: ;;#ASMEND 1378; GFX90A-NEXT: s_mov_b32 s10, s4 1379; GFX90A-NEXT: s_mov_b32 s11, s5 1380; GFX90A-NEXT: ;;#ASMSTART 1381; GFX90A-NEXT: ; use s[8:11] 1382; GFX90A-NEXT: ;;#ASMEND 1383; GFX90A-NEXT: s_setpc_b64 s[30:31] 1384; 1385; GFX940-LABEL: s_shuffle_v2i64_v2i64__u_0: 1386; GFX940: ; %bb.0: 1387; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1388; GFX940-NEXT: ;;#ASMSTART 1389; GFX940-NEXT: ; def s[0:3] 1390; GFX940-NEXT: ;;#ASMEND 1391; GFX940-NEXT: s_mov_b32 s10, s0 1392; GFX940-NEXT: s_mov_b32 s11, s1 1393; GFX940-NEXT: ;;#ASMSTART 1394; GFX940-NEXT: ; use s[8:11] 1395; GFX940-NEXT: ;;#ASMEND 1396; GFX940-NEXT: s_setpc_b64 s[30:31] 1397 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1398 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 poison, i32 0> 1399 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1400 ret void 1401} 1402 1403define void @s_shuffle_v2i64_v2i64__0_0() { 1404; GFX9-LABEL: s_shuffle_v2i64_v2i64__0_0: 1405; GFX9: ; %bb.0: 1406; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1407; GFX9-NEXT: ;;#ASMSTART 1408; GFX9-NEXT: ; def s[8:11] 1409; GFX9-NEXT: ;;#ASMEND 1410; GFX9-NEXT: s_mov_b32 s10, s8 1411; GFX9-NEXT: s_mov_b32 s11, s9 1412; GFX9-NEXT: ;;#ASMSTART 1413; GFX9-NEXT: ; use s[8:11] 1414; GFX9-NEXT: ;;#ASMEND 1415; GFX9-NEXT: s_setpc_b64 s[30:31] 1416 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1417 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> zeroinitializer 1418 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1419 ret void 1420} 1421 1422define void @s_shuffle_v2i64_v2i64__1_0() { 1423; GFX900-LABEL: s_shuffle_v2i64_v2i64__1_0: 1424; GFX900: ; %bb.0: 1425; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1426; GFX900-NEXT: ;;#ASMSTART 1427; GFX900-NEXT: ; def s[4:7] 1428; GFX900-NEXT: ;;#ASMEND 1429; GFX900-NEXT: s_mov_b32 s8, s6 1430; GFX900-NEXT: s_mov_b32 s9, s7 1431; GFX900-NEXT: s_mov_b32 s10, s4 1432; GFX900-NEXT: s_mov_b32 s11, s5 1433; GFX900-NEXT: ;;#ASMSTART 1434; GFX900-NEXT: ; use s[8:11] 1435; GFX900-NEXT: ;;#ASMEND 1436; GFX900-NEXT: s_setpc_b64 s[30:31] 1437; 1438; GFX90A-LABEL: s_shuffle_v2i64_v2i64__1_0: 1439; GFX90A: ; %bb.0: 1440; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1441; GFX90A-NEXT: ;;#ASMSTART 1442; GFX90A-NEXT: ; def s[4:7] 1443; GFX90A-NEXT: ;;#ASMEND 1444; GFX90A-NEXT: s_mov_b32 s8, s6 1445; GFX90A-NEXT: s_mov_b32 s9, s7 1446; GFX90A-NEXT: s_mov_b32 s10, s4 1447; GFX90A-NEXT: s_mov_b32 s11, s5 1448; GFX90A-NEXT: ;;#ASMSTART 1449; GFX90A-NEXT: ; use s[8:11] 1450; GFX90A-NEXT: ;;#ASMEND 1451; GFX90A-NEXT: s_setpc_b64 s[30:31] 1452; 1453; GFX940-LABEL: s_shuffle_v2i64_v2i64__1_0: 1454; GFX940: ; %bb.0: 1455; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1456; GFX940-NEXT: ;;#ASMSTART 1457; GFX940-NEXT: ; def s[0:3] 1458; GFX940-NEXT: ;;#ASMEND 1459; GFX940-NEXT: s_mov_b32 s8, s2 1460; GFX940-NEXT: s_mov_b32 s9, s3 1461; GFX940-NEXT: s_mov_b32 s10, s0 1462; GFX940-NEXT: s_mov_b32 s11, s1 1463; GFX940-NEXT: ;;#ASMSTART 1464; GFX940-NEXT: ; use s[8:11] 1465; GFX940-NEXT: ;;#ASMEND 1466; GFX940-NEXT: s_setpc_b64 s[30:31] 1467 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1468 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 1, i32 0> 1469 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1470 ret void 1471} 1472 1473define void @s_shuffle_v2i64_v2i64__2_0() { 1474; GFX900-LABEL: s_shuffle_v2i64_v2i64__2_0: 1475; GFX900: ; %bb.0: 1476; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1477; GFX900-NEXT: ;;#ASMSTART 1478; GFX900-NEXT: ; def s[4:7] 1479; GFX900-NEXT: ;;#ASMEND 1480; GFX900-NEXT: s_mov_b32 s10, s4 1481; GFX900-NEXT: s_mov_b32 s11, s5 1482; GFX900-NEXT: ;;#ASMSTART 1483; GFX900-NEXT: ; use s[8:11] 1484; GFX900-NEXT: ;;#ASMEND 1485; GFX900-NEXT: s_setpc_b64 s[30:31] 1486; 1487; GFX90A-LABEL: s_shuffle_v2i64_v2i64__2_0: 1488; GFX90A: ; %bb.0: 1489; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1490; GFX90A-NEXT: ;;#ASMSTART 1491; GFX90A-NEXT: ; def s[4:7] 1492; GFX90A-NEXT: ;;#ASMEND 1493; GFX90A-NEXT: s_mov_b32 s10, s4 1494; GFX90A-NEXT: s_mov_b32 s11, s5 1495; GFX90A-NEXT: ;;#ASMSTART 1496; GFX90A-NEXT: ; use s[8:11] 1497; GFX90A-NEXT: ;;#ASMEND 1498; GFX90A-NEXT: s_setpc_b64 s[30:31] 1499; 1500; GFX940-LABEL: s_shuffle_v2i64_v2i64__2_0: 1501; GFX940: ; %bb.0: 1502; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1503; GFX940-NEXT: ;;#ASMSTART 1504; GFX940-NEXT: ; def s[0:3] 1505; GFX940-NEXT: ;;#ASMEND 1506; GFX940-NEXT: s_mov_b32 s10, s0 1507; GFX940-NEXT: s_mov_b32 s11, s1 1508; GFX940-NEXT: ;;#ASMSTART 1509; GFX940-NEXT: ; use s[8:11] 1510; GFX940-NEXT: ;;#ASMEND 1511; GFX940-NEXT: s_setpc_b64 s[30:31] 1512 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1513 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 2, i32 0> 1514 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1515 ret void 1516} 1517 1518define void @s_shuffle_v2i64_v2i64__u_1() { 1519; GFX900-LABEL: s_shuffle_v2i64_v2i64__u_1: 1520; GFX900: ; %bb.0: 1521; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1522; GFX900-NEXT: ;;#ASMSTART 1523; GFX900-NEXT: ; def s[8:11] 1524; GFX900-NEXT: ;;#ASMEND 1525; GFX900-NEXT: ;;#ASMSTART 1526; GFX900-NEXT: ; use s[8:11] 1527; GFX900-NEXT: ;;#ASMEND 1528; GFX900-NEXT: s_setpc_b64 s[30:31] 1529; 1530; GFX90A-LABEL: s_shuffle_v2i64_v2i64__u_1: 1531; GFX90A: ; %bb.0: 1532; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1533; GFX90A-NEXT: ;;#ASMSTART 1534; GFX90A-NEXT: ; def s[8:11] 1535; GFX90A-NEXT: ;;#ASMEND 1536; GFX90A-NEXT: ;;#ASMSTART 1537; GFX90A-NEXT: ; use s[8:11] 1538; GFX90A-NEXT: ;;#ASMEND 1539; GFX90A-NEXT: s_setpc_b64 s[30:31] 1540; 1541; GFX940-LABEL: s_shuffle_v2i64_v2i64__u_1: 1542; GFX940: ; %bb.0: 1543; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1544; GFX940-NEXT: ;;#ASMSTART 1545; GFX940-NEXT: ; def s[8:11] 1546; GFX940-NEXT: ;;#ASMEND 1547; GFX940-NEXT: s_nop 0 1548; GFX940-NEXT: ;;#ASMSTART 1549; GFX940-NEXT: ; use s[8:11] 1550; GFX940-NEXT: ;;#ASMEND 1551; GFX940-NEXT: s_setpc_b64 s[30:31] 1552 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1553 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 poison, i32 1> 1554 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1555 ret void 1556} 1557 1558define void @s_shuffle_v2i64_v2i64__0_1() { 1559; GFX900-LABEL: s_shuffle_v2i64_v2i64__0_1: 1560; GFX900: ; %bb.0: 1561; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1562; GFX900-NEXT: ;;#ASMSTART 1563; GFX900-NEXT: ; def s[8:11] 1564; GFX900-NEXT: ;;#ASMEND 1565; GFX900-NEXT: ;;#ASMSTART 1566; GFX900-NEXT: ; use s[8:11] 1567; GFX900-NEXT: ;;#ASMEND 1568; GFX900-NEXT: s_setpc_b64 s[30:31] 1569; 1570; GFX90A-LABEL: s_shuffle_v2i64_v2i64__0_1: 1571; GFX90A: ; %bb.0: 1572; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1573; GFX90A-NEXT: ;;#ASMSTART 1574; GFX90A-NEXT: ; def s[8:11] 1575; GFX90A-NEXT: ;;#ASMEND 1576; GFX90A-NEXT: ;;#ASMSTART 1577; GFX90A-NEXT: ; use s[8:11] 1578; GFX90A-NEXT: ;;#ASMEND 1579; GFX90A-NEXT: s_setpc_b64 s[30:31] 1580; 1581; GFX940-LABEL: s_shuffle_v2i64_v2i64__0_1: 1582; GFX940: ; %bb.0: 1583; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1584; GFX940-NEXT: ;;#ASMSTART 1585; GFX940-NEXT: ; def s[8:11] 1586; GFX940-NEXT: ;;#ASMEND 1587; GFX940-NEXT: s_nop 0 1588; GFX940-NEXT: ;;#ASMSTART 1589; GFX940-NEXT: ; use s[8:11] 1590; GFX940-NEXT: ;;#ASMEND 1591; GFX940-NEXT: s_setpc_b64 s[30:31] 1592 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1593 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 0, i32 1> 1594 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1595 ret void 1596} 1597 1598define void @s_shuffle_v2i64_v2i64__1_1() { 1599; GFX9-LABEL: s_shuffle_v2i64_v2i64__1_1: 1600; GFX9: ; %bb.0: 1601; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1602; GFX9-NEXT: ;;#ASMSTART 1603; GFX9-NEXT: ; def s[8:11] 1604; GFX9-NEXT: ;;#ASMEND 1605; GFX9-NEXT: s_mov_b32 s8, s10 1606; GFX9-NEXT: s_mov_b32 s9, s11 1607; GFX9-NEXT: ;;#ASMSTART 1608; GFX9-NEXT: ; use s[8:11] 1609; GFX9-NEXT: ;;#ASMEND 1610; GFX9-NEXT: s_setpc_b64 s[30:31] 1611 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1612 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 1, i32 1> 1613 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1614 ret void 1615} 1616 1617define void @s_shuffle_v2i64_v2i64__2_1() { 1618; GFX900-LABEL: s_shuffle_v2i64_v2i64__2_1: 1619; GFX900: ; %bb.0: 1620; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1621; GFX900-NEXT: ;;#ASMSTART 1622; GFX900-NEXT: ; def s[8:11] 1623; GFX900-NEXT: ;;#ASMEND 1624; GFX900-NEXT: ;;#ASMSTART 1625; GFX900-NEXT: ; use s[8:11] 1626; GFX900-NEXT: ;;#ASMEND 1627; GFX900-NEXT: s_setpc_b64 s[30:31] 1628; 1629; GFX90A-LABEL: s_shuffle_v2i64_v2i64__2_1: 1630; GFX90A: ; %bb.0: 1631; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1632; GFX90A-NEXT: ;;#ASMSTART 1633; GFX90A-NEXT: ; def s[8:11] 1634; GFX90A-NEXT: ;;#ASMEND 1635; GFX90A-NEXT: ;;#ASMSTART 1636; GFX90A-NEXT: ; use s[8:11] 1637; GFX90A-NEXT: ;;#ASMEND 1638; GFX90A-NEXT: s_setpc_b64 s[30:31] 1639; 1640; GFX940-LABEL: s_shuffle_v2i64_v2i64__2_1: 1641; GFX940: ; %bb.0: 1642; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1643; GFX940-NEXT: ;;#ASMSTART 1644; GFX940-NEXT: ; def s[8:11] 1645; GFX940-NEXT: ;;#ASMEND 1646; GFX940-NEXT: s_nop 0 1647; GFX940-NEXT: ;;#ASMSTART 1648; GFX940-NEXT: ; use s[8:11] 1649; GFX940-NEXT: ;;#ASMEND 1650; GFX940-NEXT: s_setpc_b64 s[30:31] 1651 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1652 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 2, i32 1> 1653 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1654 ret void 1655} 1656 1657define void @s_shuffle_v2i64_v2i64__u_2() { 1658; GFX9-LABEL: s_shuffle_v2i64_v2i64__u_2: 1659; GFX9: ; %bb.0: 1660; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1661; GFX9-NEXT: ;;#ASMSTART 1662; GFX9-NEXT: ; use s[8:11] 1663; GFX9-NEXT: ;;#ASMEND 1664; GFX9-NEXT: s_setpc_b64 s[30:31] 1665 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1666 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 poison, i32 2> 1667 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1668 ret void 1669} 1670 1671define void @s_shuffle_v2i64_v2i64__0_2() { 1672; GFX900-LABEL: s_shuffle_v2i64_v2i64__0_2: 1673; GFX900: ; %bb.0: 1674; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1675; GFX900-NEXT: ;;#ASMSTART 1676; GFX900-NEXT: ; def s[8:11] 1677; GFX900-NEXT: ;;#ASMEND 1678; GFX900-NEXT: ;;#ASMSTART 1679; GFX900-NEXT: ; use s[8:11] 1680; GFX900-NEXT: ;;#ASMEND 1681; GFX900-NEXT: s_setpc_b64 s[30:31] 1682; 1683; GFX90A-LABEL: s_shuffle_v2i64_v2i64__0_2: 1684; GFX90A: ; %bb.0: 1685; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1686; GFX90A-NEXT: ;;#ASMSTART 1687; GFX90A-NEXT: ; def s[8:11] 1688; GFX90A-NEXT: ;;#ASMEND 1689; GFX90A-NEXT: ;;#ASMSTART 1690; GFX90A-NEXT: ; use s[8:11] 1691; GFX90A-NEXT: ;;#ASMEND 1692; GFX90A-NEXT: s_setpc_b64 s[30:31] 1693; 1694; GFX940-LABEL: s_shuffle_v2i64_v2i64__0_2: 1695; GFX940: ; %bb.0: 1696; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1697; GFX940-NEXT: ;;#ASMSTART 1698; GFX940-NEXT: ; def s[8:11] 1699; GFX940-NEXT: ;;#ASMEND 1700; GFX940-NEXT: s_nop 0 1701; GFX940-NEXT: ;;#ASMSTART 1702; GFX940-NEXT: ; use s[8:11] 1703; GFX940-NEXT: ;;#ASMEND 1704; GFX940-NEXT: s_setpc_b64 s[30:31] 1705 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1706 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 0, i32 2> 1707 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1708 ret void 1709} 1710 1711define void @s_shuffle_v2i64_v2i64__1_2() { 1712; GFX900-LABEL: s_shuffle_v2i64_v2i64__1_2: 1713; GFX900: ; %bb.0: 1714; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1715; GFX900-NEXT: ;;#ASMSTART 1716; GFX900-NEXT: ; def s[4:7] 1717; GFX900-NEXT: ;;#ASMEND 1718; GFX900-NEXT: s_mov_b32 s8, s6 1719; GFX900-NEXT: s_mov_b32 s9, s7 1720; GFX900-NEXT: ;;#ASMSTART 1721; GFX900-NEXT: ; use s[8:11] 1722; GFX900-NEXT: ;;#ASMEND 1723; GFX900-NEXT: s_setpc_b64 s[30:31] 1724; 1725; GFX90A-LABEL: s_shuffle_v2i64_v2i64__1_2: 1726; GFX90A: ; %bb.0: 1727; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1728; GFX90A-NEXT: ;;#ASMSTART 1729; GFX90A-NEXT: ; def s[4:7] 1730; GFX90A-NEXT: ;;#ASMEND 1731; GFX90A-NEXT: s_mov_b32 s8, s6 1732; GFX90A-NEXT: s_mov_b32 s9, s7 1733; GFX90A-NEXT: ;;#ASMSTART 1734; GFX90A-NEXT: ; use s[8:11] 1735; GFX90A-NEXT: ;;#ASMEND 1736; GFX90A-NEXT: s_setpc_b64 s[30:31] 1737; 1738; GFX940-LABEL: s_shuffle_v2i64_v2i64__1_2: 1739; GFX940: ; %bb.0: 1740; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1741; GFX940-NEXT: ;;#ASMSTART 1742; GFX940-NEXT: ; def s[0:3] 1743; GFX940-NEXT: ;;#ASMEND 1744; GFX940-NEXT: s_mov_b32 s8, s2 1745; GFX940-NEXT: s_mov_b32 s9, s3 1746; GFX940-NEXT: ;;#ASMSTART 1747; GFX940-NEXT: ; use s[8:11] 1748; GFX940-NEXT: ;;#ASMEND 1749; GFX940-NEXT: s_setpc_b64 s[30:31] 1750 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1751 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 1, i32 2> 1752 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1753 ret void 1754} 1755 1756define void @s_shuffle_v2i64_v2i64__2_2() { 1757; GFX9-LABEL: s_shuffle_v2i64_v2i64__2_2: 1758; GFX9: ; %bb.0: 1759; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1760; GFX9-NEXT: ;;#ASMSTART 1761; GFX9-NEXT: ; use s[8:11] 1762; GFX9-NEXT: ;;#ASMEND 1763; GFX9-NEXT: s_setpc_b64 s[30:31] 1764 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1765 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 2, i32 2> 1766 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1767 ret void 1768} 1769 1770define void @s_shuffle_v2i64_v2i64__u_3() { 1771; GFX900-LABEL: s_shuffle_v2i64_v2i64__u_3: 1772; GFX900: ; %bb.0: 1773; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1774; GFX900-NEXT: ;;#ASMSTART 1775; GFX900-NEXT: ; def s[8:11] 1776; GFX900-NEXT: ;;#ASMEND 1777; GFX900-NEXT: ;;#ASMSTART 1778; GFX900-NEXT: ; use s[8:11] 1779; GFX900-NEXT: ;;#ASMEND 1780; GFX900-NEXT: s_setpc_b64 s[30:31] 1781; 1782; GFX90A-LABEL: s_shuffle_v2i64_v2i64__u_3: 1783; GFX90A: ; %bb.0: 1784; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1785; GFX90A-NEXT: ;;#ASMSTART 1786; GFX90A-NEXT: ; def s[8:11] 1787; GFX90A-NEXT: ;;#ASMEND 1788; GFX90A-NEXT: ;;#ASMSTART 1789; GFX90A-NEXT: ; use s[8:11] 1790; GFX90A-NEXT: ;;#ASMEND 1791; GFX90A-NEXT: s_setpc_b64 s[30:31] 1792; 1793; GFX940-LABEL: s_shuffle_v2i64_v2i64__u_3: 1794; GFX940: ; %bb.0: 1795; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1796; GFX940-NEXT: ;;#ASMSTART 1797; GFX940-NEXT: ; def s[8:11] 1798; GFX940-NEXT: ;;#ASMEND 1799; GFX940-NEXT: s_nop 0 1800; GFX940-NEXT: ;;#ASMSTART 1801; GFX940-NEXT: ; use s[8:11] 1802; GFX940-NEXT: ;;#ASMEND 1803; GFX940-NEXT: s_setpc_b64 s[30:31] 1804 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1805 %vec1 = call <2 x i64> asm "; def $0", "=s"() 1806 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 poison, i32 3> 1807 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1808 ret void 1809} 1810 1811define void @s_shuffle_v2i64_v2i64__0_3() { 1812; GFX900-LABEL: s_shuffle_v2i64_v2i64__0_3: 1813; GFX900: ; %bb.0: 1814; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1815; GFX900-NEXT: ;;#ASMSTART 1816; GFX900-NEXT: ; def s[8:11] 1817; GFX900-NEXT: ;;#ASMEND 1818; GFX900-NEXT: ;;#ASMSTART 1819; GFX900-NEXT: ; def s[4:7] 1820; GFX900-NEXT: ;;#ASMEND 1821; GFX900-NEXT: s_mov_b32 s10, s6 1822; GFX900-NEXT: s_mov_b32 s11, s7 1823; GFX900-NEXT: ;;#ASMSTART 1824; GFX900-NEXT: ; use s[8:11] 1825; GFX900-NEXT: ;;#ASMEND 1826; GFX900-NEXT: s_setpc_b64 s[30:31] 1827; 1828; GFX90A-LABEL: s_shuffle_v2i64_v2i64__0_3: 1829; GFX90A: ; %bb.0: 1830; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1831; GFX90A-NEXT: ;;#ASMSTART 1832; GFX90A-NEXT: ; def s[8:11] 1833; GFX90A-NEXT: ;;#ASMEND 1834; GFX90A-NEXT: ;;#ASMSTART 1835; GFX90A-NEXT: ; def s[4:7] 1836; GFX90A-NEXT: ;;#ASMEND 1837; GFX90A-NEXT: s_mov_b32 s10, s6 1838; GFX90A-NEXT: s_mov_b32 s11, s7 1839; GFX90A-NEXT: ;;#ASMSTART 1840; GFX90A-NEXT: ; use s[8:11] 1841; GFX90A-NEXT: ;;#ASMEND 1842; GFX90A-NEXT: s_setpc_b64 s[30:31] 1843; 1844; GFX940-LABEL: s_shuffle_v2i64_v2i64__0_3: 1845; GFX940: ; %bb.0: 1846; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1847; GFX940-NEXT: ;;#ASMSTART 1848; GFX940-NEXT: ; def s[8:11] 1849; GFX940-NEXT: ;;#ASMEND 1850; GFX940-NEXT: ;;#ASMSTART 1851; GFX940-NEXT: ; def s[0:3] 1852; GFX940-NEXT: ;;#ASMEND 1853; GFX940-NEXT: s_mov_b32 s10, s2 1854; GFX940-NEXT: s_mov_b32 s11, s3 1855; GFX940-NEXT: ;;#ASMSTART 1856; GFX940-NEXT: ; use s[8:11] 1857; GFX940-NEXT: ;;#ASMEND 1858; GFX940-NEXT: s_setpc_b64 s[30:31] 1859 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1860 %vec1 = call <2 x i64> asm "; def $0", "=s"() 1861 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 0, i32 3> 1862 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1863 ret void 1864} 1865 1866define void @s_shuffle_v2i64_v2i64__1_3() { 1867; GFX900-LABEL: s_shuffle_v2i64_v2i64__1_3: 1868; GFX900: ; %bb.0: 1869; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1870; GFX900-NEXT: ;;#ASMSTART 1871; GFX900-NEXT: ; def s[8:11] 1872; GFX900-NEXT: ;;#ASMEND 1873; GFX900-NEXT: ;;#ASMSTART 1874; GFX900-NEXT: ; def s[4:7] 1875; GFX900-NEXT: ;;#ASMEND 1876; GFX900-NEXT: s_mov_b32 s8, s6 1877; GFX900-NEXT: s_mov_b32 s9, s7 1878; GFX900-NEXT: ;;#ASMSTART 1879; GFX900-NEXT: ; use s[8:11] 1880; GFX900-NEXT: ;;#ASMEND 1881; GFX900-NEXT: s_setpc_b64 s[30:31] 1882; 1883; GFX90A-LABEL: s_shuffle_v2i64_v2i64__1_3: 1884; GFX90A: ; %bb.0: 1885; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1886; GFX90A-NEXT: ;;#ASMSTART 1887; GFX90A-NEXT: ; def s[8:11] 1888; GFX90A-NEXT: ;;#ASMEND 1889; GFX90A-NEXT: ;;#ASMSTART 1890; GFX90A-NEXT: ; def s[4:7] 1891; GFX90A-NEXT: ;;#ASMEND 1892; GFX90A-NEXT: s_mov_b32 s8, s6 1893; GFX90A-NEXT: s_mov_b32 s9, s7 1894; GFX90A-NEXT: ;;#ASMSTART 1895; GFX90A-NEXT: ; use s[8:11] 1896; GFX90A-NEXT: ;;#ASMEND 1897; GFX90A-NEXT: s_setpc_b64 s[30:31] 1898; 1899; GFX940-LABEL: s_shuffle_v2i64_v2i64__1_3: 1900; GFX940: ; %bb.0: 1901; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1902; GFX940-NEXT: ;;#ASMSTART 1903; GFX940-NEXT: ; def s[8:11] 1904; GFX940-NEXT: ;;#ASMEND 1905; GFX940-NEXT: ;;#ASMSTART 1906; GFX940-NEXT: ; def s[0:3] 1907; GFX940-NEXT: ;;#ASMEND 1908; GFX940-NEXT: s_mov_b32 s8, s2 1909; GFX940-NEXT: s_mov_b32 s9, s3 1910; GFX940-NEXT: ;;#ASMSTART 1911; GFX940-NEXT: ; use s[8:11] 1912; GFX940-NEXT: ;;#ASMEND 1913; GFX940-NEXT: s_setpc_b64 s[30:31] 1914 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1915 %vec1 = call <2 x i64> asm "; def $0", "=s"() 1916 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 1, i32 3> 1917 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1918 ret void 1919} 1920 1921define void @s_shuffle_v2i64_v2i64__2_3() { 1922; GFX900-LABEL: s_shuffle_v2i64_v2i64__2_3: 1923; GFX900: ; %bb.0: 1924; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1925; GFX900-NEXT: ;;#ASMSTART 1926; GFX900-NEXT: ; def s[8:11] 1927; GFX900-NEXT: ;;#ASMEND 1928; GFX900-NEXT: ;;#ASMSTART 1929; GFX900-NEXT: ; use s[8:11] 1930; GFX900-NEXT: ;;#ASMEND 1931; GFX900-NEXT: s_setpc_b64 s[30:31] 1932; 1933; GFX90A-LABEL: s_shuffle_v2i64_v2i64__2_3: 1934; GFX90A: ; %bb.0: 1935; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1936; GFX90A-NEXT: ;;#ASMSTART 1937; GFX90A-NEXT: ; def s[8:11] 1938; GFX90A-NEXT: ;;#ASMEND 1939; GFX90A-NEXT: ;;#ASMSTART 1940; GFX90A-NEXT: ; use s[8:11] 1941; GFX90A-NEXT: ;;#ASMEND 1942; GFX90A-NEXT: s_setpc_b64 s[30:31] 1943; 1944; GFX940-LABEL: s_shuffle_v2i64_v2i64__2_3: 1945; GFX940: ; %bb.0: 1946; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1947; GFX940-NEXT: ;;#ASMSTART 1948; GFX940-NEXT: ; def s[8:11] 1949; GFX940-NEXT: ;;#ASMEND 1950; GFX940-NEXT: s_nop 0 1951; GFX940-NEXT: ;;#ASMSTART 1952; GFX940-NEXT: ; use s[8:11] 1953; GFX940-NEXT: ;;#ASMEND 1954; GFX940-NEXT: s_setpc_b64 s[30:31] 1955 %vec0 = call <2 x i64> asm "; def $0", "=s"() 1956 %vec1 = call <2 x i64> asm "; def $0", "=s"() 1957 %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 2, i32 3> 1958 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf) 1959 ret void 1960} 1961;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: 1962; GFX90APLUS: {{.*}} 1963