[clang] 366e57d - [clang-cl] Add /Zc:wchar_t- option

2022-05-17 Thread Pengxuan Zheng via cfe-commits

Author: Pengxuan Zheng
Date: 2022-05-17T09:40:30-07:00
New Revision: 366e57de23ed20ac95201e1623dfffed215e98f8

URL: 
https://github.com/llvm/llvm-project/commit/366e57de23ed20ac95201e1623dfffed215e98f8
DIFF: 
https://github.com/llvm/llvm-project/commit/366e57de23ed20ac95201e1623dfffed215e98f8.diff

LOG: [clang-cl] Add /Zc:wchar_t- option

Map /Zc:wchar_t- to the cc1 flag -fno-wchar which is already supported.

Reviewed By: thakis

Differential Revision: https://reviews.llvm.org/D125513

Added: 


Modified: 
clang/include/clang/Driver/Options.td
clang/lib/Driver/ToolChains/Clang.cpp
clang/test/Driver/cl-options.c
clang/test/Driver/cl-zc.cpp

Removed: 




diff  --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 4be0b574fa444..e18b71ba064df 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -6487,6 +6487,10 @@ def _SLASH_Zc_twoPhase : CLFlag<"Zc:twoPhase">,
 def _SLASH_Zc_twoPhase_ : CLFlag<"Zc:twoPhase-">,
   HelpText<"Disable two-phase name lookup in templates (default)">,
   Alias;
+def _SLASH_Zc_wchar_t : CLFlag<"Zc:wchar_t">,
+  HelpText<"Enable C++ builtin type wchar_t (default)">;
+def _SLASH_Zc_wchar_t_ : CLFlag<"Zc:wchar_t-">,
+  HelpText<"Disable C++ builtin type wchar_t">;
 def _SLASH_Z7 : CLFlag<"Z7">,
   HelpText<"Enable CodeView debug information in object files">;
 def _SLASH_Zi : CLFlag<"Zi">, Alias<_SLASH_Z7>,
@@ -6674,7 +6678,6 @@ def _SLASH_Zc_forScope : CLIgnoredFlag<"Zc:forScope">;
 def _SLASH_Zc_inline : CLIgnoredFlag<"Zc:inline">;
 def _SLASH_Zc_rvalueCast : CLIgnoredFlag<"Zc:rvalueCast">;
 def _SLASH_Zc_ternary : CLIgnoredFlag<"Zc:ternary">;
-def _SLASH_Zc_wchar_t : CLIgnoredFlag<"Zc:wchar_t">;
 def _SLASH_ZH_MD5 : CLIgnoredFlag<"ZH:MD5">;
 def _SLASH_ZH_SHA1 : CLIgnoredFlag<"ZH:SHA1">;
 def _SLASH_ZH_SHA_256 : CLIgnoredFlag<"ZH:SHA_256">;

diff  --git a/clang/lib/Driver/ToolChains/Clang.cpp 
b/clang/lib/Driver/ToolChains/Clang.cpp
index 75515469421b0..5dce5b81fa8a6 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -7589,6 +7589,11 @@ void Clang::AddClangCLArgs(const ArgList , 
types::ID InputType,
   CmdArgs.push_back("-fno-dllexport-inlines");
  }
 
+ if (Args.hasFlag(options::OPT__SLASH_Zc_wchar_t_,
+  options::OPT__SLASH_Zc_wchar_t, false)) {
+   CmdArgs.push_back("-fno-wchar");
+ }
+
   Arg *MostGeneralArg = Args.getLastArg(options::OPT__SLASH_vmg);
   Arg *BestCaseArg = Args.getLastArg(options::OPT__SLASH_vmb);
   if (MostGeneralArg && BestCaseArg)

diff  --git a/clang/test/Driver/cl-options.c b/clang/test/Driver/cl-options.c
index 244b4430dd0dc..4eae94b1bff20 100644
--- a/clang/test/Driver/cl-options.c
+++ b/clang/test/Driver/cl-options.c
@@ -404,7 +404,6 @@
 // RUN:/Zc:inline \
 // RUN:/Zc:rvalueCast \
 // RUN:/Zc:ternary \
-// RUN:/Zc:wchar_t \
 // RUN:/ZH:MD5 \
 // RUN:/ZH:SHA1 \
 // RUN:/ZH:SHA_256 \

diff  --git a/clang/test/Driver/cl-zc.cpp b/clang/test/Driver/cl-zc.cpp
index cf7734875e1f1..53d28dddefa73 100644
--- a/clang/test/Driver/cl-zc.cpp
+++ b/clang/test/Driver/cl-zc.cpp
@@ -47,7 +47,7 @@
 // RUN: %clang_cl /c -### /Zc:wchar_t -- %s 2>&1 | FileCheck 
-check-prefix=WCHAR_T-ON %s
 // WCHAR_T-ON-NOT: argument unused during compilation
 // RUN: %clang_cl /c -### /Zc:wchar_t- -- %s 2>&1 | FileCheck 
-check-prefix=WCHAR_T-OFF %s
-// WCHAR_T-OFF: argument unused during compilation
+// WCHAR_T-OFF: "-fno-wchar"
 
 // RUN: %clang_cl /c -### /Zc:auto -- %s 2>&1 | FileCheck 
-check-prefix=AUTO-ON %s
 // AUTO-ON-NOT: argument unused during compilation



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] 38612fb - Reland "[COFF, ARM64] Add __break intrinsic"

2022-04-20 Thread Pengxuan Zheng via cfe-commits

Author: Pengxuan Zheng
Date: 2022-04-20T13:01:30-07:00
New Revision: 38612fbc8990fe609b08b63f82845f546c22bcff

URL: 
https://github.com/llvm/llvm-project/commit/38612fbc8990fe609b08b63f82845f546c22bcff
DIFF: 
https://github.com/llvm/llvm-project/commit/38612fbc8990fe609b08b63f82845f546c22bcff.diff

LOG: Reland "[COFF, ARM64] Add __break intrinsic"

https://docs.microsoft.com/en-us/cpp/intrinsics/arm64-intrinsics?view=msvc-170

Reland after fixing the test failure. The failure was due to conflict with a
change (D122983) which was merged right before this patch.

Reviewed By: rnk, mstorsjo

Differential Revision: https://reviews.llvm.org/D124032

Added: 
llvm/test/CodeGen/AArch64/arm64-break.ll

Modified: 
clang/include/clang/Basic/BuiltinsAArch64.def
clang/lib/CodeGen/CGBuiltin.cpp
clang/lib/Headers/intrin.h
clang/lib/Sema/SemaChecking.cpp
clang/test/CodeGen/arm64-microsoft-intrinsics.c
clang/test/Sema/builtins-microsoft-arm64.c
llvm/include/llvm/IR/IntrinsicsAArch64.td
llvm/lib/Target/AArch64/AArch64InstrFormats.td
llvm/lib/Target/AArch64/AArch64InstrInfo.td

Removed: 




