Index: lib/Basic/Targets.cpp =================================================================== --- lib/Basic/Targets.cpp +++ lib/Basic/Targets.cpp @@ -1851,6 +1851,11 @@ clang::AMDGPU::LastTSBuiltin - Builtin::FirstTSBuiltin); } + bool isCLZForZeroUndef() const override { + // It is -1 instead of expected for intrinsic. + return true; + } + void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override { if (getTriple().getArch() == llvm::Triple::amdgcn) Index: test/CodeGenOpenCL/builtins-generic-amdgcn.cl =================================================================== --- /dev/null +++ test/CodeGenOpenCL/builtins-generic-amdgcn.cl @@ -0,0 +1,16 @@ +// REQUIRES: amdgpu-registered-target +// RUN: %clang_cc1 -triple amdgcn-unknown-unknown -S -emit-llvm -o - %s | FileCheck %s + +// CHECK-LABEL: @test_builtin_clz( +// CHECK: tail call i32 @llvm.ctlz.i32(i32 %a, i1 true) +void test_builtin_clz(global int* out, int a) +{ + *out = __builtin_clz(a); +} + +// CHECK-LABEL: @test_builtin_clzl( +// CHECK: tail call i64 @llvm.ctlz.i64(i64 %a, i1 true) +void test_builtin_clzl(global long* out, long a) +{ + *out = __builtin_clzl(a); +}