| // RUN: %clang_cc1 -triple amdgcn-amd-amdhsa -fcuda-is-device -x hip %s \ | 
 | // RUN:   -fgpu-rdc -std=c++11 -emit-llvm -o - -target-cpu gfx906 | FileCheck %s | 
 |  | 
 | // RUN: %clang_cc1 -triple amdgcn-amd-amdhsa -fcuda-is-device -x hip %s \ | 
 | // RUN:   -fgpu-rdc -std=c++11 -emit-llvm -o - -target-cpu gfx906 \ | 
 | // RUN:   | FileCheck -check-prefix=NEG %s | 
 |  | 
 | // RUN: %clang_cc1 -triple amdgcn-amd-amdhsa -fcuda-is-device -x hip %s \ | 
 | // RUN:   -std=c++11 -emit-llvm -o - -target-cpu gfx906 \ | 
 | // RUN:   | FileCheck -check-prefixes=NEG,NORDC %s | 
 |  | 
 | #include "Inputs/cuda.h" | 
 |  | 
 | // CHECK-LABEL: @__clang_gpu_used_external = internal {{.*}}global | 
 | // CHECK-DAG: @_Z7kernel1v | 
 | // CHECK-DAG: @_Z7kernel4v | 
 | // CHECK-DAG: @var1 | 
 | // CHECK-LABEL: @llvm.compiler.used = {{.*}} @__clang_gpu_used_external | 
 |  | 
 | // NEG-NOT: @__clang_gpu_used_external = {{.*}} @_Z7kernel2v | 
 | // NEG-NOT: @__clang_gpu_used_external = {{.*}} @_Z7kernel3v | 
 | // NEG-NOT: @__clang_gpu_used_external = {{.*}} @var2 | 
 | // NEG-NOT: @__clang_gpu_used_external = {{.*}} @var3 | 
 | // NORDC-NOT: @__clang_gpu_used_external = {{.*}} @_Z7kernel1v | 
 | // NORDC-NOT: @__clang_gpu_used_external = {{.*}} @_Z7kernel4v | 
 | // NORDC-NOT: @__clang_gpu_used_external = {{.*}} @var1 | 
 |  | 
 | __global__ void kernel1(); | 
 |  | 
 | // kernel2 is not marked as used since it is a definition. | 
 | __global__ void kernel2() {} | 
 |  | 
 | // kernel3 is not marked as used since it is not called by host function. | 
 | __global__ void kernel3(); | 
 |  | 
 | // kernel4 is marked as used even though it is not called. | 
 | __global__ void kernel4(); | 
 |  | 
 | extern __device__ int var1; | 
 |  | 
 | __device__ int var2; | 
 |  | 
 | extern __device__ int var3; | 
 |  | 
 | void use(int *p); | 
 |  | 
 | void test() { | 
 |   kernel1<<<1, 1>>>(); | 
 |   void *p = (void*)kernel4; | 
 |   use(&var1); | 
 | } |