[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / srem.ll
blob13608eaff4c389e9ca3920e087c0280a49fb4a5d
1 ; RUN: llc -amdgpu-scalarize-global-loads=false -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=SI,GFX9 -check-prefix=FUNC %s
2 ; RUN: llc -amdgpu-scalarize-global-loads=false -march=amdgcn -mcpu=tahiti -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
3 ; RUN: llc -amdgpu-scalarize-global-loads=false -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
4 ; RUN: llc -amdgpu-scalarize-global-loads=false -march=r600 -mcpu=redwood -verify-machineinstrs < %s
6 ; FUNC-LABEL: {{^}}srem_i16_7:
7 ; GFX9: s_movk_i32 {{s[0-9]+}}, 0x4925
8 ; GFX9: v_mul_lo_u32
9 define amdgpu_kernel void @srem_i16_7(ptr addrspace(1) %out, ptr addrspace(1) %in) {
10   %num = load i16, ptr addrspace(1) %in
11   %result = srem i16 %num, 7
12   store i16 %result, ptr addrspace(1) %out
13   ret void
16 define amdgpu_kernel void @srem_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) {
17   %den_ptr = getelementptr i32, ptr addrspace(1) %in, i32 1
18   %num = load i32, ptr addrspace(1) %in
19   %den = load i32, ptr addrspace(1) %den_ptr
20   %result = srem i32 %num, %den
21   store i32 %result, ptr addrspace(1) %out
22   ret void
25 define amdgpu_kernel void @srem_i32_4(ptr addrspace(1) %out, ptr addrspace(1) %in) {
26   %num = load i32, ptr addrspace(1) %in
27   %result = srem i32 %num, 4
28   store i32 %result, ptr addrspace(1) %out
29   ret void
32 ; FIXME: uniform i16 srem should not use VALU instructions
33 ; FUNC-LABEL: {{^}}srem_i32_7:
34 ; SI: s_mov_b32 [[MAGIC:s[0-9]+]], 0x92492493
35 ; SI: v_mul_hi_i32 {{v[0-9]+}}, {{v[0-9]+}}, [[MAGIC]]
36 ; SI: v_mul_lo_u32
37 ; SI: v_sub_{{[iu]}}32
38 ; SI: s_endpgm
39 define amdgpu_kernel void @srem_i32_7(ptr addrspace(1) %out, ptr addrspace(1) %in) {
40   %num = load i32, ptr addrspace(1) %in
41   %result = srem i32 %num, 7
42   store i32 %result, ptr addrspace(1) %out
43   ret void
46 define amdgpu_kernel void @srem_v2i32(ptr addrspace(1) %out, ptr addrspace(1) %in) {
47   %den_ptr = getelementptr <2 x i32>, ptr addrspace(1) %in, i32 1
48   %num = load <2 x i32>, ptr addrspace(1) %in
49   %den = load <2 x i32>, ptr addrspace(1) %den_ptr
50   %result = srem <2 x i32> %num, %den
51   store <2 x i32> %result, ptr addrspace(1) %out
52   ret void
55 define amdgpu_kernel void @srem_v2i32_4(ptr addrspace(1) %out, ptr addrspace(1) %in) {
56   %num = load <2 x i32>, ptr addrspace(1) %in
57   %result = srem <2 x i32> %num, <i32 4, i32 4>
58   store <2 x i32> %result, ptr addrspace(1) %out
59   ret void
62 define amdgpu_kernel void @srem_v4i32(ptr addrspace(1) %out, ptr addrspace(1) %in) {
63   %den_ptr = getelementptr <4 x i32>, ptr addrspace(1) %in, i32 1
64   %num = load <4 x i32>, ptr addrspace(1) %in
65   %den = load <4 x i32>, ptr addrspace(1) %den_ptr
66   %result = srem <4 x i32> %num, %den
67   store <4 x i32> %result, ptr addrspace(1) %out
68   ret void
71 define amdgpu_kernel void @srem_v4i32_4(ptr addrspace(1) %out, ptr addrspace(1) %in) {
72   %num = load <4 x i32>, ptr addrspace(1) %in
73   %result = srem <4 x i32> %num, <i32 4, i32 4, i32 4, i32 4>
74   store <4 x i32> %result, ptr addrspace(1) %out
75   ret void
78 define amdgpu_kernel void @srem_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) {
79   %den_ptr = getelementptr i64, ptr addrspace(1) %in, i64 1
80   %num = load i64, ptr addrspace(1) %in
81   %den = load i64, ptr addrspace(1) %den_ptr
82   %result = srem i64 %num, %den
83   store i64 %result, ptr addrspace(1) %out
84   ret void
87 define amdgpu_kernel void @srem_i64_4(ptr addrspace(1) %out, ptr addrspace(1) %in) {
88   %num = load i64, ptr addrspace(1) %in
89   %result = srem i64 %num, 4
90   store i64 %result, ptr addrspace(1) %out
91   ret void
94 define amdgpu_kernel void @srem_v2i64(ptr addrspace(1) %out, ptr addrspace(1) %in) {
95   %den_ptr = getelementptr <2 x i64>, ptr addrspace(1) %in, i64 1
96   %num = load <2 x i64>, ptr addrspace(1) %in
97   %den = load <2 x i64>, ptr addrspace(1) %den_ptr
98   %result = srem <2 x i64> %num, %den
99   store <2 x i64> %result, ptr addrspace(1) %out
100   ret void
103 define amdgpu_kernel void @srem_v2i64_4(ptr addrspace(1) %out, ptr addrspace(1) %in) {
104   %num = load <2 x i64>, ptr addrspace(1) %in
105   %result = srem <2 x i64> %num, <i64 4, i64 4>
106   store <2 x i64> %result, ptr addrspace(1) %out
107   ret void
110 define amdgpu_kernel void @srem_v4i64(ptr addrspace(1) %out, ptr addrspace(1) %in) {
111   %den_ptr = getelementptr <4 x i64>, ptr addrspace(1) %in, i64 1
112   %num = load <4 x i64>, ptr addrspace(1) %in
113   %den = load <4 x i64>, ptr addrspace(1) %den_ptr
114   %result = srem <4 x i64> %num, %den
115   store <4 x i64> %result, ptr addrspace(1) %out
116   ret void
119 define amdgpu_kernel void @srem_v4i64_4(ptr addrspace(1) %out, ptr addrspace(1) %in) {
120   %num = load <4 x i64>, ptr addrspace(1) %in
121   %result = srem <4 x i64> %num, <i64 4, i64 4, i64 4, i64 4>
122   store <4 x i64> %result, ptr addrspace(1) %out
123   ret void