brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.7 KiB · 4355495 Raw
215 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx900 | FileCheck %s --check-prefixes=SDAG3; RUN: llc < %s -global-isel -mtriple=amdgcn -mcpu=gfx900 | FileCheck %s --check-prefixes=GISEL4 5define amdgpu_kernel void @buffers_dont_alias(ptr addrspace(8) noalias %a, ptr addrspace(8) noalias %b) {6; SDAG-LABEL: buffers_dont_alias:7; SDAG:       ; %bb.0:8; SDAG-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x249; SDAG-NEXT:    s_waitcnt lgkmcnt(0)10; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[8:11], 011; SDAG-NEXT:    s_waitcnt vmcnt(0)12; SDAG-NEXT:    v_mul_f32_e32 v0, v0, v013; SDAG-NEXT:    v_mul_f32_e32 v1, v1, v114; SDAG-NEXT:    v_mul_f32_e32 v2, v2, v215; SDAG-NEXT:    v_mul_f32_e32 v3, v3, v316; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[12:15], 017; SDAG-NEXT:    s_endpgm18;19; GISEL-LABEL: buffers_dont_alias:20; GISEL:       ; %bb.0:21; GISEL-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x2422; GISEL-NEXT:    s_waitcnt lgkmcnt(0)23; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[8:11], 024; GISEL-NEXT:    s_waitcnt vmcnt(0)25; GISEL-NEXT:    v_mul_f32_e32 v0, v0, v026; GISEL-NEXT:    v_mul_f32_e32 v1, v1, v127; GISEL-NEXT:    v_mul_f32_e32 v2, v2, v228; GISEL-NEXT:    v_mul_f32_e32 v3, v3, v329; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[12:15], 030; GISEL-NEXT:    s_endpgm31  %l0 = call float @llvm.amdgcn.raw.ptr.buffer.load.f32(ptr addrspace(8) %a, i32 0, i32 0, i32 0)32  %s0 = fmul float %l0, %l033  call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %s0, ptr addrspace(8) %b, i32 0, i32 0, i32 0)34 35  %l1 = call float @llvm.amdgcn.raw.ptr.buffer.load.f32(ptr addrspace(8) %a, i32 4, i32 0, i32 0)36  %s1 = fmul float %l1, %l137  call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %s1, ptr addrspace(8) %b, i32 4, i32 0, i32 0)38 39  %l2 = call float @llvm.amdgcn.raw.ptr.buffer.load.f32(ptr addrspace(8) %a, i32 8, i32 0, i32 0)40  %s2 = fmul float %l2, %l241  call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %s2, ptr addrspace(8) %b, i32 8, i32 0, i32 0)42 43  %l3 = call float @llvm.amdgcn.raw.ptr.buffer.load.f32(ptr addrspace(8) %a, i32 12, i32 0, i32 0)44  %s3 = fmul float %l3, %l345  call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %s3, ptr addrspace(8) %b, i32 12, i32 0, i32 0)46 47  ret void48}49 50define amdgpu_kernel void @buffers_from_flat_dont_alias(ptr noalias %a.flat, ptr noalias %b.flat) {51; SDAG-LABEL: buffers_from_flat_dont_alias:52; SDAG:       ; %bb.0:53; SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2454; SDAG-NEXT:    s_mov_b32 s7, 055; SDAG-NEXT:    s_mov_b32 s6, 1656; SDAG-NEXT:    s_waitcnt lgkmcnt(0)57; SDAG-NEXT:    s_and_b32 s5, s1, 0xffff58; SDAG-NEXT:    s_mov_b32 s4, s059; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[4:7], 060; SDAG-NEXT:    s_and_b32 s5, s3, 0xffff61; SDAG-NEXT:    s_mov_b32 s4, s262; SDAG-NEXT:    s_waitcnt vmcnt(0)63; SDAG-NEXT:    v_mul_f32_e32 v0, v0, v064; SDAG-NEXT:    v_mul_f32_e32 v1, v1, v165; SDAG-NEXT:    v_mul_f32_e32 v2, v2, v266; SDAG-NEXT:    v_mul_f32_e32 v3, v3, v367; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[4:7], 068; SDAG-NEXT:    s_endpgm69;70; GISEL-LABEL: buffers_from_flat_dont_alias:71; GISEL:       ; %bb.0:72; GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2473; GISEL-NEXT:    s_mov_b32 s7, 074; GISEL-NEXT:    s_mov_b32 s6, 1675; GISEL-NEXT:    s_waitcnt lgkmcnt(0)76; GISEL-NEXT:    s_and_b32 s5, s1, 0xffff77; GISEL-NEXT:    s_mov_b32 s4, s078; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[4:7], 079; GISEL-NEXT:    s_and_b32 s5, s3, 0xffff80; GISEL-NEXT:    s_mov_b32 s4, s281; GISEL-NEXT:    s_waitcnt vmcnt(0)82; GISEL-NEXT:    v_mul_f32_e32 v0, v0, v083; GISEL-NEXT:    v_mul_f32_e32 v1, v1, v184; GISEL-NEXT:    v_mul_f32_e32 v2, v2, v285; GISEL-NEXT:    v_mul_f32_e32 v3, v3, v386; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[4:7], 087; GISEL-NEXT:    s_endpgm88  %a = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p0(ptr %a.flat, i16 0, i64 16, i32 0)89  %b = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p0(ptr %b.flat, i16 0, i64 16, i32 0)90 91  %l0 = call float @llvm.amdgcn.raw.ptr.buffer.load.f32(ptr addrspace(8) %a, i32 0, i32 0, i32 0)92  %s0 = fmul float %l0, %l093  call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %s0, ptr addrspace(8) %b, i32 0, i32 0, i32 0)94 95  %l1 = call float @llvm.amdgcn.raw.ptr.buffer.load.f32(ptr addrspace(8) %a, i32 4, i32 0, i32 0)96  %s1 = fmul float %l1, %l197  call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %s1, ptr addrspace(8) %b, i32 4, i32 0, i32 0)98 99  %l2 = call float @llvm.amdgcn.raw.ptr.buffer.load.f32(ptr addrspace(8) %a, i32 8, i32 0, i32 0)100  %s2 = fmul float %l2, %l2101  call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %s2, ptr addrspace(8) %b, i32 8, i32 0, i32 0)102 103  %l3 = call float @llvm.amdgcn.raw.ptr.buffer.load.f32(ptr addrspace(8) %a, i32 12, i32 0, i32 0)104  %s3 = fmul float %l3, %l3105  call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %s3, ptr addrspace(8) %b, i32 12, i32 0, i32 0)106 107  ret void108}109 110define amdgpu_kernel void @buffers_might_alias(ptr addrspace(8) %a, ptr addrspace(8) %b) {111; SDAG-LABEL: buffers_might_alias:112; SDAG:       ; %bb.0:113; SDAG-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x24114; SDAG-NEXT:    s_waitcnt lgkmcnt(0)115; SDAG-NEXT:    buffer_load_dword v0, off, s[8:11], 0116; SDAG-NEXT:    s_waitcnt vmcnt(0)117; SDAG-NEXT:    v_mul_f32_e32 v0, v0, v0118; SDAG-NEXT:    buffer_store_dword v0, off, s[12:15], 0119; SDAG-NEXT:    buffer_load_dword v0, off, s[8:11], 0 offset:4120; SDAG-NEXT:    s_waitcnt vmcnt(0)121; SDAG-NEXT:    v_mul_f32_e32 v0, v0, v0122; SDAG-NEXT:    buffer_store_dword v0, off, s[12:15], 0 offset:4123; SDAG-NEXT:    buffer_load_dword v0, off, s[8:11], 0 offset:8124; SDAG-NEXT:    s_waitcnt vmcnt(0)125; SDAG-NEXT:    v_mul_f32_e32 v0, v0, v0126; SDAG-NEXT:    buffer_store_dword v0, off, s[12:15], 0 offset:8127; SDAG-NEXT:    buffer_load_dword v0, off, s[8:11], 0 offset:12128; SDAG-NEXT:    s_waitcnt vmcnt(0)129; SDAG-NEXT:    v_mul_f32_e32 v0, v0, v0130; SDAG-NEXT:    buffer_store_dword v0, off, s[12:15], 0 offset:12131; SDAG-NEXT:    s_endpgm132;133; GISEL-LABEL: buffers_might_alias:134; GISEL:       ; %bb.0:135; GISEL-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x24136; GISEL-NEXT:    s_waitcnt lgkmcnt(0)137; GISEL-NEXT:    buffer_load_dword v0, off, s[8:11], 0138; GISEL-NEXT:    s_waitcnt vmcnt(0)139; GISEL-NEXT:    v_mul_f32_e32 v0, v0, v0140; GISEL-NEXT:    buffer_store_dword v0, off, s[12:15], 0141; GISEL-NEXT:    buffer_load_dword v0, off, s[8:11], 0 offset:4142; GISEL-NEXT:    s_waitcnt vmcnt(0)143; GISEL-NEXT:    v_mul_f32_e32 v0, v0, v0144; GISEL-NEXT:    buffer_store_dword v0, off, s[12:15], 0 offset:4145; GISEL-NEXT:    buffer_load_dword v0, off, s[8:11], 0 offset:8146; GISEL-NEXT:    s_waitcnt vmcnt(0)147; GISEL-NEXT:    v_mul_f32_e32 v0, v0, v0148; GISEL-NEXT:    buffer_store_dword v0, off, s[12:15], 0 offset:8149; GISEL-NEXT:    buffer_load_dword v0, off, s[8:11], 0 offset:12150; GISEL-NEXT:    s_waitcnt vmcnt(0)151; GISEL-NEXT:    v_mul_f32_e32 v0, v0, v0152; GISEL-NEXT:    buffer_store_dword v0, off, s[12:15], 0 offset:12153; GISEL-NEXT:    s_endpgm154  %l0 = call float @llvm.amdgcn.raw.ptr.buffer.load.f32(ptr addrspace(8) %a, i32 0, i32 0, i32 0)155  %s0 = fmul float %l0, %l0156  call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %s0, ptr addrspace(8) %b, i32 0, i32 0, i32 0)157 158  %l1 = call float @llvm.amdgcn.raw.ptr.buffer.load.f32(ptr addrspace(8) %a, i32 4, i32 0, i32 0)159  %s1 = fmul float %l1, %l1160  call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %s1, ptr addrspace(8) %b, i32 4, i32 0, i32 0)161 162  %l2 = call float @llvm.amdgcn.raw.ptr.buffer.load.f32(ptr addrspace(8) %a, i32 8, i32 0, i32 0)163  %s2 = fmul float %l2, %l2164  call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %s2, ptr addrspace(8) %b, i32 8, i32 0, i32 0)165 166  %l3 = call float @llvm.amdgcn.raw.ptr.buffer.load.f32(ptr addrspace(8) %a, i32 12, i32 0, i32 0)167  %s3 = fmul float %l3, %l3168  call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %s3, ptr addrspace(8) %b, i32 12, i32 0, i32 0)169 170  ret void171}172 173define amdgpu_kernel void @independent_offsets(ptr addrspace(8) %a) {174; SDAG-LABEL: independent_offsets:175; SDAG:       ; %bb.0:176; SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24177; SDAG-NEXT:    v_lshlrev_b32_e32 v0, 2, v0178; SDAG-NEXT:    v_mov_b32_e32 v2, 1.0179; SDAG-NEXT:    s_waitcnt lgkmcnt(0)180; SDAG-NEXT:    buffer_load_dword v1, v0, s[0:3], 0 offen offset:4181; SDAG-NEXT:    s_nop 0182; SDAG-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen183; SDAG-NEXT:    s_waitcnt vmcnt(1)184; SDAG-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen offset:8185; SDAG-NEXT:    s_endpgm186;187; GISEL-LABEL: independent_offsets:188; GISEL:       ; %bb.0:189; GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24190; GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0191; GISEL-NEXT:    v_mov_b32_e32 v2, 1.0192; GISEL-NEXT:    s_waitcnt lgkmcnt(0)193; GISEL-NEXT:    buffer_load_dword v1, v0, s[0:3], 0 offen offset:4194; GISEL-NEXT:    s_nop 0195; GISEL-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen196; GISEL-NEXT:    s_waitcnt vmcnt(1)197; GISEL-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen offset:8198; GISEL-NEXT:    s_endpgm199  %lane = call i32 @llvm.amdgcn.workitem.id.x()200  %idx = shl i32 %lane, 2201  call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float 1.0, ptr addrspace(8) %a, i32 %idx, i32 0, i32 0)202  %idx.1 = add i32 %idx, 4203  %idx.2 = add i32 %idx, 8204  %val = call float @llvm.amdgcn.raw.ptr.buffer.load.f32(ptr addrspace(8) %a, i32 %idx.1, i32 0, i32 0)205  call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %val, ptr addrspace(8) %a, i32 %idx.2, i32 0, i32 0)206 207  ret void208}209 210declare i32 @llvm.amdgcn.workitem.id.x()211 212declare float @llvm.amdgcn.raw.ptr.buffer.load.f32(ptr addrspace(8), i32, i32, i32)213declare void @llvm.amdgcn.raw.ptr.buffer.store.f32(float, ptr addrspace(8), i32, i32, i32 immarg)214declare ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p0(ptr readnone nocapture, i16, i64, i32)215