95 lines · plain
1; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=verde < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s2; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=tonga -mattr=-flat-for-global < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s3; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s4 5; The code generated by urem is long and complex and may frequently6; change. The goal of this test is to make sure the ISel doesn't fail7; when it gets a v2i32/v4i32 urem8 9; FUNC-LABEL: {{^}}test_urem_i32:10; SI: s_endpgm11; EG: CF_END12define amdgpu_kernel void @test_urem_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) {13 %b_ptr = getelementptr i32, ptr addrspace(1) %in, i32 114 %a = load i32, ptr addrspace(1) %in15 %b = load i32, ptr addrspace(1) %b_ptr16 %result = urem i32 %a, %b17 store i32 %result, ptr addrspace(1) %out18 ret void19}20 21; FUNC-LABEL: {{^}}test_urem_i32_7:22; SI: s_mov_b32 [[MAGIC:s[0-9]+]], 0x2492492523; SI: v_mul_hi_u32 {{v[0-9]+}}, {{v[0-9]+}}, [[MAGIC]]24; SI: v_sub_{{[iu]}}3225; SI: v_mul_lo_u3226; SI: v_subrev_{{[iu]}}3227; SI: buffer_store_dword28; SI: s_endpgm29define amdgpu_kernel void @test_urem_i32_7(ptr addrspace(1) %out, ptr addrspace(1) %in) {30 %num = load i32, ptr addrspace(1) %in31 %result = urem i32 %num, 732 store i32 %result, ptr addrspace(1) %out33 ret void34}35 36; FUNC-LABEL: {{^}}test_urem_v2i32:37; SI: s_endpgm38; EG: CF_END39define amdgpu_kernel void @test_urem_v2i32(ptr addrspace(1) %out, ptr addrspace(1) %in) {40 %b_ptr = getelementptr <2 x i32>, ptr addrspace(1) %in, i32 141 %a = load <2 x i32>, ptr addrspace(1) %in42 %b = load <2 x i32>, ptr addrspace(1) %b_ptr43 %result = urem <2 x i32> %a, %b44 store <2 x i32> %result, ptr addrspace(1) %out45 ret void46}47 48; FUNC-LABEL: {{^}}test_urem_v4i32:49; SI: s_endpgm50; EG: CF_END51define amdgpu_kernel void @test_urem_v4i32(ptr addrspace(1) %out, ptr addrspace(1) %in) {52 %b_ptr = getelementptr <4 x i32>, ptr addrspace(1) %in, i32 153 %a = load <4 x i32>, ptr addrspace(1) %in54 %b = load <4 x i32>, ptr addrspace(1) %b_ptr55 %result = urem <4 x i32> %a, %b56 store <4 x i32> %result, ptr addrspace(1) %out57 ret void58}59 60; FUNC-LABEL: {{^}}test_urem_i64:61; SI: s_endpgm62; EG: CF_END63define amdgpu_kernel void @test_urem_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) {64 %b_ptr = getelementptr i64, ptr addrspace(1) %in, i64 165 %a = load i64, ptr addrspace(1) %in66 %b = load i64, ptr addrspace(1) %b_ptr67 %result = urem i64 %a, %b68 store i64 %result, ptr addrspace(1) %out69 ret void70}71 72; FUNC-LABEL: {{^}}test_urem_v2i64:73; SI: s_endpgm74; EG: CF_END75define amdgpu_kernel void @test_urem_v2i64(ptr addrspace(1) %out, ptr addrspace(1) %in) {76 %b_ptr = getelementptr <2 x i64>, ptr addrspace(1) %in, i64 177 %a = load <2 x i64>, ptr addrspace(1) %in78 %b = load <2 x i64>, ptr addrspace(1) %b_ptr79 %result = urem <2 x i64> %a, %b80 store <2 x i64> %result, ptr addrspace(1) %out81 ret void82}83 84; FUNC-LABEL: {{^}}test_urem_v4i64:85; SI: s_endpgm86; EG: CF_END87define amdgpu_kernel void @test_urem_v4i64(ptr addrspace(1) %out, ptr addrspace(1) %in) {88 %b_ptr = getelementptr <4 x i64>, ptr addrspace(1) %in, i64 189 %a = load <4 x i64>, ptr addrspace(1) %in90 %b = load <4 x i64>, ptr addrspace(1) %b_ptr91 %result = urem <4 x i64> %a, %b92 store <4 x i64> %result, ptr addrspace(1) %out93 ret void94}95