python3kgae created this revision.
python3kgae added reviewers: anakryiko, ast, yonghong-song.
Herald added a subscriber: Anastasia.
Herald added a project: All.
python3kgae requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

A directx specific clang intrinsic is introduced:

  float __builtin_dx_sin_f32(float);

It is for 
https://github.com/Microsoft/DirectXShaderCompiler/blob/master/docs/DXIL.rst#sin.
This change only add clang builtin and test it can make into ast.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D124593

Files:
  clang/include/clang/Basic/BuiltinsDirectX.def
  clang/include/clang/Basic/TargetBuiltins.h
  clang/lib/Basic/Targets/DirectX.cpp
  clang/lib/Basic/Targets/DirectX.h
  clang/test/SemaHLSL/Builtins/sin_f32.hlsl

Index: clang/test/SemaHLSL/Builtins/sin_f32.hlsl
===================================================================
--- /dev/null
+++ clang/test/SemaHLSL/Builtins/sin_f32.hlsl
@@ -0,0 +1,9 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.15-library -x hlsl -ast-dump -o - %s | FileCheck %s
+
+//CHECK: CallExpr 0x{{.+}} <col:10, col:32> 'float'
+//CHECK-NEXT:ImplicitCastExpr 0x{{.+}} <col:10> 'float (*)(float) throw()' <BuiltinFnToFnPtr>
+//CHECK-NEXT`-DeclRefExpr 0x{{.+}} <col:10> '<builtin fn type>' Function 0x26df56e3fc0 '__builtin_dx_sin_f32'
+
+float foo(float a) {
+  return __builtin_dx_sin_f32(a);
+}
Index: clang/lib/Basic/Targets/DirectX.h
===================================================================
--- clang/lib/Basic/Targets/DirectX.h
+++ clang/lib/Basic/Targets/DirectX.h
@@ -44,6 +44,9 @@
 };
 
 class LLVM_LIBRARY_VISIBILITY DirectXTargetInfo : public TargetInfo {
+
+  static const Builtin::Info BuiltinInfo[];
+
 public:
   DirectXTargetInfo(const llvm::Triple &Triple, const TargetOptions &)
       : TargetInfo(Triple) {
@@ -66,7 +69,7 @@
     return Feature == "directx";
   }
 
-  ArrayRef<Builtin::Info> getTargetBuiltins() const override { return None; }
+  ArrayRef<Builtin::Info> getTargetBuiltins() const override;
 
   const char *getClobbers() const override { return ""; }
 
Index: clang/lib/Basic/Targets/DirectX.cpp
===================================================================
--- clang/lib/Basic/Targets/DirectX.cpp
+++ clang/lib/Basic/Targets/DirectX.cpp
@@ -12,6 +12,8 @@
 
 #include "DirectX.h"
 #include "Targets.h"
+#include "clang/Basic/Builtins.h"
+#include "clang/Basic/TargetBuiltins.h"
 
 using namespace clang;
 using namespace clang::targets;
@@ -20,3 +22,16 @@
                                          MacroBuilder &Builder) const {
   DefineStd(Builder, "DIRECTX", Opts);
 }
+
+const Builtin::Info DirectXTargetInfo::BuiltinInfo[] = {
+#define BUILTIN(ID, TYPE, ATTRS)                                               \
+  {#ID, TYPE, ATTRS, nullptr, ALL_LANGUAGES, nullptr},
+#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE)                               \
+  {#ID, TYPE, ATTRS, nullptr, ALL_LANGUAGES, FEATURE},
+#include "clang/Basic/BuiltinsDirectX.def"
+};
+
+ArrayRef<Builtin::Info> DirectXTargetInfo::getTargetBuiltins() const {
+  return llvm::makeArrayRef(BuiltinInfo, clang::DirectX::LastTSBuiltin -
+                                             Builtin::FirstTSBuiltin);
+}
Index: clang/include/clang/Basic/TargetBuiltins.h
===================================================================
--- clang/include/clang/Basic/TargetBuiltins.h
+++ clang/include/clang/Basic/TargetBuiltins.h
@@ -75,6 +75,16 @@
   };
   }
 
+  /// DirectX builtins
+  namespace DirectX {
+  enum {
+    LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
+#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
+#include "clang/Basic/BuiltinsDirectX.def"
+    LastTSBuiltin
+  };
+  } // namespace DirectX
+
   /// PPC builtins
   namespace PPC {
     enum {
Index: clang/include/clang/Basic/BuiltinsDirectX.def
===================================================================
--- /dev/null
+++ clang/include/clang/Basic/BuiltinsDirectX.def
@@ -0,0 +1,27 @@
+//===-- BuiltinsDirectX.def - DirectX Builtin function database -*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the DirectX-specific builtin function database.  Users of
+// this file must define the BUILTIN macro to make use of this information.
+//
+//===----------------------------------------------------------------------===//
+
+// The format of this database matches clang/Basic/Builtins.def.
+
+#if defined(BUILTIN) && !defined(TARGET_BUILTIN)
+#   define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BUILTIN(ID, TYPE, ATTRS)
+#endif
+
+#if defined(BUILTIN) && !defined(TARGET_HEADER_BUILTIN)
+#  define TARGET_HEADER_BUILTIN(ID, TYPE, ATTRS, HEADER, LANG, FEATURE) BUILTIN(ID, TYPE, ATTRS)
+#endif
+
+BUILTIN(__builtin_dx_sin_f32, "ff", "ne")
+
+#undef BUILTIN
+#undef TARGET_BUILTIN
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to