<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Mar 18, 2014 at 10:55 AM, Yunzhong Gao <span dir="ltr"><<a href="mailto:Yunzhong_Gao@playstation.sony.com" target="_blank">Yunzhong_Gao@playstation.sony.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: ygao<br>
Date: Tue Mar 18 12:55:18 2014<br>
New Revision: 204164<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=204164&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=204164&view=rev</a><br>
Log:<br>
Creating a printing policy for "half":<br>
Since "half" is an OpenCL keyword and clang accepts __fp16 as an extension for<br>
other languages, error messages and metadata (and hence debug info) should refer<br>
to the half-precision floating point as "__fp16" instead of "half" when<br>
compiling for non-OpenCL languages. This patch creates a new printing policy for<br>
half in a similar manner to what is done for bool and wchar_t.<br>
<br>
Differential Revision: <a href="http://llvm-reviews.chandlerc.com/D2952" target="_blank">http://llvm-reviews.chandlerc.com/D2952</a><br>
<br>
<br>
Modified:<br>
    cfe/trunk/include/clang/AST/PrettyPrinter.h<br>
    cfe/trunk/include/clang/Basic/LangOptions.def<br>
    cfe/trunk/include/clang/Basic/TokenKinds.def<br>
    cfe/trunk/lib/AST/Type.cpp<br>
    cfe/trunk/lib/Basic/IdentifierTable.cpp<br>
    cfe/trunk/lib/Frontend/CompilerInvocation.cpp<br>
    cfe/trunk/test/CXX/expr/expr.const/p2-0x.cpp<br>
    cfe/trunk/test/Sema/variadic-promotion.c<br>
