changeset 154:f7e988d3e4cc

fix def file
author anatofuz
date Wed, 11 Mar 2020 19:23:03 +0900
parents 89bc3402280d
children 70c77e05b61e
files clang/include/clang/AST/BuiltinTypes.def clang/include/clang/Basic/LangOptions.def clang/include/clang/Basic/TokenKinds.def llvm/lib/Transforms/IPO/PassManagerBuilder.cpp llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp
diffstat 5 files changed, 39 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/clang/include/clang/AST/BuiltinTypes.def	Wed Mar 11 18:44:00 2020 +0900
+++ b/clang/include/clang/AST/BuiltinTypes.def	Wed Mar 11 19:23:03 2020 +0900
@@ -57,6 +57,10 @@
 // void
 BUILTIN_TYPE(Void, VoidTy)
 
+#ifndef noCbC
+BUILTIN_TYPE(__Code, __CodeTy)
+#endif
+
 //===- Unsigned Types -----------------------------------------------------===//
 
 // 'bool' in C++, '_Bool' in C99
--- a/clang/include/clang/Basic/LangOptions.def	Wed Mar 11 18:44:00 2020 +0900
+++ b/clang/include/clang/Basic/LangOptions.def	Wed Mar 11 19:23:03 2020 +0900
@@ -334,6 +334,10 @@
 BENIGN_LANGOPT(AllowEditorPlaceholders, 1, 0,
                "allow editor placeholders in source")
 
+#ifndef noCbC
+LANGOPT(HasCodeSegment          , 1, 0, "CbC")
+#endif
+
 ENUM_LANGOPT(ClangABICompat, ClangABI, 4, ClangABI::Latest,
              "version of Clang that we should attempt to be ABI-compatible "
              "with")
--- a/clang/include/clang/Basic/TokenKinds.def	Wed Mar 11 18:44:00 2020 +0900
+++ b/clang/include/clang/Basic/TokenKinds.def	Wed Mar 11 19:23:03 2020 +0900
@@ -315,6 +315,11 @@
 KEYWORD(__objc_yes                  , KEYALL)
 KEYWORD(__objc_no                   , KEYALL)
 
+#ifndef noCbC // CbC Keywords.
+KEYWORD(__code                      , KEYALL)
+KEYWORD(_CbC_return                    , KEYALL)
+KEYWORD(_CbC_environment               , KEYALL)
+#endif
 
 // C++ 2.11p1: Keywords.
 KEYWORD(asm                         , KEYCXX|KEYGNU)
--- a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp	Wed Mar 11 18:44:00 2020 +0900
+++ b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp	Wed Mar 11 19:23:03 2020 +0900
@@ -994,7 +994,11 @@
   // LTO provides additional opportunities for tailcall elimination due to
   // link-time inlining, and visibility of nocapture attribute.
   if (OptLevel > 1)
+#ifndef noCbC
+    PM.add(createTailCallEliminationPass(false));
+#else
     PM.add(createTailCallEliminationPass());
+#endif
 
   // Infer attributes on declarations, call sites, arguments, etc.
   PM.add(createPostOrderFunctionAttrsLegacyPass()); // Add nocapture.
--- a/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp	Wed Mar 11 18:44:00 2020 +0900
+++ b/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp	Wed Mar 11 19:23:03 2020 +0900
@@ -186,6 +186,28 @@
 };
 }
 
+#ifndef noCmarkTailToCodeSegmentsbC
+static bool markTailToCodeSegments(Function &F){
+  bool Modified = false;
+  for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB) {
+    for (auto &I : *BB) {
+      CallInst *CI = dyn_cast<CallInst>(&I);
+      Function* Called;
+      if (CI)
+        Called = CI->getCalledFunction();
+      else
+        continue;
+      // We should touch only code segment call.
+      if (Called && Called->getReturnType()->is__CodeTy()) {
+        CI->setTailCall();
+        Modified = true;
+      }
+    }
+  }
+  return Modified;
+}
+#endif
+
 static bool markTails(Function &F, bool &AllCallsAreTailCalls,
                       OptimizationRemarkEmitter *ORE) {
   if (F.callsFunctionThatReturnsTwice())