Matt Arsenault | 8a4078c | 2016-01-22 21:30:53 +0000 | [diff] [blame] | 1 | // REQUIRES: amdgpu-registered-target |
Matt Arsenault | 250024f | 2016-06-08 01:56:42 +0000 | [diff] [blame] | 2 | // RUN: %clang_cc1 -triple r600-unknown-unknown -target-cpu cypress -S -emit-llvm -o - %s | FileCheck %s |
Matt Arsenault | 56f008d | 2014-06-24 20:45:01 +0000 | [diff] [blame] | 3 | |
Matt Arsenault | c86671d | 2016-07-15 21:33:02 +0000 | [diff] [blame] | 4 | // CHECK-LABEL: @test_recipsqrt_ieee_f32 |
| 5 | // CHECK: call float @llvm.r600.recipsqrt.ieee.f32 |
| 6 | void test_recipsqrt_ieee_f32(global float* out, float a) |
Matt Arsenault | 8587711 | 2014-07-15 17:23:46 +0000 | [diff] [blame] | 7 | { |
Matt Arsenault | c86671d | 2016-07-15 21:33:02 +0000 | [diff] [blame] | 8 | *out = __builtin_r600_recipsqrt_ieeef(a); |
Matt Arsenault | 8587711 | 2014-07-15 17:23:46 +0000 | [diff] [blame] | 9 | } |
| 10 | |
Matt Arsenault | 250024f | 2016-06-08 01:56:42 +0000 | [diff] [blame] | 11 | #if cl_khr_fp64 |
Matt Arsenault | c86671d | 2016-07-15 21:33:02 +0000 | [diff] [blame] | 12 | // XCHECK-LABEL: @test_recipsqrt_ieee_f64 |
| 13 | // XCHECK: call double @llvm.r600.recipsqrt.ieee.f64 |
| 14 | void test_recipsqrt_ieee_f64(global double* out, double a) |
Matt Arsenault | 8587711 | 2014-07-15 17:23:46 +0000 | [diff] [blame] | 15 | { |
Matt Arsenault | c86671d | 2016-07-15 21:33:02 +0000 | [diff] [blame] | 16 | *out = __builtin_r600_recipsqrt_ieee(a); |
Matt Arsenault | 8587711 | 2014-07-15 17:23:46 +0000 | [diff] [blame] | 17 | } |
Matt Arsenault | 250024f | 2016-06-08 01:56:42 +0000 | [diff] [blame] | 18 | #endif |
Matt Arsenault | 8587711 | 2014-07-15 17:23:46 +0000 | [diff] [blame] | 19 | |
Jan Vesely | d7e03a5 | 2016-07-10 22:38:04 +0000 | [diff] [blame] | 20 | // CHECK-LABEL: @test_implicitarg_ptr |
| 21 | // CHECK: call i8 addrspace(7)* @llvm.r600.implicitarg.ptr() |
| 22 | void test_implicitarg_ptr(__attribute__((address_space(7))) unsigned char ** out) |
| 23 | { |
| 24 | *out = __builtin_r600_implicitarg_ptr(); |
| 25 | } |
| 26 | |
| 27 | // CHECK-LABEL: @test_get_group_id( |
| 28 | // CHECK: tail call i32 @llvm.r600.read.tgid.x() |
| 29 | // CHECK: tail call i32 @llvm.r600.read.tgid.y() |
| 30 | // CHECK: tail call i32 @llvm.r600.read.tgid.z() |
| 31 | void test_get_group_id(int d, global int *out) |
| 32 | { |
| 33 | switch (d) { |
| 34 | case 0: *out = __builtin_r600_read_tgid_x(); break; |
| 35 | case 1: *out = __builtin_r600_read_tgid_y(); break; |
| 36 | case 2: *out = __builtin_r600_read_tgid_z(); break; |
| 37 | default: *out = 0; |
| 38 | } |
| 39 | } |
| 40 | |
| 41 | // CHECK-LABEL: @test_get_local_id( |
| 42 | // CHECK: tail call i32 @llvm.r600.read.tidig.x(), !range [[WI_RANGE:![0-9]*]] |
| 43 | // CHECK: tail call i32 @llvm.r600.read.tidig.y(), !range [[WI_RANGE]] |
| 44 | // CHECK: tail call i32 @llvm.r600.read.tidig.z(), !range [[WI_RANGE]] |
| 45 | void test_get_local_id(int d, global int *out) |
| 46 | { |
| 47 | switch (d) { |
| 48 | case 0: *out = __builtin_r600_read_tidig_x(); break; |
| 49 | case 1: *out = __builtin_r600_read_tidig_y(); break; |
| 50 | case 2: *out = __builtin_r600_read_tidig_z(); break; |
| 51 | default: *out = 0; |
| 52 | } |
| 53 | } |
| 54 | |
| 55 | // CHECK-DAG: [[WI_RANGE]] = !{i32 0, i32 1024} |