From 2174a9dc285a2f8d2a2041148ba39034647e42bd Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 21 Oct 2014 22:21:41 +0000 Subject: [PATCH] R600: Update for div_fmas intrinsic change llvm-svn: 220339 --- clang/include/clang/Basic/BuiltinsR600.def | 4 ++-- clang/lib/CodeGen/CGBuiltin.cpp | 13 +++++++++++-- clang/test/CodeGenOpenCL/builtins-r600.cl | 8 ++++---- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/clang/include/clang/Basic/BuiltinsR600.def b/clang/include/clang/Basic/BuiltinsR600.def index 61df903..79a82f7 100644 --- a/clang/include/clang/Basic/BuiltinsR600.def +++ b/clang/include/clang/Basic/BuiltinsR600.def @@ -16,8 +16,8 @@ BUILTIN(__builtin_amdgpu_div_scale, "dddbb*", "n") BUILTIN(__builtin_amdgpu_div_scalef, "fffbb*", "n") -BUILTIN(__builtin_amdgpu_div_fmas, "dddd", "nc") -BUILTIN(__builtin_amdgpu_div_fmasf, "ffff", "nc") +BUILTIN(__builtin_amdgpu_div_fmas, "ddddb", "nc") +BUILTIN(__builtin_amdgpu_div_fmasf, "ffffb", "nc") BUILTIN(__builtin_amdgpu_div_fixup, "dddd", "nc") BUILTIN(__builtin_amdgpu_div_fixupf, "ffff", "nc") BUILTIN(__builtin_amdgpu_trig_preop, "ddi", "nc") diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index f59cbaa..c4f92ed 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -6153,8 +6153,17 @@ Value *CodeGenFunction::EmitR600BuiltinExpr(unsigned BuiltinID, return Result; } case R600::BI__builtin_amdgpu_div_fmas: - case R600::BI__builtin_amdgpu_div_fmasf: - return emitTernaryFPBuiltin(*this, E, Intrinsic::AMDGPU_div_fmas); + case R600::BI__builtin_amdgpu_div_fmasf: { + llvm::Value *Src0 = EmitScalarExpr(E->getArg(0)); + llvm::Value *Src1 = EmitScalarExpr(E->getArg(1)); + llvm::Value *Src2 = EmitScalarExpr(E->getArg(2)); + llvm::Value *Src3 = EmitScalarExpr(E->getArg(3)); + + llvm::Value *F = CGM.getIntrinsic(Intrinsic::AMDGPU_div_fmas, + Src0->getType()); + llvm::Value *Src3ToBool = Builder.CreateIsNotNull(Src3); + return Builder.CreateCall4(F, Src0, Src1, Src2, Src3ToBool); + } case R600::BI__builtin_amdgpu_div_fixup: case R600::BI__builtin_amdgpu_div_fixupf: return emitTernaryFPBuiltin(*this, E, Intrinsic::AMDGPU_div_fixup); diff --git a/clang/test/CodeGenOpenCL/builtins-r600.cl b/clang/test/CodeGenOpenCL/builtins-r600.cl index 7167e64..129531f 100644 --- a/clang/test/CodeGenOpenCL/builtins-r600.cl +++ b/clang/test/CodeGenOpenCL/builtins-r600.cl @@ -31,16 +31,16 @@ void test_div_scale_f32(global float* out, global int* flagout, float a, float b // CHECK-LABEL: @test_div_fmas_f32 // CHECK: call float @llvm.AMDGPU.div.fmas.f32 -void test_div_fmas_f32(global float* out, float a, float b, float c) +void test_div_fmas_f32(global float* out, float a, float b, float c, int d) { - *out = __builtin_amdgpu_div_fmasf(a, b, c); + *out = __builtin_amdgpu_div_fmasf(a, b, c, d); } // CHECK-LABEL: @test_div_fmas_f64 // CHECK: call double @llvm.AMDGPU.div.fmas.f64 -void test_div_fmas_f64(global double* out, double a, double b, double c) +void test_div_fmas_f64(global double* out, double a, double b, double c, int d) { - *out = __builtin_amdgpu_div_fmas(a, b, c); + *out = __builtin_amdgpu_div_fmas(a, b, c, d); } // CHECK-LABEL: @test_div_fixup_f32 -- 2.7.4