diff  --git a/clang/include/clang/Basic/BuiltinsAArch64.def 
b/clang/include/clang/Basic/BuiltinsAArch64.def
index 0869b87e32fb9..cebd1c07fbcc9 100644
--- a/clang/include/clang/Basic/BuiltinsAArch64.def
+++ b/clang/include/clang/Basic/BuiltinsAArch64.def
@@ -249,6 +249,8 @@ TARGET_HEADER_BUILTIN(_AddressOfReturnAddress, "v*", "nh", 
"intrin.h", ALL_MS_LA
 TARGET_HEADER_BUILTIN(__mulh,  "SLLiSLLiSLLi", "nh", "intrin.h", 
ALL_MS_LANGUAGES, "")
 TARGET_HEADER_BUILTIN(__umulh, "ULLiULLiULLi", "nh", "intrin.h", 
ALL_MS_LANGUAGES, "")
 
+TARGET_HEADER_BUILTIN(__break, "vi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
 #undef BUILTIN
 #undef LANGBUILTIN
 #undef TARGET_HEADER_BUILTIN

diff  --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index 464dcc2d8621c..fc2d32f3e26fe 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -9823,6 +9823,15 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned 
BuiltinID,
 return Builder.CreateCall(F, Metadata);
   }
 
+  if (BuiltinID == AArch64::BI__break) {
+Expr::EvalResult Result;
+if (!E->getArg(0)->EvaluateAsInt(Result, CGM.getContext()))
+  llvm_unreachable("Sema will ensure that the parameter is constant");
+
+llvm::Function *F = CGM.getIntrinsic(llvm::Intrinsic::aarch64_break);
+return Builder.CreateCall(F, {EmitScalarExpr(E->getArg(0))});
+  }
+
   if (BuiltinID == AArch64::BI__builtin_arm_clrex) {
 Function *F = CGM.getIntrinsic(Intrinsic::aarch64_clrex);
 return Builder.CreateCall(F);

diff  --git a/clang/lib/Headers/intrin.h b/clang/lib/Headers/intrin.h
index 741b21eef32a6..07fcae36020d7 100644
--- a/clang/lib/Headers/intrin.h
+++ b/clang/lib/Headers/intrin.h
@@ -560,6 +560,8 @@ unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64 
val);
 
 __int64 __mulh(__int64 __a, __int64 __b);
 unsigned __int64 __umulh(unsigned __int64 __a, unsigned __int64 __b);
+
+void __break(int);
 #endif
 
 
/**\

diff  --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index f575c0775e7f9..467edd3321b9d 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -2948,6 +2948,9 @@ bool Sema::CheckAArch64BuiltinFunctionCall(const 
TargetInfo ,
   if (BuiltinID == AArch64::BI__getReg)
 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 31);
 
+  if (BuiltinID == AArch64::BI__break)
+return SemaBuiltinConstantArgRange(TheCall, 0, 0, 0x);
+
   if (CheckNeonBuiltinFunctionCall(TI, BuiltinID, TheCall))
 return true;
 

diff  --git a/clang/test/CodeGen/arm64-microsoft-intrinsics.c 
b/clang/test/CodeGen/arm64-microsoft-intrinsics.c
index 2dd2f6c8f0351..ecf271bae5808 100644
--- a/clang/test/CodeGen/arm64-microsoft-intrinsics.c
+++ b/clang/test/CodeGen/arm64-microsoft-intrinsics.c
@@ -103,6 +103,13 @@ unsigned long long check_umulh(unsigned long long a, 
unsigned long long b) {
 // CHECK-MSVC: %[[RES:.*]] = trunc i128 %[[HIGH]] to i64
 // CHECK-LINUX: error: call to undeclared function '__umulh'
 
+void check__break() {
+  __break(0);
+}
+
+// CHECK-MSVC: call void @llvm.aarch64.break(i32 0)
+// CHECK-LINUX: error: call to undeclared function '__break'
+
 unsigned __int64 check__getReg(void) {
   unsigned volatile __int64 reg;
   reg = __getReg(18);

diff  --git a/clang/test/Sema/builtins-microsoft-arm64.c 
b/clang/test/Sema/builtins-microsoft-arm64.c
index 3b5bd9b9bf866..6d0dc09c9ed83 100644
--- a/clang/test/Sema/builtins-microsoft-arm64.c
+++ b/clang/test/Sema/builtins-microsoft-arm64.c
@@ -3,6 +3,12 @@
 
 #include 
 
+void check__break(int x) {
+  __break(-1); // expected-error-re {{argument value {{.*}} is outside the 
valid range}}
+  __break(65536); // 

[clang] bff8356 - Revert "[COFF, ARM64] Add __break intrinsic"

2022-04-20 Thread Pengxuan Zheng via cfe-commits

Author: Pengxuan Zheng
Date: 2022-04-20T11:57:49-07:00
New Revision: bff8356b1969d2edd02e22c73d1c3d386f862937

URL: 
https://github.com/llvm/llvm-project/commit/bff8356b1969d2edd02e22c73d1c3d386f862937
DIFF: 
https://github.com/llvm/llvm-project/commit/bff8356b1969d2edd02e22c73d1c3d386f862937.diff

LOG: Revert "[COFF, ARM64] Add __break intrinsic"

This reverts commit 8a9b4fb4aa6d2dde026d9ae08459aa9e7a1edb05.

Added: 


Modified: 
clang/include/clang/Basic/BuiltinsAArch64.def
clang/lib/CodeGen/CGBuiltin.cpp
clang/lib/Headers/intrin.h
clang/lib/Sema/SemaChecking.cpp
clang/test/CodeGen/arm64-microsoft-intrinsics.c
clang/test/Sema/builtins-microsoft-arm64.c
llvm/include/llvm/IR/IntrinsicsAArch64.td
llvm/lib/Target/AArch64/AArch64InstrFormats.td
llvm/lib/Target/AArch64/AArch64InstrInfo.td

Removed: 
llvm/test/CodeGen/AArch64/arm64-break.ll



diff  --git a/clang/include/clang/Basic/BuiltinsAArch64.def 
b/clang/include/clang/Basic/BuiltinsAArch64.def
index cebd1c07fbcc9..0869b87e32fb9 100644
--- a/clang/include/clang/Basic/BuiltinsAArch64.def
+++ b/clang/include/clang/Basic/BuiltinsAArch64.def
@@ -249,8 +249,6 @@ TARGET_HEADER_BUILTIN(_AddressOfReturnAddress, "v*", "nh", 
"intrin.h", ALL_MS_LA
 TARGET_HEADER_BUILTIN(__mulh,  "SLLiSLLiSLLi", "nh", "intrin.h", 
ALL_MS_LANGUAGES, "")
 TARGET_HEADER_BUILTIN(__umulh, "ULLiULLiULLi", "nh", "intrin.h", 
ALL_MS_LANGUAGES, "")
 
-TARGET_HEADER_BUILTIN(__break, "vi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
-
 #undef BUILTIN
 #undef LANGBUILTIN
 #undef TARGET_HEADER_BUILTIN

diff  --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index fc2d32f3e26fe..464dcc2d8621c 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -9823,15 +9823,6 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned 
BuiltinID,
 return Builder.CreateCall(F, Metadata);
   }
 
-  if (BuiltinID == AArch64::BI__break) {
-Expr::EvalResult Result;
-if (!E->getArg(0)->EvaluateAsInt(Result, CGM.getContext()))
-  llvm_unreachable("Sema will ensure that the parameter is constant");
-
-llvm::Function *F = CGM.getIntrinsic(llvm::Intrinsic::aarch64_break);
-return Builder.CreateCall(F, {EmitScalarExpr(E->getArg(0))});
-  }
-
   if (BuiltinID == AArch64::BI__builtin_arm_clrex) {
 Function *F = CGM.getIntrinsic(Intrinsic::aarch64_clrex);
 return Builder.CreateCall(F);

diff  --git a/clang/lib/Headers/intrin.h b/clang/lib/Headers/intrin.h
index 07fcae36020d7..741b21eef32a6 100644
--- a/clang/lib/Headers/intrin.h
+++ b/clang/lib/Headers/intrin.h
@@ -560,8 +560,6 @@ unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64 
val);
 
 __int64 __mulh(__int64 __a, __int64 __b);
 unsigned __int64 __umulh(unsigned __int64 __a, unsigned __int64 __b);
-
-void __break(int);
 #endif
 
 
/**\

diff  --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index 467edd3321b9d..f575c0775e7f9 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -2948,9 +2948,6 @@ bool Sema::CheckAArch64BuiltinFunctionCall(const 
TargetInfo ,
   if (BuiltinID == AArch64::BI__getReg)
 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 31);
 
-  if (BuiltinID == AArch64::BI__break)
-return SemaBuiltinConstantArgRange(TheCall, 0, 0, 0x);
-
   if (CheckNeonBuiltinFunctionCall(TI, BuiltinID, TheCall))
 return true;
 

diff  --git a/clang/test/CodeGen/arm64-microsoft-intrinsics.c 
b/clang/test/CodeGen/arm64-microsoft-intrinsics.c
index 044a6a1cdff58..2dd2f6c8f0351 100644
--- a/clang/test/CodeGen/arm64-microsoft-intrinsics.c
+++ b/clang/test/CodeGen/arm64-microsoft-intrinsics.c
@@ -103,13 +103,6 @@ unsigned long long check_umulh(unsigned long long a, 
unsigned long long b) {
 // CHECK-MSVC: %[[RES:.*]] = trunc i128 %[[HIGH]] to i64
 // CHECK-LINUX: error: call to undeclared function '__umulh'
 
-void check__break() {
-  __break(0);
-}
-
-// CHECK-MSVC: call void @llvm.aarch64.break(i32 0)
-// CHECK-LINUX: error: implicit declaration of function '__break'
-
 unsigned __int64 check__getReg(void) {
   unsigned volatile __int64 reg;
   reg = __getReg(18);

diff  --git a/clang/test/Sema/builtins-microsoft-arm64.c 
b/clang/test/Sema/builtins-microsoft-arm64.c
index 6d0dc09c9ed83..3b5bd9b9bf866 100644
--- a/clang/test/Sema/builtins-microsoft-arm64.c
+++ b/clang/test/Sema/builtins-microsoft-arm64.c
@@ -3,12 +3,6 @@
 
 #include 
 
-void check__break(int x) {
-  __break(-1); // expected-error-re {{argument value {{.*}} is outside the 
valid range}}
-  __break(65536); // expected-error-re {{argument value {{.*}} is outside the 
valid range}}
-  __break(x); // expected-error {{argument to '__break' must be a constant 
integer}}
-}
-
 void check__getReg(void) {
   __getReg(-1); // expected-error-re {{argument value 

[clang] 8a9b4fb - [COFF, ARM64] Add __break intrinsic

2022-04-20 Thread Pengxuan Zheng via cfe-commits

Author: Pengxuan Zheng
Date: 2022-04-20T11:20:26-07:00
New Revision: 8a9b4fb4aa6d2dde026d9ae08459aa9e7a1edb05

URL: 
https://github.com/llvm/llvm-project/commit/8a9b4fb4aa6d2dde026d9ae08459aa9e7a1edb05
DIFF: 
https://github.com/llvm/llvm-project/commit/8a9b4fb4aa6d2dde026d9ae08459aa9e7a1edb05.diff

LOG: [COFF, ARM64] Add __break intrinsic

https://docs.microsoft.com/en-us/cpp/intrinsics/arm64-intrinsics?view=msvc-170

Reviewed By: rnk, mstorsjo

Differential Revision: https://reviews.llvm.org/D124032

Added: 
llvm/test/CodeGen/AArch64/arm64-break.ll

Modified: 
clang/include/clang/Basic/BuiltinsAArch64.def
clang/lib/CodeGen/CGBuiltin.cpp
clang/lib/Headers/intrin.h
clang/lib/Sema/SemaChecking.cpp
clang/test/CodeGen/arm64-microsoft-intrinsics.c
clang/test/Sema/builtins-microsoft-arm64.c
llvm/include/llvm/IR/IntrinsicsAArch64.td
llvm/lib/Target/AArch64/AArch64InstrFormats.td
llvm/lib/Target/AArch64/AArch64InstrInfo.td

Removed: 




diff  --git a/clang/include/clang/Basic/BuiltinsAArch64.def 
b/clang/include/clang/Basic/BuiltinsAArch64.def
index 0869b87e32fb9..cebd1c07fbcc9 100644
--- a/clang/include/clang/Basic/BuiltinsAArch64.def
+++ b/clang/include/clang/Basic/BuiltinsAArch64.def
@@ -249,6 +249,8 @@ TARGET_HEADER_BUILTIN(_AddressOfReturnAddress, "v*", "nh", 
"intrin.h", ALL_MS_LA
 TARGET_HEADER_BUILTIN(__mulh,  "SLLiSLLiSLLi", "nh", "intrin.h", 
ALL_MS_LANGUAGES, "")
 TARGET_HEADER_BUILTIN(__umulh, "ULLiULLiULLi", "nh", "intrin.h", 
ALL_MS_LANGUAGES, "")
 
+TARGET_HEADER_BUILTIN(__break, "vi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
 #undef BUILTIN
 #undef LANGBUILTIN
 #undef TARGET_HEADER_BUILTIN

diff  --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index 464dcc2d8621c..fc2d32f3e26fe 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -9823,6 +9823,15 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned 
BuiltinID,
 return Builder.CreateCall(F, Metadata);
   }
 
+  if (BuiltinID == AArch64::BI__break) {
+Expr::EvalResult Result;
+if (!E->getArg(0)->EvaluateAsInt(Result, CGM.getContext()))
+  llvm_unreachable("Sema will ensure that the parameter is constant");
+
+llvm::Function *F = CGM.getIntrinsic(llvm::Intrinsic::aarch64_break);
+return Builder.CreateCall(F, {EmitScalarExpr(E->getArg(0))});
+  }
+
   if (BuiltinID == AArch64::BI__builtin_arm_clrex) {
 Function *F = CGM.getIntrinsic(Intrinsic::aarch64_clrex);
 return Builder.CreateCall(F);

diff  --git a/clang/lib/Headers/intrin.h b/clang/lib/Headers/intrin.h
index 741b21eef32a6..07fcae36020d7 100644
--- a/clang/lib/Headers/intrin.h
+++ b/clang/lib/Headers/intrin.h
@@ -560,6 +560,8 @@ unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64 
val);
 
 __int64 __mulh(__int64 __a, __int64 __b);
 unsigned __int64 __umulh(unsigned __int64 __a, unsigned __int64 __b);
+
+void __break(int);
 #endif
 
 
/**\

diff  --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index f575c0775e7f9..467edd3321b9d 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -2948,6 +2948,9 @@ bool Sema::CheckAArch64BuiltinFunctionCall(const 
TargetInfo ,
   if (BuiltinID == AArch64::BI__getReg)
 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 31);
 
+  if (BuiltinID == AArch64::BI__break)
+return SemaBuiltinConstantArgRange(TheCall, 0, 0, 0x);
+
   if (CheckNeonBuiltinFunctionCall(TI, BuiltinID, TheCall))
 return true;
 

diff  --git a/clang/test/CodeGen/arm64-microsoft-intrinsics.c 
b/clang/test/CodeGen/arm64-microsoft-intrinsics.c
index 2dd2f6c8f0351..044a6a1cdff58 100644
--- a/clang/test/CodeGen/arm64-microsoft-intrinsics.c
+++ b/clang/test/CodeGen/arm64-microsoft-intrinsics.c
@@ -103,6 +103,13 @@ unsigned long long check_umulh(unsigned long long a, 
unsigned long long b) {
 // CHECK-MSVC: %[[RES:.*]] = trunc i128 %[[HIGH]] to i64
 // CHECK-LINUX: error: call to undeclared function '__umulh'
 
+void check__break() {
+  __break(0);
+}
+
+// CHECK-MSVC: call void @llvm.aarch64.break(i32 0)
+// CHECK-LINUX: error: implicit declaration of function '__break'
+
 unsigned __int64 check__getReg(void) {
   unsigned volatile __int64 reg;
   reg = __getReg(18);

diff  --git a/clang/test/Sema/builtins-microsoft-arm64.c 
b/clang/test/Sema/builtins-microsoft-arm64.c
index 3b5bd9b9bf866..6d0dc09c9ed83 100644
--- a/clang/test/Sema/builtins-microsoft-arm64.c
+++ b/clang/test/Sema/builtins-microsoft-arm64.c
@@ -3,6 +3,12 @@
 
 #include 
 
+void check__break(int x) {
+  __break(-1); // expected-error-re {{argument value {{.*}} is outside the 
valid range}}
+  __break(65536); // expected-error-re {{argument value {{.*}} is outside the 
valid range}}
+  __break(x); // expected-error {{argument to '__break' must be a constant 

[clang] c9b36a0 - Support GCC's -fstack-usage flag

2021-05-15 Thread Pengxuan Zheng via cfe-commits

Author: Pengxuan Zheng
Date: 2021-05-15T10:22:49-07:00
New Revision: c9b36a041fd70de0617ea7e241f520b345e12cac

URL: 
https://github.com/llvm/llvm-project/commit/c9b36a041fd70de0617ea7e241f520b345e12cac
DIFF: 
https://github.com/llvm/llvm-project/commit/c9b36a041fd70de0617ea7e241f520b345e12cac.diff

LOG: Support GCC's -fstack-usage flag

This patch adds support for GCC's -fstack-usage flag. With this flag, a stack
usage file (i.e., .su file) is generated for each input source file. The format
of the stack usage file is also similar to what is used by GCC. For each
function defined in the source file, a line with the following information is
produced in the .su file.

::  

"Static" means that the function's frame size is static and the size info is an
accurate reflection of the frame size. While "dynamic" means the function's
frame size can only be determined at run-time because the function manipulates
the stack dynamically (e.g., due to variable size objects). The size info only
reflects the size of the fixed size frame objects in this case and therefore is
not a reliable measure of the total frame size.

Reviewed By: MaskRay

Differential Revision: https://reviews.llvm.org/D100509

Added: 
clang/test/CodeGen/stack-usage.c
clang/test/Driver/stack-usage.c

Modified: 
clang/docs/ReleaseNotes.rst
clang/include/clang/Basic/CodeGenOptions.h
clang/include/clang/Driver/Options.td
clang/lib/CodeGen/BackendUtil.cpp
clang/lib/Driver/ToolChains/Clang.cpp
clang/lib/Frontend/CompilerInvocation.cpp
llvm/include/llvm/CodeGen/AsmPrinter.h
llvm/include/llvm/Target/TargetOptions.h
llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp

Removed: 




diff  --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 17351278974df..f3f7fb4eabc3c 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -70,6 +70,10 @@ New Compiler Flags
 - ``-Wreserved-identifier`` emits warning when user code uses reserved
   identifiers.
 
+- ``-fstack-usage`` generates an extra .su file per input source file. The .su
+  file contains frame size information for each function defined in the source
+  file.
+
 Deprecated Compiler Flags
 -
 

diff  --git a/clang/include/clang/Basic/CodeGenOptions.h 
b/clang/include/clang/Basic/CodeGenOptions.h
index 3f06dd3a3f821..90388b169f5e0 100644
--- a/clang/include/clang/Basic/CodeGenOptions.h
+++ b/clang/include/clang/Basic/CodeGenOptions.h
@@ -372,6 +372,11 @@ class CodeGenOptions : public CodeGenOptionsBase {
   /// coverage pass should actually not be instrumented.
   std::vector SanitizeCoverageIgnorelistFiles;
 
+  /// Name of the stack usage file (i.e., .su file) if user passes
+  /// -fstack-usage. If empty, it can be implied that -fstack-usage is not
+  /// passed on the command line.
+  std::string StackUsageOutput;
+
   /// Executable and command-line used to create a given CompilerInvocation.
   /// Most of the time this will be the full -cc1 command.
   const char *Argv0 = nullptr;

diff  --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index a7adab50657af..c1d096f358d9e 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -2709,6 +2709,12 @@ defm stack_size_section : 
BoolFOption<"stack-size-section",
   CodeGenOpts<"StackSizeSection">, DefaultFalse,
   PosFlag,
   NegFlag>;
+def fstack_usage : Flag<["-"], "fstack-usage">, Group,
+  HelpText<"Emit .su file containing information on function stack sizes">;
+def stack_usage_file : Separate<["-"], "stack-usage-file">,
+  Flags<[CC1Option, NoDriverOption]>,
+  HelpText<"Filename (or -) to write stack usage output to">,
+  MarshallingInfoString>;
 
 defm unique_basic_block_section_names : 
BoolFOption<"unique-basic-block-section-names",
   CodeGenOpts<"UniqueBasicBlockSectionNames">, DefaultFalse,

diff  --git a/clang/lib/CodeGen/BackendUtil.cpp 
b/clang/lib/CodeGen/BackendUtil.cpp
index e2799f6aba4ca..e5a2a089563ef 100644
--- a/clang/lib/CodeGen/BackendUtil.cpp
+++ b/clang/lib/CodeGen/BackendUtil.cpp
@@ -567,6 +567,7 @@ static bool initTargetOptions(DiagnosticsEngine ,
   Options.ExplicitEmulatedTLS = CodeGenOpts.ExplicitEmulatedTLS;
   Options.DebuggerTuning = CodeGenOpts.getDebuggerTuning();
   Options.EmitStackSizeSection = CodeGenOpts.StackSizeSection;
+  Options.StackUsageOutput = CodeGenOpts.StackUsageOutput;
   Options.EmitAddrsig = CodeGenOpts.Addrsig;
   Options.ForceDwarfFrameSection = CodeGenOpts.ForceDwarfFrameSection;
   Options.EmitCallSiteInfo = CodeGenOpts.EmitCallSiteInfo;

diff  --git a/clang/lib/Driver/ToolChains/Clang.cpp 
b/clang/lib/Driver/ToolChains/Clang.cpp
index 061b578cc6ff7..fe0f57d4c4791 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -5492,6 +5492,18 @@ void Clang::ConstructJob(Compilation , const JobAction 
,

[clang] 0ec32f1 - Revert "[AArch64] Adding Neon Polynomial vadd Intrinsics"

2021-02-18 Thread Pengxuan Zheng via cfe-commits

Author: Pengxuan Zheng
Date: 2021-02-18T12:38:16-08:00
New Revision: 0ec32f132643fa8a949e5a29a71f7729b329476a

URL: 
https://github.com/llvm/llvm-project/commit/0ec32f132643fa8a949e5a29a71f7729b329476a
DIFF: 
https://github.com/llvm/llvm-project/commit/0ec32f132643fa8a949e5a29a71f7729b329476a.diff

LOG: Revert "[AArch64] Adding Neon Polynomial vadd Intrinsics"

Revert the patch due to buildbot failures.

This reverts commit d9645059c5deeacf264bea0cf50eab459cf8e5bb.

Added: 


Modified: 
clang/include/clang/Basic/arm_neon.td
clang/lib/CodeGen/CGBuiltin.cpp

Removed: 
clang/test/CodeGen/aarch64-poly-add.c



diff  --git a/clang/include/clang/Basic/arm_neon.td 
b/clang/include/clang/Basic/arm_neon.td
index a7a1c0578690..9835c13c0dcd 100644
--- a/clang/include/clang/Basic/arm_neon.td
+++ b/clang/include/clang/Basic/arm_neon.td
@@ -1147,8 +1147,6 @@ def SM4E : SInst<"vsm4e", "...", "QUi">;
 def SM4EKEY : SInst<"vsm4ekey", "...", "QUi">;
 }
 
-def VADDP : WInst<"vadd", "...", "PcPsPlQPcQPsQPlQPk">;
-
 

 // Float -> Int conversions with explicit rounding mode
 

diff  --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index 0fd231563851..3ab5d2a5b684 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -5371,10 +5371,7 @@ static const ARMVectorIntrinsicInfo ARMSIMDIntrinsicMap 
[] = {
   NEONMAP2(vabdq_v, arm_neon_vabdu, arm_neon_vabds, Add1ArgType | 
UnsignedAlts),
   NEONMAP1(vabs_v, arm_neon_vabs, 0),
   NEONMAP1(vabsq_v, arm_neon_vabs, 0),
-  NEONMAP0(vadd_v),
   NEONMAP0(vaddhn_v),
-  NEONMAP0(vaddq_p128),
-  NEONMAP0(vaddq_v),
   NEONMAP1(vaesdq_v, arm_neon_aesd, 0),
   NEONMAP1(vaeseq_v, arm_neon_aese, 0),
   NEONMAP1(vaesimcq_v, arm_neon_aesimc, 0),
@@ -6305,14 +6302,6 @@ Value *CodeGenFunction::EmitCommonNeonBuiltinExpr(
 if (VTy->getElementType()->isFloatingPointTy())
   return EmitNeonCall(CGM.getIntrinsic(Intrinsic::fabs, Ty), Ops, "vabs");
 return EmitNeonCall(CGM.getIntrinsic(LLVMIntrinsic, Ty), Ops, "vabs");
-  case NEON::BI__builtin_neon_vadd_v:
-  case NEON::BI__builtin_neon_vaddq_v: {
-llvm::Type *VTy = llvm::FixedVectorType::get(Int8Ty, Quad ? 16 : 8);
-Ops[0] = Builder.CreateBitCast(Ops[0], VTy);
-Ops[1] = Builder.CreateBitCast(Ops[1], VTy);
-Ops[0] =  Builder.CreateXor(Ops[0], Ops[1]);
-return Builder.CreateBitCast(Ops[0], Ty);
-  }
   case NEON::BI__builtin_neon_vaddhn_v: {
 llvm::FixedVectorType *SrcTy =
 llvm::FixedVectorType::getExtendedElementVectorType(VTy);
@@ -9554,15 +9543,6 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned 
BuiltinID,
   case NEON::BI__builtin_neon_vabsh_f16:
 Ops.push_back(EmitScalarExpr(E->getArg(0)));
 return EmitNeonCall(CGM.getIntrinsic(Intrinsic::fabs, HalfTy), Ops, 
"vabs");
-  case NEON::BI__builtin_neon_vaddq_p128: {
-llvm::Type *Ty = GetNeonType(this, NeonTypeFlags::Poly128);
-Ops.push_back(EmitScalarExpr(E->getArg(1)));
-Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
-Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
-Ops[0] =  Builder.CreateXor(Ops[0], Ops[1]);
-llvm::Type *Int128Ty = llvm::Type::getIntNTy(getLLVMContext(), 128);
-return Builder.CreateBitCast(Ops[0], Int128Ty);
-  }
   case NEON::BI__builtin_neon_vldrq_p128: {
 llvm::Type *Int128Ty = llvm::Type::getIntNTy(getLLVMContext(), 128);
 llvm::Type *Int128PTy = llvm::PointerType::get(Int128Ty, 0);

diff  --git a/clang/test/CodeGen/aarch64-poly-add.c 
b/clang/test/CodeGen/aarch64-poly-add.c
deleted file mode 100644
index 7abaa3e6951e..
--- a/clang/test/CodeGen/aarch64-poly-add.c
+++ /dev/null
@@ -1,85 +0,0 @@
-// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
-// REQUIRES: aarch64-registered-target
-// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon \
-// RUN: -disable-O0-optnone -emit-llvm -o - %s | opt -S -mem2reg \
-// RUN:  | FileCheck %s
-
-#include 
-
-// CHECK-LABEL: @test_vadd_p8(
-// CHECK-NEXT:  entry:
-// CHECK-NEXT:[[TMP0:%.*]] = xor <8 x i8> [[A:%.*]], [[B:%.*]]
-// CHECK-NEXT:ret <8 x i8> [[TMP0]]
-//
-poly8x8_t test_vadd_p8(poly8x8_t a, poly8x8_t b) {
-  return vadd_p8 (a, b);
-}
-
-// CHECK-LABEL: @test_vadd_p16(
-// CHECK-NEXT:  entry:
-// CHECK-NEXT:[[TMP0:%.*]] = bitcast <4 x i16> [[A:%.*]] to <8 x i8>
-// CHECK-NEXT:[[TMP1:%.*]] = bitcast <4 x i16> [[B:%.*]] to <8 x i8>
-// CHECK-NEXT:[[TMP2:%.*]] = xor <8 x i8> [[TMP0]], [[TMP1]]
-// CHECK-NEXT:[[TMP3:%.*]] = bitcast <8 x i8> [[TMP2]] to <4 x i16>
-// CHECK-NEXT:ret <4 x i16> [[TMP3]]
-//
-poly16x4_t test_vadd_p16(poly16x4_t a, poly16x4_t b) {
-  return vadd_p16 (a, b);
-}
-
-// CHECK-LABEL: @test_vadd_p64(
-// CHECK-NEXT:  entry:
-// CHECK-NEXT:[[TMP0:%.*]] = bitcast <1 x i64> [[A:%.*]] to <8 x i8>
-// CHECK-NEXT:

[clang] d964505 - [AArch64] Adding Neon Polynomial vadd Intrinsics

2021-02-18 Thread Pengxuan Zheng via cfe-commits

Author: Pengxuan Zheng
Date: 2021-02-18T11:33:24-08:00
New Revision: d9645059c5deeacf264bea0cf50eab459cf8e5bb

URL: 
https://github.com/llvm/llvm-project/commit/d9645059c5deeacf264bea0cf50eab459cf8e5bb
DIFF: 
https://github.com/llvm/llvm-project/commit/d9645059c5deeacf264bea0cf50eab459cf8e5bb.diff

LOG: [AArch64] Adding Neon Polynomial vadd Intrinsics

This patch adds the following intrinsics:
vadd_p8
vadd_p16
vadd_p64
vaddq_p8
vaddq_p16
vaddq_p64
vaddq_p128

Reviewed By: t.p.northover, DavidSpickett

Differential Revision: https://reviews.llvm.org/D96825

Added: 
clang/test/CodeGen/aarch64-poly-add.c

Modified: 
clang/include/clang/Basic/arm_neon.td
clang/lib/CodeGen/CGBuiltin.cpp

Removed: 




diff  --git a/clang/include/clang/Basic/arm_neon.td 
b/clang/include/clang/Basic/arm_neon.td
index 9835c13c0dcd..a7a1c0578690 100644
--- a/clang/include/clang/Basic/arm_neon.td
+++ b/clang/include/clang/Basic/arm_neon.td
@@ -1147,6 +1147,8 @@ def SM4E : SInst<"vsm4e", "...", "QUi">;
 def SM4EKEY : SInst<"vsm4ekey", "...", "QUi">;
 }
 
+def VADDP : WInst<"vadd", "...", "PcPsPlQPcQPsQPlQPk">;
+
 

 // Float -> Int conversions with explicit rounding mode
 

diff  --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index 3ab5d2a5b684..0fd231563851 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -5371,7 +5371,10 @@ static const ARMVectorIntrinsicInfo ARMSIMDIntrinsicMap 
[] = {
   NEONMAP2(vabdq_v, arm_neon_vabdu, arm_neon_vabds, Add1ArgType | 
UnsignedAlts),
   NEONMAP1(vabs_v, arm_neon_vabs, 0),
   NEONMAP1(vabsq_v, arm_neon_vabs, 0),
+  NEONMAP0(vadd_v),
   NEONMAP0(vaddhn_v),
+  NEONMAP0(vaddq_p128),
+  NEONMAP0(vaddq_v),
   NEONMAP1(vaesdq_v, arm_neon_aesd, 0),
   NEONMAP1(vaeseq_v, arm_neon_aese, 0),
   NEONMAP1(vaesimcq_v, arm_neon_aesimc, 0),
@@ -6302,6 +6305,14 @@ Value *CodeGenFunction::EmitCommonNeonBuiltinExpr(
 if (VTy->getElementType()->isFloatingPointTy())
   return EmitNeonCall(CGM.getIntrinsic(Intrinsic::fabs, Ty), Ops, "vabs");
 return EmitNeonCall(CGM.getIntrinsic(LLVMIntrinsic, Ty), Ops, "vabs");
+  case NEON::BI__builtin_neon_vadd_v:
+  case NEON::BI__builtin_neon_vaddq_v: {
+llvm::Type *VTy = llvm::FixedVectorType::get(Int8Ty, Quad ? 16 : 8);
+Ops[0] = Builder.CreateBitCast(Ops[0], VTy);
+Ops[1] = Builder.CreateBitCast(Ops[1], VTy);
+Ops[0] =  Builder.CreateXor(Ops[0], Ops[1]);
+return Builder.CreateBitCast(Ops[0], Ty);
+  }
   case NEON::BI__builtin_neon_vaddhn_v: {
 llvm::FixedVectorType *SrcTy =
 llvm::FixedVectorType::getExtendedElementVectorType(VTy);
@@ -9543,6 +9554,15 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned 
BuiltinID,
   case NEON::BI__builtin_neon_vabsh_f16:
 Ops.push_back(EmitScalarExpr(E->getArg(0)));
 return EmitNeonCall(CGM.getIntrinsic(Intrinsic::fabs, HalfTy), Ops, 
"vabs");
+  case NEON::BI__builtin_neon_vaddq_p128: {
+llvm::Type *Ty = GetNeonType(this, NeonTypeFlags::Poly128);
+Ops.push_back(EmitScalarExpr(E->getArg(1)));
+Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
+Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
+Ops[0] =  Builder.CreateXor(Ops[0], Ops[1]);
+llvm::Type *Int128Ty = llvm::Type::getIntNTy(getLLVMContext(), 128);
+return Builder.CreateBitCast(Ops[0], Int128Ty);
+  }
   case NEON::BI__builtin_neon_vldrq_p128: {
 llvm::Type *Int128Ty = llvm::Type::getIntNTy(getLLVMContext(), 128);
 llvm::Type *Int128PTy = llvm::PointerType::get(Int128Ty, 0);

diff  --git a/clang/test/CodeGen/aarch64-poly-add.c 
b/clang/test/CodeGen/aarch64-poly-add.c
new file mode 100644
index ..7abaa3e6951e
--- /dev/null
+++ b/clang/test/CodeGen/aarch64-poly-add.c
@@ -0,0 +1,85 @@
+// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
+// REQUIRES: aarch64-registered-target
+// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon \
+// RUN: -disable-O0-optnone -emit-llvm -o - %s | opt -S -mem2reg \
+// RUN:  | FileCheck %s
+
+#include 
+
+// CHECK-LABEL: @test_vadd_p8(
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:[[TMP0:%.*]] = xor <8 x i8> [[A:%.*]], [[B:%.*]]
+// CHECK-NEXT:ret <8 x i8> [[TMP0]]
+//
+poly8x8_t test_vadd_p8(poly8x8_t a, poly8x8_t b) {
+  return vadd_p8 (a, b);
+}
+
+// CHECK-LABEL: @test_vadd_p16(
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:[[TMP0:%.*]] = bitcast <4 x i16> [[A:%.*]] to <8 x i8>
+// CHECK-NEXT:[[TMP1:%.*]] = bitcast <4 x i16> [[B:%.*]] to <8 x i8>
+// CHECK-NEXT:[[TMP2:%.*]] = xor <8 x i8> [[TMP0]], [[TMP1]]
+// CHECK-NEXT:[[TMP3:%.*]] = bitcast <8 x i8> [[TMP2]] to <4 x i16>
+// CHECK-NEXT:ret <4 x i16> [[TMP3]]
+//
+poly16x4_t test_vadd_p16(poly16x4_t a, poly16x4_t b) {
+  return 

[clang] 61cca0f - [AArch64] Adding Neon Sm3 & Sm4 Intrinsics

2021-02-11 Thread Pengxuan Zheng via cfe-commits

Author: Pengxuan Zheng
Date: 2021-02-11T14:20:20-08:00
New Revision: 61cca0f2e5bbb6045bb27b822e34cd39c9c1acb1

URL: 
https://github.com/llvm/llvm-project/commit/61cca0f2e5bbb6045bb27b822e34cd39c9c1acb1
DIFF: 
https://github.com/llvm/llvm-project/commit/61cca0f2e5bbb6045bb27b822e34cd39c9c1acb1.diff

LOG: [AArch64] Adding Neon Sm3 & Sm4 Intrinsics

This adds SM3 and SM4 Intrinsics support for AArch64, specifically:
vsm3ss1q_u32
vsm3tt1aq_u32
vsm3tt1bq_u32
vsm3tt2aq_u32
vsm3tt2bq_u32
vsm3partw1q_u32
vsm3partw2q_u32
vsm4eq_u32
vsm4ekeyq_u32

Reviewed By: labrinea

Differential Revision: https://reviews.llvm.org/D95655

Added: 
clang/test/CodeGen/aarch64-neon-range-checks.c
clang/test/CodeGen/aarch64-neon-sm4-sm3.c
llvm/test/CodeGen/AArch64/neon-sm4-sm3.ll

Modified: 
clang/include/clang/Basic/arm_neon.td
clang/lib/CodeGen/CGBuiltin.cpp
llvm/include/llvm/IR/IntrinsicsAArch64.td
llvm/lib/Target/AArch64/AArch64InstrFormats.td
llvm/lib/Target/AArch64/AArch64InstrInfo.td

Removed: 




diff  --git a/clang/include/clang/Basic/arm_neon.td 
b/clang/include/clang/Basic/arm_neon.td
index 3b2a578f796e..9835c13c0dcd 100644
--- a/clang/include/clang/Basic/arm_neon.td
+++ b/clang/include/clang/Basic/arm_neon.td
@@ -1134,6 +1134,17 @@ def SHA1SU0 : SInst<"vsha1su0", "", "QUi">;
 def SHA256H : SInst<"vsha256h", "", "QUi">;
 def SHA256H2 : SInst<"vsha256h2", "", "QUi">;
 def SHA256SU1 : SInst<"vsha256su1", "", "QUi">;
+
+def SM3SS1 : SInst<"vsm3ss1", "", "QUi">;
+def SM3TT1A : SInst<"vsm3tt1a", "I", "QUi">;
+def SM3TT1B : SInst<"vsm3tt1b", "I", "QUi">;
+def SM3TT2A : SInst<"vsm3tt2a", "I", "QUi">;
+def SM3TT2B : SInst<"vsm3tt2b", "I", "QUi">;
+def SM3PARTW1 : SInst<"vsm3partw1", "", "QUi">;
+def SM3PARTW2 : SInst<"vsm3partw2", "", "QUi">;
+
+def SM4E : SInst<"vsm4e", "...", "QUi">;
+def SM4EKEY : SInst<"vsm4ekey", "...", "QUi">;
 }
 
 


diff  --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index f7a4295b11c5..a1d518697e60 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -5832,6 +5832,15 @@ static const ARMVectorIntrinsicInfo 
AArch64SIMDIntrinsicMap[] = {
   NEONMAP0(vshr_n_v),
   NEONMAP0(vshrn_n_v),
   NEONMAP0(vshrq_n_v),
+  NEONMAP1(vsm3partw1q_v, aarch64_crypto_sm3partw1, 0),
+  NEONMAP1(vsm3partw2q_v, aarch64_crypto_sm3partw2, 0),
+  NEONMAP1(vsm3ss1q_v, aarch64_crypto_sm3ss1, 0),
+  NEONMAP1(vsm3tt1aq_v, aarch64_crypto_sm3tt1a, 0),
+  NEONMAP1(vsm3tt1bq_v, aarch64_crypto_sm3tt1b, 0),
+  NEONMAP1(vsm3tt2aq_v, aarch64_crypto_sm3tt2a, 0),
+  NEONMAP1(vsm3tt2bq_v, aarch64_crypto_sm3tt2b, 0),
+  NEONMAP1(vsm4ekeyq_v, aarch64_crypto_sm4ekey, 0),
+  NEONMAP1(vsm4eq_v, aarch64_crypto_sm4e, 0),
   NEONMAP1(vst1_x2_v, aarch64_neon_st1x2, 0),
   NEONMAP1(vst1_x3_v, aarch64_neon_st1x3, 0),
   NEONMAP1(vst1_x4_v, aarch64_neon_st1x4, 0),
@@ -6710,6 +6719,22 @@ Value *CodeGenFunction::EmitCommonNeonBuiltinExpr(
 Ops.push_back(getAlignmentValue32(PtrOp0));
 return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "");
   }
+  case NEON::BI__builtin_neon_vsm3partw1q_v:
+  case NEON::BI__builtin_neon_vsm3partw2q_v:
+  case NEON::BI__builtin_neon_vsm3ss1q_v:
+  case NEON::BI__builtin_neon_vsm4ekeyq_v:
+  case NEON::BI__builtin_neon_vsm4eq_v: {
+Function *F = CGM.getIntrinsic(Int);
+return EmitNeonCall(F, Ops, "");
+  }
+  case NEON::BI__builtin_neon_vsm3tt1aq_v:
+  case NEON::BI__builtin_neon_vsm3tt1bq_v:
+  case NEON::BI__builtin_neon_vsm3tt2aq_v:
+  case NEON::BI__builtin_neon_vsm3tt2bq_v: {
+Function *F = CGM.getIntrinsic(Int);
+Ops[3] = Builder.CreateZExt(Ops[3], Int64Ty);
+return EmitNeonCall(F, Ops, "");
+  }
   case NEON::BI__builtin_neon_vst1_x2_v:
   case NEON::BI__builtin_neon_vst1q_x2_v:
   case NEON::BI__builtin_neon_vst1_x3_v:

diff  --git a/clang/test/CodeGen/aarch64-neon-range-checks.c 
b/clang/test/CodeGen/aarch64-neon-range-checks.c
new file mode 100644
index ..fa5454b955e6
--- /dev/null
+++ b/clang/test/CodeGen/aarch64-neon-range-checks.c
@@ -0,0 +1,32 @@
+// RUN: %clang_cc1 -triple aarch64-linux-gnu -target-feature +neon 
-target-feature +crypto -verify %s
+
+#include 
+
+void test_range_check_vsm3tt1a(uint32x4_t a, uint32x4_t b, uint32x4_t c) {
+  vsm3tt1aq_u32(a, b, c, 4); // expected-error {{argument value 4 is outside 
the valid range [0, 3]}}
+  vsm3tt1aq_u32(a, b, c, -1); // expected-error {{argument value -1 is outside 
the valid range [0, 3]}}
+  vsm3tt1aq_u32(a, b, c, 3);
+  vsm3tt1aq_u32(a, b, c, 0);
+}
+
+void test_range_check_vsm3tt1b(uint32x4_t a, uint32x4_t b, uint32x4_t c) {
+  vsm3tt1bq_u32(a, b, c, 4);// expected-error {{argument value 4 is outside 
the valid range [0, 3]}}
+  vsm3tt1bq_u32(a, b, 

[clang] 2bccd2b - [Driver] Allow -specs and -nostartfiles to be forwarded to GCC

2020-09-04 Thread Pengxuan Zheng via cfe-commits

Author: Pengxuan Zheng
Date: 2020-09-04T15:09:33-07:00
New Revision: 2bccd2b4350f887cc7fea1cc488690f58186c440

URL: 
https://github.com/llvm/llvm-project/commit/2bccd2b4350f887cc7fea1cc488690f58186c440
DIFF: 
https://github.com/llvm/llvm-project/commit/2bccd2b4350f887cc7fea1cc488690f58186c440.diff

LOG: [Driver] Allow -specs and -nostartfiles to be forwarded to GCC

With 6a75496836ea14bcfd2f4b59d35a1cad4ac58cee, these two options are no longer
forwarded to GCC. This patch restores the original behavior.

Reviewed By: MaskRay

Differential Revision: https://reviews.llvm.org/D87162

Added: 


Modified: 
clang/include/clang/Driver/Options.td
clang/test/Driver/gcc_forward.c

Removed: 




diff  --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 5f1668e701f1..4ba5d40117e7 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -2760,7 +2760,7 @@ def no_pie : Flag<["-"], "no-pie">, Alias;
 def noprebind : Flag<["-"], "noprebind">;
 def noprofilelib : Flag<["-"], "noprofilelib">;
 def noseglinkedit : Flag<["-"], "noseglinkedit">;
-def nostartfiles : Flag<["-"], "nostartfiles">;
+def nostartfiles : Flag<["-"], "nostartfiles">, Group;
 def nostdinc : Flag<["-"], "nostdinc">, Flags<[CoreOption]>;
 def nostdlibinc : Flag<["-"], "nostdlibinc">;
 def nostdincxx : Flag<["-"], "nostdinc++">, Flags<[CC1Option]>,
@@ -2861,7 +2861,7 @@ def segs__read__ : Joined<["-"], "segs_read_">;
 def shared_libgcc : Flag<["-"], "shared-libgcc">;
 def shared : Flag<["-", "--"], "shared">, Group;
 def single__module : Flag<["-"], "single_module">;
-def specs_EQ : Joined<["-", "--"], "specs=">;
+def specs_EQ : Joined<["-", "--"], "specs=">, Group;
 def specs : Separate<["-", "--"], "specs">, Flags<[Unsupported]>;
 def static_libgcc : Flag<["-"], "static-libgcc">;
 def static_libstdcxx : Flag<["-"], "static-libstdc++">;

diff  --git a/clang/test/Driver/gcc_forward.c b/clang/test/Driver/gcc_forward.c
index a99944f8f533..e6b0670d1a02 100644
--- a/clang/test/Driver/gcc_forward.c
+++ b/clang/test/Driver/gcc_forward.c
@@ -1,7 +1,8 @@
 // RUN: %clang -### %s -target aarch64-none-elf \
-// RUN:   --coverage -e _start -fuse-ld=lld --ld-path=ld -nostdlib -r 
-rdynamic -static -static-pie \
+// RUN:   --coverage -e _start -fuse-ld=lld --ld-path=ld -nostartfiles \
+// RUN:   -nostdlib -r -rdynamic -specs=nosys.specs -static -static-pie \
 // RUN:   2>&1 | FileCheck --check-prefix=FORWARD %s
-// FORWARD: gcc{{[^"]*}}" "--coverage" "-fuse-ld=lld" "--ld-path=ld" 
"-nostdlib" "-rdynamic" "-static" "-static-pie" "-o" "a.out" "{{.*}}.o" "-e" 
"_start" "-r"
+// FORWARD: gcc{{[^"]*}}" "--coverage" "-fuse-ld=lld" "--ld-path=ld" 
"-nostartfiles" "-nostdlib" "-rdynamic" "-specs=nosys.specs" "-static" 
"-static-pie" "-o" "a.out" "{{.*}}.o" "-e" "_start" "-r"
 
 // Check that we don't try to forward -Xclang or -mlinker-version to GCC.
 // PR12920 -- Check also we may not forward W_Group options to GCC.



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r362637 - [cmake] Remove duplicate TestingSupport library for linking

2019-06-08 Thread Pengxuan Zheng via cfe-commits
Author: pzheng
Date: Wed Jun  5 12:44:08 2019
New Revision: 362637

URL: http://llvm.org/viewvc/llvm-project?rev=362637=rev
Log:
[cmake] Remove duplicate TestingSupport library for linking

Summary: This patch cleans up a duplicate use of TestingSupport library.

Subscribers: mgorny, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D62924

Modified:
cfe/trunk/unittests/Tooling/CMakeLists.txt

Modified: cfe/trunk/unittests/Tooling/CMakeLists.txt
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Tooling/CMakeLists.txt?rev=362637=362636=362637=diff
==
--- cfe/trunk/unittests/Tooling/CMakeLists.txt (original)
+++ cfe/trunk/unittests/Tooling/CMakeLists.txt Wed Jun  5 12:44:08 2019
@@ -1,7 +1,6 @@
 set(LLVM_LINK_COMPONENTS
   ${LLVM_TARGETS_TO_BUILD}
   Support
-  TestingSupport
   )
 
 # By default MSVC has a 2^16 limit on the number of sections in an object file,


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits