brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.3 KiB · 17c4eaa Raw
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