997 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti < %s | FileCheck -check-prefix=GFX68 %s3; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji < %s | FileCheck -check-prefix=GFX68 %s4; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 < %s | FileCheck -check-prefix=GFX10 %s5; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -mattr=-enable-prt-strict-null < %s | FileCheck -check-prefix=NOPRT %s6; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 < %s | FileCheck -check-prefix=GFX10 %s7; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1200 < %s | FileCheck -check-prefix=GFX12 %s8 9define amdgpu_ps float @load_1d_f32_x(<8 x i32> inreg %rsrc, i32 %s) {10; GFX68-LABEL: load_1d_f32_x:11; GFX68: ; %bb.0:12; GFX68-NEXT: s_mov_b32 s0, s213; GFX68-NEXT: s_mov_b32 s1, s314; GFX68-NEXT: s_mov_b32 s2, s415; GFX68-NEXT: s_mov_b32 s3, s516; GFX68-NEXT: s_mov_b32 s4, s617; GFX68-NEXT: s_mov_b32 s5, s718; GFX68-NEXT: s_mov_b32 s6, s819; GFX68-NEXT: s_mov_b32 s7, s920; GFX68-NEXT: image_load v0, v0, s[0:7] dmask:0x1 unorm21; GFX68-NEXT: s_waitcnt vmcnt(0)22; GFX68-NEXT: ; return to shader part epilog23;24; GFX10-LABEL: load_1d_f32_x:25; GFX10: ; %bb.0:26; GFX10-NEXT: s_mov_b32 s0, s227; GFX10-NEXT: s_mov_b32 s1, s328; GFX10-NEXT: s_mov_b32 s2, s429; GFX10-NEXT: s_mov_b32 s3, s530; GFX10-NEXT: s_mov_b32 s4, s631; GFX10-NEXT: s_mov_b32 s5, s732; GFX10-NEXT: s_mov_b32 s6, s833; GFX10-NEXT: s_mov_b32 s7, s934; GFX10-NEXT: image_load v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm35; GFX10-NEXT: s_waitcnt vmcnt(0)36; GFX10-NEXT: ; return to shader part epilog37;38; NOPRT-LABEL: load_1d_f32_x:39; NOPRT: ; %bb.0:40; NOPRT-NEXT: s_mov_b32 s0, s241; NOPRT-NEXT: s_mov_b32 s1, s342; NOPRT-NEXT: s_mov_b32 s2, s443; NOPRT-NEXT: s_mov_b32 s3, s544; NOPRT-NEXT: s_mov_b32 s4, s645; NOPRT-NEXT: s_mov_b32 s5, s746; NOPRT-NEXT: s_mov_b32 s6, s847; NOPRT-NEXT: s_mov_b32 s7, s948; NOPRT-NEXT: image_load v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm49; NOPRT-NEXT: s_waitcnt vmcnt(0)50; NOPRT-NEXT: ; return to shader part epilog51;52; GFX12-LABEL: load_1d_f32_x:53; GFX12: ; %bb.0:54; GFX12-NEXT: s_mov_b32 s0, s255; GFX12-NEXT: s_mov_b32 s1, s356; GFX12-NEXT: s_mov_b32 s2, s457; GFX12-NEXT: s_mov_b32 s3, s558; GFX12-NEXT: s_mov_b32 s4, s659; GFX12-NEXT: s_mov_b32 s5, s760; GFX12-NEXT: s_mov_b32 s6, s861; GFX12-NEXT: s_mov_b32 s7, s962; GFX12-NEXT: image_load v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D63; GFX12-NEXT: s_wait_loadcnt 0x064; GFX12-NEXT: ; return to shader part epilog65 %v = call float @llvm.amdgcn.image.load.1d.f32.i32(i32 1, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)66 ret float %v67}68 69define amdgpu_ps float @load_1d_f32_y(<8 x i32> inreg %rsrc, i32 %s) {70; GFX68-LABEL: load_1d_f32_y:71; GFX68: ; %bb.0:72; GFX68-NEXT: s_mov_b32 s0, s273; GFX68-NEXT: s_mov_b32 s1, s374; GFX68-NEXT: s_mov_b32 s2, s475; GFX68-NEXT: s_mov_b32 s3, s576; GFX68-NEXT: s_mov_b32 s4, s677; GFX68-NEXT: s_mov_b32 s5, s778; GFX68-NEXT: s_mov_b32 s6, s879; GFX68-NEXT: s_mov_b32 s7, s980; GFX68-NEXT: image_load v0, v0, s[0:7] dmask:0x2 unorm81; GFX68-NEXT: s_waitcnt vmcnt(0)82; GFX68-NEXT: ; return to shader part epilog83;84; GFX10-LABEL: load_1d_f32_y:85; GFX10: ; %bb.0:86; GFX10-NEXT: s_mov_b32 s0, s287; GFX10-NEXT: s_mov_b32 s1, s388; GFX10-NEXT: s_mov_b32 s2, s489; GFX10-NEXT: s_mov_b32 s3, s590; GFX10-NEXT: s_mov_b32 s4, s691; GFX10-NEXT: s_mov_b32 s5, s792; GFX10-NEXT: s_mov_b32 s6, s893; GFX10-NEXT: s_mov_b32 s7, s994; GFX10-NEXT: image_load v0, v0, s[0:7] dmask:0x2 dim:SQ_RSRC_IMG_1D unorm95; GFX10-NEXT: s_waitcnt vmcnt(0)96; GFX10-NEXT: ; return to shader part epilog97;98; NOPRT-LABEL: load_1d_f32_y:99; NOPRT: ; %bb.0:100; NOPRT-NEXT: s_mov_b32 s0, s2101; NOPRT-NEXT: s_mov_b32 s1, s3102; NOPRT-NEXT: s_mov_b32 s2, s4103; NOPRT-NEXT: s_mov_b32 s3, s5104; NOPRT-NEXT: s_mov_b32 s4, s6105; NOPRT-NEXT: s_mov_b32 s5, s7106; NOPRT-NEXT: s_mov_b32 s6, s8107; NOPRT-NEXT: s_mov_b32 s7, s9108; NOPRT-NEXT: image_load v0, v0, s[0:7] dmask:0x2 dim:SQ_RSRC_IMG_1D unorm109; NOPRT-NEXT: s_waitcnt vmcnt(0)110; NOPRT-NEXT: ; return to shader part epilog111;112; GFX12-LABEL: load_1d_f32_y:113; GFX12: ; %bb.0:114; GFX12-NEXT: s_mov_b32 s0, s2115; GFX12-NEXT: s_mov_b32 s1, s3116; GFX12-NEXT: s_mov_b32 s2, s4117; GFX12-NEXT: s_mov_b32 s3, s5118; GFX12-NEXT: s_mov_b32 s4, s6119; GFX12-NEXT: s_mov_b32 s5, s7120; GFX12-NEXT: s_mov_b32 s6, s8121; GFX12-NEXT: s_mov_b32 s7, s9122; GFX12-NEXT: image_load v0, v0, s[0:7] dmask:0x2 dim:SQ_RSRC_IMG_1D123; GFX12-NEXT: s_wait_loadcnt 0x0124; GFX12-NEXT: ; return to shader part epilog125 %v = call float @llvm.amdgcn.image.load.1d.f32.i32(i32 2, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)126 ret float %v127}128 129define amdgpu_ps float @load_1d_f32_z(<8 x i32> inreg %rsrc, i32 %s) {130; GFX68-LABEL: load_1d_f32_z:131; GFX68: ; %bb.0:132; GFX68-NEXT: s_mov_b32 s0, s2133; GFX68-NEXT: s_mov_b32 s1, s3134; GFX68-NEXT: s_mov_b32 s2, s4135; GFX68-NEXT: s_mov_b32 s3, s5136; GFX68-NEXT: s_mov_b32 s4, s6137; GFX68-NEXT: s_mov_b32 s5, s7138; GFX68-NEXT: s_mov_b32 s6, s8139; GFX68-NEXT: s_mov_b32 s7, s9140; GFX68-NEXT: image_load v0, v0, s[0:7] dmask:0x4 unorm141; GFX68-NEXT: s_waitcnt vmcnt(0)142; GFX68-NEXT: ; return to shader part epilog143;144; GFX10-LABEL: load_1d_f32_z:145; GFX10: ; %bb.0:146; GFX10-NEXT: s_mov_b32 s0, s2147; GFX10-NEXT: s_mov_b32 s1, s3148; GFX10-NEXT: s_mov_b32 s2, s4149; GFX10-NEXT: s_mov_b32 s3, s5150; GFX10-NEXT: s_mov_b32 s4, s6151; GFX10-NEXT: s_mov_b32 s5, s7152; GFX10-NEXT: s_mov_b32 s6, s8153; GFX10-NEXT: s_mov_b32 s7, s9154; GFX10-NEXT: image_load v0, v0, s[0:7] dmask:0x4 dim:SQ_RSRC_IMG_1D unorm155; GFX10-NEXT: s_waitcnt vmcnt(0)156; GFX10-NEXT: ; return to shader part epilog157;158; NOPRT-LABEL: load_1d_f32_z:159; NOPRT: ; %bb.0:160; NOPRT-NEXT: s_mov_b32 s0, s2161; NOPRT-NEXT: s_mov_b32 s1, s3162; NOPRT-NEXT: s_mov_b32 s2, s4163; NOPRT-NEXT: s_mov_b32 s3, s5164; NOPRT-NEXT: s_mov_b32 s4, s6165; NOPRT-NEXT: s_mov_b32 s5, s7166; NOPRT-NEXT: s_mov_b32 s6, s8167; NOPRT-NEXT: s_mov_b32 s7, s9168; NOPRT-NEXT: image_load v0, v0, s[0:7] dmask:0x4 dim:SQ_RSRC_IMG_1D unorm169; NOPRT-NEXT: s_waitcnt vmcnt(0)170; NOPRT-NEXT: ; return to shader part epilog171;172; GFX12-LABEL: load_1d_f32_z:173; GFX12: ; %bb.0:174; GFX12-NEXT: s_mov_b32 s0, s2175; GFX12-NEXT: s_mov_b32 s1, s3176; GFX12-NEXT: s_mov_b32 s2, s4177; GFX12-NEXT: s_mov_b32 s3, s5178; GFX12-NEXT: s_mov_b32 s4, s6179; GFX12-NEXT: s_mov_b32 s5, s7180; GFX12-NEXT: s_mov_b32 s6, s8181; GFX12-NEXT: s_mov_b32 s7, s9182; GFX12-NEXT: image_load v0, v0, s[0:7] dmask:0x4 dim:SQ_RSRC_IMG_1D183; GFX12-NEXT: s_wait_loadcnt 0x0184; GFX12-NEXT: ; return to shader part epilog185 %v = call float @llvm.amdgcn.image.load.1d.f32.i32(i32 4, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)186 ret float %v187}188 189define amdgpu_ps float @load_1d_f32_w(<8 x i32> inreg %rsrc, i32 %s) {190; GFX68-LABEL: load_1d_f32_w:191; GFX68: ; %bb.0:192; GFX68-NEXT: s_mov_b32 s0, s2193; GFX68-NEXT: s_mov_b32 s1, s3194; GFX68-NEXT: s_mov_b32 s2, s4195; GFX68-NEXT: s_mov_b32 s3, s5196; GFX68-NEXT: s_mov_b32 s4, s6197; GFX68-NEXT: s_mov_b32 s5, s7198; GFX68-NEXT: s_mov_b32 s6, s8199; GFX68-NEXT: s_mov_b32 s7, s9200; GFX68-NEXT: image_load v0, v0, s[0:7] dmask:0x8 unorm201; GFX68-NEXT: s_waitcnt vmcnt(0)202; GFX68-NEXT: ; return to shader part epilog203;204; GFX10-LABEL: load_1d_f32_w:205; GFX10: ; %bb.0:206; GFX10-NEXT: s_mov_b32 s0, s2207; GFX10-NEXT: s_mov_b32 s1, s3208; GFX10-NEXT: s_mov_b32 s2, s4209; GFX10-NEXT: s_mov_b32 s3, s5210; GFX10-NEXT: s_mov_b32 s4, s6211; GFX10-NEXT: s_mov_b32 s5, s7212; GFX10-NEXT: s_mov_b32 s6, s8213; GFX10-NEXT: s_mov_b32 s7, s9214; GFX10-NEXT: image_load v0, v0, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm215; GFX10-NEXT: s_waitcnt vmcnt(0)216; GFX10-NEXT: ; return to shader part epilog217;218; NOPRT-LABEL: load_1d_f32_w:219; NOPRT: ; %bb.0:220; NOPRT-NEXT: s_mov_b32 s0, s2221; NOPRT-NEXT: s_mov_b32 s1, s3222; NOPRT-NEXT: s_mov_b32 s2, s4223; NOPRT-NEXT: s_mov_b32 s3, s5224; NOPRT-NEXT: s_mov_b32 s4, s6225; NOPRT-NEXT: s_mov_b32 s5, s7226; NOPRT-NEXT: s_mov_b32 s6, s8227; NOPRT-NEXT: s_mov_b32 s7, s9228; NOPRT-NEXT: image_load v0, v0, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm229; NOPRT-NEXT: s_waitcnt vmcnt(0)230; NOPRT-NEXT: ; return to shader part epilog231;232; GFX12-LABEL: load_1d_f32_w:233; GFX12: ; %bb.0:234; GFX12-NEXT: s_mov_b32 s0, s2235; GFX12-NEXT: s_mov_b32 s1, s3236; GFX12-NEXT: s_mov_b32 s2, s4237; GFX12-NEXT: s_mov_b32 s3, s5238; GFX12-NEXT: s_mov_b32 s4, s6239; GFX12-NEXT: s_mov_b32 s5, s7240; GFX12-NEXT: s_mov_b32 s6, s8241; GFX12-NEXT: s_mov_b32 s7, s9242; GFX12-NEXT: image_load v0, v0, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D243; GFX12-NEXT: s_wait_loadcnt 0x0244; GFX12-NEXT: ; return to shader part epilog245 %v = call float @llvm.amdgcn.image.load.1d.f32.i32(i32 8, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)246 ret float %v247}248 249define amdgpu_ps <2 x float> @load_1d_v2f32_xy(<8 x i32> inreg %rsrc, i32 %s) {250; GFX68-LABEL: load_1d_v2f32_xy:251; GFX68: ; %bb.0:252; GFX68-NEXT: s_mov_b32 s0, s2253; GFX68-NEXT: s_mov_b32 s1, s3254; GFX68-NEXT: s_mov_b32 s2, s4255; GFX68-NEXT: s_mov_b32 s3, s5256; GFX68-NEXT: s_mov_b32 s4, s6257; GFX68-NEXT: s_mov_b32 s5, s7258; GFX68-NEXT: s_mov_b32 s6, s8259; GFX68-NEXT: s_mov_b32 s7, s9260; GFX68-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x3 unorm261; GFX68-NEXT: s_waitcnt vmcnt(0)262; GFX68-NEXT: ; return to shader part epilog263;264; GFX10-LABEL: load_1d_v2f32_xy:265; GFX10: ; %bb.0:266; GFX10-NEXT: s_mov_b32 s0, s2267; GFX10-NEXT: s_mov_b32 s1, s3268; GFX10-NEXT: s_mov_b32 s2, s4269; GFX10-NEXT: s_mov_b32 s3, s5270; GFX10-NEXT: s_mov_b32 s4, s6271; GFX10-NEXT: s_mov_b32 s5, s7272; GFX10-NEXT: s_mov_b32 s6, s8273; GFX10-NEXT: s_mov_b32 s7, s9274; GFX10-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm275; GFX10-NEXT: s_waitcnt vmcnt(0)276; GFX10-NEXT: ; return to shader part epilog277;278; NOPRT-LABEL: load_1d_v2f32_xy:279; NOPRT: ; %bb.0:280; NOPRT-NEXT: s_mov_b32 s0, s2281; NOPRT-NEXT: s_mov_b32 s1, s3282; NOPRT-NEXT: s_mov_b32 s2, s4283; NOPRT-NEXT: s_mov_b32 s3, s5284; NOPRT-NEXT: s_mov_b32 s4, s6285; NOPRT-NEXT: s_mov_b32 s5, s7286; NOPRT-NEXT: s_mov_b32 s6, s8287; NOPRT-NEXT: s_mov_b32 s7, s9288; NOPRT-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm289; NOPRT-NEXT: s_waitcnt vmcnt(0)290; NOPRT-NEXT: ; return to shader part epilog291;292; GFX12-LABEL: load_1d_v2f32_xy:293; GFX12: ; %bb.0:294; GFX12-NEXT: s_mov_b32 s0, s2295; GFX12-NEXT: s_mov_b32 s1, s3296; GFX12-NEXT: s_mov_b32 s2, s4297; GFX12-NEXT: s_mov_b32 s3, s5298; GFX12-NEXT: s_mov_b32 s4, s6299; GFX12-NEXT: s_mov_b32 s5, s7300; GFX12-NEXT: s_mov_b32 s6, s8301; GFX12-NEXT: s_mov_b32 s7, s9302; GFX12-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D303; GFX12-NEXT: s_wait_loadcnt 0x0304; GFX12-NEXT: ; return to shader part epilog305 %v = call <2 x float> @llvm.amdgcn.image.load.1d.v2f32.i32(i32 3, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)306 ret <2 x float> %v307}308 309define amdgpu_ps <2 x float> @load_1d_v2f32_xz(<8 x i32> inreg %rsrc, i32 %s) {310; GFX68-LABEL: load_1d_v2f32_xz:311; GFX68: ; %bb.0:312; GFX68-NEXT: s_mov_b32 s0, s2313; GFX68-NEXT: s_mov_b32 s1, s3314; GFX68-NEXT: s_mov_b32 s2, s4315; GFX68-NEXT: s_mov_b32 s3, s5316; GFX68-NEXT: s_mov_b32 s4, s6317; GFX68-NEXT: s_mov_b32 s5, s7318; GFX68-NEXT: s_mov_b32 s6, s8319; GFX68-NEXT: s_mov_b32 s7, s9320; GFX68-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x5 unorm321; GFX68-NEXT: s_waitcnt vmcnt(0)322; GFX68-NEXT: ; return to shader part epilog323;324; GFX10-LABEL: load_1d_v2f32_xz:325; GFX10: ; %bb.0:326; GFX10-NEXT: s_mov_b32 s0, s2327; GFX10-NEXT: s_mov_b32 s1, s3328; GFX10-NEXT: s_mov_b32 s2, s4329; GFX10-NEXT: s_mov_b32 s3, s5330; GFX10-NEXT: s_mov_b32 s4, s6331; GFX10-NEXT: s_mov_b32 s5, s7332; GFX10-NEXT: s_mov_b32 s6, s8333; GFX10-NEXT: s_mov_b32 s7, s9334; GFX10-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x5 dim:SQ_RSRC_IMG_1D unorm335; GFX10-NEXT: s_waitcnt vmcnt(0)336; GFX10-NEXT: ; return to shader part epilog337;338; NOPRT-LABEL: load_1d_v2f32_xz:339; NOPRT: ; %bb.0:340; NOPRT-NEXT: s_mov_b32 s0, s2341; NOPRT-NEXT: s_mov_b32 s1, s3342; NOPRT-NEXT: s_mov_b32 s2, s4343; NOPRT-NEXT: s_mov_b32 s3, s5344; NOPRT-NEXT: s_mov_b32 s4, s6345; NOPRT-NEXT: s_mov_b32 s5, s7346; NOPRT-NEXT: s_mov_b32 s6, s8347; NOPRT-NEXT: s_mov_b32 s7, s9348; NOPRT-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x5 dim:SQ_RSRC_IMG_1D unorm349; NOPRT-NEXT: s_waitcnt vmcnt(0)350; NOPRT-NEXT: ; return to shader part epilog351;352; GFX12-LABEL: load_1d_v2f32_xz:353; GFX12: ; %bb.0:354; GFX12-NEXT: s_mov_b32 s0, s2355; GFX12-NEXT: s_mov_b32 s1, s3356; GFX12-NEXT: s_mov_b32 s2, s4357; GFX12-NEXT: s_mov_b32 s3, s5358; GFX12-NEXT: s_mov_b32 s4, s6359; GFX12-NEXT: s_mov_b32 s5, s7360; GFX12-NEXT: s_mov_b32 s6, s8361; GFX12-NEXT: s_mov_b32 s7, s9362; GFX12-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x5 dim:SQ_RSRC_IMG_1D363; GFX12-NEXT: s_wait_loadcnt 0x0364; GFX12-NEXT: ; return to shader part epilog365 %v = call <2 x float> @llvm.amdgcn.image.load.1d.v2f32.i32(i32 5, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)366 ret <2 x float> %v367}368 369define amdgpu_ps <2 x float> @load_1d_v2f32_xw(<8 x i32> inreg %rsrc, i32 %s) {370; GFX68-LABEL: load_1d_v2f32_xw:371; GFX68: ; %bb.0:372; GFX68-NEXT: s_mov_b32 s0, s2373; GFX68-NEXT: s_mov_b32 s1, s3374; GFX68-NEXT: s_mov_b32 s2, s4375; GFX68-NEXT: s_mov_b32 s3, s5376; GFX68-NEXT: s_mov_b32 s4, s6377; GFX68-NEXT: s_mov_b32 s5, s7378; GFX68-NEXT: s_mov_b32 s6, s8379; GFX68-NEXT: s_mov_b32 s7, s9380; GFX68-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x9 unorm381; GFX68-NEXT: s_waitcnt vmcnt(0)382; GFX68-NEXT: ; return to shader part epilog383;384; GFX10-LABEL: load_1d_v2f32_xw:385; GFX10: ; %bb.0:386; GFX10-NEXT: s_mov_b32 s0, s2387; GFX10-NEXT: s_mov_b32 s1, s3388; GFX10-NEXT: s_mov_b32 s2, s4389; GFX10-NEXT: s_mov_b32 s3, s5390; GFX10-NEXT: s_mov_b32 s4, s6391; GFX10-NEXT: s_mov_b32 s5, s7392; GFX10-NEXT: s_mov_b32 s6, s8393; GFX10-NEXT: s_mov_b32 s7, s9394; GFX10-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x9 dim:SQ_RSRC_IMG_1D unorm395; GFX10-NEXT: s_waitcnt vmcnt(0)396; GFX10-NEXT: ; return to shader part epilog397;398; NOPRT-LABEL: load_1d_v2f32_xw:399; NOPRT: ; %bb.0:400; NOPRT-NEXT: s_mov_b32 s0, s2401; NOPRT-NEXT: s_mov_b32 s1, s3402; NOPRT-NEXT: s_mov_b32 s2, s4403; NOPRT-NEXT: s_mov_b32 s3, s5404; NOPRT-NEXT: s_mov_b32 s4, s6405; NOPRT-NEXT: s_mov_b32 s5, s7406; NOPRT-NEXT: s_mov_b32 s6, s8407; NOPRT-NEXT: s_mov_b32 s7, s9408; NOPRT-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x9 dim:SQ_RSRC_IMG_1D unorm409; NOPRT-NEXT: s_waitcnt vmcnt(0)410; NOPRT-NEXT: ; return to shader part epilog411;412; GFX12-LABEL: load_1d_v2f32_xw:413; GFX12: ; %bb.0:414; GFX12-NEXT: s_mov_b32 s0, s2415; GFX12-NEXT: s_mov_b32 s1, s3416; GFX12-NEXT: s_mov_b32 s2, s4417; GFX12-NEXT: s_mov_b32 s3, s5418; GFX12-NEXT: s_mov_b32 s4, s6419; GFX12-NEXT: s_mov_b32 s5, s7420; GFX12-NEXT: s_mov_b32 s6, s8421; GFX12-NEXT: s_mov_b32 s7, s9422; GFX12-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x9 dim:SQ_RSRC_IMG_1D423; GFX12-NEXT: s_wait_loadcnt 0x0424; GFX12-NEXT: ; return to shader part epilog425 %v = call <2 x float> @llvm.amdgcn.image.load.1d.v2f32.i32(i32 9, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)426 ret <2 x float> %v427}428 429define amdgpu_ps <2 x float> @load_1d_v2f32_yz(<8 x i32> inreg %rsrc, i32 %s) {430; GFX68-LABEL: load_1d_v2f32_yz:431; GFX68: ; %bb.0:432; GFX68-NEXT: s_mov_b32 s0, s2433; GFX68-NEXT: s_mov_b32 s1, s3434; GFX68-NEXT: s_mov_b32 s2, s4435; GFX68-NEXT: s_mov_b32 s3, s5436; GFX68-NEXT: s_mov_b32 s4, s6437; GFX68-NEXT: s_mov_b32 s5, s7438; GFX68-NEXT: s_mov_b32 s6, s8439; GFX68-NEXT: s_mov_b32 s7, s9440; GFX68-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x6 unorm441; GFX68-NEXT: s_waitcnt vmcnt(0)442; GFX68-NEXT: ; return to shader part epilog443;444; GFX10-LABEL: load_1d_v2f32_yz:445; GFX10: ; %bb.0:446; GFX10-NEXT: s_mov_b32 s0, s2447; GFX10-NEXT: s_mov_b32 s1, s3448; GFX10-NEXT: s_mov_b32 s2, s4449; GFX10-NEXT: s_mov_b32 s3, s5450; GFX10-NEXT: s_mov_b32 s4, s6451; GFX10-NEXT: s_mov_b32 s5, s7452; GFX10-NEXT: s_mov_b32 s6, s8453; GFX10-NEXT: s_mov_b32 s7, s9454; GFX10-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x6 dim:SQ_RSRC_IMG_1D unorm455; GFX10-NEXT: s_waitcnt vmcnt(0)456; GFX10-NEXT: ; return to shader part epilog457;458; NOPRT-LABEL: load_1d_v2f32_yz:459; NOPRT: ; %bb.0:460; NOPRT-NEXT: s_mov_b32 s0, s2461; NOPRT-NEXT: s_mov_b32 s1, s3462; NOPRT-NEXT: s_mov_b32 s2, s4463; NOPRT-NEXT: s_mov_b32 s3, s5464; NOPRT-NEXT: s_mov_b32 s4, s6465; NOPRT-NEXT: s_mov_b32 s5, s7466; NOPRT-NEXT: s_mov_b32 s6, s8467; NOPRT-NEXT: s_mov_b32 s7, s9468; NOPRT-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x6 dim:SQ_RSRC_IMG_1D unorm469; NOPRT-NEXT: s_waitcnt vmcnt(0)470; NOPRT-NEXT: ; return to shader part epilog471;472; GFX12-LABEL: load_1d_v2f32_yz:473; GFX12: ; %bb.0:474; GFX12-NEXT: s_mov_b32 s0, s2475; GFX12-NEXT: s_mov_b32 s1, s3476; GFX12-NEXT: s_mov_b32 s2, s4477; GFX12-NEXT: s_mov_b32 s3, s5478; GFX12-NEXT: s_mov_b32 s4, s6479; GFX12-NEXT: s_mov_b32 s5, s7480; GFX12-NEXT: s_mov_b32 s6, s8481; GFX12-NEXT: s_mov_b32 s7, s9482; GFX12-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x6 dim:SQ_RSRC_IMG_1D483; GFX12-NEXT: s_wait_loadcnt 0x0484; GFX12-NEXT: ; return to shader part epilog485 %v = call <2 x float> @llvm.amdgcn.image.load.1d.v2f32.i32(i32 6, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)486 ret <2 x float> %v487}488 489define amdgpu_ps <3 x float> @load_1d_v3f32_xyz(<8 x i32> inreg %rsrc, i32 %s) {490; GFX68-LABEL: load_1d_v3f32_xyz:491; GFX68: ; %bb.0:492; GFX68-NEXT: s_mov_b32 s0, s2493; GFX68-NEXT: s_mov_b32 s1, s3494; GFX68-NEXT: s_mov_b32 s2, s4495; GFX68-NEXT: s_mov_b32 s3, s5496; GFX68-NEXT: s_mov_b32 s4, s6497; GFX68-NEXT: s_mov_b32 s5, s7498; GFX68-NEXT: s_mov_b32 s6, s8499; GFX68-NEXT: s_mov_b32 s7, s9500; GFX68-NEXT: image_load v[0:2], v0, s[0:7] dmask:0x7 unorm501; GFX68-NEXT: s_waitcnt vmcnt(0)502; GFX68-NEXT: ; return to shader part epilog503;504; GFX10-LABEL: load_1d_v3f32_xyz:505; GFX10: ; %bb.0:506; GFX10-NEXT: s_mov_b32 s0, s2507; GFX10-NEXT: s_mov_b32 s1, s3508; GFX10-NEXT: s_mov_b32 s2, s4509; GFX10-NEXT: s_mov_b32 s3, s5510; GFX10-NEXT: s_mov_b32 s4, s6511; GFX10-NEXT: s_mov_b32 s5, s7512; GFX10-NEXT: s_mov_b32 s6, s8513; GFX10-NEXT: s_mov_b32 s7, s9514; GFX10-NEXT: image_load v[0:2], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm515; GFX10-NEXT: s_waitcnt vmcnt(0)516; GFX10-NEXT: ; return to shader part epilog517;518; NOPRT-LABEL: load_1d_v3f32_xyz:519; NOPRT: ; %bb.0:520; NOPRT-NEXT: s_mov_b32 s0, s2521; NOPRT-NEXT: s_mov_b32 s1, s3522; NOPRT-NEXT: s_mov_b32 s2, s4523; NOPRT-NEXT: s_mov_b32 s3, s5524; NOPRT-NEXT: s_mov_b32 s4, s6525; NOPRT-NEXT: s_mov_b32 s5, s7526; NOPRT-NEXT: s_mov_b32 s6, s8527; NOPRT-NEXT: s_mov_b32 s7, s9528; NOPRT-NEXT: image_load v[0:2], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm529; NOPRT-NEXT: s_waitcnt vmcnt(0)530; NOPRT-NEXT: ; return to shader part epilog531;532; GFX12-LABEL: load_1d_v3f32_xyz:533; GFX12: ; %bb.0:534; GFX12-NEXT: s_mov_b32 s0, s2535; GFX12-NEXT: s_mov_b32 s1, s3536; GFX12-NEXT: s_mov_b32 s2, s4537; GFX12-NEXT: s_mov_b32 s3, s5538; GFX12-NEXT: s_mov_b32 s4, s6539; GFX12-NEXT: s_mov_b32 s5, s7540; GFX12-NEXT: s_mov_b32 s6, s8541; GFX12-NEXT: s_mov_b32 s7, s9542; GFX12-NEXT: image_load v[0:2], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D543; GFX12-NEXT: s_wait_loadcnt 0x0544; GFX12-NEXT: ; return to shader part epilog545 %v = call <3 x float> @llvm.amdgcn.image.load.1d.v3f32.i32(i32 7, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)546 ret <3 x float> %v547}548 549define amdgpu_ps <4 x float> @load_1d_v4f32_xyzw(<8 x i32> inreg %rsrc, i32 %s) {550; GFX68-LABEL: load_1d_v4f32_xyzw:551; GFX68: ; %bb.0:552; GFX68-NEXT: s_mov_b32 s0, s2553; GFX68-NEXT: s_mov_b32 s1, s3554; GFX68-NEXT: s_mov_b32 s2, s4555; GFX68-NEXT: s_mov_b32 s3, s5556; GFX68-NEXT: s_mov_b32 s4, s6557; GFX68-NEXT: s_mov_b32 s5, s7558; GFX68-NEXT: s_mov_b32 s6, s8559; GFX68-NEXT: s_mov_b32 s7, s9560; GFX68-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm561; GFX68-NEXT: s_waitcnt vmcnt(0)562; GFX68-NEXT: ; return to shader part epilog563;564; GFX10-LABEL: load_1d_v4f32_xyzw:565; GFX10: ; %bb.0:566; GFX10-NEXT: s_mov_b32 s0, s2567; GFX10-NEXT: s_mov_b32 s1, s3568; GFX10-NEXT: s_mov_b32 s2, s4569; GFX10-NEXT: s_mov_b32 s3, s5570; GFX10-NEXT: s_mov_b32 s4, s6571; GFX10-NEXT: s_mov_b32 s5, s7572; GFX10-NEXT: s_mov_b32 s6, s8573; GFX10-NEXT: s_mov_b32 s7, s9574; GFX10-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm575; GFX10-NEXT: s_waitcnt vmcnt(0)576; GFX10-NEXT: ; return to shader part epilog577;578; NOPRT-LABEL: load_1d_v4f32_xyzw:579; NOPRT: ; %bb.0:580; NOPRT-NEXT: s_mov_b32 s0, s2581; NOPRT-NEXT: s_mov_b32 s1, s3582; NOPRT-NEXT: s_mov_b32 s2, s4583; NOPRT-NEXT: s_mov_b32 s3, s5584; NOPRT-NEXT: s_mov_b32 s4, s6585; NOPRT-NEXT: s_mov_b32 s5, s7586; NOPRT-NEXT: s_mov_b32 s6, s8587; NOPRT-NEXT: s_mov_b32 s7, s9588; NOPRT-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm589; NOPRT-NEXT: s_waitcnt vmcnt(0)590; NOPRT-NEXT: ; return to shader part epilog591;592; GFX12-LABEL: load_1d_v4f32_xyzw:593; GFX12: ; %bb.0:594; GFX12-NEXT: s_mov_b32 s0, s2595; GFX12-NEXT: s_mov_b32 s1, s3596; GFX12-NEXT: s_mov_b32 s2, s4597; GFX12-NEXT: s_mov_b32 s3, s5598; GFX12-NEXT: s_mov_b32 s4, s6599; GFX12-NEXT: s_mov_b32 s5, s7600; GFX12-NEXT: s_mov_b32 s6, s8601; GFX12-NEXT: s_mov_b32 s7, s9602; GFX12-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D603; GFX12-NEXT: s_wait_loadcnt 0x0604; GFX12-NEXT: ; return to shader part epilog605 %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)606 ret <4 x float> %v607}608 609define amdgpu_ps float @load_1d_f32_tfe_dmask_x(<8 x i32> inreg %rsrc, i32 %s) {610; GFX68-LABEL: load_1d_f32_tfe_dmask_x:611; GFX68: ; %bb.0:612; GFX68-NEXT: v_mov_b32_e32 v1, 0613; GFX68-NEXT: s_mov_b32 s0, s2614; GFX68-NEXT: s_mov_b32 s1, s3615; GFX68-NEXT: s_mov_b32 s2, s4616; GFX68-NEXT: s_mov_b32 s3, s5617; GFX68-NEXT: s_mov_b32 s4, s6618; GFX68-NEXT: s_mov_b32 s5, s7619; GFX68-NEXT: s_mov_b32 s6, s8620; GFX68-NEXT: s_mov_b32 s7, s9621; GFX68-NEXT: v_mov_b32_e32 v2, v1622; GFX68-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe623; GFX68-NEXT: s_waitcnt vmcnt(0)624; GFX68-NEXT: v_mov_b32_e32 v0, v2625; GFX68-NEXT: ; return to shader part epilog626;627; GFX10-LABEL: load_1d_f32_tfe_dmask_x:628; GFX10: ; %bb.0:629; GFX10-NEXT: v_mov_b32_e32 v1, 0630; GFX10-NEXT: s_mov_b32 s0, s2631; GFX10-NEXT: s_mov_b32 s1, s3632; GFX10-NEXT: s_mov_b32 s2, s4633; GFX10-NEXT: s_mov_b32 s3, s5634; GFX10-NEXT: s_mov_b32 s4, s6635; GFX10-NEXT: s_mov_b32 s5, s7636; GFX10-NEXT: s_mov_b32 s6, s8637; GFX10-NEXT: s_mov_b32 s7, s9638; GFX10-NEXT: v_mov_b32_e32 v2, v1639; GFX10-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe640; GFX10-NEXT: s_waitcnt vmcnt(0)641; GFX10-NEXT: v_mov_b32_e32 v0, v2642; GFX10-NEXT: ; return to shader part epilog643;644; NOPRT-LABEL: load_1d_f32_tfe_dmask_x:645; NOPRT: ; %bb.0:646; NOPRT-NEXT: s_mov_b32 s0, s2647; NOPRT-NEXT: s_mov_b32 s1, s3648; NOPRT-NEXT: s_mov_b32 s2, s4649; NOPRT-NEXT: s_mov_b32 s3, s5650; NOPRT-NEXT: s_mov_b32 s4, s6651; NOPRT-NEXT: s_mov_b32 s5, s7652; NOPRT-NEXT: s_mov_b32 s6, s8653; NOPRT-NEXT: s_mov_b32 s7, s9654; NOPRT-NEXT: v_mov_b32_e32 v1, 0655; NOPRT-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe656; NOPRT-NEXT: s_waitcnt vmcnt(0)657; NOPRT-NEXT: v_mov_b32_e32 v0, v1658; NOPRT-NEXT: ; return to shader part epilog659;660; GFX12-LABEL: load_1d_f32_tfe_dmask_x:661; GFX12: ; %bb.0:662; GFX12-NEXT: v_mov_b32_e32 v1, 0663; GFX12-NEXT: s_mov_b32 s0, s2664; GFX12-NEXT: s_mov_b32 s1, s3665; GFX12-NEXT: s_mov_b32 s2, s4666; GFX12-NEXT: s_mov_b32 s3, s5667; GFX12-NEXT: s_mov_b32 s4, s6668; GFX12-NEXT: s_mov_b32 s5, s7669; GFX12-NEXT: s_mov_b32 s6, s8670; GFX12-NEXT: s_mov_b32 s7, s9671; GFX12-NEXT: v_mov_b32_e32 v2, v1672; GFX12-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D tfe673; GFX12-NEXT: s_wait_loadcnt 0x0674; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)675; GFX12-NEXT: v_mov_b32_e32 v0, v2676; GFX12-NEXT: ; return to shader part epilog677 %v = call { float, i32 } @llvm.amdgcn.image.load.1d.sl_f32i32s.i32(i32 1, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)678 %v.err = extractvalue { float, i32 } %v, 1679 %vv = bitcast i32 %v.err to float680 ret float %vv681}682 683define amdgpu_ps float @load_1d_v2f32_tfe_dmask_xy(<8 x i32> inreg %rsrc, i32 %s) {684; GFX68-LABEL: load_1d_v2f32_tfe_dmask_xy:685; GFX68: ; %bb.0:686; GFX68-NEXT: v_mov_b32_e32 v1, 0687; GFX68-NEXT: s_mov_b32 s0, s2688; GFX68-NEXT: s_mov_b32 s1, s3689; GFX68-NEXT: s_mov_b32 s2, s4690; GFX68-NEXT: s_mov_b32 s3, s5691; GFX68-NEXT: s_mov_b32 s4, s6692; GFX68-NEXT: s_mov_b32 s5, s7693; GFX68-NEXT: s_mov_b32 s6, s8694; GFX68-NEXT: s_mov_b32 s7, s9695; GFX68-NEXT: v_mov_b32_e32 v2, v1696; GFX68-NEXT: v_mov_b32_e32 v3, v1697; GFX68-NEXT: image_load v[1:3], v0, s[0:7] dmask:0x3 unorm tfe698; GFX68-NEXT: s_waitcnt vmcnt(0)699; GFX68-NEXT: v_mov_b32_e32 v0, v3700; GFX68-NEXT: ; return to shader part epilog701;702; GFX10-LABEL: load_1d_v2f32_tfe_dmask_xy:703; GFX10: ; %bb.0:704; GFX10-NEXT: v_mov_b32_e32 v1, 0705; GFX10-NEXT: s_mov_b32 s0, s2706; GFX10-NEXT: s_mov_b32 s1, s3707; GFX10-NEXT: s_mov_b32 s2, s4708; GFX10-NEXT: s_mov_b32 s3, s5709; GFX10-NEXT: s_mov_b32 s4, s6710; GFX10-NEXT: s_mov_b32 s5, s7711; GFX10-NEXT: s_mov_b32 s6, s8712; GFX10-NEXT: s_mov_b32 s7, s9713; GFX10-NEXT: v_mov_b32_e32 v2, v1714; GFX10-NEXT: v_mov_b32_e32 v3, v1715; GFX10-NEXT: image_load v[1:3], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm tfe716; GFX10-NEXT: s_waitcnt vmcnt(0)717; GFX10-NEXT: v_mov_b32_e32 v0, v3718; GFX10-NEXT: ; return to shader part epilog719;720; NOPRT-LABEL: load_1d_v2f32_tfe_dmask_xy:721; NOPRT: ; %bb.0:722; NOPRT-NEXT: s_mov_b32 s0, s2723; NOPRT-NEXT: s_mov_b32 s1, s3724; NOPRT-NEXT: s_mov_b32 s2, s4725; NOPRT-NEXT: s_mov_b32 s3, s5726; NOPRT-NEXT: s_mov_b32 s4, s6727; NOPRT-NEXT: s_mov_b32 s5, s7728; NOPRT-NEXT: s_mov_b32 s6, s8729; NOPRT-NEXT: s_mov_b32 s7, s9730; NOPRT-NEXT: v_mov_b32_e32 v2, 0731; NOPRT-NEXT: image_load v[0:2], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm tfe732; NOPRT-NEXT: s_waitcnt vmcnt(0)733; NOPRT-NEXT: v_mov_b32_e32 v0, v2734; NOPRT-NEXT: ; return to shader part epilog735;736; GFX12-LABEL: load_1d_v2f32_tfe_dmask_xy:737; GFX12: ; %bb.0:738; GFX12-NEXT: v_mov_b32_e32 v1, 0739; GFX12-NEXT: s_mov_b32 s0, s2740; GFX12-NEXT: s_mov_b32 s1, s3741; GFX12-NEXT: s_mov_b32 s2, s4742; GFX12-NEXT: s_mov_b32 s3, s5743; GFX12-NEXT: s_mov_b32 s4, s6744; GFX12-NEXT: s_mov_b32 s5, s7745; GFX12-NEXT: s_mov_b32 s6, s8746; GFX12-NEXT: s_mov_b32 s7, s9747; GFX12-NEXT: v_dual_mov_b32 v2, v1 :: v_dual_mov_b32 v3, v1748; GFX12-NEXT: image_load v[1:3], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D tfe749; GFX12-NEXT: s_wait_loadcnt 0x0750; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)751; GFX12-NEXT: v_mov_b32_e32 v0, v3752; GFX12-NEXT: ; return to shader part epilog753 %v = call { <2 x float>, i32 } @llvm.amdgcn.image.load.1d.sl_v2f32i32s.i32(i32 3, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)754 %v.err = extractvalue { <2 x float>, i32 } %v, 1755 %vv = bitcast i32 %v.err to float756 ret float %vv757}758 759define amdgpu_ps float @load_1d_v3f32_tfe_dmask_xyz(<8 x i32> inreg %rsrc, i32 %s) {760; GFX68-LABEL: load_1d_v3f32_tfe_dmask_xyz:761; GFX68: ; %bb.0:762; GFX68-NEXT: v_mov_b32_e32 v1, 0763; GFX68-NEXT: s_mov_b32 s0, s2764; GFX68-NEXT: s_mov_b32 s1, s3765; GFX68-NEXT: s_mov_b32 s2, s4766; GFX68-NEXT: s_mov_b32 s3, s5767; GFX68-NEXT: s_mov_b32 s4, s6768; GFX68-NEXT: s_mov_b32 s5, s7769; GFX68-NEXT: s_mov_b32 s6, s8770; GFX68-NEXT: s_mov_b32 s7, s9771; GFX68-NEXT: v_mov_b32_e32 v2, v1772; GFX68-NEXT: v_mov_b32_e32 v3, v1773; GFX68-NEXT: v_mov_b32_e32 v4, v1774; GFX68-NEXT: image_load v[1:4], v0, s[0:7] dmask:0x7 unorm tfe775; GFX68-NEXT: s_waitcnt vmcnt(0)776; GFX68-NEXT: v_mov_b32_e32 v0, v4777; GFX68-NEXT: ; return to shader part epilog778;779; GFX10-LABEL: load_1d_v3f32_tfe_dmask_xyz:780; GFX10: ; %bb.0:781; GFX10-NEXT: v_mov_b32_e32 v1, 0782; GFX10-NEXT: s_mov_b32 s0, s2783; GFX10-NEXT: s_mov_b32 s1, s3784; GFX10-NEXT: s_mov_b32 s2, s4785; GFX10-NEXT: s_mov_b32 s3, s5786; GFX10-NEXT: s_mov_b32 s4, s6787; GFX10-NEXT: s_mov_b32 s5, s7788; GFX10-NEXT: s_mov_b32 s6, s8789; GFX10-NEXT: s_mov_b32 s7, s9790; GFX10-NEXT: v_mov_b32_e32 v2, v1791; GFX10-NEXT: v_mov_b32_e32 v3, v1792; GFX10-NEXT: v_mov_b32_e32 v4, v1793; GFX10-NEXT: image_load v[1:4], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm tfe794; GFX10-NEXT: s_waitcnt vmcnt(0)795; GFX10-NEXT: v_mov_b32_e32 v0, v4796; GFX10-NEXT: ; return to shader part epilog797;798; NOPRT-LABEL: load_1d_v3f32_tfe_dmask_xyz:799; NOPRT: ; %bb.0:800; NOPRT-NEXT: s_mov_b32 s0, s2801; NOPRT-NEXT: s_mov_b32 s1, s3802; NOPRT-NEXT: s_mov_b32 s2, s4803; NOPRT-NEXT: s_mov_b32 s3, s5804; NOPRT-NEXT: s_mov_b32 s4, s6805; NOPRT-NEXT: s_mov_b32 s5, s7806; NOPRT-NEXT: s_mov_b32 s6, s8807; NOPRT-NEXT: s_mov_b32 s7, s9808; NOPRT-NEXT: v_mov_b32_e32 v3, 0809; NOPRT-NEXT: image_load v[0:3], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm tfe810; NOPRT-NEXT: s_waitcnt vmcnt(0)811; NOPRT-NEXT: v_mov_b32_e32 v0, v3812; NOPRT-NEXT: ; return to shader part epilog813;814; GFX12-LABEL: load_1d_v3f32_tfe_dmask_xyz:815; GFX12: ; %bb.0:816; GFX12-NEXT: v_mov_b32_e32 v1, 0817; GFX12-NEXT: s_mov_b32 s0, s2818; GFX12-NEXT: s_mov_b32 s1, s3819; GFX12-NEXT: s_mov_b32 s2, s4820; GFX12-NEXT: s_mov_b32 s3, s5821; GFX12-NEXT: s_mov_b32 s4, s6822; GFX12-NEXT: s_mov_b32 s5, s7823; GFX12-NEXT: s_mov_b32 s6, s8824; GFX12-NEXT: s_mov_b32 s7, s9825; GFX12-NEXT: v_dual_mov_b32 v2, v1 :: v_dual_mov_b32 v3, v1826; GFX12-NEXT: v_mov_b32_e32 v4, v1827; GFX12-NEXT: image_load v[1:4], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D tfe828; GFX12-NEXT: s_wait_loadcnt 0x0829; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)830; GFX12-NEXT: v_mov_b32_e32 v0, v4831; GFX12-NEXT: ; return to shader part epilog832 %v = call { <3 x float>, i32 } @llvm.amdgcn.image.load.1d.sl_v3f32i32s.i32(i32 7, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)833 %v.err = extractvalue { <3 x float>, i32 } %v, 1834 %vv = bitcast i32 %v.err to float835 ret float %vv836}837 838define amdgpu_ps float @load_1d_v4f32_tfe_dmask_xyzw(<8 x i32> inreg %rsrc, i32 %s) {839; GFX68-LABEL: load_1d_v4f32_tfe_dmask_xyzw:840; GFX68: ; %bb.0:841; GFX68-NEXT: v_mov_b32_e32 v1, 0842; GFX68-NEXT: s_mov_b32 s0, s2843; GFX68-NEXT: s_mov_b32 s1, s3844; GFX68-NEXT: s_mov_b32 s2, s4845; GFX68-NEXT: s_mov_b32 s3, s5846; GFX68-NEXT: s_mov_b32 s4, s6847; GFX68-NEXT: s_mov_b32 s5, s7848; GFX68-NEXT: s_mov_b32 s6, s8849; GFX68-NEXT: s_mov_b32 s7, s9850; GFX68-NEXT: v_mov_b32_e32 v2, v1851; GFX68-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x10 unorm tfe852; GFX68-NEXT: s_waitcnt vmcnt(0)853; GFX68-NEXT: v_mov_b32_e32 v0, v2854; GFX68-NEXT: ; return to shader part epilog855;856; GFX10-LABEL: load_1d_v4f32_tfe_dmask_xyzw:857; GFX10: ; %bb.0:858; GFX10-NEXT: v_mov_b32_e32 v1, 0859; GFX10-NEXT: s_mov_b32 s0, s2860; GFX10-NEXT: s_mov_b32 s1, s3861; GFX10-NEXT: s_mov_b32 s2, s4862; GFX10-NEXT: s_mov_b32 s3, s5863; GFX10-NEXT: s_mov_b32 s4, s6864; GFX10-NEXT: s_mov_b32 s5, s7865; GFX10-NEXT: s_mov_b32 s6, s8866; GFX10-NEXT: s_mov_b32 s7, s9867; GFX10-NEXT: v_mov_b32_e32 v2, v1868; GFX10-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x10 dim:SQ_RSRC_IMG_1D unorm tfe869; GFX10-NEXT: s_waitcnt vmcnt(0)870; GFX10-NEXT: v_mov_b32_e32 v0, v2871; GFX10-NEXT: ; return to shader part epilog872;873; NOPRT-LABEL: load_1d_v4f32_tfe_dmask_xyzw:874; NOPRT: ; %bb.0:875; NOPRT-NEXT: s_mov_b32 s0, s2876; NOPRT-NEXT: s_mov_b32 s1, s3877; NOPRT-NEXT: s_mov_b32 s2, s4878; NOPRT-NEXT: s_mov_b32 s3, s5879; NOPRT-NEXT: s_mov_b32 s4, s6880; NOPRT-NEXT: s_mov_b32 s5, s7881; NOPRT-NEXT: s_mov_b32 s6, s8882; NOPRT-NEXT: s_mov_b32 s7, s9883; NOPRT-NEXT: v_mov_b32_e32 v1, 0884; NOPRT-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x10 dim:SQ_RSRC_IMG_1D unorm tfe885; NOPRT-NEXT: s_waitcnt vmcnt(0)886; NOPRT-NEXT: v_mov_b32_e32 v0, v1887; NOPRT-NEXT: ; return to shader part epilog888;889; GFX12-LABEL: load_1d_v4f32_tfe_dmask_xyzw:890; GFX12: ; %bb.0:891; GFX12-NEXT: v_mov_b32_e32 v1, 0892; GFX12-NEXT: s_mov_b32 s0, s2893; GFX12-NEXT: s_mov_b32 s1, s3894; GFX12-NEXT: s_mov_b32 s2, s4895; GFX12-NEXT: s_mov_b32 s3, s5896; GFX12-NEXT: s_mov_b32 s4, s6897; GFX12-NEXT: s_mov_b32 s5, s7898; GFX12-NEXT: s_mov_b32 s6, s8899; GFX12-NEXT: s_mov_b32 s7, s9900; GFX12-NEXT: v_mov_b32_e32 v2, v1901; GFX12-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x10 dim:SQ_RSRC_IMG_1D tfe902; GFX12-NEXT: s_wait_loadcnt 0x0903; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)904; GFX12-NEXT: v_mov_b32_e32 v0, v2905; GFX12-NEXT: ; return to shader part epilog906 %v = call { <4 x float>, i32 } @llvm.amdgcn.image.load.1d.sl_v4f32i32s.i32(i32 16, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)907 %v.err = extractvalue { <4 x float>, i32 } %v, 1908 %vv = bitcast i32 %v.err to float909 ret float %vv910}911 912define amdgpu_ps float @load_1d_f32_tfe_dmask_0(<8 x i32> inreg %rsrc, i32 %s) {913; GFX68-LABEL: load_1d_f32_tfe_dmask_0:914; GFX68: ; %bb.0:915; GFX68-NEXT: v_mov_b32_e32 v1, 0916; GFX68-NEXT: s_mov_b32 s0, s2917; GFX68-NEXT: s_mov_b32 s1, s3918; GFX68-NEXT: s_mov_b32 s2, s4919; GFX68-NEXT: s_mov_b32 s3, s5920; GFX68-NEXT: s_mov_b32 s4, s6921; GFX68-NEXT: s_mov_b32 s5, s7922; GFX68-NEXT: s_mov_b32 s6, s8923; GFX68-NEXT: s_mov_b32 s7, s9924; GFX68-NEXT: v_mov_b32_e32 v2, v1925; GFX68-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe926; GFX68-NEXT: s_waitcnt vmcnt(0)927; GFX68-NEXT: v_mov_b32_e32 v0, v2928; GFX68-NEXT: ; return to shader part epilog929;930; GFX10-LABEL: load_1d_f32_tfe_dmask_0:931; GFX10: ; %bb.0:932; GFX10-NEXT: v_mov_b32_e32 v1, 0933; GFX10-NEXT: s_mov_b32 s0, s2934; GFX10-NEXT: s_mov_b32 s1, s3935; GFX10-NEXT: s_mov_b32 s2, s4936; GFX10-NEXT: s_mov_b32 s3, s5937; GFX10-NEXT: s_mov_b32 s4, s6938; GFX10-NEXT: s_mov_b32 s5, s7939; GFX10-NEXT: s_mov_b32 s6, s8940; GFX10-NEXT: s_mov_b32 s7, s9941; GFX10-NEXT: v_mov_b32_e32 v2, v1942; GFX10-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe943; GFX10-NEXT: s_waitcnt vmcnt(0)944; GFX10-NEXT: v_mov_b32_e32 v0, v2945; GFX10-NEXT: ; return to shader part epilog946;947; NOPRT-LABEL: load_1d_f32_tfe_dmask_0:948; NOPRT: ; %bb.0:949; NOPRT-NEXT: s_mov_b32 s0, s2950; NOPRT-NEXT: s_mov_b32 s1, s3951; NOPRT-NEXT: s_mov_b32 s2, s4952; NOPRT-NEXT: s_mov_b32 s3, s5953; NOPRT-NEXT: s_mov_b32 s4, s6954; NOPRT-NEXT: s_mov_b32 s5, s7955; NOPRT-NEXT: s_mov_b32 s6, s8956; NOPRT-NEXT: s_mov_b32 s7, s9957; NOPRT-NEXT: v_mov_b32_e32 v1, 0958; NOPRT-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe959; NOPRT-NEXT: s_waitcnt vmcnt(0)960; NOPRT-NEXT: v_mov_b32_e32 v0, v1961; NOPRT-NEXT: ; return to shader part epilog962;963; GFX12-LABEL: load_1d_f32_tfe_dmask_0:964; GFX12: ; %bb.0:965; GFX12-NEXT: v_mov_b32_e32 v1, 0966; GFX12-NEXT: s_mov_b32 s0, s2967; GFX12-NEXT: s_mov_b32 s1, s3968; GFX12-NEXT: s_mov_b32 s2, s4969; GFX12-NEXT: s_mov_b32 s3, s5970; GFX12-NEXT: s_mov_b32 s4, s6971; GFX12-NEXT: s_mov_b32 s5, s7972; GFX12-NEXT: s_mov_b32 s6, s8973; GFX12-NEXT: s_mov_b32 s7, s9974; GFX12-NEXT: v_mov_b32_e32 v2, v1975; GFX12-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D tfe976; GFX12-NEXT: s_wait_loadcnt 0x0977; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)978; GFX12-NEXT: v_mov_b32_e32 v0, v2979; GFX12-NEXT: ; return to shader part epilog980 %v = call { float, i32 } @llvm.amdgcn.image.load.1d.sl_f32i32s.i32(i32 0, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)981 %v.err = extractvalue { float, i32 } %v, 1982 %vv = bitcast i32 %v.err to float983 ret float %vv984}985 986declare float @llvm.amdgcn.image.load.1d.f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0987declare <2 x float> @llvm.amdgcn.image.load.1d.v2f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0988declare <3 x float> @llvm.amdgcn.image.load.1d.v3f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0989declare <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0990 991declare { float, i32 } @llvm.amdgcn.image.load.1d.sl_f32i32s.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0992declare { <2 x float>, i32 } @llvm.amdgcn.image.load.1d.sl_v2f32i32s.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0993declare { <3 x float>, i32 } @llvm.amdgcn.image.load.1d.sl_v3f32i32s.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0994declare { <4 x float>, i32 } @llvm.amdgcn.image.load.1d.sl_v4f32i32s.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0995 996attributes #0 = { nounwind readonly }997