352 lines · plain
1; RUN: llc -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s2; RUN: llc -mtriple=amdgcn -mcpu=tonga -mattr=-flat-for-global < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s3 4declare void @llvm.memcpy.p3.p3.i32(ptr addrspace(3) nocapture, ptr addrspace(3) nocapture, i32, i1) nounwind5declare void @llvm.memcpy.p1.p1.i64(ptr addrspace(1) nocapture, ptr addrspace(1) nocapture, i64, i1) nounwind6declare void @llvm.memcpy.p1.p2.i64(ptr addrspace(1) nocapture, ptr addrspace(4) nocapture, i64, i1) nounwind7 8 9; FUNC-LABEL: {{^}}test_small_memcpy_i64_lds_to_lds_align1:10; SI-DAG: ds_read_u811; SI-DAG: ds_read_u812; SI-DAG: ds_read_u813; SI-DAG: ds_read_u814; SI-DAG: ds_read_u815; SI-DAG: ds_read_u816; SI-DAG: ds_read_u817; SI-DAG: ds_read_u818 19; SI-DAG: ds_read_u820; SI-DAG: ds_read_u821; SI-DAG: ds_read_u822; SI-DAG: ds_read_u823; SI-DAG: ds_read_u824; SI-DAG: ds_read_u825; SI-DAG: ds_read_u826; SI-DAG: ds_read_u827 28; SI-DAG: ds_read_u829; SI-DAG: ds_read_u830; SI-DAG: ds_read_u831; SI-DAG: ds_read_u832; SI-DAG: ds_read_u833; SI-DAG: ds_read_u834; SI-DAG: ds_read_u835; SI-DAG: ds_read_u836 37; SI-DAG: ds_read_u838; SI-DAG: ds_read_u839; SI-DAG: ds_read_u840; SI-DAG: ds_read_u841; SI-DAG: ds_read_u842; SI-DAG: ds_read_u843; SI-DAG: ds_read_u844; SI-DAG: ds_read_u845 46; SI-DAG: ds_write_b847; SI-DAG: ds_write_b848; SI-DAG: ds_write_b849; SI-DAG: ds_write_b850; SI-DAG: ds_write_b851; SI-DAG: ds_write_b852; SI-DAG: ds_write_b853; SI-DAG: ds_write_b854 55; SI-DAG: ds_write_b856; SI-DAG: ds_write_b857; SI-DAG: ds_write_b858; SI-DAG: ds_write_b859; SI-DAG: ds_write_b860; SI-DAG: ds_write_b861; SI-DAG: ds_write_b862; SI-DAG: ds_write_b863 64; SI-DAG: ds_write_b865; SI-DAG: ds_write_b866; SI-DAG: ds_write_b867; SI-DAG: ds_write_b868; SI-DAG: ds_write_b869; SI-DAG: ds_write_b870; SI-DAG: ds_write_b871; SI-DAG: ds_write_b872 73; SI-DAG: ds_write_b874; SI-DAG: ds_write_b875; SI-DAG: ds_write_b876; SI-DAG: ds_write_b877; SI-DAG: ds_write_b878; SI-DAG: ds_write_b879; SI-DAG: ds_write_b880; SI-DAG: ds_write_b881 82; SI: s_endpgm83define amdgpu_kernel void @test_small_memcpy_i64_lds_to_lds_align1(ptr addrspace(3) noalias %out, ptr addrspace(3) noalias %in) nounwind {84 call void @llvm.memcpy.p3.p3.i32(ptr addrspace(3) %out, ptr addrspace(3) %in, i32 32, i1 false) nounwind85 ret void86}87 88; FUNC-LABEL: {{^}}test_small_memcpy_i64_lds_to_lds_align2:89; SI-DAG: ds_read_u1690; SI-DAG: ds_read_u1691; SI-DAG: ds_read_u1692; SI-DAG: ds_read_u1693; SI-DAG: ds_read_u1694; SI-DAG: ds_read_u1695; SI-DAG: ds_read_u1696; SI-DAG: ds_read_u1697 98; SI-DAG: ds_read_u1699; SI-DAG: ds_read_u16100; SI-DAG: ds_read_u16101; SI-DAG: ds_read_u16102; SI-DAG: ds_read_u16103; SI-DAG: ds_read_u16104; SI-DAG: ds_read_u16105; SI-DAG: ds_read_u16106 107; SI-DAG: ds_write_b16108; SI-DAG: ds_write_b16109; SI-DAG: ds_write_b16110; SI-DAG: ds_write_b16111; SI-DAG: ds_write_b16112; SI-DAG: ds_write_b16113; SI-DAG: ds_write_b16114; SI-DAG: ds_write_b16115 116; SI-DAG: ds_write_b16117; SI-DAG: ds_write_b16118; SI-DAG: ds_write_b16119; SI-DAG: ds_write_b16120; SI-DAG: ds_write_b16121; SI-DAG: ds_write_b16122; SI-DAG: ds_write_b16123; SI-DAG: ds_write_b16124 125; SI: s_endpgm126define amdgpu_kernel void @test_small_memcpy_i64_lds_to_lds_align2(ptr addrspace(3) noalias %out, ptr addrspace(3) noalias %in) nounwind {127 call void @llvm.memcpy.p3.p3.i32(ptr addrspace(3) align 2 %out, ptr addrspace(3) align 2 %in, i32 32, i1 false) nounwind128 ret void129}130 131; FUNC-LABEL: {{^}}test_small_memcpy_i64_lds_to_lds_align4:132; SI: ds_read2_b32133; SI: ds_read2_b32134; SI: ds_read2_b32135; SI: ds_read2_b32136 137; SI: ds_write2_b32138; SI: ds_write2_b32139; SI: ds_write2_b32140; SI: ds_write2_b32141 142; SI: s_endpgm143define amdgpu_kernel void @test_small_memcpy_i64_lds_to_lds_align4(ptr addrspace(3) noalias %out, ptr addrspace(3) noalias %in) nounwind {144 call void @llvm.memcpy.p3.p3.i32(ptr addrspace(3) align 4 %out, ptr addrspace(3) align 4 %in, i32 32, i1 false) nounwind145 ret void146}147 148; FIXME: Use 64-bit ops149; FUNC-LABEL: {{^}}test_small_memcpy_i64_lds_to_lds_align8:150 151; SI: ds_read2_b64152; SI: ds_read2_b64153 154; SI: ds_write2_b64155; SI: ds_write2_b64156 157; SI-DAG: s_endpgm158define amdgpu_kernel void @test_small_memcpy_i64_lds_to_lds_align8(ptr addrspace(3) noalias %out, ptr addrspace(3) noalias %in) nounwind {159 call void @llvm.memcpy.p3.p3.i32(ptr addrspace(3) align 8 %out, ptr addrspace(3) align 8 %in, i32 32, i1 false) nounwind160 ret void161}162 163; FUNC-LABEL: {{^}}test_small_memcpy_i64_global_to_global_align1:164; SI-DAG: buffer_load_ubyte165; SI-DAG: buffer_store_byte166; SI-DAG: buffer_load_ubyte167; SI-DAG: buffer_store_byte168; SI-DAG: buffer_load_ubyte169; SI-DAG: buffer_store_byte170; SI-DAG: buffer_load_ubyte171; SI-DAG: buffer_store_byte172; SI-DAG: buffer_load_ubyte173; SI-DAG: buffer_store_byte174; SI-DAG: buffer_load_ubyte175; SI-DAG: buffer_store_byte176; SI-DAG: buffer_load_ubyte177; SI-DAG: buffer_store_byte178; SI-DAG: buffer_load_ubyte179; SI-DAG: buffer_store_byte180 181; SI-DAG: buffer_load_ubyte182; SI-DAG: buffer_store_byte183; SI-DAG: buffer_load_ubyte184; SI-DAG: buffer_store_byte185; SI-DAG: buffer_load_ubyte186; SI-DAG: buffer_store_byte187; SI-DAG: buffer_load_ubyte188; SI-DAG: buffer_store_byte189; SI-DAG: buffer_load_ubyte190; SI-DAG: buffer_store_byte191; SI-DAG: buffer_load_ubyte192; SI-DAG: buffer_store_byte193; SI-DAG: buffer_load_ubyte194; SI-DAG: buffer_store_byte195; SI-DAG: buffer_load_ubyte196; SI-DAG: buffer_store_byte197 198; SI-DAG: buffer_load_ubyte199; SI-DAG: buffer_store_byte200; SI-DAG: buffer_load_ubyte201; SI-DAG: buffer_store_byte202; SI-DAG: buffer_load_ubyte203; SI-DAG: buffer_store_byte204; SI-DAG: buffer_load_ubyte205; SI-DAG: buffer_store_byte206; SI-DAG: buffer_load_ubyte207; SI-DAG: buffer_store_byte208; SI-DAG: buffer_load_ubyte209; SI-DAG: buffer_store_byte210; SI-DAG: buffer_load_ubyte211; SI-DAG: buffer_store_byte212; SI-DAG: buffer_load_ubyte213; SI-DAG: buffer_store_byte214 215; SI-DAG: buffer_load_ubyte216; SI-DAG: buffer_store_byte217; SI-DAG: buffer_load_ubyte218; SI-DAG: buffer_store_byte219; SI-DAG: buffer_load_ubyte220; SI-DAG: buffer_store_byte221; SI-DAG: buffer_load_ubyte222; SI-DAG: buffer_store_byte223; SI-DAG: buffer_load_ubyte224; SI-DAG: buffer_store_byte225; SI-DAG: buffer_load_ubyte226; SI-DAG: buffer_store_byte227; SI-DAG: buffer_load_ubyte228; SI-DAG: buffer_store_byte229; SI-DAG: buffer_load_ubyte230; SI-DAG: buffer_store_byte231 232; SI: s_endpgm233define amdgpu_kernel void @test_small_memcpy_i64_global_to_global_align1(ptr addrspace(1) noalias %out, ptr addrspace(1) noalias %in) nounwind {234 call void @llvm.memcpy.p1.p1.i64(ptr addrspace(1) %out, ptr addrspace(1) %in, i64 32, i1 false) nounwind235 ret void236}237 238; FUNC-LABEL: {{^}}test_small_memcpy_i64_global_to_global_align2:239; SI-DAG: buffer_load_ushort240; SI-DAG: buffer_load_ushort241; SI-DAG: buffer_load_ushort242; SI-DAG: buffer_load_ushort243; SI-DAG: buffer_load_ushort244; SI-DAG: buffer_load_ushort245; SI-DAG: buffer_load_ushort246; SI-DAG: buffer_load_ushort247; SI-DAG: buffer_load_ushort248; SI-DAG: buffer_load_ushort249; SI-DAG: buffer_load_ushort250; SI-DAG: buffer_load_ushort251; SI-DAG: buffer_load_ushort252; SI-DAG: buffer_load_ushort253; SI-DAG: buffer_load_ushort254; SI-DAG: buffer_load_ushort255 256; SI-DAG: buffer_store_short257; SI-DAG: buffer_store_short258; SI-DAG: buffer_store_short259; SI-DAG: buffer_store_short260; SI-DAG: buffer_store_short261; SI-DAG: buffer_store_short262; SI-DAG: buffer_store_short263; SI-DAG: buffer_store_short264; SI-DAG: buffer_store_short265; SI-DAG: buffer_store_short266; SI-DAG: buffer_store_short267; SI-DAG: buffer_store_short268; SI-DAG: buffer_store_short269; SI-DAG: buffer_store_short270; SI-DAG: buffer_store_short271; SI-DAG: buffer_store_short272 273; SI: s_endpgm274define amdgpu_kernel void @test_small_memcpy_i64_global_to_global_align2(ptr addrspace(1) noalias %out, ptr addrspace(1) noalias %in) nounwind {275 call void @llvm.memcpy.p1.p1.i64(ptr addrspace(1) align 2 %out, ptr addrspace(1) align 2 %in, i64 32, i1 false) nounwind276 ret void277}278 279; FUNC-LABEL: {{^}}test_small_memcpy_i64_global_to_global_align4:280; SI: buffer_load_dwordx4281; SI: buffer_load_dwordx4282; SI: buffer_store_dwordx4283; SI: buffer_store_dwordx4284; SI: s_endpgm285define amdgpu_kernel void @test_small_memcpy_i64_global_to_global_align4(ptr addrspace(1) noalias %out, ptr addrspace(1) noalias %in) nounwind {286 call void @llvm.memcpy.p1.p1.i64(ptr addrspace(1) align 4 %out, ptr addrspace(1) align 4 %in, i64 32, i1 false) nounwind287 ret void288}289 290; FUNC-LABEL: {{^}}test_small_memcpy_i64_global_to_global_align8:291; SI: buffer_load_dwordx4292; SI: buffer_load_dwordx4293; SI: buffer_store_dwordx4294; SI: buffer_store_dwordx4295; SI: s_endpgm296define amdgpu_kernel void @test_small_memcpy_i64_global_to_global_align8(ptr addrspace(1) noalias %out, ptr addrspace(1) noalias %in) nounwind {297 call void @llvm.memcpy.p1.p1.i64(ptr addrspace(1) align 8 %out, ptr addrspace(1) align 8 %in, i64 32, i1 false) nounwind298 ret void299}300 301; FUNC-LABEL: {{^}}test_small_memcpy_i64_global_to_global_align16:302; SI: buffer_load_dwordx4303; SI: buffer_load_dwordx4304; SI: buffer_store_dwordx4305; SI: buffer_store_dwordx4306; SI: s_endpgm307define amdgpu_kernel void @test_small_memcpy_i64_global_to_global_align16(ptr addrspace(1) noalias %out, ptr addrspace(1) noalias %in) nounwind {308 call void @llvm.memcpy.p1.p1.i64(ptr addrspace(1) align 16 %out, ptr addrspace(1) align 16 %in, i64 32, i1 false) nounwind309 ret void310}311 312; Test shouldConvertConstantLoadToIntImm313@hello.align4 = private unnamed_addr addrspace(4) constant [16 x i8] c"constant string\00", align 4314@hello.align1 = private unnamed_addr addrspace(4) constant [16 x i8] c"constant string\00", align 1315 316; FUNC-LABEL: {{^}}test_memcpy_const_string_align4:317; SI: s_getpc_b64318; SI: s_add_u32 s{{[0-9]+}}, s{{[0-9]+}}, .Lhello.align4@rel32@lo+4319; SI: s_addc_u32320; SI-DAG: s_load_dwordx8321; SI-DAG: s_load_dwordx2322; SI-DAG: buffer_store_dwordx4323; SI-DAG: buffer_store_dwordx4324define amdgpu_kernel void @test_memcpy_const_string_align4(ptr addrspace(1) noalias %out) nounwind {325 call void @llvm.memcpy.p1.p2.i64(ptr addrspace(1) align 4 %out, ptr addrspace(4) align 4 @hello.align4, i64 32, i1 false)326 ret void327}328 329; FUNC-LABEL: {{^}}test_memcpy_const_string_align1:330; SI-NOT: buffer_load331; SI: v_mov_b32_e32 v{{[0-9]+}}, 0x332; SI: buffer_store_byte333; SI: buffer_store_byte334; SI: buffer_store_byte335; SI: buffer_store_byte336; SI: buffer_store_byte337; SI: buffer_store_byte338; SI: buffer_store_byte339; SI: buffer_store_byte340; SI: buffer_store_byte341; SI: buffer_store_byte342; SI: buffer_store_byte343; SI: buffer_store_byte344; SI: buffer_store_byte345; SI: buffer_store_byte346; SI: buffer_store_byte347; SI: buffer_store_byte348define amdgpu_kernel void @test_memcpy_const_string_align1(ptr addrspace(1) noalias %out) nounwind {349 call void @llvm.memcpy.p1.p2.i64(ptr addrspace(1) %out, ptr addrspace(4) @hello.align1, i64 32, i1 false)350 ret void351}352