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