231 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -o - %s | FileCheck -check-prefix=GCN %s3; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -o - %s | FileCheck -check-prefixes=GFX10PLUS,GFX10 %s4; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 -o - %s | FileCheck -check-prefixes=GFX10PLUS,GFX11 %s5 6define ptr addrspace(1) @v_ptrmask_global_variable_i64(ptr addrspace(1) %ptr, i64 %mask) {7; GCN-LABEL: v_ptrmask_global_variable_i64:8; GCN: ; %bb.0:9; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10; GCN-NEXT: v_and_b32_e32 v1, v1, v311; GCN-NEXT: v_and_b32_e32 v0, v0, v212; GCN-NEXT: s_setpc_b64 s[30:31]13;14; GFX10PLUS-LABEL: v_ptrmask_global_variable_i64:15; GFX10PLUS: ; %bb.0:16; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)17; GFX10PLUS-NEXT: v_and_b32_e32 v0, v0, v218; GFX10PLUS-NEXT: v_and_b32_e32 v1, v1, v319; GFX10PLUS-NEXT: s_setpc_b64 s[30:31]20 %masked = call ptr addrspace(1) @llvm.ptrmask.p1.i64(ptr addrspace(1) %ptr, i64 %mask)21 ret ptr addrspace(1) %masked22}23 24define ptr addrspace(3) @v_ptrmask_local_variable_i32(ptr addrspace(3) %ptr, i32 %mask) {25; GCN-LABEL: v_ptrmask_local_variable_i32:26; GCN: ; %bb.0:27; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)28; GCN-NEXT: v_and_b32_e32 v0, v0, v129; GCN-NEXT: s_setpc_b64 s[30:31]30;31; GFX10PLUS-LABEL: v_ptrmask_local_variable_i32:32; GFX10PLUS: ; %bb.0:33; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)34; GFX10PLUS-NEXT: v_and_b32_e32 v0, v0, v135; GFX10PLUS-NEXT: s_setpc_b64 s[30:31]36 %masked = call ptr addrspace(3) @llvm.ptrmask.p3.i32(ptr addrspace(3) %ptr, i32 %mask)37 ret ptr addrspace(3) %masked38}39 40define amdgpu_ps ptr addrspace(1) @s_ptrmask_global_variable_i64(ptr addrspace(1) inreg %ptr, i64 inreg %mask) {41; GCN-LABEL: s_ptrmask_global_variable_i64:42; GCN: ; %bb.0:43; GCN-NEXT: s_and_b64 s[0:1], s[2:3], s[4:5]44; GCN-NEXT: ; return to shader part epilog45;46; GFX10PLUS-LABEL: s_ptrmask_global_variable_i64:47; GFX10PLUS: ; %bb.0:48; GFX10PLUS-NEXT: s_and_b64 s[0:1], s[2:3], s[4:5]49; GFX10PLUS-NEXT: ; return to shader part epilog50 %masked = call ptr addrspace(1) @llvm.ptrmask.p1.i64(ptr addrspace(1) %ptr, i64 %mask)51 ret ptr addrspace(1) %masked52}53 54define amdgpu_ps ptr addrspace(3) @s_ptrmask_local_variable_i32(ptr addrspace(3) inreg %ptr, i32 inreg %mask) {55; GCN-LABEL: s_ptrmask_local_variable_i32:56; GCN: ; %bb.0:57; GCN-NEXT: s_and_b32 s0, s2, s358; GCN-NEXT: ; return to shader part epilog59;60; GFX10PLUS-LABEL: s_ptrmask_local_variable_i32:61; GFX10PLUS: ; %bb.0:62; GFX10PLUS-NEXT: s_and_b32 s0, s2, s363; GFX10PLUS-NEXT: ; return to shader part epilog64 %masked = call ptr addrspace(3) @llvm.ptrmask.p3.i32(ptr addrspace(3) %ptr, i32 %mask)65 ret ptr addrspace(3) %masked66}67 68define ptr addrspace(7) @v_ptrmask_buffer_fat_ptr_variable_i32(ptr addrspace(7) %ptr, i32 %mask) {69; GCN-LABEL: v_ptrmask_buffer_fat_ptr_variable_i32:70; GCN: ; %bb.0:71; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)72; GCN-NEXT: v_and_b32_e32 v4, v4, v573; GCN-NEXT: s_setpc_b64 s[30:31]74;75; GFX10PLUS-LABEL: v_ptrmask_buffer_fat_ptr_variable_i32:76; GFX10PLUS: ; %bb.0:77; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)78; GFX10PLUS-NEXT: v_and_b32_e32 v4, v4, v579; GFX10PLUS-NEXT: s_setpc_b64 s[30:31]80 %masked = call ptr addrspace(7) @llvm.ptrmask.p7.i32(ptr addrspace(7) %ptr, i32 %mask)81 ret ptr addrspace(7) %masked82}83 84define ptr addrspace(7) @v_ptrmask_buffer_fat_ptr_i32_neg8(ptr addrspace(7) %ptr) {85; GCN-LABEL: v_ptrmask_buffer_fat_ptr_i32_neg8:86; GCN: ; %bb.0:87; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)88; GCN-NEXT: v_and_b32_e32 v4, -8, v489; GCN-NEXT: s_setpc_b64 s[30:31]90;91; GFX10PLUS-LABEL: v_ptrmask_buffer_fat_ptr_i32_neg8:92; GFX10PLUS: ; %bb.0:93; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)94; GFX10PLUS-NEXT: v_and_b32_e32 v4, -8, v495; GFX10PLUS-NEXT: s_setpc_b64 s[30:31]96 %masked = call ptr addrspace(7) @llvm.ptrmask.p7.i32(ptr addrspace(7) %ptr, i32 -8)97 ret ptr addrspace(7) %masked98}99 100define amdgpu_ps ptr addrspace(7) @s_ptrmask_buffer_fat_ptr_variable_i32(ptr addrspace(7) inreg %ptr, i32 inreg %mask) {101; GCN-LABEL: s_ptrmask_buffer_fat_ptr_variable_i32:102; GCN: ; %bb.0:103; GCN-NEXT: s_mov_b32 s8, s4104; GCN-NEXT: s_mov_b32 s1, s3105; GCN-NEXT: s_mov_b32 s0, s2106; GCN-NEXT: s_and_b32 s4, s6, s7107; GCN-NEXT: s_mov_b32 s2, s8108; GCN-NEXT: s_mov_b32 s3, s5109; GCN-NEXT: ; return to shader part epilog110;111; GFX10PLUS-LABEL: s_ptrmask_buffer_fat_ptr_variable_i32:112; GFX10PLUS: ; %bb.0:113; GFX10PLUS-NEXT: s_mov_b32 s8, s4114; GFX10PLUS-NEXT: s_mov_b32 s1, s3115; GFX10PLUS-NEXT: s_mov_b32 s0, s2116; GFX10PLUS-NEXT: s_and_b32 s4, s6, s7117; GFX10PLUS-NEXT: s_mov_b32 s2, s8118; GFX10PLUS-NEXT: s_mov_b32 s3, s5119; GFX10PLUS-NEXT: ; return to shader part epilog120 %masked = call ptr addrspace(7) @llvm.ptrmask.p7.i32(ptr addrspace(7) %ptr, i32 %mask)121 ret ptr addrspace(7) %masked122}123 124define amdgpu_ps ptr addrspace(7) @s_ptrmask_buffer_fat_ptr_i32_neg8(ptr addrspace(7) inreg %ptr) {125; GCN-LABEL: s_ptrmask_buffer_fat_ptr_i32_neg8:126; GCN: ; %bb.0:127; GCN-NEXT: s_mov_b32 s7, s4128; GCN-NEXT: s_mov_b32 s1, s3129; GCN-NEXT: s_mov_b32 s0, s2130; GCN-NEXT: s_and_b32 s4, s6, -8131; GCN-NEXT: s_mov_b32 s2, s7132; GCN-NEXT: s_mov_b32 s3, s5133; GCN-NEXT: ; return to shader part epilog134;135; GFX10PLUS-LABEL: s_ptrmask_buffer_fat_ptr_i32_neg8:136; GFX10PLUS: ; %bb.0:137; GFX10PLUS-NEXT: s_mov_b32 s7, s4138; GFX10PLUS-NEXT: s_mov_b32 s1, s3139; GFX10PLUS-NEXT: s_mov_b32 s0, s2140; GFX10PLUS-NEXT: s_and_b32 s4, s6, -8141; GFX10PLUS-NEXT: s_mov_b32 s2, s7142; GFX10PLUS-NEXT: s_mov_b32 s3, s5143; GFX10PLUS-NEXT: ; return to shader part epilog144 %masked = call ptr addrspace(7) @llvm.ptrmask.p7.i32(ptr addrspace(7) %ptr, i32 -8)145 ret ptr addrspace(7) %masked146}147 148define ptr addrspace(8) @v_ptrmask_buffer_resource_variable_i48(ptr addrspace(8) %ptr, i48 %mask) {149; GCN-LABEL: v_ptrmask_buffer_resource_variable_i48:150; GCN: ; %bb.0:151; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)152; GCN-NEXT: v_or_b32_e32 v5, 0xffff0000, v5153; GCN-NEXT: v_and_b32_e32 v1, v1, v5154; GCN-NEXT: v_and_b32_e32 v0, v0, v4155; GCN-NEXT: s_setpc_b64 s[30:31]156;157; GFX10PLUS-LABEL: v_ptrmask_buffer_resource_variable_i48:158; GFX10PLUS: ; %bb.0:159; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)160; GFX10PLUS-NEXT: v_or_b32_e32 v5, 0xffff0000, v5161; GFX10PLUS-NEXT: v_and_b32_e32 v0, v0, v4162; GFX10PLUS-NEXT: v_and_b32_e32 v1, v1, v5163; GFX10PLUS-NEXT: s_setpc_b64 s[30:31]164 %masked = call ptr addrspace(8) @llvm.ptrmask.p8.i48(ptr addrspace(8) %ptr, i48 %mask)165 ret ptr addrspace(8) %masked166}167 168define ptr addrspace(8) @v_ptrmask_buffer_resource_variable_i48_neg8(ptr addrspace(8) %ptr) {169; GCN-LABEL: v_ptrmask_buffer_resource_variable_i48_neg8:170; GCN: ; %bb.0:171; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)172; GCN-NEXT: v_and_b32_e32 v0, -8, v0173; GCN-NEXT: s_setpc_b64 s[30:31]174;175; GFX10PLUS-LABEL: v_ptrmask_buffer_resource_variable_i48_neg8:176; GFX10PLUS: ; %bb.0:177; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)178; GFX10PLUS-NEXT: v_and_b32_e32 v0, -8, v0179; GFX10PLUS-NEXT: s_setpc_b64 s[30:31]180 %masked = call ptr addrspace(8) @llvm.ptrmask.p8.i48(ptr addrspace(8) %ptr, i48 -8)181 ret ptr addrspace(8) %masked182}183 184define amdgpu_ps ptr addrspace(8) @s_ptrmask_buffer_resource_variable_i48(ptr addrspace(8) inreg %ptr, i48 inreg %mask) {185; GCN-LABEL: s_ptrmask_buffer_resource_variable_i48:186; GCN: ; %bb.0:187; GCN-NEXT: s_or_b32 s7, s7, 0xffff0000188; GCN-NEXT: s_and_b64 s[0:1], s[2:3], s[6:7]189; GCN-NEXT: s_mov_b32 s2, s4190; GCN-NEXT: s_mov_b32 s3, s5191; GCN-NEXT: ; return to shader part epilog192;193; GFX10PLUS-LABEL: s_ptrmask_buffer_resource_variable_i48:194; GFX10PLUS: ; %bb.0:195; GFX10PLUS-NEXT: s_or_b32 s7, s7, 0xffff0000196; GFX10PLUS-NEXT: s_and_b64 s[0:1], s[2:3], s[6:7]197; GFX10PLUS-NEXT: s_mov_b32 s2, s4198; GFX10PLUS-NEXT: s_mov_b32 s3, s5199; GFX10PLUS-NEXT: ; return to shader part epilog200 %masked = call ptr addrspace(8) @llvm.ptrmask.p8.i48(ptr addrspace(8) %ptr, i48 %mask)201 ret ptr addrspace(8) %masked202}203 204define amdgpu_ps ptr addrspace(8) @s_ptrmask_buffer_resource_variable_i48_neg8(ptr addrspace(8) inreg %ptr) {205; GCN-LABEL: s_ptrmask_buffer_resource_variable_i48_neg8:206; GCN: ; %bb.0:207; GCN-NEXT: s_mov_b32 s1, s3208; GCN-NEXT: s_and_b32 s0, s2, -8209; GCN-NEXT: s_mov_b32 s2, s4210; GCN-NEXT: s_mov_b32 s3, s5211; GCN-NEXT: ; return to shader part epilog212;213; GFX10PLUS-LABEL: s_ptrmask_buffer_resource_variable_i48_neg8:214; GFX10PLUS: ; %bb.0:215; GFX10PLUS-NEXT: s_mov_b32 s1, s3216; GFX10PLUS-NEXT: s_and_b32 s0, s2, -8217; GFX10PLUS-NEXT: s_mov_b32 s2, s4218; GFX10PLUS-NEXT: s_mov_b32 s3, s5219; GFX10PLUS-NEXT: ; return to shader part epilog220 %masked = call ptr addrspace(8) @llvm.ptrmask.p8.i48(ptr addrspace(8) %ptr, i48 -8)221 ret ptr addrspace(8) %masked222}223 224declare ptr addrspace(3) @llvm.ptrmask.p3.i32(ptr addrspace(3), i32) #0225declare ptr addrspace(1) @llvm.ptrmask.p1.i64(ptr addrspace(1), i64) #0226 227attributes #0 = { nounwind readnone speculatable willreturn }228;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:229; GFX10: {{.*}}230; GFX11: {{.*}}231