xref: /llvm-project/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.log.ll (revision eccc89b26cc24c917bea0baa72ad5cd2c8d8fa1a)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=fiji < %s | FileCheck -check-prefixes=GCN,SDAG %s
3; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=fiji < %s | FileCheck -check-prefixes=GCN,GISEL %s
4
5define float @v_log_f32(float %src)  {
6; GCN-LABEL: v_log_f32:
7; GCN:       ; %bb.0:
8; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9; GCN-NEXT:    v_log_f32_e32 v0, v0
10; GCN-NEXT:    s_setpc_b64 s[30:31]
11  %log = call float @llvm.amdgcn.log.f32(float %src)
12  ret float %log
13}
14
15define float @v_fabs_log_f32(float %src)  {
16; GCN-LABEL: v_fabs_log_f32:
17; GCN:       ; %bb.0:
18; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19; GCN-NEXT:    v_log_f32_e64 v0, |v0|
20; GCN-NEXT:    s_setpc_b64 s[30:31]
21  %fabs.src = call float @llvm.fabs.f32(float %src)
22  %log = call float @llvm.amdgcn.log.f32(float %fabs.src)
23  ret float %log
24}
25
26define float @v_fneg_fabs_log_f32(float %src)  {
27; GCN-LABEL: v_fneg_fabs_log_f32:
28; GCN:       ; %bb.0:
29; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30; GCN-NEXT:    v_log_f32_e64 v0, -|v0|
31; GCN-NEXT:    s_setpc_b64 s[30:31]
32  %fabs.src = call float @llvm.fabs.f32(float %src)
33  %neg.fabs.src = fneg float %fabs.src
34  %log = call float @llvm.amdgcn.log.f32(float %neg.fabs.src)
35  ret float %log
36}
37
38define half @v_log_f16(half %src)  {
39; GCN-LABEL: v_log_f16:
40; GCN:       ; %bb.0:
41; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
42; GCN-NEXT:    v_log_f16_e32 v0, v0
43; GCN-NEXT:    s_setpc_b64 s[30:31]
44  %log = call half @llvm.amdgcn.log.f16(half %src)
45  ret half %log
46}
47
48define half @v_fabs_log_f16(half %src)  {
49; GCN-LABEL: v_fabs_log_f16:
50; GCN:       ; %bb.0:
51; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
52; GCN-NEXT:    v_log_f16_e64 v0, |v0|
53; GCN-NEXT:    s_setpc_b64 s[30:31]
54  %fabs.src = call half @llvm.fabs.f16(half %src)
55  %log = call half @llvm.amdgcn.log.f16(half %fabs.src)
56  ret half %log
57}
58
59define half @v_fneg_fabs_log_f16(half %src)  {
60; GCN-LABEL: v_fneg_fabs_log_f16:
61; GCN:       ; %bb.0:
62; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
63; GCN-NEXT:    v_log_f16_e64 v0, -|v0|
64; GCN-NEXT:    s_setpc_b64 s[30:31]
65  %fabs.src = call half @llvm.fabs.f16(half %src)
66  %neg.fabs.src = fneg half %fabs.src
67  %log = call half @llvm.amdgcn.log.f16(half %neg.fabs.src)
68  ret half %log
69}
70
71declare half @llvm.amdgcn.log.f16(half) #0
72declare float @llvm.amdgcn.log.f32(float) #0
73declare float @llvm.fabs.f32(float) #0
74declare half @llvm.fabs.f16(half) #0
75
76attributes #0 = { nounwind readnone speculatable willreturn }
77;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
78; GISEL: {{.*}}
79; SDAG: {{.*}}
80