1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=amdgcn-amd-amdpal -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck --check-prefix=GFX9 %s 3; RUN: llc -mtriple=amdgcn-amd-amdpal -mcpu=hawaii -verify-machineinstrs < %s | FileCheck --check-prefix=GFX7 %s 4; RUN: llc -mtriple=amdgcn-amd-amdpal -mcpu=tahiti -verify-machineinstrs < %s | FileCheck --check-prefix=GFX6 %s 5; RUN: llc -mtriple=amdgcn-amd-amdpal -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck --check-prefix=GFX10 %s 6 7define <3 x i32> @load_lds_v3i32(<3 x i32> addrspace(3)* %ptr) { 8; GFX9-LABEL: load_lds_v3i32: 9; GFX9: ; %bb.0: 10; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 11; GFX9-NEXT: ds_read_b96 v[0:2], v0 12; GFX9-NEXT: s_waitcnt lgkmcnt(0) 13; GFX9-NEXT: s_setpc_b64 s[30:31] 14; 15; GFX7-LABEL: load_lds_v3i32: 16; GFX7: ; %bb.0: 17; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 18; GFX7-NEXT: s_mov_b32 m0, -1 19; GFX7-NEXT: ds_read_b96 v[0:2], v0 20; GFX7-NEXT: s_waitcnt lgkmcnt(0) 21; GFX7-NEXT: s_setpc_b64 s[30:31] 22; 23; GFX6-LABEL: load_lds_v3i32: 24; GFX6: ; %bb.0: 25; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 26; GFX6-NEXT: v_add_i32_e32 v1, vcc, 8, v0 27; GFX6-NEXT: s_mov_b32 m0, -1 28; GFX6-NEXT: ds_read_b32 v2, v1 29; GFX6-NEXT: ds_read_b64 v[0:1], v0 30; GFX6-NEXT: s_waitcnt lgkmcnt(0) 31; GFX6-NEXT: s_setpc_b64 s[30:31] 32; 33; GFX10-LABEL: load_lds_v3i32: 34; GFX10: ; %bb.0: 35; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 36; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 37; GFX10-NEXT: ds_read_b96 v[0:2], v0 38; GFX10-NEXT: s_waitcnt lgkmcnt(0) 39; GFX10-NEXT: s_setpc_b64 s[30:31] 40 %load = load <3 x i32>, <3 x i32> addrspace(3)* %ptr 41 ret <3 x i32> %load 42} 43 44define <3 x i32> @load_lds_v3i32_align1(<3 x i32> addrspace(3)* %ptr) { 45; GFX9-LABEL: load_lds_v3i32_align1: 46; GFX9: ; %bb.0: 47; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 48; GFX9-NEXT: ds_read_u8 v1, v0 49; GFX9-NEXT: ds_read_u8 v2, v0 offset:1 50; GFX9-NEXT: ds_read_u8 v3, v0 offset:2 51; GFX9-NEXT: ds_read_u8 v4, v0 offset:3 52; GFX9-NEXT: ds_read_u8 v5, v0 offset:4 53; GFX9-NEXT: ds_read_u8 v6, v0 offset:5 54; GFX9-NEXT: ds_read_u8 v7, v0 offset:6 55; GFX9-NEXT: ds_read_u8 v8, v0 offset:7 56; GFX9-NEXT: ds_read_u8 v9, v0 offset:8 57; GFX9-NEXT: ds_read_u8 v10, v0 offset:9 58; GFX9-NEXT: ds_read_u8 v11, v0 offset:10 59; GFX9-NEXT: ds_read_u8 v12, v0 offset:11 60; GFX9-NEXT: s_waitcnt lgkmcnt(10) 61; GFX9-NEXT: v_lshl_or_b32 v0, v2, 8, v1 62; GFX9-NEXT: s_waitcnt lgkmcnt(8) 63; GFX9-NEXT: v_lshl_or_b32 v1, v4, 8, v3 64; GFX9-NEXT: v_lshl_or_b32 v0, v1, 16, v0 65; GFX9-NEXT: s_waitcnt lgkmcnt(6) 66; GFX9-NEXT: v_lshl_or_b32 v1, v6, 8, v5 67; GFX9-NEXT: s_waitcnt lgkmcnt(4) 68; GFX9-NEXT: v_lshl_or_b32 v2, v8, 8, v7 69; GFX9-NEXT: v_lshl_or_b32 v1, v2, 16, v1 70; GFX9-NEXT: s_waitcnt lgkmcnt(2) 71; GFX9-NEXT: v_lshl_or_b32 v2, v10, 8, v9 72; GFX9-NEXT: s_waitcnt lgkmcnt(0) 73; GFX9-NEXT: v_lshl_or_b32 v3, v12, 8, v11 74; GFX9-NEXT: v_lshl_or_b32 v2, v3, 16, v2 75; GFX9-NEXT: s_setpc_b64 s[30:31] 76; 77; GFX7-LABEL: load_lds_v3i32_align1: 78; GFX7: ; %bb.0: 79; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 80; GFX7-NEXT: s_mov_b32 m0, -1 81; GFX7-NEXT: ds_read_u8 v1, v0 offset:7 82; GFX7-NEXT: ds_read_u8 v2, v0 offset:6 83; GFX7-NEXT: ds_read_u8 v4, v0 offset:5 84; GFX7-NEXT: ds_read_u8 v5, v0 offset:4 85; GFX7-NEXT: ds_read_u8 v3, v0 offset:3 86; GFX7-NEXT: ds_read_u8 v6, v0 offset:2 87; GFX7-NEXT: ds_read_u8 v7, v0 offset:1 88; GFX7-NEXT: ds_read_u8 v8, v0 89; GFX7-NEXT: s_waitcnt lgkmcnt(7) 90; GFX7-NEXT: v_lshlrev_b32_e32 v1, 8, v1 91; GFX7-NEXT: s_waitcnt lgkmcnt(5) 92; GFX7-NEXT: v_lshlrev_b32_e32 v4, 8, v4 93; GFX7-NEXT: v_or_b32_e32 v1, v1, v2 94; GFX7-NEXT: s_waitcnt lgkmcnt(4) 95; GFX7-NEXT: v_or_b32_e32 v4, v4, v5 96; GFX7-NEXT: v_lshlrev_b32_e32 v1, 16, v1 97; GFX7-NEXT: v_or_b32_e32 v1, v1, v4 98; GFX7-NEXT: ds_read_u8 v2, v0 offset:11 99; GFX7-NEXT: ds_read_u8 v4, v0 offset:10 100; GFX7-NEXT: ds_read_u8 v5, v0 offset:9 101; GFX7-NEXT: ds_read_u8 v0, v0 offset:8 102; GFX7-NEXT: s_waitcnt lgkmcnt(7) 103; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 104; GFX7-NEXT: s_waitcnt lgkmcnt(5) 105; GFX7-NEXT: v_lshlrev_b32_e32 v7, 8, v7 106; GFX7-NEXT: v_or_b32_e32 v3, v3, v6 107; GFX7-NEXT: s_waitcnt lgkmcnt(3) 108; GFX7-NEXT: v_lshlrev_b32_e32 v2, 8, v2 109; GFX7-NEXT: v_or_b32_e32 v7, v7, v8 110; GFX7-NEXT: v_lshlrev_b32_e32 v3, 16, v3 111; GFX7-NEXT: s_waitcnt lgkmcnt(1) 112; GFX7-NEXT: v_lshlrev_b32_e32 v5, 8, v5 113; GFX7-NEXT: v_or_b32_e32 v2, v2, v4 114; GFX7-NEXT: v_or_b32_e32 v3, v3, v7 115; GFX7-NEXT: s_waitcnt lgkmcnt(0) 116; GFX7-NEXT: v_or_b32_e32 v0, v5, v0 117; GFX7-NEXT: v_lshlrev_b32_e32 v2, 16, v2 118; GFX7-NEXT: v_or_b32_e32 v2, v2, v0 119; GFX7-NEXT: v_mov_b32_e32 v0, v3 120; GFX7-NEXT: s_setpc_b64 s[30:31] 121; 122; GFX6-LABEL: load_lds_v3i32_align1: 123; GFX6: ; %bb.0: 124; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 125; GFX6-NEXT: v_add_i32_e32 v1, vcc, 5, v0 126; GFX6-NEXT: v_add_i32_e32 v2, vcc, 4, v0 127; GFX6-NEXT: v_add_i32_e32 v3, vcc, 7, v0 128; GFX6-NEXT: v_add_i32_e32 v4, vcc, 6, v0 129; GFX6-NEXT: v_add_i32_e32 v5, vcc, 9, v0 130; GFX6-NEXT: v_add_i32_e32 v6, vcc, 8, v0 131; GFX6-NEXT: v_add_i32_e32 v7, vcc, 11, v0 132; GFX6-NEXT: s_mov_b32 m0, -1 133; GFX6-NEXT: ds_read_u8 v2, v2 134; GFX6-NEXT: ds_read_u8 v3, v3 135; GFX6-NEXT: ds_read_u8 v4, v4 136; GFX6-NEXT: ds_read_u8 v5, v5 137; GFX6-NEXT: ds_read_u8 v6, v6 138; GFX6-NEXT: ds_read_u8 v7, v7 139; GFX6-NEXT: ds_read_u8 v1, v1 140; GFX6-NEXT: ds_read_u8 v8, v0 141; GFX6-NEXT: s_waitcnt lgkmcnt(1) 142; GFX6-NEXT: v_lshlrev_b32_e32 v1, 8, v1 143; GFX6-NEXT: v_or_b32_e32 v1, v1, v2 144; GFX6-NEXT: v_lshlrev_b32_e32 v2, 8, v3 145; GFX6-NEXT: v_or_b32_e32 v2, v2, v4 146; GFX6-NEXT: v_lshlrev_b32_e32 v2, 16, v2 147; GFX6-NEXT: v_or_b32_e32 v1, v2, v1 148; GFX6-NEXT: v_lshlrev_b32_e32 v2, 8, v5 149; GFX6-NEXT: v_or_b32_e32 v2, v2, v6 150; GFX6-NEXT: v_add_i32_e32 v4, vcc, 10, v0 151; GFX6-NEXT: v_add_i32_e32 v5, vcc, 3, v0 152; GFX6-NEXT: v_add_i32_e32 v6, vcc, 2, v0 153; GFX6-NEXT: v_add_i32_e32 v0, vcc, 1, v0 154; GFX6-NEXT: ds_read_u8 v4, v4 155; GFX6-NEXT: ds_read_u8 v5, v5 156; GFX6-NEXT: ds_read_u8 v6, v6 157; GFX6-NEXT: ds_read_u8 v0, v0 158; GFX6-NEXT: v_lshlrev_b32_e32 v3, 8, v7 159; GFX6-NEXT: s_waitcnt lgkmcnt(3) 160; GFX6-NEXT: v_or_b32_e32 v3, v3, v4 161; GFX6-NEXT: v_lshlrev_b32_e32 v3, 16, v3 162; GFX6-NEXT: v_or_b32_e32 v2, v3, v2 163; GFX6-NEXT: s_waitcnt lgkmcnt(2) 164; GFX6-NEXT: v_lshlrev_b32_e32 v3, 8, v5 165; GFX6-NEXT: s_waitcnt lgkmcnt(1) 166; GFX6-NEXT: v_or_b32_e32 v3, v3, v6 167; GFX6-NEXT: s_waitcnt lgkmcnt(0) 168; GFX6-NEXT: v_lshlrev_b32_e32 v0, 8, v0 169; GFX6-NEXT: v_lshlrev_b32_e32 v3, 16, v3 170; GFX6-NEXT: v_or_b32_e32 v0, v0, v8 171; GFX6-NEXT: v_or_b32_e32 v0, v3, v0 172; GFX6-NEXT: s_setpc_b64 s[30:31] 173; 174; GFX10-LABEL: load_lds_v3i32_align1: 175; GFX10: ; %bb.0: 176; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 177; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 178; GFX10-NEXT: ds_read_u8 v1, v0 179; GFX10-NEXT: ds_read_u8 v2, v0 offset:1 180; GFX10-NEXT: ds_read_u8 v3, v0 offset:2 181; GFX10-NEXT: ds_read_u8 v4, v0 offset:3 182; GFX10-NEXT: ds_read_u8 v5, v0 offset:4 183; GFX10-NEXT: ds_read_u8 v6, v0 offset:5 184; GFX10-NEXT: ds_read_u8 v7, v0 offset:6 185; GFX10-NEXT: ds_read_u8 v8, v0 offset:7 186; GFX10-NEXT: ds_read_u8 v9, v0 offset:8 187; GFX10-NEXT: ds_read_u8 v10, v0 offset:9 188; GFX10-NEXT: ds_read_u8 v11, v0 offset:10 189; GFX10-NEXT: ds_read_u8 v0, v0 offset:11 190; GFX10-NEXT: s_waitcnt lgkmcnt(10) 191; GFX10-NEXT: v_lshl_or_b32 v1, v2, 8, v1 192; GFX10-NEXT: s_waitcnt lgkmcnt(8) 193; GFX10-NEXT: v_lshl_or_b32 v2, v4, 8, v3 194; GFX10-NEXT: s_waitcnt lgkmcnt(6) 195; GFX10-NEXT: v_lshl_or_b32 v3, v6, 8, v5 196; GFX10-NEXT: s_waitcnt lgkmcnt(4) 197; GFX10-NEXT: v_lshl_or_b32 v4, v8, 8, v7 198; GFX10-NEXT: s_waitcnt lgkmcnt(2) 199; GFX10-NEXT: v_lshl_or_b32 v5, v10, 8, v9 200; GFX10-NEXT: s_waitcnt lgkmcnt(0) 201; GFX10-NEXT: v_lshl_or_b32 v6, v0, 8, v11 202; GFX10-NEXT: v_lshl_or_b32 v0, v2, 16, v1 203; GFX10-NEXT: v_lshl_or_b32 v1, v4, 16, v3 204; GFX10-NEXT: v_lshl_or_b32 v2, v6, 16, v5 205; GFX10-NEXT: s_setpc_b64 s[30:31] 206 %load = load <3 x i32>, <3 x i32> addrspace(3)* %ptr, align 1 207 ret <3 x i32> %load 208} 209 210define <3 x i32> @load_lds_v3i32_align2(<3 x i32> addrspace(3)* %ptr) { 211; GFX9-LABEL: load_lds_v3i32_align2: 212; GFX9: ; %bb.0: 213; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 214; GFX9-NEXT: ds_read_u16 v1, v0 215; GFX9-NEXT: ds_read_u16 v2, v0 offset:2 216; GFX9-NEXT: ds_read_u16 v3, v0 offset:4 217; GFX9-NEXT: ds_read_u16 v4, v0 offset:6 218; GFX9-NEXT: ds_read_u16 v5, v0 offset:8 219; GFX9-NEXT: ds_read_u16 v6, v0 offset:10 220; GFX9-NEXT: s_waitcnt lgkmcnt(4) 221; GFX9-NEXT: v_lshl_or_b32 v0, v2, 16, v1 222; GFX9-NEXT: s_waitcnt lgkmcnt(2) 223; GFX9-NEXT: v_lshl_or_b32 v1, v4, 16, v3 224; GFX9-NEXT: s_waitcnt lgkmcnt(0) 225; GFX9-NEXT: v_lshl_or_b32 v2, v6, 16, v5 226; GFX9-NEXT: s_setpc_b64 s[30:31] 227; 228; GFX7-LABEL: load_lds_v3i32_align2: 229; GFX7: ; %bb.0: 230; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 231; GFX7-NEXT: s_mov_b32 m0, -1 232; GFX7-NEXT: ds_read_u16 v2, v0 offset:10 233; GFX7-NEXT: ds_read_u16 v3, v0 offset:8 234; GFX7-NEXT: ds_read_u16 v1, v0 offset:6 235; GFX7-NEXT: ds_read_u16 v4, v0 offset:4 236; GFX7-NEXT: ds_read_u16 v5, v0 offset:2 237; GFX7-NEXT: ds_read_u16 v0, v0 238; GFX7-NEXT: s_waitcnt lgkmcnt(5) 239; GFX7-NEXT: v_lshlrev_b32_e32 v2, 16, v2 240; GFX7-NEXT: s_waitcnt lgkmcnt(3) 241; GFX7-NEXT: v_lshlrev_b32_e32 v1, 16, v1 242; GFX7-NEXT: s_waitcnt lgkmcnt(2) 243; GFX7-NEXT: v_or_b32_e32 v1, v1, v4 244; GFX7-NEXT: s_waitcnt lgkmcnt(1) 245; GFX7-NEXT: v_lshlrev_b32_e32 v5, 16, v5 246; GFX7-NEXT: s_waitcnt lgkmcnt(0) 247; GFX7-NEXT: v_or_b32_e32 v0, v5, v0 248; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 249; GFX7-NEXT: s_setpc_b64 s[30:31] 250; 251; GFX6-LABEL: load_lds_v3i32_align2: 252; GFX6: ; %bb.0: 253; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 254; GFX6-NEXT: v_add_i32_e32 v1, vcc, 6, v0 255; GFX6-NEXT: v_add_i32_e32 v2, vcc, 4, v0 256; GFX6-NEXT: v_add_i32_e32 v3, vcc, 10, v0 257; GFX6-NEXT: v_add_i32_e32 v4, vcc, 8, v0 258; GFX6-NEXT: v_add_i32_e32 v5, vcc, 2, v0 259; GFX6-NEXT: s_mov_b32 m0, -1 260; GFX6-NEXT: ds_read_u16 v2, v2 261; GFX6-NEXT: ds_read_u16 v3, v3 262; GFX6-NEXT: ds_read_u16 v4, v4 263; GFX6-NEXT: ds_read_u16 v5, v5 264; GFX6-NEXT: ds_read_u16 v1, v1 265; GFX6-NEXT: ds_read_u16 v0, v0 266; GFX6-NEXT: s_waitcnt lgkmcnt(1) 267; GFX6-NEXT: v_lshlrev_b32_e32 v1, 16, v1 268; GFX6-NEXT: v_or_b32_e32 v1, v1, v2 269; GFX6-NEXT: v_lshlrev_b32_e32 v2, 16, v3 270; GFX6-NEXT: v_lshlrev_b32_e32 v3, 16, v5 271; GFX6-NEXT: v_or_b32_e32 v2, v2, v4 272; GFX6-NEXT: s_waitcnt lgkmcnt(0) 273; GFX6-NEXT: v_or_b32_e32 v0, v3, v0 274; GFX6-NEXT: s_setpc_b64 s[30:31] 275; 276; GFX10-LABEL: load_lds_v3i32_align2: 277; GFX10: ; %bb.0: 278; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 279; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 280; GFX10-NEXT: ds_read_u16 v1, v0 281; GFX10-NEXT: ds_read_u16 v2, v0 offset:2 282; GFX10-NEXT: ds_read_u16 v3, v0 offset:4 283; GFX10-NEXT: ds_read_u16 v4, v0 offset:6 284; GFX10-NEXT: ds_read_u16 v5, v0 offset:8 285; GFX10-NEXT: ds_read_u16 v6, v0 offset:10 286; GFX10-NEXT: s_waitcnt lgkmcnt(4) 287; GFX10-NEXT: v_lshl_or_b32 v0, v2, 16, v1 288; GFX10-NEXT: s_waitcnt lgkmcnt(2) 289; GFX10-NEXT: v_lshl_or_b32 v1, v4, 16, v3 290; GFX10-NEXT: s_waitcnt lgkmcnt(0) 291; GFX10-NEXT: v_lshl_or_b32 v2, v6, 16, v5 292; GFX10-NEXT: s_setpc_b64 s[30:31] 293 %load = load <3 x i32>, <3 x i32> addrspace(3)* %ptr, align 2 294 ret <3 x i32> %load 295} 296 297define <3 x i32> @load_lds_v3i32_align4(<3 x i32> addrspace(3)* %ptr) { 298; GFX9-LABEL: load_lds_v3i32_align4: 299; GFX9: ; %bb.0: 300; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 301; GFX9-NEXT: v_mov_b32_e32 v2, v0 302; GFX9-NEXT: ds_read2_b32 v[0:1], v0 offset1:1 303; GFX9-NEXT: ds_read_b32 v2, v2 offset:8 304; GFX9-NEXT: s_waitcnt lgkmcnt(0) 305; GFX9-NEXT: s_setpc_b64 s[30:31] 306; 307; GFX7-LABEL: load_lds_v3i32_align4: 308; GFX7: ; %bb.0: 309; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 310; GFX7-NEXT: v_mov_b32_e32 v2, v0 311; GFX7-NEXT: s_mov_b32 m0, -1 312; GFX7-NEXT: ds_read2_b32 v[0:1], v0 offset1:1 313; GFX7-NEXT: ds_read_b32 v2, v2 offset:8 314; GFX7-NEXT: s_waitcnt lgkmcnt(0) 315; GFX7-NEXT: s_setpc_b64 s[30:31] 316; 317; GFX6-LABEL: load_lds_v3i32_align4: 318; GFX6: ; %bb.0: 319; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 320; GFX6-NEXT: v_add_i32_e32 v1, vcc, 4, v0 321; GFX6-NEXT: v_add_i32_e32 v2, vcc, 8, v0 322; GFX6-NEXT: s_mov_b32 m0, -1 323; GFX6-NEXT: ds_read_b32 v2, v2 324; GFX6-NEXT: ds_read_b32 v1, v1 325; GFX6-NEXT: ds_read_b32 v0, v0 326; GFX6-NEXT: s_waitcnt lgkmcnt(0) 327; GFX6-NEXT: s_setpc_b64 s[30:31] 328; 329; GFX10-LABEL: load_lds_v3i32_align4: 330; GFX10: ; %bb.0: 331; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 332; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 333; GFX10-NEXT: v_mov_b32_e32 v2, v0 334; GFX10-NEXT: ds_read2_b32 v[0:1], v0 offset1:1 335; GFX10-NEXT: ds_read_b32 v2, v2 offset:8 336; GFX10-NEXT: s_waitcnt lgkmcnt(0) 337; GFX10-NEXT: s_setpc_b64 s[30:31] 338 %load = load <3 x i32>, <3 x i32> addrspace(3)* %ptr, align 4 339 ret <3 x i32> %load 340} 341 342define <3 x i32> @load_lds_v3i32_align8(<3 x i32> addrspace(3)* %ptr) { 343; GFX9-LABEL: load_lds_v3i32_align8: 344; GFX9: ; %bb.0: 345; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 346; GFX9-NEXT: v_mov_b32_e32 v2, v0 347; GFX9-NEXT: ds_read2_b32 v[0:1], v0 offset1:1 348; GFX9-NEXT: ds_read_b32 v2, v2 offset:8 349; GFX9-NEXT: s_waitcnt lgkmcnt(0) 350; GFX9-NEXT: s_setpc_b64 s[30:31] 351; 352; GFX7-LABEL: load_lds_v3i32_align8: 353; GFX7: ; %bb.0: 354; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 355; GFX7-NEXT: v_mov_b32_e32 v2, v0 356; GFX7-NEXT: s_mov_b32 m0, -1 357; GFX7-NEXT: ds_read2_b32 v[0:1], v0 offset1:1 358; GFX7-NEXT: ds_read_b32 v2, v2 offset:8 359; GFX7-NEXT: s_waitcnt lgkmcnt(0) 360; GFX7-NEXT: s_setpc_b64 s[30:31] 361; 362; GFX6-LABEL: load_lds_v3i32_align8: 363; GFX6: ; %bb.0: 364; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 365; GFX6-NEXT: v_add_i32_e32 v1, vcc, 4, v0 366; GFX6-NEXT: v_add_i32_e32 v2, vcc, 8, v0 367; GFX6-NEXT: s_mov_b32 m0, -1 368; GFX6-NEXT: ds_read_b32 v2, v2 369; GFX6-NEXT: ds_read_b32 v1, v1 370; GFX6-NEXT: ds_read_b32 v0, v0 371; GFX6-NEXT: s_waitcnt lgkmcnt(0) 372; GFX6-NEXT: s_setpc_b64 s[30:31] 373; 374; GFX10-LABEL: load_lds_v3i32_align8: 375; GFX10: ; %bb.0: 376; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 377; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 378; GFX10-NEXT: v_mov_b32_e32 v2, v0 379; GFX10-NEXT: ds_read2_b32 v[0:1], v0 offset1:1 380; GFX10-NEXT: ds_read_b32 v2, v2 offset:8 381; GFX10-NEXT: s_waitcnt lgkmcnt(0) 382; GFX10-NEXT: s_setpc_b64 s[30:31] 383 %load = load <3 x i32>, <3 x i32> addrspace(3)* %ptr, align 8 384 ret <3 x i32> %load 385} 386 387define <3 x i32> @load_lds_v3i32_align16(<3 x i32> addrspace(3)* %ptr) { 388; GFX9-LABEL: load_lds_v3i32_align16: 389; GFX9: ; %bb.0: 390; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 391; GFX9-NEXT: ds_read_b96 v[0:2], v0 392; GFX9-NEXT: s_waitcnt lgkmcnt(0) 393; GFX9-NEXT: s_setpc_b64 s[30:31] 394; 395; GFX7-LABEL: load_lds_v3i32_align16: 396; GFX7: ; %bb.0: 397; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 398; GFX7-NEXT: s_mov_b32 m0, -1 399; GFX7-NEXT: ds_read_b96 v[0:2], v0 400; GFX7-NEXT: s_waitcnt lgkmcnt(0) 401; GFX7-NEXT: s_setpc_b64 s[30:31] 402; 403; GFX6-LABEL: load_lds_v3i32_align16: 404; GFX6: ; %bb.0: 405; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 406; GFX6-NEXT: v_add_i32_e32 v1, vcc, 8, v0 407; GFX6-NEXT: s_mov_b32 m0, -1 408; GFX6-NEXT: ds_read_b32 v2, v1 409; GFX6-NEXT: ds_read_b64 v[0:1], v0 410; GFX6-NEXT: s_waitcnt lgkmcnt(0) 411; GFX6-NEXT: s_setpc_b64 s[30:31] 412; 413; GFX10-LABEL: load_lds_v3i32_align16: 414; GFX10: ; %bb.0: 415; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 416; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 417; GFX10-NEXT: ds_read_b96 v[0:2], v0 418; GFX10-NEXT: s_waitcnt lgkmcnt(0) 419; GFX10-NEXT: s_setpc_b64 s[30:31] 420 %load = load <3 x i32>, <3 x i32> addrspace(3)* %ptr, align 16 421 ret <3 x i32> %load 422} 423