| // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 6 |
| // REQUIRES: amdgpu-registered-target |
| |
| // RUN: %clang --target=%target -mcpu=%cpu %libclc_lib -x cl -cl-std=CL3.0 -O2 -emit-llvm -S -o - %s | FileCheck %s --check-prefix=%check_prefix |
| |
| #pragma OPENCL EXTENSION cl_khr_fp16 : enable |
| |
| // AMDGCN-LABEL: define hidden noundef half @test_half( |
| // AMDGCN-SAME: half noundef [[X:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] { |
| // AMDGCN-NEXT: [[ENTRY:.*:]] |
| // AMDGCN-NEXT: [[TMP0:%.*]] = tail call contract half @llvm.sqrt.f16(half [[X]]), !fpmath [[META13:![0-9]+]] |
| // AMDGCN-NEXT: [[TMP1:%.*]] = fdiv contract half 1.000000e+00, [[TMP0]], !fpmath [[META14:![0-9]+]] |
| // AMDGCN-NEXT: ret half [[TMP1]] |
| // |
| half test_half(half x) { |
| return rsqrt(x); |
| } |
| |
| // AMDGCN-LABEL: define hidden noundef float @test_float( |
| // AMDGCN-SAME: float noundef [[X:%.*]]) local_unnamed_addr #[[ATTR0]] { |
| // AMDGCN-NEXT: [[ENTRY:.*:]] |
| // AMDGCN-NEXT: [[TMP0:%.*]] = tail call contract float @llvm.sqrt.f32(float [[X]]), !fpmath [[META15:![0-9]+]] |
| // AMDGCN-NEXT: [[TMP1:%.*]] = fdiv contract float 1.000000e+00, [[TMP0]], !fpmath [[META16:![0-9]+]] |
| // AMDGCN-NEXT: ret float [[TMP1]] |
| // |
| float test_float(float x) { |
| return rsqrt(x); |
| } |
| |
| // AMDGCN-LABEL: define hidden noundef double @test_double( |
| // AMDGCN-SAME: double noundef [[X:%.*]]) local_unnamed_addr #[[ATTR0]] { |
| // AMDGCN-NEXT: [[ENTRY:.*:]] |
| // AMDGCN-NEXT: [[TMP0:%.*]] = tail call contract double @llvm.sqrt.f64(double [[X]]) |
| // AMDGCN-NEXT: [[TMP1:%.*]] = fdiv contract double 1.000000e+00, [[TMP0]] |
| // AMDGCN-NEXT: ret double [[TMP1]] |
| // |
| double test_double(double x) { |
| return rsqrt(x); |
| } |
| //. |
| // AMDGCN: [[META13]] = !{float 1.500000e+00} |
| // AMDGCN: [[META14]] = !{float 1.000000e+00} |
| // AMDGCN: [[META15]] = !{float 3.000000e+00} |
| // AMDGCN: [[META16]] = !{float 2.500000e+00} |
| //. |