<br>
Modified: cfe/trunk/include/clang/AST/PrettyPrinter.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/PrettyPrinter.h?rev=204164&r1=204163&r2=204164&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/PrettyPrinter.h?rev=204164&r1=204163&r2=204164&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/include/clang/AST/PrettyPrinter.h (original)<br>
+++ cfe/trunk/include/clang/AST/PrettyPrinter.h Tue Mar 18 12:55:18 2014<br>
@@ -41,7 +41,7 @@ struct PrintingPolicy {<br>
       ConstantArraySizeAsWritten(false), AnonymousTagLocations(true),<br>
       SuppressStrongLifetime(false), SuppressLifetimeQualifiers(false),<br>
       Bool(LO.Bool), TerseOutput(false), PolishForDeclaration(false),<br>
-      MSWChar(LO.MicrosoftExt && !LO.WChar),<br>
+      Half(LO.Half), MSWChar(LO.MicrosoftExt && !LO.WChar),<br>
       IncludeNewlines(true) { }<br>
<br>
   /// \brief What language we're printing.<br>
@@ -153,6 +153,10 @@ struct PrintingPolicy {<br>
   ///<br>
   unsigned PolishForDeclaration : 1;<br>
<br>
+  /// \brief When true, print the half-precision floating-point type as 'half'<br>
+  /// instead of '__fp16'<br>
+  unsigned Half : 1;<br>
+<br>
   /// \brief When true, print the built-in wchar_t type as __wchar_t. For use in<br>
   /// Microsoft mode when wchar_t is not available.<br>
   unsigned MSWChar : 1;<br>
<br>
Modified: cfe/trunk/include/clang/Basic/LangOptions.def<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.def?rev=204164&r1=204163&r2=204164&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.def?rev=204164&r1=204163&r2=204164&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/include/clang/Basic/LangOptions.def (original)<br>
+++ cfe/trunk/include/clang/Basic/LangOptions.def Tue Mar 18 12:55:18 2014<br>
@@ -61,6 +61,7 @@ BENIGN_LANGOPT(ObjCInferRelatedResultTyp<br>
 LANGOPT(Trigraphs         , 1, 0,"trigraphs")<br>
 LANGOPT(LineComment       , 1, 0, "'//' comments")<br>
 LANGOPT(Bool              , 1, 0, "bool, true, and false keywords")<br>
+LANGOPT(Half              , 1, 0, "half keyword")<br>
 LANGOPT(WChar             , 1, CPlusPlus, "wchar_t keyword")<br>
 BENIGN_LANGOPT(DollarIdents   , 1, 1, "'$' in identifiers")<br>
 BENIGN_LANGOPT(AsmPreprocessor, 1, 0, "preprocessor in asm mode")<br>
<br>
Modified: cfe/trunk/include/clang/Basic/TokenKinds.def<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TokenKinds.def?rev=204164&r1=204163&r2=204164&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TokenKinds.def?rev=204164&r1=204163&r2=204164&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/include/clang/Basic/TokenKinds.def (original)<br>
+++ cfe/trunk/include/clang/Basic/TokenKinds.def Tue Mar 18 12:55:18 2014<br>
@@ -229,6 +229,7 @@ PUNCTUATOR(greatergreatergreater, ">>>")<br>
 //   KEYALTIVEC - This is a keyword in AltiVec<br>
 //   KEYBORLAND - This is a keyword if Borland extensions are enabled<br>
 //   BOOLSUPPORT - This is a keyword if 'bool' is a built-in type<br>
+//   HALFSUPPORT - This is a keyword if 'half' is a built-in type<br>
 //   WCHARSUPPORT - This is a keyword if 'wchar_t' is a built-in type<br>
 //<br>
 KEYWORD(auto                        , KEYALL)<br>
@@ -492,7 +493,7 @@ KEYWORD(__pixel                     , KE<br>
 ALIAS("__fp16", half                , KEYALL)<br>
<br>
 // OpenCL Extension.<br>
-KEYWORD(half                        , KEYOPENCL)<br>
+KEYWORD(half                        , HALFSUPPORT)<br>
<br>
 // Objective-C ARC keywords.<br>
 KEYWORD(__bridge                     , KEYARC)<br>
<br>
Modified: cfe/trunk/lib/AST/Type.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Type.cpp?rev=204164&r1=204163&r2=204164&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Type.cpp?rev=204164&r1=204163&r2=204164&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/AST/Type.cpp (original)<br>
+++ cfe/trunk/lib/AST/Type.cpp Tue Mar 18 12:55:18 2014<br>
@@ -1523,7 +1523,7 @@ StringRef BuiltinType::getName(const Pri<br>
   case ULong:             return "unsigned long";<br>
   case ULongLong:         return "unsigned long long";<br>
   case UInt128:           return "unsigned __int128";<br>
-  case Half:              return "half";<br>
+  case Half:              return Policy.Half ? "half" : "__fp16";<br>
   case Float:             return "float";<br>
   case Double:            return "double";<br>
   case LongDouble:        return "long double";<br>
<br>
Modified: cfe/trunk/lib/Basic/IdentifierTable.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/IdentifierTable.cpp?rev=204164&r1=204163&r2=204164&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/IdentifierTable.cpp?rev=204164&r1=204163&r2=204164&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/Basic/IdentifierTable.cpp (original)<br>
+++ cfe/trunk/lib/Basic/IdentifierTable.cpp Tue Mar 18 12:55:18 2014<br>
@@ -105,6 +105,7 @@ namespace {<br>
     KEYARC = 0x800,<br>
     KEYNOMS = 0x01000,<br>
     WCHARSUPPORT = 0x02000,<br>
+    HALFSUPPORT = 0x04000,<br>
     KEYALL = (0xffff & ~KEYNOMS) // Because KEYNOMS is used to exclude.<br>
   };<br>
 }<br>
@@ -129,6 +130,7 @@ static void AddKeyword(StringRef Keyword<br>
   else if (LangOpts.MicrosoftExt && (Flags & KEYMS)) AddResult = 1;<br>
   else if (LangOpts.Borland && (Flags & KEYBORLAND)) AddResult = 1;<br>
   else if (LangOpts.Bool && (Flags & BOOLSUPPORT)) AddResult = 2;<br>
+  else if (LangOpts.Half && (Flags && HALFSUPPORT)) AddResult = 2;<br></blockquote><div><br></div><div>There's a && here that should be &.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

   else if (LangOpts.WChar && (Flags & WCHARSUPPORT)) AddResult = 2;<br>
   else if (LangOpts.AltiVec && (Flags & KEYALTIVEC)) AddResult = 2;<br>
   else if (LangOpts.OpenCL && (Flags & KEYOPENCL)) AddResult = 2;<br>
<br>
Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=204164&r1=204163&r2=204164&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=204164&r1=204163&r2=204164&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)<br>
+++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Tue Mar 18 12:55:18 2014<br>
@@ -1116,6 +1116,9 @@ void CompilerInvocation::setLangDefaults<br>
   // OpenCL and C++ both have bool, true, false keywords.<br>
   Opts.Bool = Opts.OpenCL || Opts.CPlusPlus;<br>
<br>
+  // OpenCL has half keyword<br>
+  Opts.Half = Opts.OpenCL;<br>
+<br>
   // C++ has wchar_t keyword.<br>
   Opts.WChar = Opts.CPlusPlus;<br>
<br>
<br>
Modified: cfe/trunk/test/CXX/expr/expr.const/p2-0x.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/expr/expr.const/p2-0x.cpp?rev=204164&r1=204163&r2=204164&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/expr/expr.const/p2-0x.cpp?rev=204164&r1=204163&r2=204164&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/test/CXX/expr/expr.const/p2-0x.cpp (original)<br>
+++ cfe/trunk/test/CXX/expr/expr.const/p2-0x.cpp Tue Mar 18 12:55:18 2014<br>
@@ -138,7 +138,7 @@ namespace UndefinedBehavior {<br>
     case (int)(unsigned)(long long)4.4e9: // ok<br>
     case (int)(float)1e300: // expected-error {{constant expression}} expected-note {{value 1.0E+300 is outside the range of representable values of type 'float'}} expected-error {{duplicate case value '2147483647'}} expected-note {{previous case defined here}}<br>

     case (int)((float)1e37 / 1e30): // ok<br>
-    case (int)(__fp16)65536: // expected-error {{constant expression}} expected-note {{value 65536 is outside the range of representable values of type 'half'}} expected-error {{duplicate case value '2147483647'}}<br>

+    case (int)(__fp16)65536: // expected-error {{constant expression}} expected-note {{value 65536 is outside the range of representable values of type '__fp16'}} expected-error {{duplicate case value '2147483647'}}<br>

       break;<br>
     }<br>
   }<br>
<br>
Modified: cfe/trunk/test/Sema/variadic-promotion.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/variadic-promotion.c?rev=204164&r1=204163&r2=204164&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/variadic-promotion.c?rev=204164&r1=204163&r2=204164&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/test/Sema/variadic-promotion.c (original)<br>
+++ cfe/trunk/test/Sema/variadic-promotion.c Tue Mar 18 12:55:18 2014<br>
@@ -6,7 +6,7 @@ void test_floating_promotion(__fp16 *f16<br>
   variadic(3, *f16, f32, f64);<br>
<br>
 // CHECK: ImplicitCastExpr {{.*}} 'double' <FloatingCast><br>
-// CHECK-NEXT: 'half'<br>
+// CHECK-NEXT: '__fp16'<br>
<br>
 // CHECK: ImplicitCastExpr {{.*}} 'double' <FloatingCast><br>
 // CHECK-NEXT: 'float'<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div></div>