[clang] 36430d4 - [Driver] Use normalized triples for per-target runtimes

2021-04-27 Thread Petr Hosek via cfe-commits

Author: Petr Hosek
Date: 2021-04-27T22:31:36-07:00
New Revision: 36430d44edba9063a08493c89864edf5f071d08c

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

LOG: [Driver] Use normalized triples for per-target runtimes

This is a partial revert of b4537c3f51bc6c011ddd9c10b80043ac4ce16a01
based on the discussion in https://reviews.llvm.org/D101194. Rather
than using the getMultiarchTriple, we use the getTripleString.

Added: 

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/aarch64-unknown-fuchsia/asan+noexcept/libc++.so

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/aarch64-unknown-fuchsia/asan/libc++.so

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/aarch64-unknown-fuchsia/libc++.so

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/aarch64-unknown-fuchsia/noexcept/libc++.so

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/aarch64-unknown-fuchsia/relative-vtables+noexcept/libc++.so

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/aarch64-unknown-fuchsia/relative-vtables/libc++.so

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/x86_64-unknown-fuchsia/asan+noexcept/libc++.so

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/x86_64-unknown-fuchsia/asan/libc++.so

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/x86_64-unknown-fuchsia/hwasan+noexcept/libc++.so

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/x86_64-unknown-fuchsia/hwasan/libc++.so

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/x86_64-unknown-fuchsia/libc++.so

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/x86_64-unknown-fuchsia/noexcept/libc++.so

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/x86_64-unknown-fuchsia/relative-vtables+asan+noexcept/libc++.so

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/x86_64-unknown-fuchsia/relative-vtables+asan/libc++.so

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/x86_64-unknown-fuchsia/relative-vtables+hwasan+noexcept/libc++.so

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/x86_64-unknown-fuchsia/relative-vtables+hwasan/libc++.so

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/x86_64-unknown-fuchsia/relative-vtables+noexcept/libc++.so

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/x86_64-unknown-fuchsia/relative-vtables/libc++.so

clang/test/Driver/Inputs/basic_linux_libcxx_tree/usr/lib/x86_64-unknown-linux-gnu/.keep

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/aarch64-unknown-fuchsia/.keep

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/aarch64-unknown-fuchsia/libclang_rt.asan-preinit.a

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/aarch64-unknown-fuchsia/libclang_rt.asan.so

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/aarch64-unknown-fuchsia/libclang_rt.builtins.a

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/aarch64-unknown-fuchsia/libclang_rt.fuzzer.a

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/aarch64-unknown-fuchsia/libclang_rt.lsan.a

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/aarch64-unknown-fuchsia/libclang_rt.profile.a

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/aarch64-unknown-fuchsia/libclang_rt.scudo.so

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/aarch64-unknown-fuchsia/libclang_rt.xray-basic.a

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/aarch64-unknown-fuchsia/libclang_rt.xray.a

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/i386-unknown-linux-gnu/.keep

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/i386-unknown-linux-gnu/libclang_rt.builtins.a

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/riscv64-unknown-fuchsia/libclang_rt.builtins.a

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/x86_64-unknown-fuchsia/.keep

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/x86_64-unknown-fuchsia/libclang_rt.asan-preinit.a

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/x86_64-unknown-fuchsia/libclang_rt.asan.so

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/x86_64-unknown-fuchsia/libclang_rt.builtins.a

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/x86_64-unknown-fuchsia/libclang_rt.fuzzer.a

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/x86_64-unknown-fuchsia/libclang_rt.lsan.a

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/x86_64-unknown-fuchsia/libclang_rt.profile.a

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/x86_64-unknown-fuchsia/libclang_rt.scudo.so

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/x86_64-unknown-fuchsia/libclang_rt.xray-basic.a


[PATCH] D91054: [Clang][OpenMP] Frontend work for sections - D89671

2021-04-27 Thread Johannes Doerfert via Phabricator via cfe-commits
jdoerfert accepted this revision.
jdoerfert added a comment.
This revision is now accepted and ready to land.

In D91054#2711654 , @fghanim wrote:

>> This is generally fine with me, @fghanim @Meinersbur any concerns?
>
> I have none. All good for me

Then LGTM.

In D91054#2721194 , @Meinersbur wrote:

> In D91054#2709712 , @jdoerfert wrote:
>
>> OK, we really need to provide the PrivCB impl so we can start removing clang 
>> code. 
>> This is generally fine with me, @fghanim @Meinersbur any concerns?
>
> It might be OK to start with the functionality that replaces directives with 
> single runtime calls, but I don't think implementations of code-associated 
> directives are ready enough.

Not sure what "not ready enough" means. If the functionality is equivalent we 
can switch over and remove duplication, if not, we can't.
Take `omp master`, which has associated code, but for which I'm not aware of a 
reason why we can't switch over. We should double check and if we can't find a 
problem we do it.
There is no point in waiting if we don't look at / work on the stuff.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D91054/new/

https://reviews.llvm.org/D91054

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


[PATCH] D100810: Use `GNUInstallDirs` to support custom installation dirs. -- LLVM

2021-04-27 Thread John Ericson via Phabricator via cfe-commits
Ericson2314 updated this revision to Diff 341071.
Ericson2314 added a comment.
Herald added subscribers: openmp-commits, lldb-commits, cfe-commits, jvesely.
Herald added projects: clang, LLDB, OpenMP.

Quote variable usages


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100810/new/

https://reviews.llvm.org/D100810

Files:
  clang/tools/scan-build/CMakeLists.txt
  libclc/CMakeLists.txt
  lldb/cmake/modules/FindLibEdit.cmake
  llvm/CMakeLists.txt
  llvm/cmake/modules/AddLLVM.cmake
  llvm/cmake/modules/AddSphinxTarget.cmake
  llvm/cmake/modules/CMakeLists.txt
  llvm/cmake/modules/LLVMInstallSymlink.cmake
  llvm/docs/CMake.rst
  llvm/examples/Bye/CMakeLists.txt
  llvm/include/llvm/CMakeLists.txt
  llvm/tools/llvm-config/BuildVariables.inc.in
  llvm/tools/llvm-config/llvm-config.cpp
  llvm/tools/lto/CMakeLists.txt
  llvm/tools/opt-viewer/CMakeLists.txt
  llvm/tools/remarks-shlib/CMakeLists.txt
  openmp/runtime/src/CMakeLists.txt

Index: openmp/runtime/src/CMakeLists.txt
===
--- openmp/runtime/src/CMakeLists.txt
+++ openmp/runtime/src/CMakeLists.txt
@@ -319,7 +319,7 @@
 install(CODE "execute_process(COMMAND \"\${CMAKE_COMMAND}\" -E copy \"${LIBOMP_LIB_FILE}\"
   \"${alias}${LIBOMP_LIBRARY_SUFFIX}\" WORKING_DIRECTORY \${CMAKE_INSTALL_PREFIX}/bin)")
 install(CODE "execute_process(COMMAND \"\${CMAKE_COMMAND}\" -E copy \"${LIBOMP_IMP_LIB_FILE}\"
-  \"${alias}${CMAKE_STATIC_LIBRARY_SUFFIX}\" WORKING_DIRECTORY \${CMAKE_INSTALL_PREFIX}/${OPENMP_INSTALL_LIBDIR})")
+  \"${alias}${CMAKE_STATIC_LIBRARY_SUFFIX}\" WORKING_DIRECTORY \"\${CMAKE_INSTALL_PREFIX}/${OPENMP_INSTALL_LIBDIR}\")")
   endforeach()
 else()
 
@@ -331,7 +331,7 @@
 foreach(alias IN LISTS LIBOMP_ALIASES)
   install(CODE "execute_process(COMMAND \"\${CMAKE_COMMAND}\" -E create_symlink \"${LIBOMP_LIB_FILE}\"
 \"${alias}${LIBOMP_LIBRARY_SUFFIX}\" WORKING_DIRECTORY
-\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${OPENMP_INSTALL_LIBDIR})")
+\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${OPENMP_INSTALL_LIBDIR}\")")
 endforeach()
   endif()
 endif()
Index: llvm/tools/remarks-shlib/CMakeLists.txt
===
--- llvm/tools/remarks-shlib/CMakeLists.txt
+++ llvm/tools/remarks-shlib/CMakeLists.txt
@@ -19,7 +19,7 @@
   endif()
   
   install(FILES ${LLVM_MAIN_INCLUDE_DIR}/llvm-c/Remarks.h
-DESTINATION include/llvm-c
+DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/llvm-c"
 COMPONENT Remarks)
 
   if (APPLE)
Index: llvm/tools/opt-viewer/CMakeLists.txt
===
--- llvm/tools/opt-viewer/CMakeLists.txt
+++ llvm/tools/opt-viewer/CMakeLists.txt
@@ -8,7 +8,7 @@
 
 foreach (file ${files})
   install(PROGRAMS ${file}
-DESTINATION share/opt-viewer
+DESTINATION "${CMAKE_INSTALL_DATADIR}/opt-viewer"
 COMPONENT opt-viewer)
 endforeach (file)
 
Index: llvm/tools/lto/CMakeLists.txt
===
--- llvm/tools/lto/CMakeLists.txt
+++ llvm/tools/lto/CMakeLists.txt
@@ -25,7 +25,7 @@
 intrinsics_gen)
 
 install(FILES ${LLVM_MAIN_INCLUDE_DIR}/llvm-c/lto.h
-  DESTINATION include/llvm-c
+  DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/llvm-c"
   COMPONENT LTO)
 
 if (APPLE)
Index: llvm/tools/llvm-config/llvm-config.cpp
===
--- llvm/tools/llvm-config/llvm-config.cpp
+++ llvm/tools/llvm-config/llvm-config.cpp
@@ -357,10 +357,16 @@
 ("-I" + ActiveIncludeDir + " " + "-I" + ActiveObjRoot + "/include");
   } else {
 ActivePrefix = CurrentExecPrefix;
-ActiveIncludeDir = ActivePrefix + "/include";
-SmallString<256> path(StringRef(LLVM_TOOLS_INSTALL_DIR));
-sys::fs::make_absolute(ActivePrefix, path);
-ActiveBinDir = std::string(path.str());
+{
+  SmallString<256> Path(StringRef(LLVM_INSTALL_INCLUDEDIR));
+  sys::fs::make_absolute(ActivePrefix, Path);
+  ActiveIncludeDir = std::string(Path.str());
+}
+{
+  SmallString<256> Path(StringRef(LLVM_INSTALL_BINDIR));
+  sys::fs::make_absolute(ActivePrefix, Path);
+  ActiveBinDir = std::string(Path.str());
+}
 ActiveLibDir = ActivePrefix + "/lib" + LLVM_LIBDIR_SUFFIX;
 ActiveCMakeDir = ActiveLibDir + "/cmake/llvm";
 ActiveIncludeOption = "-I" + ActiveIncludeDir;
Index: llvm/tools/llvm-config/BuildVariables.inc.in
===
--- llvm/tools/llvm-config/BuildVariables.inc.in
+++ llvm/tools/llvm-config/BuildVariables.inc.in
@@ -23,6 +23,8 @@
 #define LLVM_CXXFLAGS "@LLVM_CXXFLAGS@"
 #define LLVM_BUILDMODE "@LLVM_BUILDMODE@"
 #define LLVM_LIBDIR_SUFFIX "@LLVM_LIBDIR_SUFFIX@"
+#define LLVM_INSTALL_BINDIR "@CMAKE_INSTALL_BINDIR@"
+#define LLVM_INSTALL_INCLUDEDIR "@CMAKE_INSTALL_INCLUDEDIR@"
 #define LLVM_TARGETS_BUILT 

[PATCH] D99350: [OPENMP]Fix PR49649: The introduction of $ref globals is not always valid.

2021-04-27 Thread Johannes Doerfert via Phabricator via cfe-commits
jdoerfert added a comment.

The cast was never the problem but the fact that the `$ref` lives in the global 
address space while the global value might be in the shared one.
D101030  gives a way out here by not creating 
`$ref` variables if there is no host version of a global. This makes sense 
because we don't need to copy to the global ever.
So, users can have static globals in shared memory by ensuring they are not 
host accessible. We probably should emit an error if they try to do global in 
shared memory
that has a host version.

Long story short, this cast won't help.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D99350/new/

https://reviews.llvm.org/D99350

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


[PATCH] D99530: [OPENMP]Fix PR49098: respect firstprivate of declare target variable.

2021-04-27 Thread Johannes Doerfert via Phabricator via cfe-commits
jdoerfert accepted this revision.
jdoerfert added a comment.
This revision is now accepted and ready to land.

LG


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D99530/new/

https://reviews.llvm.org/D99530

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


[PATCH] D99762: [OPENMP]Fix PR49777: Clang should not try to specialize orphaned directives in device codegen.

2021-04-27 Thread Johannes Doerfert via Phabricator via cfe-commits
jdoerfert added a comment.

The bug has been fixed by D95976  already, 
I'll update the bug report now.
Also, the tracking of Generic/SPMD mode in clang is about to be finally 
removed, new code depending on that is short-lived.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D99762/new/

https://reviews.llvm.org/D99762

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


[PATCH] D100581: [Clang] -Wunused-but-set-parameter and -Wunused-but-set-variable

2021-04-27 Thread Dmitry Babokin via Phabricator via cfe-commits
dbabokin added a comment.

One more false-positive:

  void foo() {
extern int yydebug;
yydebug = 1;
  }

It was triggered in ISPC build.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100581/new/

https://reviews.llvm.org/D100581

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


[PATCH] D101194: [Driver] Push multiarch path setup to individual drivers

2021-04-27 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added a comment.

In D101194#2721682 , @phosek wrote:

> In D101194#2721643 , @MaskRay wrote:
>
>> multiarch is not consistent within GCC, either (also note that not all GCC 
>> installations are configured with multiarch. `--print-multiarch` prints an 
>> empty line).
>> I have tried various GCC installations and made a summary 
>> https://maskray.me/blog/2021-03-28-compiler-driver-and-cross-compilation : 
>> even if the multiarch triple for x86_64 Linux is `x86_64-linux-gnu`, there 
>> are a few `x86_64-pc-linux-gnu` paths. (You can configure and get 
>> `x86_64-pc-linux-gnu-gcc` or `x86_64-unknown-linux-gnu-gcc`)
>> For musl systems (`*-linux-musl`), multiarch doesn't make sense. If we use 
>> multiarch, we'll need to invent `*-linux-musl` for them.
>>
>> For some GCC related paths, we have no choice but to detect their paths. For 
>> entirely clang internal stuff (runtime library paths), I actually appreciate 
>> that we have a useful, un-normalized 'vendor' part.
>> It gives users a choice if they want to have `x86_64-pc[12345]-linux-gnu`. 
>> This argument is weak, but the other arguments are probably stronger. My 
>> viewpoint is: if we can avoid multiarch, just avoid it.
>
> SGTM, I'll partially revert this change and switch back to using normalized 
> triples if that's fine with you.

LG, thanks!

>> I haven't figured out how to do a proper runtime build...
>>
>> `-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=on -DLLVM_RUNTIME_TARGETS=default 
>> -DLLVM_ENABLE_RUNTIMES='compiler-rt;libcxx;libunwind' ` gives me
>>
>>   CMake Error at /usr/share/cmake-3.18/Modules/ExternalProject.cmake:3152 
>> (add_custom_target): 
>>  
>>   
>> add_custom_target cannot create target "builtins" because another target 
>>  
>>  
>>
>> with the same name already exists.  The existing target is a custom 
>> target   
>>  
>> 
>> created in source directory  
>>  
>>  
>>
>> "/home/maskray/llvm/compiler-rt/lib/builtins".  See  
>>  
>>  
>>   
>> documentation for policy CMP0002 for more details.   
>>  
>>  
>>
>>   Call Stack (most recent call first):   
>>  
>>  
>>
>> cmake/modules/LLVMExternalProjectUtils.cmake:283 (ExternalProject_Add)   
>>  
>>  
>>
>> runtimes/CMakeLists.txt:81 (llvm_ExternalProject_Add)
>>  
>>  
>>
>> runtimes/CMakeLists.txt:134 (builtin_default_target)
>
> You also need `-DLLVM_BUILTIN_TARGETS=default`.

Yes, `-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=on -DLLVM_RUNTIME_TARGETS=default 
-DLLVM_ENABLE_RUNTIMES='compiler-rt;libcxx;libunwind' 
-DLLVM_BUILTIN_TARGETS=default -DLLVM_ENABLE_PROJECTS='clang;lld'` works.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101194/new/

https://reviews.llvm.org/D101194

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


[PATCH] D101194: [Driver] Push multiarch path setup to individual drivers

2021-04-27 Thread Petr Hosek via Phabricator via cfe-commits
phosek added a comment.

In D101194#2721643 , @MaskRay wrote:

> multiarch is not consistent within GCC, either (also note that not all GCC 
> installations are configured with multiarch. `--print-multiarch` prints an 
> empty line).
> I have tried various GCC installations and made a summary 
> https://maskray.me/blog/2021-03-28-compiler-driver-and-cross-compilation : 
> even if the multiarch triple for x86_64 Linux is `x86_64-linux-gnu`, there 
> are a few `x86_64-pc-linux-gnu` paths. (You can configure and get 
> `x86_64-pc-linux-gnu-gcc` or `x86_64-unknown-linux-gnu-gcc`)
> For musl systems (`*-linux-musl`), multiarch doesn't make sense. If we use 
> multiarch, we'll need to invent `*-linux-musl` for them.
>
> For some GCC related paths, we have no choice but to detect their paths. For 
> entirely clang internal stuff (runtime library paths), I actually appreciate 
> that we have a useful, un-normalized 'vendor' part.
> It gives users a choice if they want to have `x86_64-pc[12345]-linux-gnu`. 
> This argument is weak, but the other arguments are probably stronger. My 
> viewpoint is: if we can avoid multiarch, just avoid it.

SGTM, I'll partially revert this change and switch back to using normalized 
triples if that's fine with you.

> I haven't figured out how to do a proper runtime build...
>
> `-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=on -DLLVM_RUNTIME_TARGETS=default 
> -DLLVM_ENABLE_RUNTIMES='compiler-rt;libcxx;libunwind' ` gives me
>
>   CMake Error at /usr/share/cmake-3.18/Modules/ExternalProject.cmake:3152 
> (add_custom_target):  
>   
> 
> add_custom_target cannot create target "builtins" because another target  
>   
>   
> 
> with the same name already exists.  The existing target is a custom 
> target
>   
>   
> created in source directory   
>   
>   
> 
> "/home/maskray/llvm/compiler-rt/lib/builtins".  See   
>   
>   
>
> documentation for policy CMP0002 for more details.
>   
>   
> 
>   Call Stack (most recent call first):
>   
>   
> 
> cmake/modules/LLVMExternalProjectUtils.cmake:283 (ExternalProject_Add)
>   
>   
> 
> runtimes/CMakeLists.txt:81 (llvm_ExternalProject_Add) 
>   
>   
> 
> runtimes/CMakeLists.txt:134 (builtin_default_target)

You also need `-DLLVM_BUILTIN_TARGETS=default`.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101194/new/

https://reviews.llvm.org/D101194

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


[PATCH] D99741: [RISCV][Clang] Add some RVV Floating-Point intrinsic functions. (vfclass, vfmerge, vfrec7, vfrsqrt7, vfsqrt)

2021-04-27 Thread Craig Topper via Phabricator via cfe-commits
craig.topper added a comment.

In D99741#2721596 , @thakis wrote:

> In D99741#2721235 , @craig.topper 
> wrote:
>
>> I believe we had reductions at builds 7601 and 8175.
>>
>> It looks like there may have been an increase between builds 7979 and 7991 
>> the build failed for a while there. I suspect "e951b04 
>>  
>> [AArch64][SVE] Regression test all ACLE tests with C++" as it added a quite 
>> a few RUN lines.
>>
>> I think we also caused an increase at build 8202 when these 4 commits went 
>> in 
>> bd32c2d 
>>  
>> [RISCV] Implement the vwcvt{u}.x.x.v/vncvt.x.x.w builtin.
>>  
>>  
>>  
>> 645c5f2 
>>  
>> [RISCV] Implement the pseudo compare builtin.
>>  
>>  
>>  
>> bfb3fca 
>>  
>> [RISCV] Implement the vfabs.v/vfneg.v builtin.   
>>  
>>  
>>  
>> 4b24341 
>>  
>> [RISCV] Implement the vmmv.m/vmnot.m builtin.
>
> Any disagreement about reverting riscv builtin changes until there's some way 
> to test them without increasing check-clang time by 20%?

We're preparing a patch to remove to stop testing both rv32 and rv64 on every 
test. That should reduce the time by half. What is an acceptable number?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D99741/new/

https://reviews.llvm.org/D99741

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


[PATCH] D100776: [clang/Basic] Make TargetInfo.h not use DataLayout again

2021-04-27 Thread Jordan Rupprecht via Phabricator via cfe-commits
rupprecht added a comment.

Landed 44e2247dcd04f3421164b085094eb575270564ba 
 to fix 
LLDB. If you decide to go in a different direction again, please adjust that 
fix accordingly.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100776/new/

https://reviews.llvm.org/D100776

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


[PATCH] D101194: [Driver] Push multiarch path setup to individual drivers

2021-04-27 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added a comment.

In D101194#2721597 , @phosek wrote:

> In D101194#2721390 , @MaskRay wrote:
>
>> I thought this was NFC:(
>>
>> Yeah, personally I think the previous behavior 
>> (`lib/clang/13.0.0/lib/x86_64-unknown-linux-gnu/libclang_rt.asan.a`) is 
>> slightly better than the new 
>> `lib/clang/13.0.0/lib/x86_64-linux-gnu/libclang_rt.asan.a`.
>> multiarch paths are suitable for GCC specific directories (`lib/$triple`, 
>> libstdc++ `aarch64-linux-gnu/include/c++/10`, etc) but llvm specific 
>> libraries don't necessarily use that.
>
> I should have been clear, sorry about that. I think there are three separate 
> issues:
>
> 1. Rather than trying various triple versions, we should use one canonical 
> spelling when searching for Clang's standard and runtime libraries. That 
> means less system calls and better error messages, this is what this change 
> was primarily intended to do.
> 2. Following from the previous point, we need to decide which canonical 
> spelling to use. Since we're trying to use the multiarch layout, I was 
> following the Debian documentation  
> which is closest thing to a spec I'm aware of. The alternative would be to 
> use the normalized target, the main disadvantage being that we would be 
> diverging from existing quasi standard.
> 3. `-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON` gives you a different result 
> depending on how you spell the targets in `-DLLVM_BUILTIN_TARGETS=` and 
> `-DLLVM_RUNTIME_TARGETS=`, this is what @bjope ran into and I'd consider that 
> a bug since the directory layout is an implementation detail and we should be 
> able to change it without users having to change their build.
>
> I'm working on a solution for #3 and I should have a patch ready soon. I'm 
> curious about your thoughts on #2.

multiarch is not consistent within GCC, either (also note that not all GCC 
installations are configured with multiarch.).
I have tried some examples, see 
https://maskray.me/blog/2021-03-28-compiler-driver-and-cross-compilation : even 
if the multiarch triple for x86_64 Linux is `x86_64-linux-gnu`, there are a few 
`x86_64-pc-linux-gnu` paths. (You can configure and get 
`x86_64-pc-linux-gnu-gcc` or `x86_64-unknown-linux-gnu-gcc`)
For musl systems (`*-linux-musl`), multiarch doesn't make sense. If we use 
multiarch, we'll need to invent `*-linux-musl` for them.

For some GCC related paths, we have no choice but to detect their paths. For 
entirely clang internal stuff (runtime library paths), I actually appreciate 
that we have a useful, un-normalized 'vendor' part.
It gives users a choice if they want to have `x86_64-pc[12345]-linux-gnu`. This 
argument is weak, but the other arguments are probably stronger.

---

I haven't figured out how to do a proper runtime build...

`-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=on -DLLVM_RUNTIME_TARGETS=default 
-DLLVM_ENABLE_RUNTIMES='compiler-rt;libcxx;libunwind' ` gives me

  CMake Error at /usr/share/cmake-3.18/Modules/ExternalProject.cmake:3152 
(add_custom_target):


add_custom_target cannot create target "builtins" because another target


  
with the same name already exists.  The existing target is a custom target  


  
created in source directory 


  
"/home/maskray/llvm/compiler-rt/lib/builtins".  See 


 
documentation for policy CMP0002 for more details.  


  
  Call Stack (most recent call first):  


[PATCH] D99381: [compiler-rt][hwasan] Add Fuchsia-specific sanitizer platform limits

2021-04-27 Thread Petr Hosek via Phabricator via cfe-commits
phosek added a comment.

What I think @vitalybuka meant is keeping `sanitizer_platform_limits_fuchsia.h` 
as you had it, but including it unconditionally. Since the entire file is 
wrapped in `#if SANITIZER_FUCHSIA ... #endif`, the inclusion would be a no-op 
on platforms other than Fuchsia so no need to wrap the `#include` in `#if 
SANITIZER_FUCHSIA` as well.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D99381/new/

https://reviews.llvm.org/D99381

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


[PATCH] D100776: [clang/Basic] Make TargetInfo.h not use DataLayout again

2021-04-27 Thread Nico Weber via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG0f1137ba79c0: [clang/Basic] Make TargetInfo.h not use 
DataLayout again (authored by thakis).
Herald added a project: clang.

Changed prior to commit:
  https://reviews.llvm.org/D100776?vs=338558=341060#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100776/new/

https://reviews.llvm.org/D100776

Files:
  clang/include/clang/Basic/TargetInfo.h
  clang/include/clang/CodeGen/BackendUtil.h
  clang/lib/AST/Mangle.cpp
  clang/lib/Basic/CMakeLists.txt
  clang/lib/Basic/TargetInfo.cpp
  clang/lib/Basic/Targets/AArch64.cpp
  clang/lib/Basic/Targets/AMDGPU.cpp
  clang/lib/Basic/Targets/ARM.cpp
  clang/lib/Basic/Targets/PPC.h
  clang/lib/Basic/Targets/X86.h
  clang/lib/CodeGen/BackendUtil.cpp
  clang/lib/CodeGen/CodeGenAction.cpp
  clang/lib/CodeGen/ModuleBuilder.cpp
  clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp
  clang/lib/Frontend/InitPreprocessor.cpp
  clang/unittests/AST/DeclTest.cpp
  llvm/utils/gn/secondary/clang/lib/Basic/BUILD.gn
  llvm/utils/gn/secondary/clang/tools/clang-format/BUILD.gn

Index: llvm/utils/gn/secondary/clang/tools/clang-format/BUILD.gn
===
--- llvm/utils/gn/secondary/clang/tools/clang-format/BUILD.gn
+++ llvm/utils/gn/secondary/clang/tools/clang-format/BUILD.gn
@@ -11,6 +11,7 @@
 "//clang/lib/AST/",
 "//clang/lib/Frontend/",
 "//clang/lib/Sema/",
+"//llvm/lib/IR",
   ]
   sources = [ "ClangFormat.cpp" ]
 }
Index: llvm/utils/gn/secondary/clang/lib/Basic/BUILD.gn
===
--- llvm/utils/gn/secondary/clang/lib/Basic/BUILD.gn
+++ llvm/utils/gn/secondary/clang/lib/Basic/BUILD.gn
@@ -49,7 +49,6 @@
 "//clang/include/clang/Sema:AttrParsedAttrKinds",
 "//clang/include/clang/Sema:AttrSpellingListIndex",
 "//llvm/include/llvm/Config:llvm-config",
-"//llvm/lib/IR",
 "//llvm/lib/MC",
 "//llvm/lib/Support",
   ]
Index: clang/unittests/AST/DeclTest.cpp
===
--- clang/unittests/AST/DeclTest.cpp
+++ clang/unittests/AST/DeclTest.cpp
@@ -75,7 +75,7 @@
   auto AST =
   tooling::buildASTFromCodeWithArgs(Code, {"-target", "i386-apple-darwin"});
   ASTContext  = AST->getASTContext();
-  assert(Ctx.getTargetInfo().getDataLayout().getGlobalPrefix() &&
+  assert(Ctx.getTargetInfo().getUserLabelPrefix() == StringRef("_") &&
  "Expected target to have a global prefix");
   DiagnosticsEngine  = AST->getDiagnostics();
 
@@ -118,7 +118,7 @@
   auto AST =
   tooling::buildASTFromCodeWithArgs(Code, {"-target", "i386-apple-darwin"});
   ASTContext  = AST->getASTContext();
-  assert(Ctx.getTargetInfo().getDataLayout().getGlobalPrefix() &&
+  assert(Ctx.getTargetInfo().getUserLabelPrefix() == StringRef("_") &&
  "Expected target to have a global prefix");
   DiagnosticsEngine  = AST->getDiagnostics();
 
Index: clang/lib/Frontend/InitPreprocessor.cpp
===
--- clang/lib/Frontend/InitPreprocessor.cpp
+++ clang/lib/Frontend/InitPreprocessor.cpp
@@ -985,8 +985,7 @@
   DefineFastIntType(64, true, TI, Builder);
   DefineFastIntType(64, false, TI, Builder);
 
-  char UserLabelPrefix[2] = {TI.getDataLayout().getGlobalPrefix(), 0};
-  Builder.defineMacro("__USER_LABEL_PREFIX__", UserLabelPrefix);
+  Builder.defineMacro("__USER_LABEL_PREFIX__", TI.getUserLabelPrefix());
 
   if (LangOpts.FastMath || LangOpts.FiniteMathOnly)
 Builder.defineMacro("__FINITE_MATH_ONLY__", "1");
Index: clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp
===
--- clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp
+++ clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp
@@ -166,7 +166,7 @@
 Ctx = 
 VMContext.reset(new llvm::LLVMContext());
 M.reset(new llvm::Module(MainFileName, *VMContext));
-M->setDataLayout(Ctx->getTargetInfo().getDataLayout());
+M->setDataLayout(Ctx->getTargetInfo().getDataLayoutString());
 Builder.reset(new CodeGen::CodeGenModule(
 *Ctx, HeaderSearchOpts, PreprocessorOpts, CodeGenOpts, *M, Diags));
 
@@ -245,7 +245,7 @@
   return;
 
 M->setTargetTriple(Ctx.getTargetInfo().getTriple().getTriple());
-M->setDataLayout(Ctx.getTargetInfo().getDataLayout());
+M->setDataLayout(Ctx.getTargetInfo().getDataLayoutString());
 
 // PCH files don't have a signature field in the control block,
 // but LLVM detects DWO CUs by looking for a non-zero DWO id.
@@ -295,7 +295,7 @@
   llvm::SmallString<0> Buffer;
   clang::EmitBackendOutput(
   Diags, HeaderSearchOpts, CodeGenOpts, TargetOpts, LangOpts,
-  Ctx.getTargetInfo().getDataLayout(), M.get(),
+  

[clang] 0f1137b - [clang/Basic] Make TargetInfo.h not use DataLayout again

2021-04-27 Thread Nico Weber via cfe-commits

Author: Nico Weber
Date: 2021-04-27T22:26:10-04:00
New Revision: 0f1137ba79c0b3f1ca638e01082443ba5ccde03c

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

LOG: [clang/Basic] Make TargetInfo.h not use DataLayout again

Reverts parts of https://reviews.llvm.org/D17183, but keeps the
resetDataLayout() API and adds an assert that checks that datalayout string and
user label prefix are in sync.

Approach 1 in https://reviews.llvm.org/D17183#2653279
Reduces number of TUs build for 'clang-format' from 689 to 575.

I also implemented approach 2 in D100764. If someone feels motivated
to make us use DataLayout more, it's easy to revert this change here
and go with D100764 instead. I don't plan on doing more work in this
area though, so I prefer going with the smaller, more self-consistent change.

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

Added: 


Modified: 
clang/include/clang/Basic/TargetInfo.h
clang/include/clang/CodeGen/BackendUtil.h
clang/lib/AST/Mangle.cpp
clang/lib/Basic/CMakeLists.txt
clang/lib/Basic/TargetInfo.cpp
clang/lib/Basic/Targets/AArch64.cpp
clang/lib/Basic/Targets/AMDGPU.cpp
clang/lib/Basic/Targets/ARM.cpp
clang/lib/Basic/Targets/PPC.h
clang/lib/Basic/Targets/X86.h
clang/lib/CodeGen/BackendUtil.cpp
clang/lib/CodeGen/CodeGenAction.cpp
clang/lib/CodeGen/ModuleBuilder.cpp
clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp
clang/lib/Frontend/InitPreprocessor.cpp
clang/unittests/AST/DeclTest.cpp
llvm/utils/gn/secondary/clang/lib/Basic/BUILD.gn
llvm/utils/gn/secondary/clang/tools/clang-format/BUILD.gn

Removed: 




diff  --git a/clang/include/clang/Basic/TargetInfo.h 
b/clang/include/clang/Basic/TargetInfo.h
index 1655f932dad2..77b474633359 100644
--- a/clang/include/clang/Basic/TargetInfo.h
+++ b/clang/include/clang/Basic/TargetInfo.h
@@ -40,7 +40,6 @@
 
 namespace llvm {
 struct fltSemantics;
-class DataLayout;
 }
 
 namespace clang {
@@ -205,7 +204,8 @@ class TargetInfo : public virtual TransferrableTargetInfo,
 
   unsigned char MaxAtomicPromoteWidth, MaxAtomicInlineWidth;
   unsigned short SimdDefaultAlign;
-  std::unique_ptr DataLayout;
+  std::string DataLayoutString;
+  const char *UserLabelPrefix;
   const char *MCountName;
   unsigned char RegParmMax, SSERegParmMax;
   TargetCXXABI TheCXXABI;
@@ -238,7 +238,9 @@ class TargetInfo : public virtual TransferrableTargetInfo,
   // TargetInfo Constructor.  Default initializes all fields.
   TargetInfo(const llvm::Triple );
 
-  void resetDataLayout(StringRef DL);
+  // UserLabelPrefix must match DL's getGlobalPrefix() when interpreted
+  // as a DataLayout object.
+  void resetDataLayout(StringRef DL, const char *UserLabelPrefix = "");
 
 public:
   /// Construct a target for the given options.
@@ -747,6 +749,12 @@ class TargetInfo : public virtual TransferrableTargetInfo,
 return PointerWidth;
   }
 
+  /// \brief Returns the default value of the __USER_LABEL_PREFIX__ macro,
+  /// which is the prefix given to user symbols by default.
+  ///
+  /// On most platforms this is "", but it is "_" on some.
+  const char *getUserLabelPrefix() const { return UserLabelPrefix; }
+
   /// Returns the name of the mcount instrumentation function.
   const char *getMCountName() const {
 return MCountName;
@@ -1096,9 +1104,9 @@ class TargetInfo : public virtual TransferrableTargetInfo,
   /// Returns the target ID if supported.
   virtual llvm::Optional getTargetID() const { return llvm::None; 
}
 
-  const llvm::DataLayout () const {
-assert(DataLayout && "Uninitialized DataLayout!");
-return *DataLayout;
+  const char *getDataLayoutString() const {
+assert(!DataLayoutString.empty() && "Uninitialized DataLayout!");
+return DataLayoutString.c_str();
   }
 
   struct GCCRegAlias {

diff  --git a/clang/include/clang/CodeGen/BackendUtil.h 
b/clang/include/clang/CodeGen/BackendUtil.h
index 43de07cc145b..77d500079f01 100644
--- a/clang/include/clang/CodeGen/BackendUtil.h
+++ b/clang/include/clang/CodeGen/BackendUtil.h
@@ -39,8 +39,7 @@ namespace clang {
   void EmitBackendOutput(DiagnosticsEngine , const HeaderSearchOptions &,
  const CodeGenOptions ,
  const TargetOptions , const LangOptions ,
- const llvm::DataLayout , llvm::Module *M,
- BackendAction Action,
+ StringRef TDesc, llvm::Module *M, BackendAction 
Action,
  std::unique_ptr OS);
 
   void EmbedBitcode(llvm::Module *M, const CodeGenOptions ,

diff  --git a/clang/lib/AST/Mangle.cpp b/clang/lib/AST/Mangle.cpp
index 2b0d55568cb8..54dbf484f377 100644
--- a/clang/lib/AST/Mangle.cpp
+++ b/clang/lib/AST/Mangle.cpp
@@ -139,7 +139,9 

[PATCH] D101194: [Driver] Push multiarch path setup to individual drivers

2021-04-27 Thread Petr Hosek via Phabricator via cfe-commits
phosek added a comment.

In D101194#2721390 , @MaskRay wrote:

> I thought this was NFC:(
>
> Yeah, personally I think the previous behavior 
> (`lib/clang/13.0.0/lib/x86_64-unknown-linux-gnu/libclang_rt.asan.a`) is 
> slightly better than the new 
> `lib/clang/13.0.0/lib/x86_64-linux-gnu/libclang_rt.asan.a`.
> multiarch paths are suitable for GCC specific directories (`lib/$triple`, 
> libstdc++ `aarch64-linux-gnu/include/c++/10`, etc) but llvm specific 
> libraries don't necessarily use that.

I should have been clear, sorry about that. I think there are three separate 
issues:

1. Rather than trying various triple versions, we should use one canonical 
spelling when searching for Clang's standard and runtime libraries. That means 
less system calls and better error messages, this is what this change was 
primarily intended to do.
2. Following from the previous point, we need to decide which canonical 
spelling to use. Since we're trying to use the multiarch layout, I was 
following the Debian documentation  
which is closest thing to a spec I'm aware of. The alternative would be to use 
the normalized target, the main disadvantage being that we would be diverging 
from existing quasi standard.
3. `-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON` gives you a different result 
depending on how you spell the targets in `-DLLVM_BUILTIN_TARGETS=` and 
`-DLLVM_RUNTIME_TARGETS=`, this is what @bjope ran into and I'd consider that a 
bug since the directory layout is an implementation detail and we should be 
able to change it without users having to change their build.

I'm working on a solution for #3 and I should have a patch ready soon. I'm 
curious about your thoughts on #2.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101194/new/

https://reviews.llvm.org/D101194

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


[PATCH] D99741: [RISCV][Clang] Add some RVV Floating-Point intrinsic functions. (vfclass, vfmerge, vfrec7, vfrsqrt7, vfsqrt)

2021-04-27 Thread Nico Weber via Phabricator via cfe-commits
thakis added a comment.

In D99741#2721235 , @craig.topper 
wrote:

> I believe we had reductions at builds 7601 and 8175.
>
> It looks like there may have been an increase between builds 7979 and 7991 
> the build failed for a while there. I suspect "e951b04 
>  
> [AArch64][SVE] Regression test all ACLE tests with C++" as it added a quite a 
> few RUN lines.
>
> I think we also caused an increase at build 8202 when these 4 commits went in 
> bd32c2d  
> [RISCV] Implement the vwcvt{u}.x.x.v/vncvt.x.x.w builtin. 
>   
>   
>   
> 645c5f2  
> [RISCV] Implement the pseudo compare builtin. 
>   
>   
>   
> bfb3fca  
> [RISCV] Implement the vfabs.v/vfneg.v builtin.
>   
>   
>   
> 4b24341  
> [RISCV] Implement the vmmv.m/vmnot.m builtin.

Any disagreement about reverting riscv builtin changes until there's some way 
to test them without increasing check-clang time by 20%?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D99741/new/

https://reviews.llvm.org/D99741

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


[PATCH] D101389: [clang][CodeGen] Fix address space for sret

2021-04-27 Thread Yaxun Liu via Phabricator via cfe-commits
yaxunl updated this revision to Diff 341054.
yaxunl added a comment.

fix invalid bitcast due to sret pointer passed to ctor


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101389/new/

https://reviews.llvm.org/D101389

Files:
  clang/lib/CodeGen/CGCall.cpp
  clang/test/CodeGenCUDA/amdgpu-sret.cu

Index: clang/test/CodeGenCUDA/amdgpu-sret.cu
===
--- /dev/null
+++ clang/test/CodeGenCUDA/amdgpu-sret.cu
@@ -0,0 +1,82 @@
+// REQUIRES: amdgpu-registered-target
+
+// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa -target-cpu gfx906 \
+// RUN:   -aux-triple x86_64-unknown-linux-gnu -fcuda-is-device \
+// RUN:   -emit-llvm -o - -x hip %s \
+// RUN:   | FileCheck %s
+
+// Check no assertion with debug info.
+
+// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa -target-cpu gfx906 \
+// RUN:   -aux-triple x86_64-unknown-linux-gnu -fcuda-is-device \
+// RUN:   -S -o %t.s -x hip %s \
+// RUN:   -debug-info-kind=limited
+
+#include "Inputs/cuda.h"
+ 
+struct A {
+  int x[100];
+  __device__ A();
+};
+
+struct B {
+  int x[100];
+};
+
+__device__ B b;
+
+// CHECK-LABEL: @_Z5func1v(
+// CHECK-SAME: %struct.A addrspace(5)* noalias sret(%struct.A) align 4 %[[ARG:.*]])
+// CHECK: %[[CAST:.*]] = addrspacecast %struct.A addrspace(5)* %[[ARG]] to %struct.A*
+// CHECK: call void @_ZN1AC1Ev(%struct.A* nonnull dereferenceable(400) %[[CAST]])
+__device__ A func1() {
+  A a;
+  return a;
+}
+
+// CHECK-LABEL: @_Z6func1av(%struct.B addrspace(5)* noalias sret(%struct.B) align 4 
+__device__ B func1a() {
+  B b;
+  return b;
+}
+
+// Check returning the return value again.
+
+// CHECK-LABEL: @_Z5func2v(
+// CHECK-SAME: %struct.A addrspace(5)* noalias sret(%struct.A) align 4 %[[ARG:.*]])
+// CHECK: call void @_Z5func1v(%struct.A addrspace(5)* sret(%struct.A) align 4 %[[ARG]])
+__device__ A func2() {
+  A a = func1();
+  return a;
+}
+
+// Check assigning the return value to a global variable.
+
+// CHECK-LABEL: @_Z5func3v(
+// CHECK: %[[RET:.*]] = alloca %struct.B, align 4, addrspace(5)
+// CHECK: %[[CAST1:.*]] = addrspacecast %struct.B addrspace(5)* %[[RET]] to %struct.B*
+// CHECK: %[[CAST2:.*]] = addrspacecast %struct.B* %[[CAST1]] to %struct.B addrspace(5)*
+// CHECK: call void @_Z6func1av(%struct.B addrspace(5)* sret(%struct.B) align 4 %[[CAST2]]
+// CHECK: %[[CAST3:.*]] = bitcast %struct.B* %[[CAST1]] to i8*
+// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64{{.*}}@b{{.*}}%[[CAST3]]
+__device__ void func3() {
+  b = func1a();
+}
+
+// Check assigning the return value to a temporary variable.
+
+// CHECK-LABEL: @_Z5func4v(
+// CHECK: %[[TMP:.*]] = alloca %struct.A, align 4, addrspace(5)
+// CHECK: %[[TMP_CAST1:.*]] = addrspacecast %struct.A addrspace(5)* %[[TMP]] to %struct.A*
+// CHECK: %[[RET:.*]] = alloca %struct.A, align 4, addrspace(5)
+// CHECK: %[[RET_CAST1:.*]] = addrspacecast %struct.A addrspace(5)* %[[RET]] to %struct.A*
+// CHECK: call void @_ZN1AC1Ev(%struct.A* nonnull dereferenceable(400) %[[TMP_CAST1]])
+// CHECK: %[[RET_CAST2:.*]] = addrspacecast %struct.A* %[[RET_CAST1]] to %struct.A addrspace(5)*
+// CHECK: call void @_Z5func1v(%struct.A addrspace(5)* sret(%struct.A) align 4 %[[RET_CAST2]]
+// CHECK: %[[TMP_CAST2:.*]] = bitcast %struct.A* %[[TMP_CAST1]] to i8*
+// CHECK: %[[RET_CAST3:.*]] = bitcast %struct.A* %[[RET_CAST1]] to i8*
+// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64{{.*}}%[[TMP_CAST2]]{{.*}}%[[RET_CAST3]]
+__device__ void func4() {
+  A a;
+  a = func1();
+}
Index: clang/lib/CodeGen/CGCall.cpp
===
--- clang/lib/CodeGen/CGCall.cpp
+++ clang/lib/CodeGen/CGCall.cpp
@@ -1624,7 +1624,8 @@
   if (IRFunctionArgs.hasSRetArg()) {
 QualType Ret = FI.getReturnType();
 llvm::Type *Ty = ConvertType(Ret);
-unsigned AddressSpace = Context.getTargetAddressSpace(Ret);
+unsigned AddressSpace =
+Context.getTargetAddressSpace(CGM.getASTAllocaAddressSpace());
 ArgTypes[IRFunctionArgs.getSRetArgNo()] =
 llvm::PointerType::get(Ty, AddressSpace);
   }
@@ -4671,7 +4672,17 @@
   }
 }
 if (IRFunctionArgs.hasSRetArg()) {
-  IRCallArgs[IRFunctionArgs.getSRetArgNo()] = SRetPtr.getPointer();
+  IRCallArgs[IRFunctionArgs.getSRetArgNo()] =
+  getTargetHooks().performAddrSpaceCast(
+  *this, SRetPtr.getPointer(), LangAS::Default,
+  getASTAllocaAddressSpace(),
+  SRetPtr.getPointer()
+  ->getType()
+  ->getPointerElementType()
+  ->getPointerTo(getContext().getTargetAddressSpace(
+  getASTAllocaAddressSpace())),
+  /*non-null*/ true);
+
 } else if (RetAI.isInAlloca()) {
   Address Addr =
   Builder.CreateStructGEP(ArgMemory, RetAI.getInAllocaFieldIndex());
@@ -4891,11 +4902,13 @@
 V->getType()->isIntegerTy())
   V = Builder.CreateZExt(V, ArgInfo.getCoerceToType());
 
-// If the argument doesn't 

[PATCH] D101387: remove single quotes around sugguestion diagnostic

2021-04-27 Thread Richard Trieu via Phabricator via cfe-commits
rtrieu added a comment.

In D101387#2720500 , @MaskRay wrote:

> @rtrieu Do we have a way appending arbitrary messages to a diagnostic 
> template?

Not an arbitrary number.  The diagnostic format string is indexed, so it 
diagnostic string needs to know ahead of time how many arguments that will be 
passed to it.

The format types can be nested so you can do:

  "Some types: %select{|%1|%1 %2|%1 %2 %3|%1 %2 %3 and more}0"

Then you can pass {0,1,2,3} first, then follow with (0,1,2,3) strings.  And 
passing 4 first with 3 strings gets the "and more" attached to the end.  
Otherwise, the string concatenation will need to be done before passing to the 
diagnostic.

For this case, I think to capture the variations used, we could use:

  "invalid value '%1' in '%0', %select{|for %3,}2 $plural{0:value must be 
%5|[1,4]:valid argument for '%0' are:%select{|%5|%5 %6|%5 %6 %7|%5 %6 %7 %8}4}4"

%0 - flag name
%1 - invalid value
%2 - if true, add extra "for %3"
%3 - string for extra "for", needed but ignored when %2 is false
%4 - count for valid arguments.  If 0, arbitrary string after "value must be"
%5-%8 - valid arguments

This supports up to 4 types and an arbitrary string.  Unifying the flang and 
clang diagnostics could simplify the string a bit more.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101387/new/

https://reviews.llvm.org/D101387

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


[PATCH] D100581: [Clang] -Wunused-but-set-parameter and -Wunused-but-set-variable

2021-04-27 Thread Nick Desaulniers via Phabricator via cfe-commits
nickdesaulniers added a comment.

Huh, maybe not: https://godbolt.org/z/PnE1fMGWo


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100581/new/

https://reviews.llvm.org/D100581

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


[PATCH] D100581: [Clang] -Wunused-but-set-parameter and -Wunused-but-set-variable

2021-04-27 Thread Nick Desaulniers via Phabricator via cfe-commits
nickdesaulniers added a comment.

I think this is triggering some false positives in builds of the Linux kernel.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100581/new/

https://reviews.llvm.org/D100581

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


[PATCH] D101194: [Driver] Push multiarch path setup to individual drivers

2021-04-27 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added a comment.

I thought this was NFC:(

Yeah, personally I think the previous behavior 
(`lib/clang/13.0.0/lib/x86_64-unknown-linux-gnu/libclang_rt.asan.a`) is 
slightly better than the new 
`lib/clang/13.0.0/lib/x86_64-linux-gnu/libclang_rt.asan.a`.
multiarch paths are suitable for GCC specific directories (`lib/$triple`, 
libstdc++ `aarch64-linux-gnu/include/c++/10`, etc) but llvm specific libraries 
don't necessarily use that.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101194/new/

https://reviews.llvm.org/D101194

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


[PATCH] D101191: [InstCombine] Fully disable select to and/or i1 folding

2021-04-27 Thread Juneyoung Lee via Phabricator via cfe-commits
aqjune added inline comments.



Comment at: 
llvm/test/Transforms/PhaseOrdering/unsigned-multiply-overflow-check.ll:20
 
+; FIXME: noundef should be attached to args
 define i1 @will_not_overflow(i64 %arg, i64 %arg1) {

nikic wrote:
> spatel wrote:
> > aqjune wrote:
> > > aqjune wrote:
> > > > spatel wrote:
> > > > > Any ideas about what it will take to get those argument attributes 
> > > > > for the C++ source example shown in the code comment?
> > > > > 
> > > > > SDAG is still going to convert the `select` to `and`, so we can 
> > > > > probably avoid regressions by replicating InstSimplify's 
> > > > > omitCheckForZeroBeforeMulWithOverflow() as a DAG combine. Let me know 
> > > > > if I should do that.
> > > > I promised to do the patch at D82317, but these days I'm occupied with 
> > > > other things, so it might not be a recent future (not in a month at 
> > > > least)...
> > > > 
> > > > I think it is a good chance to use freeze here: We can add
> > > > ```
> > > > %cond = icmp ne %x, 0
> > > > %v = call @llvm.umul.with.overflow(%x, %y)
> > > > %ov = extractvalue %v, 1
> > > > %res = select i1 %cond, %ov, false
> > > >   =>
> > > > %y.fr = freeze %y
> > > > %v = call @llvm.umul.with.overflow(%x, %y.fr)
> > > > %ov = extractvalue %v, 1
> > > > %res = %ov
> > > > ```
> > > > into CodeGenPrepare.
> > > > What do you think? CodeGenPrepare is already using freeze for a few 
> > > > transformations.
> > > Alive2 proof: https://alive2.llvm.org/ce/z/zgPUGT
> > I don't think we want to add code to CGP if we can avoid it. CGP is 
> > supposed to be a temporary hack that is not needed with GlobalISel. I do 
> > acknowledge that "temporary" in the code may outlive the people working on 
> > it today (!).
> > 
> > If we don't care about undef correctness in codegen (in other words, the 
> > select->and transform will live on in codegen forever), then we might as 
> > well add a DAG combine. Alternatively, are we comfortable creating freeze 
> > in instcombine for rare code like umul.with.ov?
> I think this is one of the rare cases where inserting Freeze in InstCombine 
> makes sense. There's not much (any?) further optimization opportunities for a 
> umul.with.overflow with non-constant operands.
InstCombine sounds good as well!


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101191/new/

https://reviews.llvm.org/D101191

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


[PATCH] D101017: [NewPM] Make GlobalsAA available earlier in the pipeline

2021-04-27 Thread Arthur Eubanks via Phabricator via cfe-commits
aeubanks abandoned this revision.
aeubanks added a comment.

turns out it was an issue with GlobalsAA not being recalculated and being too 
conservative
anyway, I don't think adding GlobalsAA early on really does much, adding it to 
the inliner pipeline seems good enough

https://reviews.llvm.org/D101379 to properly fix GlobalsAA


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101017/new/

https://reviews.llvm.org/D101017

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


[clang] 06d06f2 - [CMake][llvm] avoid conflict w/ (and use when available) new builtin check_linker_flag

2021-04-27 Thread Francis Visoiu Mistrih via cfe-commits

Author: Jim Radford
Date: 2021-04-27T16:41:28-07:00
New Revision: 06d06f2f6403066415df7b8854e6aff7586a92df

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

LOG: [CMake][llvm] avoid conflict w/ (and use when available) new builtin 
check_linker_flag

Match the API for the new check_linker_flag and use it directly when
available, leaving the old code as a fallback.

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

Added: 
llvm/cmake/modules/LLVMCheckLinkerFlag.cmake

Modified: 
clang/tools/driver/CMakeLists.txt
llvm/cmake/modules/AddLLVM.cmake
llvm/cmake/modules/HandleLLVMOptions.cmake
llvm/cmake/modules/HandleLLVMStdlib.cmake

Removed: 
llvm/cmake/modules/CheckLinkerFlag.cmake



diff  --git a/clang/tools/driver/CMakeLists.txt 
b/clang/tools/driver/CMakeLists.txt
index 01efebdcb929..7c32aadb8700 100644
--- a/clang/tools/driver/CMakeLists.txt
+++ b/clang/tools/driver/CMakeLists.txt
@@ -93,7 +93,7 @@ endif()
 
 if(CLANG_ORDER_FILE AND
 (LLVM_LINKER_IS_LD64 OR LLVM_LINKER_IS_GOLD OR LLVM_LINKER_IS_LLD))
-  include(CheckLinkerFlag)
+  include(LLVMCheckLinkerFlag)
 
   if (LLVM_LINKER_IS_LD64)
 set(LINKER_ORDER_FILE_OPTION "-Wl,-order_file,${CLANG_ORDER_FILE}")
@@ -104,7 +104,7 @@ if(CLANG_ORDER_FILE AND
   endif()
 
   # This is a test to ensure the actual order file works with the linker.
-  check_linker_flag(${LINKER_ORDER_FILE_OPTION} LINKER_ORDER_FILE_WORKS)
+  llvm_check_linker_flag(CXX ${LINKER_ORDER_FILE_OPTION} 
LINKER_ORDER_FILE_WORKS)
 
   # Passing an empty order file disables some linker layout optimizations.
   # To work around this and enable workflows for re-linking when the order file

diff  --git a/llvm/cmake/modules/AddLLVM.cmake 
b/llvm/cmake/modules/AddLLVM.cmake
index 2f055c779962..9bfef6dd8473 100644
--- a/llvm/cmake/modules/AddLLVM.cmake
+++ b/llvm/cmake/modules/AddLLVM.cmake
@@ -236,8 +236,8 @@ function(add_link_opts target_name)
   elseif(${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
 # Support for ld -z discard-unused=sections was only added in
 # Solaris 11.4.
-include(CheckLinkerFlag)
-check_linker_flag("-Wl,-z,discard-unused=sections" 
LINKER_SUPPORTS_Z_DISCARD_UNUSED)
+include(LLVMCheckLinkerFlag)
+llvm_check_linker_flag(CXX "-Wl,-z,discard-unused=sections" 
LINKER_SUPPORTS_Z_DISCARD_UNUSED)
 if (LINKER_SUPPORTS_Z_DISCARD_UNUSED)
   set_property(TARGET ${target_name} APPEND_STRING PROPERTY
LINK_FLAGS " -Wl,-z,discard-unused=sections")

diff  --git a/llvm/cmake/modules/CheckLinkerFlag.cmake 
b/llvm/cmake/modules/CheckLinkerFlag.cmake
deleted file mode 100644
index fe9d01a349cd..
--- a/llvm/cmake/modules/CheckLinkerFlag.cmake
+++ /dev/null
@@ -1,6 +0,0 @@
-include(CheckCXXCompilerFlag)
-
-function(check_linker_flag flag out_var)
-  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${flag}")
-  check_cxx_compiler_flag("" ${out_var})
-endfunction()

diff  --git a/llvm/cmake/modules/HandleLLVMOptions.cmake 
b/llvm/cmake/modules/HandleLLVMOptions.cmake
index e7c30e9d0082..ee91386055f7 100644
--- a/llvm/cmake/modules/HandleLLVMOptions.cmake
+++ b/llvm/cmake/modules/HandleLLVMOptions.cmake
@@ -888,8 +888,8 @@ endif()
 
 # lld doesn't print colored diagnostics when invoked from Ninja
 if (UNIX AND CMAKE_GENERATOR STREQUAL "Ninja")
-  include(CheckLinkerFlag)
-  check_linker_flag("-Wl,--color-diagnostics" 
LINKER_SUPPORTS_COLOR_DIAGNOSTICS)
+  include(LLVMCheckLinkerFlag)
+  llvm_check_linker_flag(CXX "-Wl,--color-diagnostics" 
LINKER_SUPPORTS_COLOR_DIAGNOSTICS)
   append_if(LINKER_SUPPORTS_COLOR_DIAGNOSTICS "-Wl,--color-diagnostics"
 CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS)
 endif()

diff  --git a/llvm/cmake/modules/HandleLLVMStdlib.cmake 
b/llvm/cmake/modules/HandleLLVMStdlib.cmake
index b67d87d43005..7afc10cff74f 100644
--- a/llvm/cmake/modules/HandleLLVMStdlib.cmake
+++ b/llvm/cmake/modules/HandleLLVMStdlib.cmake
@@ -13,12 +13,12 @@ if(NOT DEFINED LLVM_STDLIB_HANDLED)
   endfunction()
 
   include(CheckCXXCompilerFlag)
-  include(CheckLinkerFlag)
+  include(LLVMCheckLinkerFlag)
   set(LLVM_LIBCXX_USED 0)
   if(LLVM_ENABLE_LIBCXX)
 if(LLVM_COMPILER_IS_GCC_COMPATIBLE)
   check_cxx_compiler_flag("-stdlib=libc++" CXX_COMPILER_SUPPORTS_STDLIB)
-  check_linker_flag("-stdlib=libc++" CXX_LINKER_SUPPORTS_STDLIB)
+  llvm_check_linker_flag(CXX "-stdlib=libc++" CXX_LINKER_SUPPORTS_STDLIB)
   if(CXX_COMPILER_SUPPORTS_STDLIB AND CXX_LINKER_SUPPORTS_STDLIB)
 append("-stdlib=libc++"
   CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS
@@ -36,7 +36,7 @@ if(NOT DEFINED LLVM_STDLIB_HANDLED)
 if(LLVM_COMPILER_IS_GCC_COMPATIBLE)
   

[PATCH] D100901: [CMake][llvm] avoid conflict w/ (and use when available) new builtin check_linker_flag

2021-04-27 Thread Francis Visoiu Mistrih via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG06d06f2f6403: [CMake][llvm] avoid conflict w/ (and use when 
available) new builtin… (authored by radford, committed by thegameg).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100901/new/

https://reviews.llvm.org/D100901

Files:
  clang/tools/driver/CMakeLists.txt
  llvm/cmake/modules/AddLLVM.cmake
  llvm/cmake/modules/CheckLinkerFlag.cmake
  llvm/cmake/modules/HandleLLVMOptions.cmake
  llvm/cmake/modules/HandleLLVMStdlib.cmake
  llvm/cmake/modules/LLVMCheckLinkerFlag.cmake

Index: llvm/cmake/modules/LLVMCheckLinkerFlag.cmake
===
--- /dev/null
+++ llvm/cmake/modules/LLVMCheckLinkerFlag.cmake
@@ -0,0 +1,17 @@
+include(CheckLinkerFlag OPTIONAL)
+
+if (COMMAND check_linker_flag)
+  macro(llvm_check_linker_flag)
+check_linker_flag(${ARGN})
+  endmacro()
+else()
+  include(CheckCXXCompilerFlag)
+
+  # cmake builtin compatible, except we assume lang is CXX
+  function(llvm_check_linker_flag lang flag out_var)
+cmake_push_check_state()
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${flag}")
+check_cxx_compiler_flag("" ${out_var})
+cmake_pop_check_state()
+  endfunction()
+endif()
Index: llvm/cmake/modules/HandleLLVMStdlib.cmake
===
--- llvm/cmake/modules/HandleLLVMStdlib.cmake
+++ llvm/cmake/modules/HandleLLVMStdlib.cmake
@@ -13,12 +13,12 @@
   endfunction()
 
   include(CheckCXXCompilerFlag)
-  include(CheckLinkerFlag)
+  include(LLVMCheckLinkerFlag)
   set(LLVM_LIBCXX_USED 0)
   if(LLVM_ENABLE_LIBCXX)
 if(LLVM_COMPILER_IS_GCC_COMPATIBLE)
   check_cxx_compiler_flag("-stdlib=libc++" CXX_COMPILER_SUPPORTS_STDLIB)
-  check_linker_flag("-stdlib=libc++" CXX_LINKER_SUPPORTS_STDLIB)
+  llvm_check_linker_flag(CXX "-stdlib=libc++" CXX_LINKER_SUPPORTS_STDLIB)
   if(CXX_COMPILER_SUPPORTS_STDLIB AND CXX_LINKER_SUPPORTS_STDLIB)
 append("-stdlib=libc++"
   CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS
@@ -36,7 +36,7 @@
 if(LLVM_COMPILER_IS_GCC_COMPATIBLE)
   check_cxx_compiler_flag("-static-libstdc++"
   CXX_COMPILER_SUPPORTS_STATIC_STDLIB)
-  check_linker_flag("-static-libstdc++" CXX_LINKER_SUPPORTS_STATIC_STDLIB)
+  llvm_check_linker_flag(CXX "-static-libstdc++" CXX_LINKER_SUPPORTS_STATIC_STDLIB)
   if(CXX_COMPILER_SUPPORTS_STATIC_STDLIB AND
 CXX_LINKER_SUPPORTS_STATIC_STDLIB)
 append("-static-libstdc++"
Index: llvm/cmake/modules/HandleLLVMOptions.cmake
===
--- llvm/cmake/modules/HandleLLVMOptions.cmake
+++ llvm/cmake/modules/HandleLLVMOptions.cmake
@@ -888,8 +888,8 @@
 
 # lld doesn't print colored diagnostics when invoked from Ninja
 if (UNIX AND CMAKE_GENERATOR STREQUAL "Ninja")
-  include(CheckLinkerFlag)
-  check_linker_flag("-Wl,--color-diagnostics" LINKER_SUPPORTS_COLOR_DIAGNOSTICS)
+  include(LLVMCheckLinkerFlag)
+  llvm_check_linker_flag(CXX "-Wl,--color-diagnostics" LINKER_SUPPORTS_COLOR_DIAGNOSTICS)
   append_if(LINKER_SUPPORTS_COLOR_DIAGNOSTICS "-Wl,--color-diagnostics"
 CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS)
 endif()
Index: llvm/cmake/modules/CheckLinkerFlag.cmake
===
--- llvm/cmake/modules/CheckLinkerFlag.cmake
+++ /dev/null
@@ -1,6 +0,0 @@
-include(CheckCXXCompilerFlag)
-
-function(check_linker_flag flag out_var)
-  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${flag}")
-  check_cxx_compiler_flag("" ${out_var})
-endfunction()
Index: llvm/cmake/modules/AddLLVM.cmake
===
--- llvm/cmake/modules/AddLLVM.cmake
+++ llvm/cmake/modules/AddLLVM.cmake
@@ -236,8 +236,8 @@
   elseif(${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
 # Support for ld -z discard-unused=sections was only added in
 # Solaris 11.4.
-include(CheckLinkerFlag)
-check_linker_flag("-Wl,-z,discard-unused=sections" LINKER_SUPPORTS_Z_DISCARD_UNUSED)
+include(LLVMCheckLinkerFlag)
+llvm_check_linker_flag(CXX "-Wl,-z,discard-unused=sections" LINKER_SUPPORTS_Z_DISCARD_UNUSED)
 if (LINKER_SUPPORTS_Z_DISCARD_UNUSED)
   set_property(TARGET ${target_name} APPEND_STRING PROPERTY
LINK_FLAGS " -Wl,-z,discard-unused=sections")
Index: clang/tools/driver/CMakeLists.txt
===
--- clang/tools/driver/CMakeLists.txt
+++ clang/tools/driver/CMakeLists.txt
@@ -93,7 +93,7 @@
 
 if(CLANG_ORDER_FILE AND
 (LLVM_LINKER_IS_LD64 OR LLVM_LINKER_IS_GOLD OR LLVM_LINKER_IS_LLD))
-  include(CheckLinkerFlag)
+  include(LLVMCheckLinkerFlag)
 
   if (LLVM_LINKER_IS_LD64)
 

[PATCH] D99741: [RISCV][Clang] Add some RVV Floating-Point intrinsic functions. (vfclass, vfmerge, vfrec7, vfrsqrt7, vfsqrt)

2021-04-27 Thread Craig Topper via Phabricator via cfe-commits
craig.topper added a comment.

I believe we had reductions at builds 7601 and 8175. It looks like there may 
have been an increase between builds 7979 and 7991 the build failed for a while 
there. I suspect "e951b04 
 
[AArch64][SVE] Regression test all ACLE tests with C++" as it added a quite a 
few RUN lines.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D99741/new/

https://reviews.llvm.org/D99741

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


[PATCH] D101275: [clangd] Hide inlay hints capability behind a command-line flag

2021-04-27 Thread Nathan James via Phabricator via cfe-commits
njames93 added inline comments.



Comment at: clang-tools-extra/clangd/tool/ClangdMain.cpp:312
+ desc("Enable preview of InlayHints feature"), init(false),
+ Hidden};
+

Does it make sense to hide this flag? This is a feature that's basically in a 
shippable state disregarding any LSP standardization.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101275/new/

https://reviews.llvm.org/D101275

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


[PATCH] D98726: [analyzer] Enabling MallocChecker to take up after SmartPtrModelling

2021-04-27 Thread Artem Dergachev via Phabricator via cfe-commits
NoQ added a comment.

> when the visitor encounters an `ExplodedNode`

Weird. `finalizeVisitor()` accepts not any node but the error node. Your 
screenshot suggests that the error node is not in the standard library but in 
user code. Might it be that there are multiple error nodes and you're looking 
at the wrong one?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D98726/new/

https://reviews.llvm.org/D98726

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


[PATCH] D101365: [clang-query] Add check to prevent setting srcloc when no introspection is available.

2021-04-27 Thread Nathan James via Phabricator via cfe-commits
njames93 updated this revision to Diff 341021.
njames93 added a comment.

Nit.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101365/new/

https://reviews.llvm.org/D101365

Files:
  clang-tools-extra/clang-query/Query.h
  clang-tools-extra/clang-query/QueryParser.cpp
  clang-tools-extra/unittests/clang-query/QueryParserTest.cpp

Index: clang-tools-extra/unittests/clang-query/QueryParserTest.cpp
===
--- clang-tools-extra/unittests/clang-query/QueryParserTest.cpp
+++ clang-tools-extra/unittests/clang-query/QueryParserTest.cpp
@@ -9,6 +9,7 @@
 #include "QueryParser.h"
 #include "Query.h"
 #include "QuerySession.h"
+#include "clang/Tooling/NodeIntrospection.h"
 #include "llvm/LineEditor/LineEditor.h"
 #include "gtest/gtest.h"
 
@@ -59,6 +60,8 @@
 }
 
 TEST_F(QueryParserTest, Set) {
+
+  bool HasIntrospection = tooling::NodeIntrospection::hasIntrospectionSupport();
   QueryRef Q = parse("set");
   ASSERT_TRUE(isa(Q));
   EXPECT_EQ("expected variable name", cast(Q)->ErrStr);
@@ -69,8 +72,13 @@
 
   Q = parse("set output");
   ASSERT_TRUE(isa(Q));
-  EXPECT_EQ("expected 'diag', 'print', 'detailed-ast' or 'dump', got ''",
-cast(Q)->ErrStr);
+  if (HasIntrospection)
+EXPECT_EQ(
+"expected 'diag', 'print', 'detailed-ast', 'srcloc' or 'dump', got ''",
+cast(Q)->ErrStr);
+  else
+EXPECT_EQ("expected 'diag', 'print', 'detailed-ast' or 'dump', got ''",
+  cast(Q)->ErrStr);
 
   Q = parse("set bind-root true foo");
   ASSERT_TRUE(isa(Q));
@@ -78,8 +86,13 @@
 
   Q = parse("set output foo");
   ASSERT_TRUE(isa(Q));
-  EXPECT_EQ("expected 'diag', 'print', 'detailed-ast' or 'dump', got 'foo'",
-cast(Q)->ErrStr);
+  if (HasIntrospection)
+EXPECT_EQ("expected 'diag', 'print', 'detailed-ast', 'srcloc' or 'dump', "
+  "got 'foo'",
+  cast(Q)->ErrStr);
+  else
+EXPECT_EQ("expected 'diag', 'print', 'detailed-ast' or 'dump', got 'foo'",
+  cast(Q)->ErrStr);
 
   Q = parse("set output dump");
   ASSERT_TRUE(isa(Q));
@@ -217,8 +230,10 @@
   EXPECT_EQ("output ", Comps[0].TypedText);
   EXPECT_EQ("output", Comps[0].DisplayText);
 
+  bool HasIntrospection = tooling::NodeIntrospection::hasIntrospectionSupport();
+
   Comps = QueryParser::complete("enable output ", 14, QS);
-  ASSERT_EQ(5u, Comps.size());
+  ASSERT_EQ(HasIntrospection ? 5u : 4u, Comps.size());
 
   EXPECT_EQ("diag ", Comps[0].TypedText);
   EXPECT_EQ("diag", Comps[0].DisplayText);
@@ -226,10 +241,12 @@
   EXPECT_EQ("print", Comps[1].DisplayText);
   EXPECT_EQ("detailed-ast ", Comps[2].TypedText);
   EXPECT_EQ("detailed-ast", Comps[2].DisplayText);
-  EXPECT_EQ("srcloc ", Comps[3].TypedText);
-  EXPECT_EQ("srcloc", Comps[3].DisplayText);
-  EXPECT_EQ("dump ", Comps[4].TypedText);
-  EXPECT_EQ("dump", Comps[4].DisplayText);
+  if (HasIntrospection) {
+EXPECT_EQ("srcloc ", Comps[3].TypedText);
+EXPECT_EQ("srcloc", Comps[3].DisplayText);
+  }
+  EXPECT_EQ("dump ", Comps[HasIntrospection ? 4 : 3].TypedText);
+  EXPECT_EQ("dump", Comps[HasIntrospection ? 4 : 3].DisplayText);
 
   Comps = QueryParser::complete("set traversal ", 14, QS);
   ASSERT_EQ(2u, Comps.size());
Index: clang-tools-extra/clang-query/QueryParser.cpp
===
--- clang-tools-extra/clang-query/QueryParser.cpp
+++ clang-tools-extra/clang-query/QueryParser.cpp
@@ -11,6 +11,7 @@
 #include "QuerySession.h"
 #include "clang/ASTMatchers/Dynamic/Parser.h"
 #include "clang/Basic/CharInfo.h"
+#include "clang/Tooling/NodeIntrospection.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/StringSwitch.h"
 #include 
@@ -104,17 +105,19 @@
 
 template  QueryRef QueryParser::parseSetOutputKind() {
   StringRef ValStr;
-  unsigned OutKind = LexOrCompleteWord(this, ValStr)
- .Case("diag", OK_Diag)
- .Case("print", OK_Print)
- .Case("detailed-ast", OK_DetailedAST)
- .Case("srcloc", OK_SrcLoc)
- .Case("dump", OK_DetailedAST)
- .Default(~0u);
+  bool HasIntrospection = tooling::NodeIntrospection::hasIntrospectionSupport();
+  unsigned OutKind =
+  LexOrCompleteWord(this, ValStr)
+  .Case("diag", OK_Diag)
+  .Case("print", OK_Print)
+  .Case("detailed-ast", OK_DetailedAST)
+  .Case("srcloc", OK_SrcLoc, /*IsCompletion=*/HasIntrospection)
+  .Case("dump", OK_DetailedAST)
+  .Default(~0u);
   if (OutKind == ~0u) {
-return new InvalidQuery(
-"expected 'diag', 'print', 'detailed-ast' or 'dump', got '" + ValStr +
-"'");
+return new InvalidQuery("expected 'diag', 'print', 'detailed-ast'" +
+StringRef(HasIntrospection ? ", 'srcloc'" : "") +
+" or 'dump', got '" + ValStr + "'");
   }
 
 

Re: [PATCH] D100776: [clang/Basic] Make TargetInfo.h not use DataLayout again

2021-04-27 Thread Eric Christopher via cfe-commits
Sounds good. It's a soft objection, mostly because if nothing else it puts
us back where we were subject to some latent bugs, but perhaps not as bad
as before (though I don't find having to use an assert build reassuring ;)

Anyhow, go ahead and we'll figure out something else.

On Tue, Apr 27, 2021, 7:23 PM Reid Kleckner via Phabricator <
revi...@reviews.llvm.org> wrote:

> rnk accepted this revision.
> rnk added a comment.
> This revision is now accepted and ready to land.
>
> In D100776#2703273 , @echristo
> wrote:
>
> > As is mentioned there are tradeoffs around this though: a) it does make
> it harder to have clang generate code without a backend or llvm itself
> around, b) it does have a dependency when none existed.
> >
> > So, if this is really causing some consternation then we can pull back
> and reinstate what we had, but it was a direction around solving a set of
> hard to find bugs.
> >
> > Thoughts?
>
> I'm reading this as a soft, non-blocking objection. The concern that the
> layouts and prefix might get out of sync is addressed: there are asserts
> that they agree when the backends are linked in.
>
> So, under that interpretation, and without further guidance from
> @echristo, I think we should go forward. If that's not the right
> interpretation, we can always revert.
>
>
> CHANGES SINCE LAST ACTION
>   https://reviews.llvm.org/D100776/new/
>
> https://reviews.llvm.org/D100776
>
>
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D100776: [clang/Basic] Make TargetInfo.h not use DataLayout again

2021-04-27 Thread Reid Kleckner via Phabricator via cfe-commits
rnk accepted this revision.
rnk added a comment.
This revision is now accepted and ready to land.

In D100776#2703273 , @echristo wrote:

> As is mentioned there are tradeoffs around this though: a) it does make it 
> harder to have clang generate code without a backend or llvm itself around, 
> b) it does have a dependency when none existed.
>
> So, if this is really causing some consternation then we can pull back and 
> reinstate what we had, but it was a direction around solving a set of hard to 
> find bugs.
>
> Thoughts?

I'm reading this as a soft, non-blocking objection. The concern that the 
layouts and prefix might get out of sync is addressed: there are asserts that 
they agree when the backends are linked in.

So, under that interpretation, and without further guidance from @echristo, I 
think we should go forward. If that's not the right interpretation, we can 
always revert.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100776/new/

https://reviews.llvm.org/D100776

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


[PATCH] D91054: [Clang][OpenMP] Frontend work for sections - D89671

2021-04-27 Thread Michael Kruse via Phabricator via cfe-commits
Meinersbur added a comment.

In D91054#2709712 , @jdoerfert wrote:

> OK, we really need to provide the PrivCB impl so we can start removing clang 
> code. 
> This is generally fine with me, @fghanim @Meinersbur any concerns?

It might be OK to start with the functionality that replaces directives with 
single runtime calls, but I don't think implementations of code-associated 
directives are ready enough.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D91054/new/

https://reviews.llvm.org/D91054

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


[PATCH] D100901: [CMake][llvm] avoid conflict w/ (and use when available) new builtin check_linker_flag

2021-04-27 Thread Jonas Devlieghere via Phabricator via cfe-commits
JDevlieghere accepted this revision.
JDevlieghere added a comment.
This revision is now accepted and ready to land.

LGTM. Thanks!


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100901/new/

https://reviews.llvm.org/D100901

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


[PATCH] D101400: [Driver] Add -print-multiarch-triple

2021-04-27 Thread Petr Hosek via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGa921d2d2fb46: [Driver] Add -print-multiarch (authored by 
phosek).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101400/new/

https://reviews.llvm.org/D101400

Files:
  clang/include/clang/Driver/Options.td
  clang/include/clang/Driver/ToolChain.h
  clang/lib/Driver/Driver.cpp
  clang/lib/Driver/ToolChains/Fuchsia.h
  clang/lib/Driver/ToolChains/Linux.h
  clang/test/Driver/print-multiarch.c

Index: clang/test/Driver/print-multiarch.c
===
--- /dev/null
+++ clang/test/Driver/print-multiarch.c
@@ -0,0 +1,6 @@
+// Check the output of -print-multiarch.
+
+// RUN: %clang -print-multiarch --target=x86_64-unknown-linux-gnu \
+// RUN:-resource-dir=%S/Inputs/resource_dir \
+// RUN:  | FileCheck --check-prefix=PRINT-MULTIARCH %s
+// PRINT-MULTIARCH: {{^}}x86_64-linux-gnu{{$}}
Index: clang/lib/Driver/ToolChains/Linux.h
===
--- clang/lib/Driver/ToolChains/Linux.h
+++ clang/lib/Driver/ToolChains/Linux.h
@@ -23,6 +23,10 @@
 
   bool HasNativeLLVMSupport() const override;
 
+  std::string getMultiarchTriple(const Driver ,
+ const llvm::Triple ,
+ StringRef SysRoot) const override;
+
   void
   AddClangSystemIncludeArgs(const llvm::opt::ArgList ,
 llvm::opt::ArgStringList ) const override;
@@ -61,10 +65,6 @@
   Tool *buildAssembler() const override;
   Tool *buildLinker() const override;
   Tool *buildStaticLibTool() const override;
-
-  std::string getMultiarchTriple(const Driver ,
- const llvm::Triple ,
- StringRef SysRoot) const override;
 };
 
 } // end namespace toolchains
Index: clang/lib/Driver/ToolChains/Fuchsia.h
===
--- clang/lib/Driver/ToolChains/Fuchsia.h
+++ clang/lib/Driver/ToolChains/Fuchsia.h
@@ -65,6 +65,10 @@
 return LangOptions::SSPStrong;
   }
 
+  std::string getMultiarchTriple(const Driver ,
+ const llvm::Triple ,
+ StringRef SysRoot) const override;
+
   std::string ComputeEffectiveClangTriple(const llvm::opt::ArgList ,
   types::ID InputType) const override;
 
@@ -97,10 +101,6 @@
 
 protected:
   Tool *buildLinker() const override;
-
-  std::string getMultiarchTriple(const Driver ,
- const llvm::Triple ,
- StringRef SysRoot) const override;
 };
 
 } // end namespace toolchains
Index: clang/lib/Driver/Driver.cpp
===
--- clang/lib/Driver/Driver.cpp
+++ clang/lib/Driver/Driver.cpp
@@ -1900,6 +1900,12 @@
 return false;
   }
 
+  if (C.getArgs().hasArg(options::OPT_print_multiarch)) {
+llvm::outs() << TC.getMultiarchTriple(*this, TC.getTriple(), SysRoot)
+ << "\n";
+return false;
+  }
+
   if (C.getArgs().hasArg(options::OPT_print_targets)) {
 llvm::TargetRegistry::printRegisteredTargetsForVersion(llvm::outs());
 return false;
Index: clang/include/clang/Driver/ToolChain.h
===
--- clang/include/clang/Driver/ToolChain.h
+++ clang/include/clang/Driver/ToolChain.h
@@ -184,12 +184,6 @@
   virtual Tool *buildStaticLibTool() const;
   virtual Tool *getTool(Action::ActionClass AC) const;
 
-  virtual std::string getMultiarchTriple(const Driver ,
- const llvm::Triple ,
- StringRef SysRoot) const {
-return TargetTriple.str();
-  }
-
   virtual std::string buildCompilerRTBasename(const llvm::opt::ArgList ,
   StringRef Component,
   FileType Type,
@@ -548,6 +542,12 @@
   /// isThreadModelSupported() - Does this target support a thread model?
   virtual bool isThreadModelSupported(const StringRef Model) const;
 
+  virtual std::string getMultiarchTriple(const Driver ,
+ const llvm::Triple ,
+ StringRef SysRoot) const {
+return TargetTriple.str();
+  }
+
   /// ComputeLLVMTriple - Return the LLVM target triple to use, after taking
   /// command line arguments into account.
   virtual std::string
Index: clang/include/clang/Driver/Options.td
===
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -3584,6 +3584,8 @@
   HelpText<"Print the normalized target triple">;
 def print_effective_triple 

[clang] a921d2d - [Driver] Add -print-multiarch

2021-04-27 Thread Petr Hosek via cfe-commits

Author: Petr Hosek
Date: 2021-04-27T16:04:54-07:00
New Revision: a921d2d2fb46b898794091e7410426c518a4f0cc

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

LOG: [Driver] Add -print-multiarch

This is useful in runtimes build for example which currently try to
guess the correct triple where to place libraries in the multiarch
layout.  Using this flag, the build system can get the correct triple
directly by querying Clang.

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

Added: 
clang/test/Driver/print-multiarch.c

Modified: 
clang/include/clang/Driver/Options.td
clang/include/clang/Driver/ToolChain.h
clang/lib/Driver/Driver.cpp
clang/lib/Driver/ToolChains/Fuchsia.h
clang/lib/Driver/ToolChains/Linux.h

Removed: 




diff  --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 4c171b94193e..e70b793079ac 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -3584,6 +3584,8 @@ def print_target_triple : Flag<["-", "--"], 
"print-target-triple">,
   HelpText<"Print the normalized target triple">;
 def print_effective_triple : Flag<["-", "--"], "print-effective-triple">,
   HelpText<"Print the effective target triple">;
+def print_multiarch : Flag<["-", "--"], "print-multiarch">,
+  HelpText<"Print the multiarch target triple">;
 def print_prog_name_EQ : Joined<["-", "--"], "print-prog-name=">,
   HelpText<"Print the full program path of ">, MetaVarName<"">;
 def print_resource_dir : Flag<["-", "--"], "print-resource-dir">,

diff  --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index f96dcfc98e1a..8ec4cf853fed 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -184,12 +184,6 @@ class ToolChain {
   virtual Tool *buildStaticLibTool() const;
   virtual Tool *getTool(Action::ActionClass AC) const;
 
-  virtual std::string getMultiarchTriple(const Driver ,
- const llvm::Triple ,
- StringRef SysRoot) const {
-return TargetTriple.str();
-  }
-
   virtual std::string buildCompilerRTBasename(const llvm::opt::ArgList ,
   StringRef Component,
   FileType Type,
@@ -548,6 +542,12 @@ class ToolChain {
   /// isThreadModelSupported() - Does this target support a thread model?
   virtual bool isThreadModelSupported(const StringRef Model) const;
 
+  virtual std::string getMultiarchTriple(const Driver ,
+ const llvm::Triple ,
+ StringRef SysRoot) const {
+return TargetTriple.str();
+  }
+
   /// ComputeLLVMTriple - Return the LLVM target triple to use, after taking
   /// command line arguments into account.
   virtual std::string

diff  --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 848a8ce983f6..5008b506a883 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -1900,6 +1900,12 @@ bool Driver::HandleImmediateArgs(const Compilation ) {
 return false;
   }
 
+  if (C.getArgs().hasArg(options::OPT_print_multiarch)) {
+llvm::outs() << TC.getMultiarchTriple(*this, TC.getTriple(), SysRoot)
+ << "\n";
+return false;
+  }
+
   if (C.getArgs().hasArg(options::OPT_print_targets)) {
 llvm::TargetRegistry::printRegisteredTargetsForVersion(llvm::outs());
 return false;

diff  --git a/clang/lib/Driver/ToolChains/Fuchsia.h 
b/clang/lib/Driver/ToolChains/Fuchsia.h
index d6eab6e78e88..c49213c7b735 100644
--- a/clang/lib/Driver/ToolChains/Fuchsia.h
+++ b/clang/lib/Driver/ToolChains/Fuchsia.h
@@ -65,6 +65,10 @@ class LLVM_LIBRARY_VISIBILITY Fuchsia : public ToolChain {
 return LangOptions::SSPStrong;
   }
 
+  std::string getMultiarchTriple(const Driver ,
+ const llvm::Triple ,
+ StringRef SysRoot) const override;
+
   std::string ComputeEffectiveClangTriple(const llvm::opt::ArgList ,
   types::ID InputType) const override;
 
@@ -97,10 +101,6 @@ class LLVM_LIBRARY_VISIBILITY Fuchsia : public ToolChain {
 
 protected:
   Tool *buildLinker() const override;
-
-  std::string getMultiarchTriple(const Driver ,
- const llvm::Triple ,
- StringRef SysRoot) const override;
 };
 
 } // end namespace toolchains

diff  --git a/clang/lib/Driver/ToolChains/Linux.h 
b/clang/lib/Driver/ToolChains/Linux.h
index 05e01a208456..169a37c44072 100644
--- a/clang/lib/Driver/ToolChains/Linux.h
+++ b/clang/lib/Driver/ToolChains/Linux.h
@@ -23,6 

[PATCH] D101400: [Driver] Add -print-multiarch-triple

2021-04-27 Thread Petr Hosek via Phabricator via cfe-commits
phosek updated this revision to Diff 341015.
phosek marked an inline comment as done.

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101400/new/

https://reviews.llvm.org/D101400

Files:
  clang/include/clang/Driver/Options.td
  clang/include/clang/Driver/ToolChain.h
  clang/lib/Driver/Driver.cpp
  clang/lib/Driver/ToolChains/Fuchsia.h
  clang/lib/Driver/ToolChains/Linux.h
  clang/test/Driver/print-multiarch.c

Index: clang/test/Driver/print-multiarch.c
===
--- /dev/null
+++ clang/test/Driver/print-multiarch.c
@@ -0,0 +1,6 @@
+// Check the output of -print-multiarch.
+
+// RUN: %clang -print-multiarch --target=x86_64-unknown-linux-gnu \
+// RUN:-resource-dir=%S/Inputs/resource_dir \
+// RUN:  | FileCheck --check-prefix=PRINT-MULTIARCH %s
+// PRINT-MULTIARCH: {{^}}x86_64-linux-gnu{{$}}
Index: clang/lib/Driver/ToolChains/Linux.h
===
--- clang/lib/Driver/ToolChains/Linux.h
+++ clang/lib/Driver/ToolChains/Linux.h
@@ -23,6 +23,10 @@
 
   bool HasNativeLLVMSupport() const override;
 
+  std::string getMultiarchTriple(const Driver ,
+ const llvm::Triple ,
+ StringRef SysRoot) const override;
+
   void
   AddClangSystemIncludeArgs(const llvm::opt::ArgList ,
 llvm::opt::ArgStringList ) const override;
@@ -61,10 +65,6 @@
   Tool *buildAssembler() const override;
   Tool *buildLinker() const override;
   Tool *buildStaticLibTool() const override;
-
-  std::string getMultiarchTriple(const Driver ,
- const llvm::Triple ,
- StringRef SysRoot) const override;
 };
 
 } // end namespace toolchains
Index: clang/lib/Driver/ToolChains/Fuchsia.h
===
--- clang/lib/Driver/ToolChains/Fuchsia.h
+++ clang/lib/Driver/ToolChains/Fuchsia.h
@@ -65,6 +65,10 @@
 return LangOptions::SSPStrong;
   }
 
+  std::string getMultiarchTriple(const Driver ,
+ const llvm::Triple ,
+ StringRef SysRoot) const override;
+
   std::string ComputeEffectiveClangTriple(const llvm::opt::ArgList ,
   types::ID InputType) const override;
 
@@ -97,10 +101,6 @@
 
 protected:
   Tool *buildLinker() const override;
-
-  std::string getMultiarchTriple(const Driver ,
- const llvm::Triple ,
- StringRef SysRoot) const override;
 };
 
 } // end namespace toolchains
Index: clang/lib/Driver/Driver.cpp
===
--- clang/lib/Driver/Driver.cpp
+++ clang/lib/Driver/Driver.cpp
@@ -1900,6 +1900,12 @@
 return false;
   }
 
+  if (C.getArgs().hasArg(options::OPT_print_multiarch)) {
+llvm::outs() << TC.getMultiarchTriple(*this, TC.getTriple(), SysRoot)
+ << "\n";
+return false;
+  }
+
   if (C.getArgs().hasArg(options::OPT_print_targets)) {
 llvm::TargetRegistry::printRegisteredTargetsForVersion(llvm::outs());
 return false;
Index: clang/include/clang/Driver/ToolChain.h
===
--- clang/include/clang/Driver/ToolChain.h
+++ clang/include/clang/Driver/ToolChain.h
@@ -184,12 +184,6 @@
   virtual Tool *buildStaticLibTool() const;
   virtual Tool *getTool(Action::ActionClass AC) const;
 
-  virtual std::string getMultiarchTriple(const Driver ,
- const llvm::Triple ,
- StringRef SysRoot) const {
-return TargetTriple.str();
-  }
-
   virtual std::string buildCompilerRTBasename(const llvm::opt::ArgList ,
   StringRef Component,
   FileType Type,
@@ -548,6 +542,12 @@
   /// isThreadModelSupported() - Does this target support a thread model?
   virtual bool isThreadModelSupported(const StringRef Model) const;
 
+  virtual std::string getMultiarchTriple(const Driver ,
+ const llvm::Triple ,
+ StringRef SysRoot) const {
+return TargetTriple.str();
+  }
+
   /// ComputeLLVMTriple - Return the LLVM target triple to use, after taking
   /// command line arguments into account.
   virtual std::string
Index: clang/include/clang/Driver/Options.td
===
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -3584,6 +3584,8 @@
   HelpText<"Print the normalized target triple">;
 def print_effective_triple : Flag<["-", "--"], "print-effective-triple">,
   HelpText<"Print the effective target triple">;
+def print_multiarch : Flag<["-", 

[PATCH] D101400: [Driver] Add -print-multiarch-triple

2021-04-27 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay accepted this revision.
MaskRay added a comment.
This revision is now accepted and ready to land.

LG




Comment at: clang/test/Driver/print-multiarch.c:5
+// RUN:-resource-dir=%S/Inputs/resource_dir \
+// RUN:  | FileCheck --check-prefix=PRINT-MULTIARCH %s
+// PRINT-MULTIARCH: x86_64-linux-gnu

`--match-full-lines --strict-whitespace` or use `{{^}}x86_64-linux-gnu{{$}}`


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101400/new/

https://reviews.llvm.org/D101400

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


[PATCH] D101194: [Driver] Push multiarch path setup to individual drivers

2021-04-27 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added a comment.

FWIW I have played `-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=on`

I see `lib/clang/13.0.0/lib/x86_64-unknown-linux-gnu/libclang_rt.*`. The 
directory name is `x86_64-unknown-linux-gnu`, which actually looks good to me.
We don't necessarily copy the GCC x86_64-linux-gnu multiarch name. Preserving 
the default target triple as-is gives users more choices (e.g. if they want to 
use the vendor part to have multiple builds).


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101194/new/

https://reviews.llvm.org/D101194

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


[PATCH] D52524: Add -Wpoison-system-directories warning

2021-04-27 Thread Sam Clegg via Phabricator via cfe-commits
sbc100 added a comment.

Would it make sense to have this apply to system library paths too?   i.e. 
`-L/usr/local/lib`.

We have a bespoke mechanism in emscripten right now that is a bit more flexible 
but I'd love to simple replace it with `-Wpoison-system-directories`.

The name "system directories" seems to imply that it should apply to both 
include and library directories.  It also looks like the gcc version applies to 
both `Warn for -I and -L options using system directories if cross compiling` 
(from 
https://github.com/Metrological/buildroot/blob/master/package/gcc/4.8.4/910-gcc-poison-system-directories.patch).


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D52524/new/

https://reviews.llvm.org/D52524

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


[PATCH] D101400: [Driver] Add -print-multiarch-triple

2021-04-27 Thread Petr Hosek via Phabricator via cfe-commits
phosek added a comment.

In D101400#2720954 , @MaskRay wrote:

> gcc has `--print-multiarch`. Just use `--print-multiarch`? I think our 
> semantics are compatible.

I wasn't aware that GCC already has this option but using the same spelling 
definitely makes sense.

> It seems odd to have print-runtime-dir tests in `immediate-options.c`. The 
> tests should be moved to a `print-*` file.

I can move it in a separate change.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101400/new/

https://reviews.llvm.org/D101400

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


[PATCH] D101400: [Driver] Add -print-multiarch-triple

2021-04-27 Thread Petr Hosek via Phabricator via cfe-commits
phosek updated this revision to Diff 341001.

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101400/new/

https://reviews.llvm.org/D101400

Files:
  clang/include/clang/Driver/Options.td
  clang/include/clang/Driver/ToolChain.h
  clang/lib/Driver/Driver.cpp
  clang/lib/Driver/ToolChains/Fuchsia.h
  clang/lib/Driver/ToolChains/Linux.h
  clang/test/Driver/print-multiarch.c

Index: clang/test/Driver/print-multiarch.c
===
--- /dev/null
+++ clang/test/Driver/print-multiarch.c
@@ -0,0 +1,6 @@
+// Check the output of -print-multiarch.
+
+// RUN: %clang -print-multiarch --target=x86_64-unknown-linux-gnu \
+// RUN:-resource-dir=%S/Inputs/resource_dir \
+// RUN:  | FileCheck --check-prefix=PRINT-MULTIARCH %s
+// PRINT-MULTIARCH: x86_64-linux-gnu
Index: clang/lib/Driver/ToolChains/Linux.h
===
--- clang/lib/Driver/ToolChains/Linux.h
+++ clang/lib/Driver/ToolChains/Linux.h
@@ -23,6 +23,10 @@
 
   bool HasNativeLLVMSupport() const override;
 
+  std::string getMultiarchTriple(const Driver ,
+ const llvm::Triple ,
+ StringRef SysRoot) const override;
+
   void
   AddClangSystemIncludeArgs(const llvm::opt::ArgList ,
 llvm::opt::ArgStringList ) const override;
@@ -61,10 +65,6 @@
   Tool *buildAssembler() const override;
   Tool *buildLinker() const override;
   Tool *buildStaticLibTool() const override;
-
-  std::string getMultiarchTriple(const Driver ,
- const llvm::Triple ,
- StringRef SysRoot) const override;
 };
 
 } // end namespace toolchains
Index: clang/lib/Driver/ToolChains/Fuchsia.h
===
--- clang/lib/Driver/ToolChains/Fuchsia.h
+++ clang/lib/Driver/ToolChains/Fuchsia.h
@@ -65,6 +65,10 @@
 return LangOptions::SSPStrong;
   }
 
+  std::string getMultiarchTriple(const Driver ,
+ const llvm::Triple ,
+ StringRef SysRoot) const override;
+
   std::string ComputeEffectiveClangTriple(const llvm::opt::ArgList ,
   types::ID InputType) const override;
 
@@ -97,10 +101,6 @@
 
 protected:
   Tool *buildLinker() const override;
-
-  std::string getMultiarchTriple(const Driver ,
- const llvm::Triple ,
- StringRef SysRoot) const override;
 };
 
 } // end namespace toolchains
Index: clang/lib/Driver/Driver.cpp
===
--- clang/lib/Driver/Driver.cpp
+++ clang/lib/Driver/Driver.cpp
@@ -1900,6 +1900,12 @@
 return false;
   }
 
+  if (C.getArgs().hasArg(options::OPT_print_multiarch)) {
+llvm::outs() << TC.getMultiarchTriple(*this, TC.getTriple(), SysRoot)
+ << "\n";
+return false;
+  }
+
   if (C.getArgs().hasArg(options::OPT_print_targets)) {
 llvm::TargetRegistry::printRegisteredTargetsForVersion(llvm::outs());
 return false;
Index: clang/include/clang/Driver/ToolChain.h
===
--- clang/include/clang/Driver/ToolChain.h
+++ clang/include/clang/Driver/ToolChain.h
@@ -184,12 +184,6 @@
   virtual Tool *buildStaticLibTool() const;
   virtual Tool *getTool(Action::ActionClass AC) const;
 
-  virtual std::string getMultiarchTriple(const Driver ,
- const llvm::Triple ,
- StringRef SysRoot) const {
-return TargetTriple.str();
-  }
-
   virtual std::string buildCompilerRTBasename(const llvm::opt::ArgList ,
   StringRef Component,
   FileType Type,
@@ -548,6 +542,12 @@
   /// isThreadModelSupported() - Does this target support a thread model?
   virtual bool isThreadModelSupported(const StringRef Model) const;
 
+  virtual std::string getMultiarchTriple(const Driver ,
+ const llvm::Triple ,
+ StringRef SysRoot) const {
+return TargetTriple.str();
+  }
+
   /// ComputeLLVMTriple - Return the LLVM target triple to use, after taking
   /// command line arguments into account.
   virtual std::string
Index: clang/include/clang/Driver/Options.td
===
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -3584,6 +3584,8 @@
   HelpText<"Print the normalized target triple">;
 def print_effective_triple : Flag<["-", "--"], "print-effective-triple">,
   HelpText<"Print the effective target triple">;
+def print_multiarch : Flag<["-", "--"], "print-multiarch">,
+  HelpText<"Print the 

[PATCH] D101346: [AST] Fix getExprLoc reported for cxxDependentScopeMemberExpr

2021-04-27 Thread Stephen Kelly via Phabricator via cfe-commits
steveire updated this revision to Diff 340994.
steveire added a comment.

Fix windows build


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101346/new/

https://reviews.llvm.org/D101346

Files:
  clang/include/clang/AST/ExprCXX.h
  clang/unittests/AST/SourceLocationTest.cpp


Index: clang/unittests/AST/SourceLocationTest.cpp
===
--- clang/unittests/AST/SourceLocationTest.cpp
+++ clang/unittests/AST/SourceLocationTest.cpp
@@ -634,6 +634,36 @@
  friendDecl()));
 }
 
+TEST(CXXDependentScopeMemberExpr, ExprLocation) {
+
+  llvm::Annotations Example(R"cpp(
+template
+struct MyContainer
+{
+template 
+void pushBack();
+};
+
+template
+void testCall()
+{
+  MyContainer mc;
+  mc.template $member_name^pushBack();
+}
+  )cpp");
+
+  auto AST = tooling::buildASTFromCodeWithArgs(
+  Example.code(), {"-fno-delayed-template-parsing"});
+  SourceManager  = AST->getSourceManager();
+  auto  = AST->getASTContext();
+
+  auto *M = selectFirst(
+  "mem", match(cxxDependentScopeMemberExpr().bind("mem"), Ctx));
+  ASSERT_TRUE(M != nullptr);
+
+  ASSERT_EQ(SM.getFileOffset(M->getExprLoc()), Example.point("member_name"));
+}
+
 TEST(FriendDecl, FriendTemplateClassRange) {
   RangeVerifier Verifier;
   Verifier.expectRange(2, 1, 3, 14);
Index: clang/include/clang/AST/ExprCXX.h
===
--- clang/include/clang/AST/ExprCXX.h
+++ clang/include/clang/AST/ExprCXX.h
@@ -3774,6 +3774,8 @@
 return MemberNameInfo.getEndLoc();
   }
 
+  SourceLocation getExprLoc() const LLVM_READONLY { return getMemberLoc(); }
+
   static bool classof(const Stmt *T) {
 return T->getStmtClass() == CXXDependentScopeMemberExprClass;
   }


Index: clang/unittests/AST/SourceLocationTest.cpp
===
--- clang/unittests/AST/SourceLocationTest.cpp
+++ clang/unittests/AST/SourceLocationTest.cpp
@@ -634,6 +634,36 @@
  friendDecl()));
 }
 
+TEST(CXXDependentScopeMemberExpr, ExprLocation) {
+
+  llvm::Annotations Example(R"cpp(
+template
+struct MyContainer
+{
+template 
+void pushBack();
+};
+
+template
+void testCall()
+{
+  MyContainer mc;
+  mc.template $member_name^pushBack();
+}
+  )cpp");
+
+  auto AST = tooling::buildASTFromCodeWithArgs(
+  Example.code(), {"-fno-delayed-template-parsing"});
+  SourceManager  = AST->getSourceManager();
+  auto  = AST->getASTContext();
+
+  auto *M = selectFirst(
+  "mem", match(cxxDependentScopeMemberExpr().bind("mem"), Ctx));
+  ASSERT_TRUE(M != nullptr);
+
+  ASSERT_EQ(SM.getFileOffset(M->getExprLoc()), Example.point("member_name"));
+}
+
 TEST(FriendDecl, FriendTemplateClassRange) {
   RangeVerifier Verifier;
   Verifier.expectRange(2, 1, 3, 14);
Index: clang/include/clang/AST/ExprCXX.h
===
--- clang/include/clang/AST/ExprCXX.h
+++ clang/include/clang/AST/ExprCXX.h
@@ -3774,6 +3774,8 @@
 return MemberNameInfo.getEndLoc();
   }
 
+  SourceLocation getExprLoc() const LLVM_READONLY { return getMemberLoc(); }
+
   static bool classof(const Stmt *T) {
 return T->getStmtClass() == CXXDependentScopeMemberExprClass;
   }
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D101365: [clang-query] Add check to prevent setting srcloc when no introspection is available.

2021-04-27 Thread Stephen Kelly via Phabricator via cfe-commits
steveire accepted this revision.
steveire added a comment.
This revision is now accepted and ready to land.

LGTM!




Comment at: clang-tools-extra/unittests/clang-query/QueryParserTest.cpp:249
+  EXPECT_EQ("dump ", Comps[3 + static_cast(HasIntrospection)].TypedText);
+  EXPECT_EQ("dump", Comps[3 + static_cast(HasIntrospection)].DisplayText);
 

nit: I think `HasIntrospection ? 4 : 3` would be clearer.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101365/new/

https://reviews.llvm.org/D101365

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


[PATCH] D101400: [Driver] Add -print-multiarch-triple

2021-04-27 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added a comment.

gcc has `--print-multiarch`. Just use `--print-multiarch`? I think our 
semantics are compatible.

It seems odd to have print-runtime-dir tests in `immediate-options.c`. The 
tests should be moved to a `print-*` file.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101400/new/

https://reviews.llvm.org/D101400

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


[PATCH] D101400: [Driver] Add -print-multiarch-triple

2021-04-27 Thread Petr Hosek via Phabricator via cfe-commits
phosek created this revision.
phosek added reviewers: rnk, MaskRay.
Herald added a subscriber: dang.
phosek requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

This is useful in runtimes build for example which currently try to
guess the correct triple where to place libraries in the multiarch
layout.  Using this flag, the build system can get the correct triple
directly by querying Clang.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D101400

Files:
  clang/include/clang/Driver/Options.td
  clang/include/clang/Driver/ToolChain.h
  clang/lib/Driver/Driver.cpp
  clang/lib/Driver/ToolChains/Fuchsia.h
  clang/lib/Driver/ToolChains/Linux.h
  clang/test/Driver/immediate-options.c

Index: clang/test/Driver/immediate-options.c
===
--- clang/test/Driver/immediate-options.c
+++ clang/test/Driver/immediate-options.c
@@ -29,3 +29,8 @@
 // RUN:-resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
 // RUN:  | FileCheck --check-prefix=PRINT-RUNTIME-DIR-PER-TARGET %s
 // PRINT-RUNTIME-DIR-PER-TARGET: lib{{/|\\}}x86_64-pc-windows-msvc
+
+// RUN: %clang -print-multiarch-triple --target=x86_64-unknown-linux-gnu \
+// RUN:-resource-dir=%S/Inputs/resource_dir \
+// RUN:  | FileCheck --check-prefix=PRINT-MULTIARCH-TRIPLE %s
+// PRINT-MULTIARCH-TRIPLE: x86_64-linux-gnu
Index: clang/lib/Driver/ToolChains/Linux.h
===
--- clang/lib/Driver/ToolChains/Linux.h
+++ clang/lib/Driver/ToolChains/Linux.h
@@ -23,6 +23,10 @@
 
   bool HasNativeLLVMSupport() const override;
 
+  std::string getMultiarchTriple(const Driver ,
+ const llvm::Triple ,
+ StringRef SysRoot) const override;
+
   void
   AddClangSystemIncludeArgs(const llvm::opt::ArgList ,
 llvm::opt::ArgStringList ) const override;
@@ -61,10 +65,6 @@
   Tool *buildAssembler() const override;
   Tool *buildLinker() const override;
   Tool *buildStaticLibTool() const override;
-
-  std::string getMultiarchTriple(const Driver ,
- const llvm::Triple ,
- StringRef SysRoot) const override;
 };
 
 } // end namespace toolchains
Index: clang/lib/Driver/ToolChains/Fuchsia.h
===
--- clang/lib/Driver/ToolChains/Fuchsia.h
+++ clang/lib/Driver/ToolChains/Fuchsia.h
@@ -65,6 +65,10 @@
 return LangOptions::SSPStrong;
   }
 
+  std::string getMultiarchTriple(const Driver ,
+ const llvm::Triple ,
+ StringRef SysRoot) const override;
+
   std::string ComputeEffectiveClangTriple(const llvm::opt::ArgList ,
   types::ID InputType) const override;
 
@@ -97,10 +101,6 @@
 
 protected:
   Tool *buildLinker() const override;
-
-  std::string getMultiarchTriple(const Driver ,
- const llvm::Triple ,
- StringRef SysRoot) const override;
 };
 
 } // end namespace toolchains
Index: clang/lib/Driver/Driver.cpp
===
--- clang/lib/Driver/Driver.cpp
+++ clang/lib/Driver/Driver.cpp
@@ -1900,6 +1900,12 @@
 return false;
   }
 
+  if (C.getArgs().hasArg(options::OPT_print_multiarch_triple)) {
+llvm::outs() << TC.getMultiarchTriple(*this, TC.getTriple(), SysRoot)
+ << "\n";
+return false;
+  }
+
   if (C.getArgs().hasArg(options::OPT_print_targets)) {
 llvm::TargetRegistry::printRegisteredTargetsForVersion(llvm::outs());
 return false;
Index: clang/include/clang/Driver/ToolChain.h
===
--- clang/include/clang/Driver/ToolChain.h
+++ clang/include/clang/Driver/ToolChain.h
@@ -184,12 +184,6 @@
   virtual Tool *buildStaticLibTool() const;
   virtual Tool *getTool(Action::ActionClass AC) const;
 
-  virtual std::string getMultiarchTriple(const Driver ,
- const llvm::Triple ,
- StringRef SysRoot) const {
-return TargetTriple.str();
-  }
-
   virtual std::string buildCompilerRTBasename(const llvm::opt::ArgList ,
   StringRef Component,
   FileType Type,
@@ -548,6 +542,12 @@
   /// isThreadModelSupported() - Does this target support a thread model?
   virtual bool isThreadModelSupported(const StringRef Model) const;
 
+  virtual std::string getMultiarchTriple(const Driver ,
+ const llvm::Triple ,
+ StringRef SysRoot) const {
+return TargetTriple.str();
+  }
+
   /// ComputeLLVMTriple - Return the LLVM 

[PATCH] D99381: [compiler-rt][hwasan] Add Fuchsia-specific sanitizer platform limits

2021-04-27 Thread Leonard Chan via Phabricator via cfe-commits
leonardchan added a comment.

> we usually include them unconditionaly and .h itself has guards against 
> unsupported platforms

@vitalybuka Did you mean something like this? Definitely simplifies the patch.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D99381/new/

https://reviews.llvm.org/D99381

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


[PATCH] D99381: [compiler-rt][hwasan] Add Fuchsia-specific sanitizer platform limits

2021-04-27 Thread Leonard Chan via Phabricator via cfe-commits
leonardchan updated this revision to Diff 340983.

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D99381/new/

https://reviews.llvm.org/D99381

Files:
  compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h


Index: compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
===
--- compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
+++ compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
@@ -1450,6 +1450,12 @@
 
 #define SIGACTION_SYMNAME sigaction
 
+#elif SANITIZER_FUCHSIA
+
+namespace __sanitizer {
+struct __sanitizer_struct_mallinfo {};
+}  // namespace __sanitizer
+
 #endif  // SANITIZER_LINUX || SANITIZER_MAC
 
 #endif


Index: compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
===
--- compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
+++ compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
@@ -1450,6 +1450,12 @@
 
 #define SIGACTION_SYMNAME sigaction
 
+#elif SANITIZER_FUCHSIA
+
+namespace __sanitizer {
+struct __sanitizer_struct_mallinfo {};
+}  // namespace __sanitizer
+
 #endif  // SANITIZER_LINUX || SANITIZER_MAC
 
 #endif
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D100872: Use OpenFlags instead of boolean to set a file as text/binary

2021-04-27 Thread Duncan P. N. Exon Smith via Phabricator via cfe-commits
dexonsmith added a subscriber: sammccall.
dexonsmith added inline comments.



Comment at: clang/include/clang/Frontend/CompilerInstance.h:738-740
+  createOutputFileImpl(StringRef OutputPath, llvm::sys::fs::OpenFlags Flags,
bool RemoveFileOnSignal, bool UseTemporary,
bool CreateMissingDirectories);

abhina.sreeskantharajan wrote:
> rnk wrote:
> > I think this is only going to be worth it if we can roll up all of these 
> > booleans into a new flags enum for compiler instance. It also prevents 
> > introducing a new use of FileSystem.h, which is an expensive header to 
> > include.
> Sorry, I don't think I completely understand your suggestion. Are you 
> proposing that we create a new enum just for CompilerInstance.h for the other 
> booleans like RemoveFileOnSignal, UseTemporary, CreateMissingDirectories? And 
> this new enum also contain text/binary flags so we don't need to use the enum 
> in FileSystem.h? 
> 
> For background, I need this specific change to set some more text files with 
> OF_Text because my old commit got reverted since it caused CRLF issues on 
> Windows https://reviews.llvm.org/D96363.
> 
Yes, I think that's what @rnk is suggesting, maybe along the lines of the 
OutputConfigFlag in the (languishing, I need to get back to it) 
OutputBackend/OutputManager proposal I have (see, e.g., 
https://reviews.llvm.org/D95501, which needs to be split up), or maybe as a 
struct with named members as @sammccall suggests there.

> It also prevents introducing a new use of FileSystem.h, which is an expensive 
> header to include.
Another option that'd be more isolated would be to split the OpenFlag enum 
(and/or its friends) out to another header in 
llvm/include/llvm/Support/FileSystem/ (say, .../FileSystem/FileSystemEnums.h), 
like was done for UniqueID.h.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100872/new/

https://reviews.llvm.org/D100872

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


[PATCH] D101194: [Driver] Push multiarch path setup to individual drivers

2021-04-27 Thread Bjorn Pettersson via Phabricator via cfe-commits
bjope added a comment.

In D101194#2720787 , @phosek wrote:

> In D101194#2720761 , @bjope wrote:
>
>> Or maybe the problem is that we use `-DLLVM_BUILTIN_TARGETS=default`?
>
> The use of `default` is the issue, the problem is that the target triple 
> "guessed" by `config.guess` doesn't necessarily match the multiarch triple 
> used by Clang. I think that ideally we would stop relying on 
> `LLVM_DEFAULT_TARGET_TRIPLE` and instead we would get the path directly from 
> Clang. I can look into it but that might take a while to implement so we 
> should probably revert the change for now?
>
> I'm a bit surprised that you're using `-DLLVM_BUILTIN_TARGETS=default` but 
> `-DLLVM_RUNTIME_TARGETS='x86_64-linux-gnu'`, usually I'd expect these to 
> match.

Well, maybe that is for historical reasons. Or our downstream branch we use 
more targets, but I guess we got some problems on the main branch at some time 
and limited LLVM_RUNTIME_TARGETS to only do x86_64 (while normally we also 
build i386). And  LLVM_BUILTIN_TARGETS=default happens to produce both x86_64 
and i386 builtins.

Anyway I've tried changing to LLVM_BUILTIN_TARGETS='x86_64-linux-gnu' (and also 
LLVM_BUILTIN_TARGETS='i386-linux-gnu;x86_64-linux-gnu') and that seems to work 
fine. So I think I'm back on track. Thanks!
(Crossing my fingers and hopefully I'll get things working on the downstream 
branch with additional downstream targets.)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101194/new/

https://reviews.llvm.org/D101194

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


[PATCH] D101324: Hurd: Clean up Debian multiarch /usr/include/

2021-04-27 Thread Samuel Thibault via Phabricator via cfe-commits
sthibaul added a comment.

I try to make Hurd.cpp close to Linux.cpp in general, yes.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101324/new/

https://reviews.llvm.org/D101324

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


[PATCH] D101324: Hurd: Clean up Debian multiarch /usr/include/

2021-04-27 Thread Fangrui Song via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rGe37c8fd364a9: Hurd: Clean up Debian multiarch 
/usr/include/triplet (authored by sthibaul, committed by MaskRay).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101324/new/

https://reviews.llvm.org/D101324

Files:
  clang/lib/Driver/ToolChains/Hurd.cpp


Index: clang/lib/Driver/ToolChains/Hurd.cpp
===
--- clang/lib/Driver/ToolChains/Hurd.cpp
+++ clang/lib/Driver/ToolChains/Hurd.cpp
@@ -170,11 +170,13 @@
 
   AddMultilibIncludeArgs(DriverArgs, CC1Args);
 
-  if (getTriple().getArch() == llvm::Triple::x86) {
-std::string Path = SysRoot + "/usr/include/i386-gnu";
-if (D.getVFS().exists(Path))
-  addExternCSystemInclude(DriverArgs, CC1Args, Path);
-  }
+  // On systems using multiarch, add /usr/include/$triple before
+  // /usr/include.
+  std::string MultiarchIncludeDir = getMultiarchTriple(D, getTriple(), 
SysRoot);
+  if (!MultiarchIncludeDir.empty() &&
+  D.getVFS().exists(SysRoot + "/usr/include/" + MultiarchIncludeDir))
+addExternCSystemInclude(DriverArgs, CC1Args,
+SysRoot + "/usr/include/" + MultiarchIncludeDir);
 
   // Add an include of '/include' directly. This isn't provided by default by
   // system GCCs, but is often used with cross-compiling GCCs, and harmless to


Index: clang/lib/Driver/ToolChains/Hurd.cpp
===
--- clang/lib/Driver/ToolChains/Hurd.cpp
+++ clang/lib/Driver/ToolChains/Hurd.cpp
@@ -170,11 +170,13 @@
 
   AddMultilibIncludeArgs(DriverArgs, CC1Args);
 
-  if (getTriple().getArch() == llvm::Triple::x86) {
-std::string Path = SysRoot + "/usr/include/i386-gnu";
-if (D.getVFS().exists(Path))
-  addExternCSystemInclude(DriverArgs, CC1Args, Path);
-  }
+  // On systems using multiarch, add /usr/include/$triple before
+  // /usr/include.
+  std::string MultiarchIncludeDir = getMultiarchTriple(D, getTriple(), SysRoot);
+  if (!MultiarchIncludeDir.empty() &&
+  D.getVFS().exists(SysRoot + "/usr/include/" + MultiarchIncludeDir))
+addExternCSystemInclude(DriverArgs, CC1Args,
+SysRoot + "/usr/include/" + MultiarchIncludeDir);
 
   // Add an include of '/include' directly. This isn't provided by default by
   // system GCCs, but is often used with cross-compiling GCCs, and harmless to
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] e37c8fd - Hurd: Clean up Debian multiarch /usr/include/

2021-04-27 Thread Fangrui Song via cfe-commits

Author: Samuel Thibault
Date: 2021-04-27T13:36:12-07:00
New Revision: e37c8fd364a96d9d9f56a1e06e178e9e376beda3

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

LOG: Hurd: Clean up Debian multiarch /usr/include/

This is a follow-up of 35dd6470de84 for the Hurd case, to avoid the
duplication of the i386-gnu path, already provided by
Hurd::getMultiarchTriple.

Reviewed By: MaskRay

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

Added: 


Modified: 
clang/lib/Driver/ToolChains/Hurd.cpp

Removed: 




diff  --git a/clang/lib/Driver/ToolChains/Hurd.cpp 
b/clang/lib/Driver/ToolChains/Hurd.cpp
index bfb96775f898..48b9ccadf36f 100644
--- a/clang/lib/Driver/ToolChains/Hurd.cpp
+++ b/clang/lib/Driver/ToolChains/Hurd.cpp
@@ -170,11 +170,13 @@ void Hurd::AddClangSystemIncludeArgs(const ArgList 
,
 
   AddMultilibIncludeArgs(DriverArgs, CC1Args);
 
-  if (getTriple().getArch() == llvm::Triple::x86) {
-std::string Path = SysRoot + "/usr/include/i386-gnu";
-if (D.getVFS().exists(Path))
-  addExternCSystemInclude(DriverArgs, CC1Args, Path);
-  }
+  // On systems using multiarch, add /usr/include/$triple before
+  // /usr/include.
+  std::string MultiarchIncludeDir = getMultiarchTriple(D, getTriple(), 
SysRoot);
+  if (!MultiarchIncludeDir.empty() &&
+  D.getVFS().exists(SysRoot + "/usr/include/" + MultiarchIncludeDir))
+addExternCSystemInclude(DriverArgs, CC1Args,
+SysRoot + "/usr/include/" + MultiarchIncludeDir);
 
   // Add an include of '/include' directly. This isn't provided by default by
   // system GCCs, but is often used with cross-compiling GCCs, and harmless to



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


[PATCH] D101324: Hurd: Clean up Debian multiarch /usr/include/

2021-04-27 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added a comment.

I see that this makes the code similar to the similar logic in Linux.cpp. 
Thanks!


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101324/new/

https://reviews.llvm.org/D101324

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


[PATCH] D101194: [Driver] Push multiarch path setup to individual drivers

2021-04-27 Thread Petr Hosek via Phabricator via cfe-commits
phosek added a comment.

In D101194#2720761 , @bjope wrote:

> Got some problems with my builds after this commit.
>
> My cmake commands looks like this (well, this is after having tried to fix 
> the problem by replacing `x86_64-unknown-linux-gnu` by `x86_64-linux-gnu` as 
> I figured that might be needed after looking at the changes in this patch):
>
>   cmake /repo/uabbpet/llvm-upstream/llvm --debug-trycompile -G Ninja 
> -DCMAKE_MAKE_PROGRAM=/app/ninja/1.8.2/SLED11-64/bin/ninja 
> -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 
> -DCMAKE_INSTALL_PREFIX=/compiler-clang -DLLVM_APPEND_VC_REV=OFF  
> -DLLVM_ENABLE_ASSERTIONS=ON 
> -DLLVM_ENABLE_PROJECTS='clang;clang-tools-extra;lld' 
> -DLLVM_BUILTIN_TARGETS=default -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON 
> -DLLVM_ENABLE_RUNTIMES='compiler-rt;libcxx;libcxxabi;libunwind' 
> -DRUNTIMES_x86_64-linux-gnu_SANITIZER_USE_STATIC_LLVM_UNWINDER=ON 
> -DRUNTIMES_x86_64-linux-gnu_SANITIZER_USE_STATIC_CXX_ABI=ON 
> -DRUNTIMES_x86_64-linux-gnu_COMPILER_RT_USE_BUILTINS_LIBRARY=ON 
> -DRUNTIMES_x86_64-linux-gnu_COMPILER_RT_CAN_EXECUTE_TESTS=OFF 
> -DRUNTIMES_x86_64-linux-gnu_LIBCXX_HAS_ATOMIC_LIB=0 
> -DRUNTIMES_x86_64-linux-gnu_COMPILER_RT_BUILD_XRAY=OFF 
> -DLLVM_RUNTIME_TARGETS='x86_64-linux-gnu' -DLLVM_ENABLE_LIBPFM=OFF 
> -DCLANG_TOOLING_BUILD_AST_INTROSPECTION=OFF -DCLANG_ROUND_TRIP_CC1_ARGS=OFF
>
> But my build fails, and it seems to be related to the message `-- Failed to 
> find compiler-rt builtins library for x86_64-linux-gnu`, and later I get
>
>   -- Compiler-RT supported architectures: x86_64
>   CMake Error at 
> /repo/uabbpet/llvm-upstream/compiler-rt/cmake/Modules/AddCompilerRT.cmake:258 
> (message):
> Cannot find builtins library for the target architecture
>   Call Stack (most recent call first):
> /repo/uabbpet/llvm-upstream/compiler-rt/lib/stats/CMakeLists.txt:23 
> (add_compiler_rt_runtime)
>
> It tries to find libclang using a path like this 
> `my_build_dir/lib/clang/13.0.0/lib/linux/libclang_rt.builtins-x86_64.a` 
> (which is what I get if manually run `my_build_dir/bin/clang 
> --rtlib=compiler-rt -print-libgcc-file-name` as well). But what I get when 
> building is 
> `my_build_dir/lib/clang/13.0.0/lib/x86_64-unknown-linux-gnu/libclang_rt.builtins.a`
>  and 
> `my_build_dir/lib/clang/13.0.0/lib/i386-unknown-linux-gnu/libclang_rt.builtins.a.
>
> Not sure exactly what I'm doing wrong here. Looks like some kind of mismatch. 
> I assume the layout with separate dirs for the libs is due to 
> `-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON`, but the just built clang does not 
> seem to know about that. Should it know about that? Is it no longer allowed 
> to use `-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON` in combination with 
> `COMPILER_RT_USE_BUILTINS_LIBRARY=ON`?
>
> Or maybe the problem is that we use `-DLLVM_BUILTIN_TARGETS=default`?

The use of `default` is the issue, the problem is that the target triple 
"guessed" by `config.guess` doesn't necessarily match the multiarch triple used 
by Clang. I think that ideally we would stop relying on 
`LLVM_DEFAULT_TARGET_TRIPLE` and instead we would get the path directly from 
Clang. I can look into it but that might take a while to implement so we should 
probably revert the change for now?

I'm a bit surprised that you're using `-DLLVM_BUILTIN_TARGETS=default` but 
`-DLLVM_RUNTIME_TARGETS='x86_64-linux-gnu'`, usually I'd expect these to match.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101194/new/

https://reviews.llvm.org/D101194

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


[clang] bf9eef9 - Gnu: Replace with a GCCInstallation.isValid() check with assert

2021-04-27 Thread Fangrui Song via cfe-commits

Author: Fangrui Song
Date: 2021-04-27T13:31:37-07:00
New Revision: bf9eef92b6cd71d262ac12ce6c4919271bd6c910

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

LOG: Gnu: Replace with a GCCInstallation.isValid() check with assert

Added: 


Modified: 
clang/lib/Driver/ToolChains/Gnu.cpp

Removed: 




diff  --git a/clang/lib/Driver/ToolChains/Gnu.cpp 
b/clang/lib/Driver/ToolChains/Gnu.cpp
index e2cec7c333c0..53bba72dc270 100644
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
@@ -2964,9 +2964,7 @@ bool Generic_GCC::addLibStdCXXIncludePaths(Twine 
IncludeDir, StringRef Triple,
 bool Generic_GCC::addGCCLibStdCxxIncludePaths(
 const llvm::opt::ArgList , llvm::opt::ArgStringList ,
 StringRef DebianMultiarch) const {
-  // Use GCCInstallation to know where libstdc++ headers are installed.
-  if (!GCCInstallation.isValid())
-return false;
+  assert(GCCInstallation.isValid());
 
   // By default, look for the C++ headers in an include directory adjacent to
   // the lib directory of the GCC installation. Note that this is expect to be



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


[PATCH] D101324: Hurd: Clean up Debian multiarch /usr/include/

2021-04-27 Thread Samuel Thibault via Phabricator via cfe-commits
sthibaul added a comment.

No, for now it only supports i686.
This part is actually already being tested by hurd.cpp, /usr/include/i386-gnu 
wouldn't be getting included otherwise.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101324/new/

https://reviews.llvm.org/D101324

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


[PATCH] D101324: Hurd: Clean up Debian multiarch /usr/include/

2021-04-27 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added a comment.

Does Hurd support non-i386? Ideally this should have a test.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101324/new/

https://reviews.llvm.org/D101324

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


[PATCH] D101347: hurd: Clean up test

2021-04-27 Thread Fangrui Song via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGb13e913b31a0: hurd: Clean up test (authored by sthibaul, 
committed by MaskRay).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101347/new/

https://reviews.llvm.org/D101347

Files:
  
clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i686-gnu/10/crtbegin.o
  
clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbegin.o
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/10/.keep
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/4.6.0/.keep
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/10/.keep
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/4.6.0/.keep
  clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/10/crtbegin.o
  clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/10/crtbeginS.o
  clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/10/crtbeginT.o
  clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbegin.o
  
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbeginS.o
  
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbeginT.o
  clang/test/Driver/hurd.cpp

Index: clang/test/Driver/hurd.cpp
===
--- clang/test/Driver/hurd.cpp
+++ clang/test/Driver/hurd.cpp
@@ -1,27 +1,25 @@
 // UNSUPPORTED: system-windows
 
-// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
-// RUN: --target=i686-pc-hurd-gnu \
-// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
-// RUN:   | FileCheck --check-prefix=CHECK %s
+// RUN: %clang -### %s --target=i686-pc-hurd-gnu --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   --stdlib=platform 2>&1 | FileCheck --check-prefix=CHECK %s
 // CHECK: "-cc1"
 // CHECK: "-isysroot" "[[SYSROOT:[^"]+]]"
-// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/10/../../../../include/c++/10"
 /// Debian specific - the path component after 'include' is i386-gnu even
 /// though the installation is i686-gnu.
-// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
-// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/10/../../../../include/i386-gnu/c++/10"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/10/../../../../include/c++/10/backward"
 // CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
-// CHECK: "-internal-externc-isystem"
+// CHECK:  "-internal-externc-isystem"
 // CHECK-SAME: {{^}} "[[SYSROOT]]/usr/include/i386-gnu"
 // CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/include"
 // CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
-// CHECK: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
-// CHECK: "-dynamic-linker" "/lib/ld.so"
-// CHECK: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbegin.o"
-// CHECK: "-L
-// CHECK-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
-// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK:  "{{.*}}ld" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK:  "-dynamic-linker" "/lib/ld.so"
+// CHECK:  "{{.*}}/usr/lib/gcc/i686-gnu/10/crtbegin.o"
+// CHECK:  "-L
+// CHECK-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-gnu/10"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/10/../../../../lib32"
 // CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-gnu"
 // CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
 // CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-gnu"
@@ -29,29 +27,27 @@
 // CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib"
 // CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
 
-// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
-// RUN: --target=i686-pc-hurd-gnu -static \
-// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
-// RUN:   | FileCheck --check-prefix=CHECK-STATIC %s
+// RUN: %clang -### %s --target=i686-pc-hurd-gnu --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   --stdlib=platform -static 2>&1 | FileCheck --check-prefix=CHECK-STATIC %s
 // CHECK-STATIC: "-cc1"
 // CHECK-STATIC: "-static-define"
 // CHECK-STATIC: "-isysroot" "[[SYSROOT:[^"]+]]"
-// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/10/../../../../include/c++/10"
 /// Debian specific - the path component after 'include' is i386-gnu even
 /// though the installation is i686-gnu.
-// CHECK-STATIC-SAME: {{^}} "-internal-isystem" 

[clang] b13e913 - hurd: Clean up test

2021-04-27 Thread Fangrui Song via cfe-commits

Author: Samuel Thibault
Date: 2021-04-27T13:19:17-07:00
New Revision: b13e913b31a0703ebc15d701ff05fd82788dc02a

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

LOG: hurd: Clean up test

- Unsupported Windows to drop backslashes code
- Upgrade to current gcc 10 version

Reviewed By: MaskRay

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

Added: 

clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i686-gnu/10/crtbegin.o
clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/10/.keep
clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/10/.keep
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/10/crtbegin.o
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/10/crtbeginS.o
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/10/crtbeginT.o

Modified: 
clang/test/Driver/hurd.cpp

Removed: 

clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbegin.o
clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/4.6.0/.keep

clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/4.6.0/.keep

clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbegin.o

clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbeginS.o

clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbeginT.o



diff  --git 
a/clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbegin.o
 
b/clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i686-gnu/10/crtbegin.o
similarity index 100%
rename from 
clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbegin.o
rename to 
clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i686-gnu/10/crtbegin.o

diff  --git 
a/clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/4.6.0/.keep 
b/clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/10/.keep
similarity index 100%
rename from clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/4.6.0/.keep
rename to clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/10/.keep

diff  --git 
a/clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/4.6.0/.keep 
b/clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/10/.keep
similarity index 100%
rename from 
clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/4.6.0/.keep
rename to 
clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/10/.keep

diff  --git 
a/clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbegin.o
 b/clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/10/crtbegin.o
similarity index 100%
rename from 
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbegin.o
rename to 
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/10/crtbegin.o

diff  --git 
a/clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbeginS.o
 b/clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/10/crtbeginS.o
similarity index 100%
rename from 
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbeginS.o
rename to 
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/10/crtbeginS.o

diff  --git 
a/clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbeginT.o
 b/clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/10/crtbeginT.o
similarity index 100%
rename from 
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbeginT.o
rename to 
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/10/crtbeginT.o

diff  --git a/clang/test/Driver/hurd.cpp b/clang/test/Driver/hurd.cpp
index cc6da07dc9305..1c4ba16af063d 100644
--- a/clang/test/Driver/hurd.cpp
+++ b/clang/test/Driver/hurd.cpp
@@ -1,27 +1,25 @@
 // UNSUPPORTED: system-windows
 
-// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
-// RUN: --target=i686-pc-hurd-gnu \
-// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
-// RUN:   | FileCheck --check-prefix=CHECK %s
+// RUN: %clang -### %s --target=i686-pc-hurd-gnu 
--sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   --stdlib=platform 2>&1 | FileCheck --check-prefix=CHECK %s
 // CHECK: "-cc1"
 // CHECK: "-isysroot" "[[SYSROOT:[^"]+]]"
-// CHECK-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+// CHECK-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT]]/usr/lib/gcc/i686-gnu/10/../../../../include/c++/10"
 /// Debian specific - the path component after 'include' is i386-gnu even
 /// though the installation is i686-gnu.
-// CHECK-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
-// CHECK-SAME: {{^}} "-internal-isystem" 

[PATCH] D101347: hurd: Clean up test

2021-04-27 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay updated this revision to Diff 340966.
MaskRay added a comment.

Delete unneeded -no-canonical-prefixes
Add --stdlib=platform


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101347/new/

https://reviews.llvm.org/D101347

Files:
  
clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i686-gnu/10/crtbegin.o
  
clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbegin.o
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/10/.keep
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/4.6.0/.keep
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/10/.keep
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/4.6.0/.keep
  clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/10/crtbegin.o
  clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/10/crtbeginS.o
  clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/10/crtbeginT.o
  clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbegin.o
  
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbeginS.o
  
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbeginT.o
  clang/test/Driver/hurd.cpp

Index: clang/test/Driver/hurd.cpp
===
--- clang/test/Driver/hurd.cpp
+++ clang/test/Driver/hurd.cpp
@@ -1,27 +1,25 @@
 // UNSUPPORTED: system-windows
 
-// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
-// RUN: --target=i686-pc-hurd-gnu \
-// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
-// RUN:   | FileCheck --check-prefix=CHECK %s
+// RUN: %clang -### %s --target=i686-pc-hurd-gnu --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   --stdlib=platform 2>&1 | FileCheck --check-prefix=CHECK %s
 // CHECK: "-cc1"
 // CHECK: "-isysroot" "[[SYSROOT:[^"]+]]"
-// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/10/../../../../include/c++/10"
 /// Debian specific - the path component after 'include' is i386-gnu even
 /// though the installation is i686-gnu.
-// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
-// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/10/../../../../include/i386-gnu/c++/10"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/10/../../../../include/c++/10/backward"
 // CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
-// CHECK: "-internal-externc-isystem"
+// CHECK:  "-internal-externc-isystem"
 // CHECK-SAME: {{^}} "[[SYSROOT]]/usr/include/i386-gnu"
 // CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/include"
 // CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
-// CHECK: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
-// CHECK: "-dynamic-linker" "/lib/ld.so"
-// CHECK: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbegin.o"
-// CHECK: "-L
-// CHECK-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
-// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK:  "{{.*}}ld" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK:  "-dynamic-linker" "/lib/ld.so"
+// CHECK:  "{{.*}}/usr/lib/gcc/i686-gnu/10/crtbegin.o"
+// CHECK:  "-L
+// CHECK-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-gnu/10"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/10/../../../../lib32"
 // CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-gnu"
 // CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
 // CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-gnu"
@@ -29,29 +27,27 @@
 // CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib"
 // CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
 
-// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
-// RUN: --target=i686-pc-hurd-gnu -static \
-// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
-// RUN:   | FileCheck --check-prefix=CHECK-STATIC %s
+// RUN: %clang -### %s --target=i686-pc-hurd-gnu --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   --stdlib=platform -static 2>&1 | FileCheck --check-prefix=CHECK-STATIC %s
 // CHECK-STATIC: "-cc1"
 // CHECK-STATIC: "-static-define"
 // CHECK-STATIC: "-isysroot" "[[SYSROOT:[^"]+]]"
-// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/10/../../../../include/c++/10"
 /// Debian specific - the path component after 'include' is i386-gnu even
 /// though the installation is i686-gnu.
-// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
-// CHECK-STATIC-SAME: {{^}} 

[PATCH] D101194: [Driver] Push multiarch path setup to individual drivers

2021-04-27 Thread Bjorn Pettersson via Phabricator via cfe-commits
bjope added a comment.

Got some problems with my builds after this commit.

My cmake commands looks like this (well, this is after having tried to fix the 
problem by replacing `x86_64-unknown-linux-gnu` by `x86_64-linux-gnu` as I 
figured that might be needed after looking at the changes in this patch):

  cmake /repo/uabbpet/llvm-upstream/llvm --debug-trycompile -G Ninja 
-DCMAKE_MAKE_PROGRAM=/app/ninja/1.8.2/SLED11-64/bin/ninja 
-DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 
-DCMAKE_INSTALL_PREFIX=/compiler-clang -DLLVM_APPEND_VC_REV=OFF  
-DLLVM_ENABLE_ASSERTIONS=ON 
-DLLVM_ENABLE_PROJECTS='clang;clang-tools-extra;lld' 
-DLLVM_BUILTIN_TARGETS=default -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON 
-DLLVM_ENABLE_RUNTIMES='compiler-rt;libcxx;libcxxabi;libunwind' 
-DRUNTIMES_x86_64-linux-gnu_SANITIZER_USE_STATIC_LLVM_UNWINDER=ON 
-DRUNTIMES_x86_64-linux-gnu_SANITIZER_USE_STATIC_CXX_ABI=ON 
-DRUNTIMES_x86_64-linux-gnu_COMPILER_RT_USE_BUILTINS_LIBRARY=ON 
-DRUNTIMES_x86_64-linux-gnu_COMPILER_RT_CAN_EXECUTE_TESTS=OFF 
-DRUNTIMES_x86_64-linux-gnu_LIBCXX_HAS_ATOMIC_LIB=0 
-DRUNTIMES_x86_64-linux-gnu_COMPILER_RT_BUILD_XRAY=OFF 
-DLLVM_RUNTIME_TARGETS='x86_64-linux-gnu' -DLLVM_ENABLE_LIBPFM=OFF 
-DCLANG_TOOLING_BUILD_AST_INTROSPECTION=OFF -DCLANG_ROUND_TRIP_CC1_ARGS=OFF

But my build fails, and it seems to be related to the message `-- Failed to 
find compiler-rt builtins library for x86_64-linux-gnu`, and later I get

  -- Compiler-RT supported architectures: x86_64
  CMake Error at 
/repo/uabbpet/llvm-upstream/compiler-rt/cmake/Modules/AddCompilerRT.cmake:258 
(message):
Cannot find builtins library for the target architecture
  Call Stack (most recent call first):
/repo/uabbpet/llvm-upstream/compiler-rt/lib/stats/CMakeLists.txt:23 
(add_compiler_rt_runtime)

It tries to find libclang using a path like this 
`my_build_dir/lib/clang/13.0.0/lib/linux/libclang_rt.builtins-x86_64.a` (which 
is what I get if manually run `my_build_dir/bin/clang --rtlib=compiler-rt 
-print-libgcc-file-name` as well). But what I get when building is 
`my_build_dir/lib/clang/13.0.0/lib/x86_64-unknown-linux-gnu/libclang_rt.builtins.a`
 and 
`my_build_dir/lib/clang/13.0.0/lib/i386-unknown-linux-gnu/libclang_rt.builtins.a.

Not sure exactly what I'm doing wrong here. Looks like some kind of mismatch. I 
assume the layout with separate dirs for the libs is due to 
`-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON`, but the just built clang does not 
seem to know about that. Should it know about that? Is it no longer allowed to 
use `-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON` in combination with 
`COMPILER_RT_USE_BUILTINS_LIBRARY=ON`?

Or maybe the problem is that we use `-DLLVM_BUILTIN_TARGETS=default`?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101194/new/

https://reviews.llvm.org/D101194

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


[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-27 Thread Samuel Thibault via Phabricator via cfe-commits
sthibaul marked an inline comment as done.
sthibaul added inline comments.



Comment at: clang/lib/Driver/ToolChains/Gnu.cpp:3014
   llvm::opt::ArgStringList ) const 
{
-  addGCCLibStdCxxIncludePaths(DriverArgs, CC1Args);
+  if (!GCCInstallation.isValid())
+return;

MaskRay wrote:
> sthibaul wrote:
> > MaskRay wrote:
> > > I'd be glad if we could use `GCCInstallation.isValid()`.
> > > 
> > > However, @thakis has a chromium usage where `lib/gcc/$triple/crtbegin.o` 
> > > is not provided while compile-only  libstdc++ search paths are expected.
> > > 
> > > For now, use `GCCInstallation.isValid() ? 
> > > GCCInstallation.getTriple().str() : ""`
> > Ok, fixed so
> Sorry, I noticed that we can just ignore `!GCCInstallation.isValid()`. The 
> chromium usage should still work.
Ok!


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

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


[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-27 Thread Fangrui Song via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG932e8c324154: hurd: Detect libstdc++ include paths on Debian 
Hurd i386 (authored by sthibaul, committed by MaskRay).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

Files:
  clang/lib/Driver/ToolChains/Gnu.cpp
  clang/lib/Driver/ToolChains/Gnu.h
  clang/lib/Driver/ToolChains/Hurd.cpp
  clang/lib/Driver/ToolChains/Hurd.h
  clang/lib/Driver/ToolChains/Linux.cpp
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/4.6.0/.keep
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/4.6.0/.keep
  clang/test/Driver/hurd.c
  clang/test/Driver/hurd.cpp

Index: clang/test/Driver/hurd.cpp
===
--- /dev/null
+++ clang/test/Driver/hurd.cpp
@@ -0,0 +1,98 @@
+// UNSUPPORTED: system-windows
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i686-pc-hurd-gnu \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK %s
+// CHECK: "-cc1"
+// CHECK: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+// CHECK: "-internal-externc-isystem"
+// CHECK-SAME: {{^}} "[[SYSROOT]]/usr/include/i386-gnu"
+// CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/include"
+// CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// CHECK: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK: "-dynamic-linker" "/lib/ld.so"
+// CHECK: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbegin.o"
+// CHECK: "-L
+// CHECK-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-gnu"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-gnu"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i686-pc-hurd-gnu -static \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-STATIC %s
+// CHECK-STATIC: "-cc1"
+// CHECK-STATIC: "-static-define"
+// CHECK-STATIC: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+// CHECK-STATIC: "-internal-externc-isystem"
+// CHECK-STATIC-SAME: {{^}} "[[SYSROOT]]/usr/include/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/include"
+// CHECK-STATIC-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// CHECK-STATIC: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK-STATIC: "-static"
+// CHECK-STATIC: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbeginT.o"
+// CHECK-STATIC: "-L
+// CHECK-STATIC-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i686-pc-hurd-gnu -shared \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-SHARED %s
+// CHECK-SHARED: "-cc1"
+// CHECK-SHARED: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-SHARED-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component 

[clang] 932e8c3 - hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-27 Thread Fangrui Song via cfe-commits

Author: Samuel Thibault
Date: 2021-04-27T13:04:41-07:00
New Revision: 932e8c3241541c0216968a0f966c495b77bf4461

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

LOG: hurd: Detect libstdc++ include paths on Debian Hurd i386

This is a follow-up of e92d2b80c6c9 ("[Driver] Detect libstdc++ include
paths for native gcc (-m32 and -m64) on Debian i386") for the Debian Hurd
case, which has the same multiarch name reduction from i686 to i386.
i386-linux-gnu is actually Linux-only, so this moves the code of that commit
to Linux.cpp, and adds the same to Hurd.cpp

Reviewed By: MaskRay

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

Added: 
clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/4.6.0/.keep

clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/4.6.0/.keep
clang/test/Driver/hurd.cpp

Modified: 
clang/lib/Driver/ToolChains/Gnu.cpp
clang/lib/Driver/ToolChains/Gnu.h
clang/lib/Driver/ToolChains/Hurd.cpp
clang/lib/Driver/ToolChains/Hurd.h
clang/lib/Driver/ToolChains/Linux.cpp

Removed: 
clang/test/Driver/hurd.c



diff  --git a/clang/lib/Driver/ToolChains/Gnu.cpp 
b/clang/lib/Driver/ToolChains/Gnu.cpp
index 386edb7a9e6fa..e2cec7c333c08 100644
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
@@ -2961,9 +2961,9 @@ bool Generic_GCC::addLibStdCXXIncludePaths(Twine 
IncludeDir, StringRef Triple,
   return true;
 }
 
-bool
-Generic_GCC::addGCCLibStdCxxIncludePaths(const llvm::opt::ArgList ,
- llvm::opt::ArgStringList ) 
const {
+bool Generic_GCC::addGCCLibStdCxxIncludePaths(
+const llvm::opt::ArgList , llvm::opt::ArgStringList ,
+StringRef DebianMultiarch) const {
   // Use GCCInstallation to know where libstdc++ headers are installed.
   if (!GCCInstallation.isValid())
 return false;
@@ -2982,11 +2982,8 @@ Generic_GCC::addGCCLibStdCxxIncludePaths(const 
llvm::opt::ArgList ,
   LibDir.str() + "/../" + TripleStr + "/include/c++/" + Version.Text,
   TripleStr, Multilib.includeSuffix(), DriverArgs, CC1Args))
 return true;
+
   // Detect Debian g++-multiarch-incdir.
diff .
-  StringRef DebianMultiarch =
-  GCCInstallation.getTriple().getArch() == llvm::Triple::x86
-  ? "i386-linux-gnu"
-  : TripleStr;
   if (addLibStdCXXIncludePaths(LibDir.str() + "/../include/c++/" + 
Version.Text,
DebianMultiarch, Multilib.includeSuffix(),
DriverArgs, CC1Args, /*Debian=*/true))
@@ -3014,7 +3011,10 @@ Generic_GCC::addGCCLibStdCxxIncludePaths(const 
llvm::opt::ArgList ,
 void
 Generic_GCC::addLibStdCxxIncludePaths(const llvm::opt::ArgList ,
   llvm::opt::ArgStringList ) const 
{
-  addGCCLibStdCxxIncludePaths(DriverArgs, CC1Args);
+  if (GCCInstallation.isValid()) {
+addGCCLibStdCxxIncludePaths(DriverArgs, CC1Args,
+GCCInstallation.getTriple().str());
+  }
 }
 
 llvm::opt::DerivedArgList *

diff  --git a/clang/lib/Driver/ToolChains/Gnu.h 
b/clang/lib/Driver/ToolChains/Gnu.h
index efad942a52926..40fd756a56537 100644
--- a/clang/lib/Driver/ToolChains/Gnu.h
+++ b/clang/lib/Driver/ToolChains/Gnu.h
@@ -342,9 +342,9 @@ class LLVM_LIBRARY_VISIBILITY Generic_GCC : public 
ToolChain {
   addLibStdCxxIncludePaths(const llvm::opt::ArgList ,
llvm::opt::ArgStringList ) const;
 
-  bool
-  addGCCLibStdCxxIncludePaths(const llvm::opt::ArgList ,
-   llvm::opt::ArgStringList ) const;
+  bool addGCCLibStdCxxIncludePaths(const llvm::opt::ArgList ,
+   llvm::opt::ArgStringList ,
+   StringRef DebianMultiarch) const;
 
   bool addLibStdCXXIncludePaths(Twine IncludeDir, StringRef Triple,
 Twine IncludeSuffix,

diff  --git a/clang/lib/Driver/ToolChains/Hurd.cpp 
b/clang/lib/Driver/ToolChains/Hurd.cpp
index a700d7b9064c3..bfb96775f8987 100644
--- a/clang/lib/Driver/ToolChains/Hurd.cpp
+++ b/clang/lib/Driver/ToolChains/Hurd.cpp
@@ -184,6 +184,21 @@ void Hurd::AddClangSystemIncludeArgs(const ArgList 
,
   addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include");
 }
 
+void Hurd::addLibStdCxxIncludePaths(const llvm::opt::ArgList ,
+llvm::opt::ArgStringList ) const {
+  // We need a detected GCC installation on Linux to provide libstdc++'s
+  // headers in odd Linuxish places.
+  if (!GCCInstallation.isValid())
+return;
+
+  StringRef TripleStr = GCCInstallation.getTriple().str();
+  StringRef DebianMultiarch =
+  GCCInstallation.getTriple().getArch() == llvm::Triple::x86 ? "i386-gnu"
+   

[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-27 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added inline comments.



Comment at: clang/lib/Driver/ToolChains/Gnu.cpp:3014
   llvm::opt::ArgStringList ) const 
{
-  addGCCLibStdCxxIncludePaths(DriverArgs, CC1Args);
+  if (!GCCInstallation.isValid())
+return;

sthibaul wrote:
> MaskRay wrote:
> > I'd be glad if we could use `GCCInstallation.isValid()`.
> > 
> > However, @thakis has a chromium usage where `lib/gcc/$triple/crtbegin.o` is 
> > not provided while compile-only  libstdc++ search paths are expected.
> > 
> > For now, use `GCCInstallation.isValid() ? GCCInstallation.getTriple().str() 
> > : ""`
> Ok, fixed so
Sorry, I noticed that we can just ignore `!GCCInstallation.isValid()`. The 
chromium usage should still work.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

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


[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-27 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay updated this revision to Diff 340960.
MaskRay added a comment.

simplify


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

Files:
  clang/lib/Driver/ToolChains/Gnu.cpp
  clang/lib/Driver/ToolChains/Gnu.h
  clang/lib/Driver/ToolChains/Hurd.cpp
  clang/lib/Driver/ToolChains/Hurd.h
  clang/lib/Driver/ToolChains/Linux.cpp
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/4.6.0/.keep
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/4.6.0/.keep
  clang/test/Driver/hurd.c
  clang/test/Driver/hurd.cpp

Index: clang/test/Driver/hurd.cpp
===
--- /dev/null
+++ clang/test/Driver/hurd.cpp
@@ -0,0 +1,98 @@
+// UNSUPPORTED: system-windows
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i686-pc-hurd-gnu \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK %s
+// CHECK: "-cc1"
+// CHECK: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+// CHECK: "-internal-externc-isystem"
+// CHECK-SAME: {{^}} "[[SYSROOT]]/usr/include/i386-gnu"
+// CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/include"
+// CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// CHECK: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK: "-dynamic-linker" "/lib/ld.so"
+// CHECK: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbegin.o"
+// CHECK: "-L
+// CHECK-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-gnu"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-gnu"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i686-pc-hurd-gnu -static \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-STATIC %s
+// CHECK-STATIC: "-cc1"
+// CHECK-STATIC: "-static-define"
+// CHECK-STATIC: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+// CHECK-STATIC: "-internal-externc-isystem"
+// CHECK-STATIC-SAME: {{^}} "[[SYSROOT]]/usr/include/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/include"
+// CHECK-STATIC-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// CHECK-STATIC: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK-STATIC: "-static"
+// CHECK-STATIC: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbeginT.o"
+// CHECK-STATIC: "-L
+// CHECK-STATIC-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i686-pc-hurd-gnu -shared \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-SHARED %s
+// CHECK-SHARED: "-cc1"
+// CHECK-SHARED: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-SHARED-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-SHARED-SAME: {{^}} "-internal-isystem" 

[PATCH] D100901: [CMake][llvm] The first argument to check_linker_flag is the language

2021-04-27 Thread Jim Radford via Phabricator via cfe-commits
radford updated this revision to Diff 340956.
radford added a comment.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

[CMake][llvm] The first argument to check_linker_flag is the language

Match the API for the new check_linker_flag and use it directly when
available, leaving the old code as a fallback.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100901/new/

https://reviews.llvm.org/D100901

Files:
  clang/tools/driver/CMakeLists.txt
  llvm/cmake/modules/AddLLVM.cmake
  llvm/cmake/modules/CheckLinkerFlag.cmake
  llvm/cmake/modules/HandleLLVMOptions.cmake
  llvm/cmake/modules/HandleLLVMStdlib.cmake
  llvm/cmake/modules/LLVMCheckLinkerFlag.cmake

Index: llvm/cmake/modules/LLVMCheckLinkerFlag.cmake
===
--- /dev/null
+++ llvm/cmake/modules/LLVMCheckLinkerFlag.cmake
@@ -0,0 +1,17 @@
+include(CheckLinkerFlag OPTIONAL)
+
+if (COMMAND check_linker_flag)
+  macro(llvm_check_linker_flag)
+check_linker_flag(${ARGN})
+  endmacro()
+else()
+  include(CheckCXXCompilerFlag)
+
+  # cmake builtin compatible, except we assume lang is CXX
+  function(llvm_check_linker_flag lang flag out_var)
+cmake_push_check_state()
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${flag}")
+check_cxx_compiler_flag("" ${out_var})
+cmake_pop_check_state()
+  endfunction()
+endif()
Index: llvm/cmake/modules/HandleLLVMStdlib.cmake
===
--- llvm/cmake/modules/HandleLLVMStdlib.cmake
+++ llvm/cmake/modules/HandleLLVMStdlib.cmake
@@ -13,12 +13,12 @@
   endfunction()
 
   include(CheckCXXCompilerFlag)
-  include(CheckLinkerFlag)
+  include(LLVMCheckLinkerFlag)
   set(LLVM_LIBCXX_USED 0)
   if(LLVM_ENABLE_LIBCXX)
 if(LLVM_COMPILER_IS_GCC_COMPATIBLE)
   check_cxx_compiler_flag("-stdlib=libc++" CXX_COMPILER_SUPPORTS_STDLIB)
-  check_linker_flag("-stdlib=libc++" CXX_LINKER_SUPPORTS_STDLIB)
+  llvm_check_linker_flag(CXX "-stdlib=libc++" CXX_LINKER_SUPPORTS_STDLIB)
   if(CXX_COMPILER_SUPPORTS_STDLIB AND CXX_LINKER_SUPPORTS_STDLIB)
 append("-stdlib=libc++"
   CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS
@@ -36,7 +36,7 @@
 if(LLVM_COMPILER_IS_GCC_COMPATIBLE)
   check_cxx_compiler_flag("-static-libstdc++"
   CXX_COMPILER_SUPPORTS_STATIC_STDLIB)
-  check_linker_flag("-static-libstdc++" CXX_LINKER_SUPPORTS_STATIC_STDLIB)
+  llvm_check_linker_flag(CXX "-static-libstdc++" CXX_LINKER_SUPPORTS_STATIC_STDLIB)
   if(CXX_COMPILER_SUPPORTS_STATIC_STDLIB AND
 CXX_LINKER_SUPPORTS_STATIC_STDLIB)
 append("-static-libstdc++"
Index: llvm/cmake/modules/HandleLLVMOptions.cmake
===
--- llvm/cmake/modules/HandleLLVMOptions.cmake
+++ llvm/cmake/modules/HandleLLVMOptions.cmake
@@ -888,8 +888,8 @@
 
 # lld doesn't print colored diagnostics when invoked from Ninja
 if (UNIX AND CMAKE_GENERATOR STREQUAL "Ninja")
-  include(CheckLinkerFlag)
-  check_linker_flag("-Wl,--color-diagnostics" LINKER_SUPPORTS_COLOR_DIAGNOSTICS)
+  include(LLVMCheckLinkerFlag)
+  llvm_check_linker_flag(CXX "-Wl,--color-diagnostics" LINKER_SUPPORTS_COLOR_DIAGNOSTICS)
   append_if(LINKER_SUPPORTS_COLOR_DIAGNOSTICS "-Wl,--color-diagnostics"
 CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS)
 endif()
Index: llvm/cmake/modules/CheckLinkerFlag.cmake
===
--- llvm/cmake/modules/CheckLinkerFlag.cmake
+++ /dev/null
@@ -1,6 +0,0 @@
-include(CheckCXXCompilerFlag)
-
-function(check_linker_flag flag out_var)
-  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${flag}")
-  check_cxx_compiler_flag("" ${out_var})
-endfunction()
Index: llvm/cmake/modules/AddLLVM.cmake
===
--- llvm/cmake/modules/AddLLVM.cmake
+++ llvm/cmake/modules/AddLLVM.cmake
@@ -236,8 +236,8 @@
   elseif(${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
 # Support for ld -z discard-unused=sections was only added in
 # Solaris 11.4.
-include(CheckLinkerFlag)
-check_linker_flag("-Wl,-z,discard-unused=sections" LINKER_SUPPORTS_Z_DISCARD_UNUSED)
+include(LLVMCheckLinkerFlag)
+llvm_check_linker_flag(CXX "-Wl,-z,discard-unused=sections" LINKER_SUPPORTS_Z_DISCARD_UNUSED)
 if (LINKER_SUPPORTS_Z_DISCARD_UNUSED)
   set_property(TARGET ${target_name} APPEND_STRING PROPERTY
LINK_FLAGS " -Wl,-z,discard-unused=sections")
Index: clang/tools/driver/CMakeLists.txt
===
--- clang/tools/driver/CMakeLists.txt
+++ clang/tools/driver/CMakeLists.txt
@@ -93,7 +93,7 @@
 
 if(CLANG_ORDER_FILE AND
 (LLVM_LINKER_IS_LD64 OR LLVM_LINKER_IS_GOLD OR LLVM_LINKER_IS_LLD))
-  

[PATCH] D101191: [InstCombine] Fully disable select to and/or i1 folding

2021-04-27 Thread Nikita Popov via Phabricator via cfe-commits
nikic added inline comments.



Comment at: 
llvm/test/Transforms/PhaseOrdering/unsigned-multiply-overflow-check.ll:20
 
+; FIXME: noundef should be attached to args
 define i1 @will_not_overflow(i64 %arg, i64 %arg1) {

spatel wrote:
> aqjune wrote:
> > aqjune wrote:
> > > spatel wrote:
> > > > Any ideas about what it will take to get those argument attributes for 
> > > > the C++ source example shown in the code comment?
> > > > 
> > > > SDAG is still going to convert the `select` to `and`, so we can 
> > > > probably avoid regressions by replicating InstSimplify's 
> > > > omitCheckForZeroBeforeMulWithOverflow() as a DAG combine. Let me know 
> > > > if I should do that.
> > > I promised to do the patch at D82317, but these days I'm occupied with 
> > > other things, so it might not be a recent future (not in a month at 
> > > least)...
> > > 
> > > I think it is a good chance to use freeze here: We can add
> > > ```
> > > %cond = icmp ne %x, 0
> > > %v = call @llvm.umul.with.overflow(%x, %y)
> > > %ov = extractvalue %v, 1
> > > %res = select i1 %cond, %ov, false
> > >   =>
> > > %y.fr = freeze %y
> > > %v = call @llvm.umul.with.overflow(%x, %y.fr)
> > > %ov = extractvalue %v, 1
> > > %res = %ov
> > > ```
> > > into CodeGenPrepare.
> > > What do you think? CodeGenPrepare is already using freeze for a few 
> > > transformations.
> > Alive2 proof: https://alive2.llvm.org/ce/z/zgPUGT
> I don't think we want to add code to CGP if we can avoid it. CGP is supposed 
> to be a temporary hack that is not needed with GlobalISel. I do acknowledge 
> that "temporary" in the code may outlive the people working on it today (!).
> 
> If we don't care about undef correctness in codegen (in other words, the 
> select->and transform will live on in codegen forever), then we might as well 
> add a DAG combine. Alternatively, are we comfortable creating freeze in 
> instcombine for rare code like umul.with.ov?
I think this is one of the rare cases where inserting Freeze in InstCombine 
makes sense. There's not much (any?) further optimization opportunities for a 
umul.with.overflow with non-constant operands.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101191/new/

https://reviews.llvm.org/D101191

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


[PATCH] D100581: [Clang] -Wunused-but-set-parameter and -Wunused-but-set-variable

2021-04-27 Thread Evgenii Stepanov via Phabricator via cfe-commits
eugenis added a comment.

Right, our commit process is a bit strange. Ideally, the change author should 
initiate commit after they have the necessary approvals, and then be 
responsible to deal with any fallout in a timely manner. As things are, the 
author does not control the timing of the commit, and the committer does not 
get the bot messages.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100581/new/

https://reviews.llvm.org/D100581

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


[PATCH] D101317: hurd: Fix i386 research path

2021-04-27 Thread Fangrui Song via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG9c552d27ee03: hurd: Fix i386 research path (authored by 
sthibaul, committed by MaskRay).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101317/new/

https://reviews.llvm.org/D101317

Files:
  clang/lib/Driver/ToolChains/Gnu.cpp
  clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i386-gnu/bin/as
  clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i386-gnu/bin/ld
  clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i386-gnu/lib/.keep
  clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i686-gnu/bin/as
  clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i686-gnu/bin/ld
  clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i686-gnu/lib/.keep
  
clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i386-gnu/4.6.0/crtbegin.o
  
clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbegin.o
  clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i386-gnu/4.6.0/crtbegin.o
  
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i386-gnu/4.6.0/crtbeginS.o
  
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i386-gnu/4.6.0/crtbeginT.o
  clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbegin.o
  
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbeginS.o
  
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbeginT.o
  clang/test/Driver/hurd.c


Index: clang/test/Driver/hurd.c
===
--- clang/test/Driver/hurd.c
+++ clang/test/Driver/hurd.c
@@ -1,5 +1,5 @@
 // RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
-// RUN: --target=i386-pc-gnu \
+// RUN: --target=i686-pc-hurd-gnu \
 // RUN: --sysroot=%S/Inputs/basic_hurd_tree \
 // RUN:   | FileCheck --check-prefix=CHECK %s
 // CHECK-NOT: warning:
@@ -11,7 +11,7 @@
 // CHECK: "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
 // CHECK: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
 // CHECK: "-dynamic-linker" "/lib/ld.so"
-// CHECK: "{{.*}}/usr/lib/gcc/i386-gnu/4.6.0{{/|}}crtbegin.o"
+// CHECK: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbegin.o"
 // CHECK: "-L[[SYSROOT]]/lib/i386-gnu"
 // CHECK: "-L[[SYSROOT]]/lib/../lib32"
 // CHECK: "-L[[SYSROOT]]/usr/lib/i386-gnu"
@@ -20,7 +20,7 @@
 // CHECK: "-L[[SYSROOT]]/usr/lib"
 
 // RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
-// RUN: --target=i386-pc-gnu -static \
+// RUN: --target=i686-pc-hurd-gnu -static \
 // RUN: --sysroot=%S/Inputs/basic_hurd_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-STATIC %s
 // CHECK-STATIC-NOT: warning:
@@ -33,7 +33,7 @@
 // CHECK-STATIC: "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
 // CHECK-STATIC: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
 // CHECK-STATIC: "-static"
-// CHECK-STATIC: "{{.*}}/usr/lib/gcc/i386-gnu/4.6.0{{/|}}crtbeginT.o"
+// CHECK-STATIC: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbeginT.o"
 // CHECK-STATIC: "-L[[SYSROOT]]/lib/i386-gnu"
 // CHECK-STATIC: "-L[[SYSROOT]]/lib/../lib32"
 // CHECK-STATIC: "-L[[SYSROOT]]/usr/lib/i386-gnu"
@@ -42,7 +42,7 @@
 // CHECK-STATIC: "-L[[SYSROOT]]/usr/lib"
 
 // RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
-// RUN: --target=i386-pc-gnu -shared \
+// RUN: --target=i686-pc-hurd-gnu -shared \
 // RUN: --sysroot=%S/Inputs/basic_hurd_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-SHARED %s
 // CHECK-SHARED-NOT: warning:
@@ -53,7 +53,7 @@
 // CHECK-SHARED: "-internal-externc-isystem" "[[SYSROOT]]/include"
 // CHECK-SHARED: "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
 // CHECK-SHARED: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
-// CHECK-SHARED: "{{.*}}/usr/lib/gcc/i386-gnu/4.6.0{{/|}}crtbeginS.o"
+// CHECK-SHARED: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbeginS.o"
 // CHECK-SHARED: "-L[[SYSROOT]]/lib/i386-gnu"
 // CHECK-SHARED: "-L[[SYSROOT]]/lib/../lib32"
 // CHECK-SHARED: "-L[[SYSROOT]]/usr/lib/i386-gnu"
@@ -63,11 +63,11 @@
 
 // RUN: %clang -### -o %t %s 2>&1 -no-integrated-as -fuse-ld=ld \
 // RUN: --gcc-toolchain=%S/Inputs/basic_cross_hurd_tree/usr \
-// RUN: --target=i386-pc-gnu \
+// RUN: --target=i686-pc-hurd-gnu \
 // RUN:   | FileCheck --check-prefix=CHECK-CROSS %s
 // CHECK-CROSS-NOT: warning:
-// CHECK-CROSS: "-cc1" "-triple" "i386-pc-hurd-gnu"
-// CHECK-CROSS: 
"{{.*}}/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i386-gnu/4.6.0/../../../../i386-gnu/bin{{/|}}as"
 "--32"
-// CHECK-CROSS: 
"{{.*}}/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i386-gnu/4.6.0/../../../../i386-gnu/bin{{/|}}ld"
 {{.*}} "-m" "elf_i386"
-// CHECK-CROSS: 
"{{.*}}/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i386-gnu/4.6.0{{/|}}crtbegin.o"
-// CHECK-CROSS: 
"-L{{.*}}/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i386-gnu/4.6.0/../../../../i386-gnu/lib"
+// CHECK-CROSS: "-cc1" "-triple" "i686-pc-hurd-gnu"
+// CHECK-CROSS: 

[clang] 9c552d2 - hurd: Fix i386 research path

2021-04-27 Thread Fangrui Song via cfe-commits

Author: Samuel Thibault
Date: 2021-04-27T12:41:18-07:00
New Revision: 9c552d27ee03ad485c2d36827e73bea75faee5e1

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

LOG: hurd: Fix i386 research path

f26341840253 ("[Driver] Gnu.cpp: remove obsoleted i386 triple detection
from end-of-life distribution versions") dropped the i686-gnu gcc path, but
GNU/Hurd's gcc is actually using it, and not i386.

This fixes the gcc path and update the tests to reflect it.

Reviewed By: MaskRay

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

Added: 
clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i686-gnu/bin/as
clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i686-gnu/bin/ld
clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i686-gnu/lib/.keep

clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbegin.o

clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbegin.o

clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbeginS.o

clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbeginT.o

Modified: 
clang/lib/Driver/ToolChains/Gnu.cpp
clang/test/Driver/hurd.c

Removed: 
clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i386-gnu/bin/as
clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i386-gnu/bin/ld
clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i386-gnu/lib/.keep

clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i386-gnu/4.6.0/crtbegin.o

clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i386-gnu/4.6.0/crtbegin.o

clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i386-gnu/4.6.0/crtbeginS.o

clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i386-gnu/4.6.0/crtbeginT.o



diff  --git a/clang/lib/Driver/ToolChains/Gnu.cpp 
b/clang/lib/Driver/ToolChains/Gnu.cpp
index 245c0234de640..386edb7a9e6fa 100644
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
@@ -2115,7 +2115,7 @@ void 
Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
   "i686-pc-linux-gnu",  "i386-redhat-linux6E",
   "i686-redhat-linux",  "i386-redhat-linux",
   "i586-suse-linux","i686-montavista-linux",
-  "i686-linux-android", "i386-gnu",
+  "i686-linux-android", "i686-gnu",
   };
 
   static const char *const M68kLibDirs[] = {"/lib"};

diff  --git 
a/clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i386-gnu/bin/as 
b/clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i686-gnu/bin/as
similarity index 100%
rename from clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i386-gnu/bin/as
rename to clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i686-gnu/bin/as

diff  --git 
a/clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i386-gnu/bin/ld 
b/clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i686-gnu/bin/ld
similarity index 100%
rename from clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i386-gnu/bin/ld
rename to clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i686-gnu/bin/ld

diff  --git 
a/clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i386-gnu/lib/.keep 
b/clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i686-gnu/lib/.keep
similarity index 100%
rename from 
clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i386-gnu/lib/.keep
rename to clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/i686-gnu/lib/.keep

diff  --git 
a/clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i386-gnu/4.6.0/crtbegin.o
 
b/clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbegin.o
similarity index 100%
rename from 
clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i386-gnu/4.6.0/crtbegin.o
rename to 
clang/test/Driver/Inputs/basic_cross_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbegin.o

diff  --git 
a/clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i386-gnu/4.6.0/crtbegin.o
 
b/clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbegin.o
similarity index 100%
rename from 
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i386-gnu/4.6.0/crtbegin.o
rename to 
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbegin.o

diff  --git 
a/clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i386-gnu/4.6.0/crtbeginS.o
 
b/clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbeginS.o
similarity index 100%
rename from 
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i386-gnu/4.6.0/crtbeginS.o
rename to 
clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbeginS.o

diff  --git 
a/clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i386-gnu/4.6.0/crtbeginT.o
 
b/clang/test/Driver/Inputs/basic_hurd_tree/usr/lib/gcc/i686-gnu/4.6.0/crtbeginT.o
similarity index 100%
rename from 

[PATCH] D100581: [Clang] -Wunused-but-set-parameter and -Wunused-but-set-variable

2021-04-27 Thread Arthur Eubanks via Phabricator via cfe-commits
aeubanks added a comment.

Sorry about that, although I don't think emails went to me since the email was 
somebody else's. But point taken, I'll coordinate better in the future when 
landing someone else's patch.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100581/new/

https://reviews.llvm.org/D100581

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


[PATCH] D101191: [InstCombine] Fully disable select to and/or i1 folding

2021-04-27 Thread Sanjay Patel via Phabricator via cfe-commits
spatel added inline comments.



Comment at: 
llvm/test/Transforms/PhaseOrdering/unsigned-multiply-overflow-check.ll:20
 
+; FIXME: noundef should be attached to args
 define i1 @will_not_overflow(i64 %arg, i64 %arg1) {

aqjune wrote:
> aqjune wrote:
> > spatel wrote:
> > > Any ideas about what it will take to get those argument attributes for 
> > > the C++ source example shown in the code comment?
> > > 
> > > SDAG is still going to convert the `select` to `and`, so we can probably 
> > > avoid regressions by replicating InstSimplify's 
> > > omitCheckForZeroBeforeMulWithOverflow() as a DAG combine. Let me know if 
> > > I should do that.
> > I promised to do the patch at D82317, but these days I'm occupied with 
> > other things, so it might not be a recent future (not in a month at 
> > least)...
> > 
> > I think it is a good chance to use freeze here: We can add
> > ```
> > %cond = icmp ne %x, 0
> > %v = call @llvm.umul.with.overflow(%x, %y)
> > %ov = extractvalue %v, 1
> > %res = select i1 %cond, %ov, false
> >   =>
> > %y.fr = freeze %y
> > %v = call @llvm.umul.with.overflow(%x, %y.fr)
> > %ov = extractvalue %v, 1
> > %res = %ov
> > ```
> > into CodeGenPrepare.
> > What do you think? CodeGenPrepare is already using freeze for a few 
> > transformations.
> Alive2 proof: https://alive2.llvm.org/ce/z/zgPUGT
I don't think we want to add code to CGP if we can avoid it. CGP is supposed to 
be a temporary hack that is not needed with GlobalISel. I do acknowledge that 
"temporary" in the code may outlive the people working on it today (!).

If we don't care about undef correctness in codegen (in other words, the 
select->and transform will live on in codegen forever), then we might as well 
add a DAG combine. Alternatively, are we comfortable creating freeze in 
instcombine for rare code like umul.with.ov?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101191/new/

https://reviews.llvm.org/D101191

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


[PATCH] D100581: [Clang] -Wunused-but-set-parameter and -Wunused-but-set-variable

2021-04-27 Thread Evgenii Stepanov via Phabricator via cfe-commits
eugenis added a comment.

I fixed another one in 
https://reviews.llvm.org/rG561f4b9087457e9ea3cf4aeb57dcd507e2fa6258
Please watch the bots after you land changes like this one and don't let them 
stay broken for an entire day!


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100581/new/

https://reviews.llvm.org/D100581

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


[PATCH] D101389: [clang][CodeGen] Fix address space for sret

2021-04-27 Thread Yaxun Liu via Phabricator via cfe-commits
yaxunl created this revision.
yaxunl added a reviewer: rjmccall.
Herald added subscribers: kerbowa, tpr, nhaehnle, jvesely.
yaxunl requested review of this revision.

sret is returned through temporary variables allocated on stack,
therefore it should use alloca address space.

Currently clang use default address space for sret pointers. This
causes inefficient code generated for AMDGPU backend since
alloca address space is 32 bit whereas generic pointer is 64 bit.
It also causes assertions where alloca address space is expected.

This patch uses alloca address space for sret pointers. It is NFC
for targets alloca address space of which is default address space.


https://reviews.llvm.org/D101389

Files:
  clang/lib/CodeGen/CGCall.cpp
  clang/test/CodeGenCUDA/amdgpu-sret.cu

Index: clang/test/CodeGenCUDA/amdgpu-sret.cu
===
--- /dev/null
+++ clang/test/CodeGenCUDA/amdgpu-sret.cu
@@ -0,0 +1,67 @@
+// REQUIRES: amdgpu-registered-target
+
+// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa -target-cpu gfx906 \
+// RUN:   -aux-triple x86_64-unknown-linux-gnu -fcuda-is-device \
+// RUN:   -emit-llvm -o - -x hip %s \
+// RUN:   | FileCheck %s
+
+// Check no assertion with debug info.
+
+// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa -target-cpu gfx906 \
+// RUN:   -aux-triple x86_64-unknown-linux-gnu -fcuda-is-device \
+// RUN:   -S -o %t.s -x hip %s \
+// RUN:   -debug-info-kind=limited
+
+#include "Inputs/cuda.h"
+ 
+struct A {
+  int x[100];
+};
+
+__device__ A a;
+
+// CHECK-LABEL: @_Z5func1v(%struct.A addrspace(5)* noalias sret(%struct.A) align 4 
+__device__ A func1() {
+  A a;
+  return a;
+}
+
+// Check returning the return value again.
+
+// CHECK-LABEL: @_Z5func2v(
+// CHECK-SAME: %struct.A addrspace(5)* noalias sret(%struct.A) align 4 %[[ARG:.*]])
+// CHECK: call void @_Z5func1v(%struct.A addrspace(5)* sret(%struct.A) align 4 %[[ARG]])
+__device__ A func2() {
+  A a = func1();
+  return a;
+}
+
+// Check assigning the return value to a global variable.
+
+// CHECK-LABEL: @_Z5func3v(
+// CHECK: %[[RET:.*]] = alloca %struct.A, align 4, addrspace(5)
+// CHECK: %[[CAST1:.*]] = addrspacecast %struct.A addrspace(5)* %[[RET]] to %struct.A*
+// CHECK: %[[CAST2:.*]] = addrspacecast %struct.A* %[[CAST1]] to %struct.A addrspace(5)*
+// CHECK: call void @_Z5func1v(%struct.A addrspace(5)* sret(%struct.A) align 4 %[[CAST2]]
+// CHECK: %[[CAST3:.*]] = bitcast %struct.A* %[[CAST1]] to i8*
+// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64{{.*}}@a{{.*}}%[[CAST3]]
+__device__ void func3() {
+  a = func1();
+}
+
+// Check assigning the return value to a temporary variable.
+
+// CHECK-LABEL: @_Z5func4v(
+// CHECK: %[[TMP:.*]] = alloca %struct.A, align 4, addrspace(5)
+// CHECK: %[[TMP_CAST1:.*]] = addrspacecast %struct.A addrspace(5)* %[[TMP]] to %struct.A*
+// CHECK: %[[RET:.*]] = alloca %struct.A, align 4, addrspace(5)
+// CHECK: %[[RET_CAST1:.*]] = addrspacecast %struct.A addrspace(5)* %[[RET]] to %struct.A*
+// CHECK: %[[RET_CAST2:.*]] = addrspacecast %struct.A* %[[RET_CAST1]] to %struct.A addrspace(5)*
+// CHECK: call void @_Z5func1v(%struct.A addrspace(5)* sret(%struct.A) align 4 %[[RET_CAST2]]
+// CHECK: %[[TMP_CAST2:.*]] = bitcast %struct.A* %[[TMP_CAST1]] to i8*
+// CHECK: %[[RET_CAST3:.*]] = bitcast %struct.A* %[[RET_CAST1]] to i8*
+// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64{{.*}}%[[TMP_CAST2]]{{.*}}%[[RET_CAST3]]
+__device__ void func4() {
+  A a;
+  a = func1();
+}
Index: clang/lib/CodeGen/CGCall.cpp
===
--- clang/lib/CodeGen/CGCall.cpp
+++ clang/lib/CodeGen/CGCall.cpp
@@ -1624,7 +1624,8 @@
   if (IRFunctionArgs.hasSRetArg()) {
 QualType Ret = FI.getReturnType();
 llvm::Type *Ty = ConvertType(Ret);
-unsigned AddressSpace = Context.getTargetAddressSpace(Ret);
+unsigned AddressSpace =
+Context.getTargetAddressSpace(CGM.getASTAllocaAddressSpace());
 ArgTypes[IRFunctionArgs.getSRetArgNo()] =
 llvm::PointerType::get(Ty, AddressSpace);
   }
@@ -4671,7 +4672,17 @@
   }
 }
 if (IRFunctionArgs.hasSRetArg()) {
-  IRCallArgs[IRFunctionArgs.getSRetArgNo()] = SRetPtr.getPointer();
+  IRCallArgs[IRFunctionArgs.getSRetArgNo()] =
+  getTargetHooks().performAddrSpaceCast(
+  *this, SRetPtr.getPointer(), LangAS::Default,
+  getASTAllocaAddressSpace(),
+  SRetPtr.getPointer()
+  ->getType()
+  ->getPointerElementType()
+  ->getPointerTo(getContext().getTargetAddressSpace(
+  getASTAllocaAddressSpace())),
+  /*non-null*/ true);
+
 } else if (RetAI.isInAlloca()) {
   Address Addr =
   Builder.CreateStructGEP(ArgMemory, RetAI.getInAllocaFieldIndex());
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D101388: [clangd] Add SymbolID to LocatedSymbol.

2021-04-27 Thread Utkarsh Saxena via Phabricator via cfe-commits
usaxena95 created this revision.
usaxena95 added a reviewer: sammccall.
Herald added subscribers: kadircet, arphaman.
usaxena95 requested review of this revision.
Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov.
Herald added a project: clang-tools-extra.

This is useful for running clangd in batch mode. We do not have to both
locate the symbol and also query the SymbolID (using getSymbolInfo).


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D101388

Files:
  clang-tools-extra/clangd/XRefs.cpp
  clang-tools-extra/clangd/XRefs.h
  clang-tools-extra/clangd/unittests/XRefsTests.cpp

Index: clang-tools-extra/clangd/unittests/XRefsTests.cpp
===
--- clang-tools-extra/clangd/unittests/XRefsTests.cpp
+++ clang-tools-extra/clangd/unittests/XRefsTests.cpp
@@ -306,6 +306,8 @@
 
 MATCHER_P(RangeIs, R, "") { return arg.Loc.range == R; }
 MATCHER_P(AttrsAre, A, "") { return arg.Attributes == A; }
+MATCHER(HasID, "") { return arg.ID.hasValue(); }
+MATCHER_P(HasID, ID, "") { return arg.ID.getValue() == ID; }
 
 TEST(LocateSymbol, WithIndex) {
   Annotations SymbolHeader(R"cpp(
@@ -919,6 +921,7 @@
 } else {
   ASSERT_THAT(Results, ::testing::SizeIs(1)) << Test;
   EXPECT_EQ(Results[0].PreferredDeclaration.range, *WantDecl) << Test;
+  EXPECT_THAT(Results[0], HasID()) << Test;
   llvm::Optional GotDef;
   if (Results[0].Definition)
 GotDef = Results[0].Definition->range;
@@ -926,6 +929,24 @@
 }
   }
 }
+TEST(LocateSymbol, ValidSymbolID) {
+  auto T = Annotations(R"cpp(
+#define MACRO(x, y) ((x) + (y))
+int add(int x, int y) { return $MACRO^MACRO(x, y); }
+int sum = $add^add(1, 2);
+  )cpp");
+
+  TestTU TU = TestTU::withCode(T.code());
+  auto AST = TU.build();
+  auto Index = TU.index();
+  EXPECT_THAT(locateSymbolAt(AST, T.point("add"), Index.get()),
+  ElementsAre(AllOf(Sym("add"),
+HasID(getSymbolID((AST, "add"));
+  EXPECT_THAT(
+  locateSymbolAt(AST, T.point("MACRO"), Index.get()),
+  ElementsAre(AllOf(Sym("MACRO"),
+HasID(findSymbol(TU.headerSymbols(), "MACRO").ID;
+}
 
 TEST(LocateSymbol, AllMulti) {
   // Ranges in tests:
@@ -1072,8 +1093,10 @@
   auto TU = TestTU::withCode(T.code());
   auto AST = TU.build();
   auto Index = TU.index();
-  EXPECT_THAT(locateSymbolAt(AST, T.point(), Index.get()),
-  ElementsAre(Sym("MyClass", T.range(), T.range(;
+  EXPECT_THAT(
+  locateSymbolAt(AST, T.point(), Index.get()),
+  ElementsAre(AllOf(Sym("MyClass", T.range(), T.range()),
+HasID(getSymbolID((AST, "MyClass"));
 }
 
 TEST(LocateSymbol, Textual) {
Index: clang-tools-extra/clangd/XRefs.h
===
--- clang-tools-extra/clangd/XRefs.h
+++ clang-tools-extra/clangd/XRefs.h
@@ -16,6 +16,7 @@
 #include "Protocol.h"
 #include "SourceCode.h"
 #include "index/Index.h"
+#include "index/SymbolID.h"
 #include "index/SymbolLocation.h"
 #include "support/Path.h"
 #include "clang/AST/ASTTypeTraits.h"
@@ -47,6 +48,8 @@
   Location PreferredDeclaration;
   // Where the symbol is defined, if known. May equal PreferredDeclaration.
   llvm::Optional Definition;
+  // SymbolID of the symbol. Not present for file referents.
+  llvm::Optional ID;
 };
 llvm::raw_ostream <<(llvm::raw_ostream &, const LocatedSymbol &);
 /// Get definition of symbol at a specified \p Pos.
Index: clang-tools-extra/clangd/XRefs.cpp
===
--- clang-tools-extra/clangd/XRefs.cpp
+++ clang-tools-extra/clangd/XRefs.cpp
@@ -257,6 +257,7 @@
   Macro.Name = std::string(M->Name);
   Macro.PreferredDeclaration = *Loc;
   Macro.Definition = Loc;
+  Macro.ID = getSymbolID(M->Name, M->Info, AST.getSourceManager());
   return Macro;
 }
   }
@@ -361,6 +362,7 @@
 Result.emplace_back();
 Result.back().Name = printName(AST.getASTContext(), *D);
 Result.back().PreferredDeclaration = *Loc;
+Result.back().ID = getSymbolID(D);
 if (const NamedDecl *Def = getDefinition(D))
   Result.back().Definition = makeLocation(
   AST.getASTContext(), nameLocation(*Def, SM), MainFilePath);
@@ -516,6 +518,7 @@
 Results.emplace_back();
 Results.back().Name = printName(ASTContext, *D);
 Results.back().PreferredDeclaration = *Loc;
+Results.back().ID = getSymbolID(D);
 if (const NamedDecl *Def = getDefinition(D))
   Results.back().Definition =
   makeLocation(ASTContext, nameLocation(*Def, SM), *MainFilePath);
@@ -605,6 +608,7 @@
 LocatedSymbol Located;
 Located.PreferredDeclaration = *MaybeDeclLoc;
 Located.Name = (Sym.Name + Sym.TemplateSpecializationArgs).str();
+Located.ID = Sym.ID;
 if (Sym.Definition) {
   auto MaybeDefLoc = indexToLSPLocation(Sym.Definition, MainFilePath);
   if (!MaybeDefLoc) 

[PATCH] D100919: [AArch64] Support customizing stack protector guard

2021-04-27 Thread Nick Desaulniers via Phabricator via cfe-commits
nickdesaulniers updated this revision to Diff 340932.
nickdesaulniers added a comment.

- rebase on D101387 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100919/new/

https://reviews.llvm.org/D100919

Files:
  clang/include/clang/Basic/CodeGenOptions.h
  clang/lib/CodeGen/BackendUtil.cpp
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/Driver/stack-protector-guard.c
  llvm/include/llvm/Target/TargetOptions.h
  llvm/lib/CodeGen/CommandFlags.cpp
  llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
  llvm/test/CodeGen/AArch64/stack-guard-sysreg.ll

Index: llvm/test/CodeGen/AArch64/stack-guard-sysreg.ll
===
--- /dev/null
+++ llvm/test/CodeGen/AArch64/stack-guard-sysreg.ll
@@ -0,0 +1,73 @@
+; RUN: llc %s --stack-protector-guard=sysreg \
+; RUN:   --stack-protector-guard-reg=sp_el0 \
+; RUN:   --stack-protector-guard-offset=0 -o - | \
+; RUN: FileCheck --check-prefix=CHECK --check-prefix=CHECK-NO-OFFSET %s
+; RUN: llc %s --stack-protector-guard=sysreg \
+; RUN:   --stack-protector-guard-reg=sp_el0 \
+; RUN:   --stack-protector-guard-offset=8 -o - | \
+; RUN: FileCheck --check-prefix=CHECK --check-prefix=CHECK-POSITIVE-OFFSET %s
+; RUN: llc %s --stack-protector-guard=sysreg \
+; RUN:   --stack-protector-guard-reg=sp_el0 \
+; RUN:   --stack-protector-guard-offset=-8 -o - | \
+; RUN: FileCheck --check-prefix=CHECK --check-prefix=CHECK-NEGATIVE-OFFSET %s
+; RUN: llc %s --stack-protector-guard=sysreg \
+; RUN:   --stack-protector-guard-reg=sp_el0 \
+; RUN:   --stack-protector-guard-offset=1 -o - | \
+; RUN: FileCheck --check-prefix=CHECK --check-prefix=CHECK-NPOT-OFFSET %s
+; RUN: llc %s --stack-protector-guard=sysreg \
+; RUN:   --stack-protector-guard-reg=sp_el0 \
+; RUN:   --stack-protector-guard-offset=-1 -o - | \
+; RUN: FileCheck --check-prefix=CHECK --check-prefix=CHECK-NPOT-NEG-OFFSET %s
+
+target triple = "aarch64-unknown-linux-gnu"
+
+; Verify that we `mrs` from `SP_EL0` twice, rather than load from
+; __stack_chk_guard.
+define dso_local void @foo(i64 %t) local_unnamed_addr #0 {
+; CHECK-LABEL:   foo:
+; CHECK: // %bb.0: // %entry
+; CHECK-NEXT:stp x29, x30, [sp, #-16]! // 16-byte Folded Spill
+; CHECK-NEXT:mov x29, sp
+; CHECK-NEXT:sub sp, sp, #16 // =16
+; CHECK-NEXT:.cfi_def_cfa w29, 16
+; CHECK-NEXT:.cfi_offset w30, -8
+; CHECK-NEXT:.cfi_offset w29, -16
+; CHECK-NEXT:mrs x8, SP_EL0
+; CHECK-NO-OFFSET:   ldr x8, [x8]
+; CHECK-POSITIVE-OFFSET: ldr x8, [x8, #8]
+; CHECK-NEGATIVE-OFFSET: ldr x8, [x8, #-8]
+; CHECK-NPOT-OFFSET: ldur x8, [x8, #1]
+; CHECK-NPOT-NEG-OFFSET: ldur x8, [x8, #-1]
+; CHECK-NEXT:lsl x9, x0, #2
+; CHECK-NEXT:add x9, x9, #15 // =15
+; CHECK-NEXT:and x9, x9, #0xfff0
+; CHECK-NEXT:stur x8, [x29, #-8]
+; CHECK-NEXT:mov x8, sp
+; CHECK-NEXT:sub x0, x8, x9
+; CHECK-NEXT:mov sp, x0
+; CHECK-NEXT:bl baz
+; CHECK-NEXT:ldur x8, [x29, #-8]
+; CHECK-NEXT:mrs x9, SP_EL0
+; CHECK-NO-OFFSET:   ldr x9, [x9]
+; CHECK-POSITIVE-OFFSET: ldr x9, [x9, #8]
+; CHECK-NEGATIVE-OFFSET: ldr x9, [x9, #-8]
+; CHECK-NPOT-OFFSET: ldur x9, [x9, #1]
+; CHECK-NPOT-NEG-OFFSET: ldur x9, [x9, #-1]
+; CHECK-NEXT:cmp x9, x8
+; CHECK-NEXT:b.ne .LBB0_2
+; CHECK-NEXT:  // %bb.1: // %entry
+; CHECK-NEXT:mov sp, x29
+; CHECK-NEXT:ldp x29, x30, [sp], #16 // 16-byte Folded Reload
+; CHECK-NEXT:ret
+; CHECK-NEXT:  .LBB0_2: // %entry
+; CHECK-NEXT:bl __stack_chk_fail
+; CHECK-NOT: __stack_chk_guard
+entry:
+  %vla = alloca i32, i64 %t, align 4
+  call void @baz(i32* nonnull %vla)
+  ret void
+}
+
+declare dso_local void @baz(i32*) local_unnamed_addr
+
+attributes #0 = { sspstrong }
Index: llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
===
--- llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
+++ llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
@@ -1901,6 +1901,30 @@
   }
 
   Register Reg = MI.getOperand(0).getReg();
+  if (MI.getOpcode() == AArch64::LOAD_STACK_GUARD) {
+TargetOptions Options = MI.getParent()->getParent()->getTarget().Options;
+if (Options.StackProtectorGuard == StackProtectorGuards::SysReg) {
+  const AArch64SysReg::SysReg *SrcReg =
+  AArch64SysReg::lookupSysRegByName(Options.StackProtectorGuardReg);
+  assert(SrcReg && "Unable to encode SysReg");
+  BuildMI(MBB, MI, DL, get(AArch64::MRS))
+  .addReg(Reg, RegState::Define)
+  .addImm(SrcReg->Encoding);
+  if (Options.StackProtectorGuardOffset % 8 == 0)
+BuildMI(MBB, MI, DL, get(AArch64::LDRXui))
+.addReg(Reg, getKillRegState(false))
+.addReg(Reg, RegState::Define)
+.addImm(Options.StackProtectorGuardOffset >> 3);
+  else
+BuildMI(MBB, MI, DL, get(AArch64::LDURXi))
+.addReg(Reg, getKillRegState(false))
+.addReg(Reg, 

[PATCH] D101327: [Clang][Driver] validate sysregs for -mstack-protector-guard-reg=

2021-04-27 Thread Nick Desaulniers via Phabricator via cfe-commits
nickdesaulniers updated this revision to Diff 340931.
nickdesaulniers added a comment.

- rebase on D101387 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101327/new/

https://reviews.llvm.org/D101327

Files:
  clang/lib/Driver/ToolChains/Arch/AArch64.cpp
  clang/lib/Driver/ToolChains/Arch/AArch64.h
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/Driver/stack-protector-guard.c

Index: clang/test/Driver/stack-protector-guard.c
===
--- clang/test/Driver/stack-protector-guard.c
+++ clang/test/Driver/stack-protector-guard.c
@@ -46,6 +46,10 @@
 // RUN:   -mstack-protector-guard-reg=sp_el0 \
 // RUN:   -mstack-protector-guard-offset=0 %s 2>&1 | \
 // RUN: FileCheck -check-prefix=CHECK-AARCH64 %s
+// RUN: %clang -### -target aarch64-linux-gnu -mstack-protector-guard=sysreg \
+// RUN:   -mstack-protector-guard-reg=sp_el2 \
+// RUN:   -mstack-protector-guard-offset=0 %s 2>&1 | \
+// RUN: FileCheck -check-prefix=CHECK-AARCH64-SP_EL2 %s
 // RUN: %clang -### -target aarch64-linux-gnu \
 // RUN:   -mstack-protector-guard=tls %s 2>&1 | \
 // RUN:   FileCheck -check-prefix=INVALID-VALUE-AARCH64 %s
@@ -55,5 +59,6 @@
 // RUN: FileCheck -check-prefix=INVALID-REG-AARCH64 %s
 
 // CHECK-AARCH64: "-cc1" {{.*}}"-mstack-protector-guard=sysreg" "-mstack-protector-guard-offset=0" "-mstack-protector-guard-reg=sp_el0"
-// INVALID-VALUE-AARCH64: error: invalid value 'tls' in 'mstack-protector-guard=','valid arguments to '-mstack-protector-guard=' are:sysreg global'
+// CHECK-AARCH64-SP_EL2: "-cc1" {{.*}}"-mstack-protector-guard=sysreg" "-mstack-protector-guard-offset=0" "-mstack-protector-guard-reg=sp_el2"
+// INVALID-VALUE-AARCH64: error: invalid value 'tls' in 'mstack-protector-guard=', valid arguments to '-mstack-protector-guard=' are:sysreg global
 // INVALID-REG-AARCH64: error: invalid value 'foo' in 'mstack-protector-guard-reg='
Index: clang/lib/Driver/ToolChains/Clang.cpp
===
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -3147,7 +3147,7 @@
   << "for X86, valid arguments to '-mstack-protector-guard-reg=' are:fs gs";
   return;
 }
-if (EffectiveTriple.isAArch64() && Value != "sp_el0") {
+if (EffectiveTriple.isAArch64() && !aarch64::isValidSysReg(Value)) {
   D.Diag(diag::err_drv_invalid_value) << A->getOption().getName() << Value;
   return;
 }
Index: clang/lib/Driver/ToolChains/Arch/AArch64.h
===
--- clang/lib/Driver/ToolChains/Arch/AArch64.h
+++ clang/lib/Driver/ToolChains/Arch/AArch64.h
@@ -27,6 +27,8 @@
 std::string getAArch64TargetCPU(const llvm::opt::ArgList ,
 const llvm::Triple , llvm::opt::Arg *);
 
+bool isValidSysReg(StringRef RegName);
+
 } // end namespace aarch64
 } // end namespace target
 } // end namespace driver
Index: clang/lib/Driver/ToolChains/Arch/AArch64.cpp
===
--- clang/lib/Driver/ToolChains/Arch/AArch64.cpp
+++ clang/lib/Driver/ToolChains/Arch/AArch64.cpp
@@ -10,9 +10,10 @@
 #include "clang/Driver/Driver.h"
 #include "clang/Driver/DriverDiagnostic.h"
 #include "clang/Driver/Options.h"
+#include "llvm/ADT/STLExtras.h"
 #include "llvm/Option/ArgList.h"
-#include "llvm/Support/TargetParser.h"
 #include "llvm/Support/Host.h"
+#include "llvm/Support/TargetParser.h"
 
 using namespace clang::driver;
 using namespace clang::driver::tools;
@@ -493,3 +494,932 @@
   if (Args.hasArg(options::OPT_mno_neg_immediates))
 Features.push_back("+no-neg-immediates");
 }
+
+/// Checks if a string is a valid sysreg.
+// While it would be good to avoid duplication of
+// llvm::AArch64SysReg::lookupSysRegByName, we don't want to couple CFE to
+// Target/. This list is taken from the generated
+// lib/Target/AArch64/AArch64GenSystemOperands.inc.
+bool aarch64::isValidSysReg(StringRef RegName) {
+  static const char *ValidRegs[] = {
+  "ACCDATA_EL1",
+  "ACTLR_EL1",
+  "ACTLR_EL2",
+  "ACTLR_EL3",
+  "AFSR0_EL1",
+  "AFSR0_EL12",
+  "AFSR0_EL2",
+  "AFSR0_EL3",
+  "AFSR1_EL1",
+  "AFSR1_EL12",
+  "AFSR1_EL2",
+  "AFSR1_EL3",
+  "AIDR_EL1",
+  "AMAIR_EL1",
+  "AMAIR_EL12",
+  "AMAIR_EL2",
+  "AMAIR_EL3",
+  "AMCFGR_EL0",
+  "AMCGCR_EL0",
+  "AMCNTENCLR0_EL0",
+  "AMCNTENCLR1_EL0",
+  "AMCNTENSET0_EL0",
+  "AMCNTENSET1_EL0",
+  "AMCR_EL0",
+  "AMEVCNTR00_EL0",
+  "AMEVCNTR01_EL0",
+  "AMEVCNTR02_EL0",
+  "AMEVCNTR03_EL0",
+  "AMEVCNTR10_EL0",
+  "AMEVCNTR110_EL0",
+  "AMEVCNTR111_EL0",
+  "AMEVCNTR112_EL0",
+  "AMEVCNTR113_EL0",
+  "AMEVCNTR114_EL0",
+  "AMEVCNTR115_EL0",
+  "AMEVCNTR11_EL0",
+  "AMEVCNTR12_EL0",
+  "AMEVCNTR13_EL0",
+ 

[PATCH] D101387: remove single quotes around sugguestion diagnostic

2021-04-27 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added a subscriber: rtrieu.
MaskRay added a comment.

@rtrieu Do we have a way appending arbitrary messages to a diagnostic template?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101387/new/

https://reviews.llvm.org/D101387

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


[PATCH] D101387: remove single quotes around sugguestion diagnostic

2021-04-27 Thread Nick Desaulniers via Phabricator via cfe-commits
nickdesaulniers created this revision.
nickdesaulniers added reviewers: xiangzhangllvm, MaskRay, DavidSpickett.
nickdesaulniers requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Clutters the sugguestion.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D101387

Files:
  clang/include/clang/Basic/DiagnosticDriverKinds.td
  clang/test/Driver/stack-protector-guard.c
  flang/test/Driver/fixed-line-length.f90


Index: flang/test/Driver/fixed-line-length.f90
===
--- flang/test/Driver/fixed-line-length.f90
+++ flang/test/Driver/fixed-line-length.f90
@@ -37,12 +37,12 @@
 !-
 ! EXPECTED OUTPUT WITH A NEGATIVE LENGTH
 !-
-! NEGATIVELENGTH: invalid value '-2' in 'ffixed-line-length=','value must be 
'none' or a non-negative integer'
+! NEGATIVELENGTH: invalid value '-2' in 'ffixed-line-length=', value must be 
'none' or a non-negative integer
 
 !-
 ! EXPECTED OUTPUT WITH LENGTH LESS THAN 7
 !-
-! INVALIDLENGTH: invalid value '3' in 'ffixed-line-length=','value must be at 
least seven'
+! INVALIDLENGTH: invalid value '3' in 'ffixed-line-length=', value must be at 
least seven
 
 !---
 ! EXPECTED OUTPUT WITH UNLIMITED LENGTH
Index: clang/test/Driver/stack-protector-guard.c
===
--- clang/test/Driver/stack-protector-guard.c
+++ clang/test/Driver/stack-protector-guard.c
@@ -7,7 +7,7 @@
 
 // CHECK-TLS: "-cc1" {{.*}}"-mstack-protector-guard=tls"
 // CHECK-GLOBAL: "-cc1" {{.*}}"-mstack-protector-guard=global"
-// INVALID-VALUE: error: invalid value 'local' in 
'mstack-protector-guard=','valid arguments to '-mstack-protector-guard=' 
are:tls global'
+// INVALID-VALUE: error: invalid value 'local' in 'mstack-protector-guard=', 
valid arguments to '-mstack-protector-guard=' are:tls global
 
 // RUN: %clang -### -target x86_64-unknown-unknown 
-mstack-protector-guard-reg=fs %s 2>&1 | \
 // RUN:   FileCheck -check-prefix=CHECK-FS %s
@@ -35,7 +35,7 @@
 
 // CHECK-FS: "-cc1" {{.*}}"-mstack-protector-guard-reg=fs"
 // CHECK-GS: "-cc1" {{.*}}"-mstack-protector-guard-reg=gs"
-// INVALID-REG: error: invalid value {{.*}} in 
'mstack-protector-guard-reg=','for X86, valid arguments to 
'-mstack-protector-guard-reg=' are:fs gs'
+// INVALID-REG: error: invalid value {{.*}} in 'mstack-protector-guard-reg=', 
for X86, valid arguments to '-mstack-protector-guard-reg=' are:fs gs
 
 // RUN: %clang -### -target x86_64-unknown-unknown 
-mstack-protector-guard-offset=30 %s 2>&1 | \
 // RUN:   FileCheck -check-prefix=CHECK-OFFSET %s
Index: clang/include/clang/Basic/DiagnosticDriverKinds.td
===
--- clang/include/clang/Basic/DiagnosticDriverKinds.td
+++ clang/include/clang/Basic/DiagnosticDriverKinds.td
@@ -214,7 +214,7 @@
 
 def err_drv_invalid_value : Error<"invalid value '%1' in '%0'">;
 def err_drv_invalid_int_value : Error<"invalid integral value '%1' in '%0'">;
-def err_drv_invalid_value_with_suggestion : Error<"invalid value '%1' in 
'%0','%2'">;
+def err_drv_invalid_value_with_suggestion : Error<"invalid value '%1' in '%0', 
%2">;
 def err_drv_invalid_remap_file : Error<
 "invalid option '%0' not of the form ;">;
 def err_drv_invalid_gcc_output_type : Error<


Index: flang/test/Driver/fixed-line-length.f90
===
--- flang/test/Driver/fixed-line-length.f90
+++ flang/test/Driver/fixed-line-length.f90
@@ -37,12 +37,12 @@
 !-
 ! EXPECTED OUTPUT WITH A NEGATIVE LENGTH
 !-
-! NEGATIVELENGTH: invalid value '-2' in 'ffixed-line-length=','value must be 'none' or a non-negative integer'
+! NEGATIVELENGTH: invalid value '-2' in 'ffixed-line-length=', value must be 'none' or a non-negative integer
 
 !-
 ! EXPECTED OUTPUT WITH LENGTH LESS THAN 7
 !-
-! INVALIDLENGTH: invalid value '3' in 'ffixed-line-length=','value must be at least seven'
+! INVALIDLENGTH: invalid value '3' in 'ffixed-line-length=', value must be at least seven
 
 !---
 ! EXPECTED OUTPUT WITH UNLIMITED LENGTH
Index: clang/test/Driver/stack-protector-guard.c
===
--- clang/test/Driver/stack-protector-guard.c
+++ clang/test/Driver/stack-protector-guard.c
@@ -7,7 +7,7 @@
 
 // CHECK-TLS: "-cc1" {{.*}}"-mstack-protector-guard=tls"
 // CHECK-GLOBAL: "-cc1" {{.*}}"-mstack-protector-guard=global"
-// INVALID-VALUE: error: invalid value 'local' in 'mstack-protector-guard=','valid arguments to '-mstack-protector-guard=' 

[PATCH] D100919: [AArch64] Support customizing stack protector guard

2021-04-27 Thread Nick Desaulniers via Phabricator via cfe-commits
nickdesaulniers marked an inline comment as not done.
nickdesaulniers added inline comments.



Comment at: clang/test/Driver/stack-protector-guard.c:59
+// INVALID-VALUE-AARCH64: error: invalid value 'tls' in 
'mstack-protector-guard=','valid arguments to '-mstack-protector-guard=' 
are:sysreg global'
+// INVALID-REG-AARCH64: error: invalid value 'foo' in 
'mstack-protector-guard-reg=','for AArch64'

nickdesaulniers wrote:
> DavidSpickett wrote:
> > I'm not sure if this is due to your code or the error machinery itself but 
> > these errors are strangely written.
> > 
> > I'd expect:
> > ```
> > error: invalid value 'tls' in 'mstack-protector-guard='tls', valid 
> > arguments to '-mstack-protector-guard=' are:sysreg global'
> > ```
> > 
> > Maybe it's assuming that there could be multiple values and `','` means 
> > that list option treats the value as a list? Or it's not using the right 
> > value and the comma is meant to be after the `=''` as in my example.
> Sure, `err_drv_invalid_value` would be better.
Ah, `err_drv_invalid_value_with_suggestion` puts single quotes around the third 
parameter `%2`.  Let me send a patch cleaning that up, then I'll rebase this on 
that.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100919/new/

https://reviews.llvm.org/D100919

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


[PATCH] D100872: Use OpenFlags instead of boolean to set a file as text/binary

2021-04-27 Thread Abhina Sree via Phabricator via cfe-commits
abhina.sreeskantharajan added a comment.

ping :)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100872/new/

https://reviews.llvm.org/D100872

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


[PATCH] D101327: [Clang][Driver] validate sysregs for -mstack-protector-guard-reg=

2021-04-27 Thread Nick Desaulniers via Phabricator via cfe-commits
nickdesaulniers added a comment.

In D101327#2718989 , @DavidSpickett 
wrote:

> So if kernel builds are using a small subset of registers, just check for 
> those.

The kernel uses just one for aarch64. It looks like GCC just feeds through 
whatever is specified at the command line to GAS without any validation; 
letting GAS fail or not.  For reference, here are the ISAs+regs used currently 
by the Linux kernel.

- riscv: tp
- powerpc: r13, r2
- x86: fs
- arm64: sp_el0

So it's definitely overkill to validate all possible sysregs.  Just thought I'd 
post a patch in case we ever wanted to revisit this, but whether this patch 
lands or not doesn't matter to me; https://reviews.llvm.org/D100919 is what we 
need, hence the separation.

> Otherwise we've got another duplicated list that we (Arm) will probably 
> forget to update anyway when new registers are added.

Agreed.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101327/new/

https://reviews.llvm.org/D101327

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


[PATCH] D100667: [clang] Fix assert() crash when checking undeduced arg alignment

2021-04-27 Thread Haojian Wu via Phabricator via cfe-commits
hokein accepted this revision.
hokein added a comment.
This revision is now accepted and ready to land.

Thanks!




Comment at: clang/test/SemaCXX/cxx17-undeduced-alignment.cpp:19
+void baz() {
+  // S(123) is undeduced, but when passed to foo() via bar() it is wrapped in
+  // SubstTemplateTypeParm, for which isUndeduced() is false.

The comment is stale now. Maybe add this test to the existing recovery-expr 
file `test/SemaCXX/recovery-expr-type.cpp`, as this is a recover-expr related 
crash (we also need to add the `-std=c++17` flag to the first line of the file, 
I think it is fine).


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100667/new/

https://reviews.llvm.org/D100667

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


[PATCH] D77598: Integral template argument suffix and cast printing

2021-04-27 Thread Reid Kleckner via Phabricator via cfe-commits
rnk added inline comments.



Comment at: clang/lib/AST/TemplateBase.cpp:71-72
 
   if (T->isBooleanType() && !Policy.MSVCFormatting) {
 Out << (Val.getBoolValue() ? "true" : "false");
   } else if (T->isCharType()) {

reikdas wrote:
> rnk wrote:
> > rsmith wrote:
> > > rsmith wrote:
> > > > rnk wrote:
> > > > > rsmith wrote:
> > > > > > reikdas wrote:
> > > > > > > rsmith wrote:
> > > > > > > > rsmith wrote:
> > > > > > > > > It looks like `MSVCFormatting` wants `bool` values to be 
> > > > > > > > > printed as `0` and `1`, and this patch presumably changes 
> > > > > > > > > that (along with the printing of other builtin types). I 
> > > > > > > > > wonder if this is a problem in practice (eg, if such things 
> > > > > > > > > are used as keys for debug info or similar)...
> > > > > > > > Do we need to suppress printing the suffixes below in 
> > > > > > > > `MSVCFormatting` mode too?
> > > > > > > @rsmith The tests pass, so that is reassuring at least. Is there 
> > > > > > > any other way to find out whether we need to suppress printing 
> > > > > > > the suffixes for other types in MSVCFormatting mode?
> > > > > > @rnk Can you take a look at this? Per 
> > > > > > rG60103383f097b6580ecb4519eeb87defdb7c05c9 and PR21528 it seems 
> > > > > > like there might be specific requirements for how template 
> > > > > > arguments are formatted for CodeView support; we presumably need to 
> > > > > > make sure we still satisfy those requirements.
> > > > > Probably. This change looks like it preserves behavior from before 
> > > > > when `MSVCFormatting` is set, so I think this is OK. I checked, my 
> > > > > version of MSVC still uses 1/0 in debug info for boolean template 
> > > > > args.
> > > > My concern is that we're changing the behavior for the other cases 
> > > > below in `MSVCFormatting` mode, not that we're changing the behavior 
> > > > for `bool`. If we have specific formatting requirements in 
> > > > `MSVCFormatting` mode, they presumably apply to all types, not only to 
> > > > `bool`, so we should be careful to not change the output in 
> > > > `MSVCFormatting` mode for any type.
> > > @rnk Ping.
> > I think we do need to suppress the suffixes for MSVCFormatting. Consider 
> > this visualizer I found in the stl.natvis file:
> > ```
> >   
> >   {_MyRep} nanoseconds
> >   
> >   
> > 
> >   
> >   {_MyRep} microseconds
> >   
> >   
> > ```
> > 
> > Adding L or ULL after 100 has the potential to break the visualizer.
> > 
> > However, in general, I don't think we need to freeze this code in amber. 
> > It's not like we put a lot of thought into making this code produce 
> > MSVC-idential names when we started using it in CodeView debug info. We 
> > just used it and debug issues as they come up.
> > 
> > I think a good rule of thumb for making changes is probably to ask if the 
> > main STL data structure names include this template argument feature. So, 
> > auto-typed non-type template parameters probably aren't an issue.
> > 
> > ---
> > 
> > Separately, I wish the stl.natvis file was part of the 
> > github.com/microsoft/STL project so I could just link to it...
> Just to clarify - is an MSVCFormatting specific change required in this 
> patch? (do we need to suppress suffixes and casts for MSVCFormatting printing 
> policy?)
> And is there anyone we need to notify about this patch before it lands (to 
> make sure nothing breaks)?
Yes, as explained above, this change is likely to break visualizers in Visual 
Studio. Please preserve the existing behavior of integer printing in debug info 
when targeting a Windows MSVC environment, and add a test for it.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77598/new/

https://reviews.llvm.org/D77598

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


[PATCH] D101327: [Clang][Driver] validate sysregs for -mstack-protector-guard-reg=

2021-04-27 Thread Nick Desaulniers via Phabricator via cfe-commits
nickdesaulniers updated this revision to Diff 340915.
nickdesaulniers added a comment.

- prefer vanilla array + llvm::find


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101327/new/

https://reviews.llvm.org/D101327

Files:
  clang/lib/Driver/ToolChains/Arch/AArch64.cpp
  clang/lib/Driver/ToolChains/Arch/AArch64.h
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/Driver/stack-protector-guard.c

Index: clang/test/Driver/stack-protector-guard.c
===
--- clang/test/Driver/stack-protector-guard.c
+++ clang/test/Driver/stack-protector-guard.c
@@ -46,6 +46,10 @@
 // RUN:   -mstack-protector-guard-reg=sp_el0 \
 // RUN:   -mstack-protector-guard-offset=0 %s 2>&1 | \
 // RUN: FileCheck -check-prefix=CHECK-AARCH64 %s
+// RUN: %clang -### -target aarch64-linux-gnu -mstack-protector-guard=sysreg \
+// RUN:   -mstack-protector-guard-reg=sp_el2 \
+// RUN:   -mstack-protector-guard-offset=0 %s 2>&1 | \
+// RUN: FileCheck -check-prefix=CHECK-AARCH64-SP_EL2 %s
 // RUN: %clang -### -target aarch64-linux-gnu \
 // RUN:   -mstack-protector-guard=tls %s 2>&1 | \
 // RUN:   FileCheck -check-prefix=INVALID-VALUE-AARCH64 %s
@@ -55,5 +59,6 @@
 // RUN: FileCheck -check-prefix=INVALID-REG-AARCH64 %s
 
 // CHECK-AARCH64: "-cc1" {{.*}}"-mstack-protector-guard=sysreg" "-mstack-protector-guard-offset=0" "-mstack-protector-guard-reg=sp_el0"
+// CHECK-AARCH64-SP_EL2: "-cc1" {{.*}}"-mstack-protector-guard=sysreg" "-mstack-protector-guard-offset=0" "-mstack-protector-guard-reg=sp_el2"
 // INVALID-VALUE-AARCH64: error: invalid value 'tls' in 'mstack-protector-guard=','valid arguments to '-mstack-protector-guard=' are:sysreg global'
 // INVALID-REG-AARCH64: error: invalid value 'foo' in 'mstack-protector-guard-reg='
Index: clang/lib/Driver/ToolChains/Clang.cpp
===
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -3147,7 +3147,7 @@
   << "for X86, valid arguments to '-mstack-protector-guard-reg=' are:fs gs";
   return;
 }
-if (EffectiveTriple.isAArch64() && Value != "sp_el0") {
+if (EffectiveTriple.isAArch64() && !aarch64::isValidSysReg(Value)) {
   D.Diag(diag::err_drv_invalid_value) << A->getOption().getName() << Value;
   return;
 }
Index: clang/lib/Driver/ToolChains/Arch/AArch64.h
===
--- clang/lib/Driver/ToolChains/Arch/AArch64.h
+++ clang/lib/Driver/ToolChains/Arch/AArch64.h
@@ -27,6 +27,8 @@
 std::string getAArch64TargetCPU(const llvm::opt::ArgList ,
 const llvm::Triple , llvm::opt::Arg *);
 
+bool isValidSysReg(StringRef RegName);
+
 } // end namespace aarch64
 } // end namespace target
 } // end namespace driver
Index: clang/lib/Driver/ToolChains/Arch/AArch64.cpp
===
--- clang/lib/Driver/ToolChains/Arch/AArch64.cpp
+++ clang/lib/Driver/ToolChains/Arch/AArch64.cpp
@@ -10,9 +10,10 @@
 #include "clang/Driver/Driver.h"
 #include "clang/Driver/DriverDiagnostic.h"
 #include "clang/Driver/Options.h"
+#include "llvm/ADT/STLExtras.h"
 #include "llvm/Option/ArgList.h"
-#include "llvm/Support/TargetParser.h"
 #include "llvm/Support/Host.h"
+#include "llvm/Support/TargetParser.h"
 
 using namespace clang::driver;
 using namespace clang::driver::tools;
@@ -493,3 +494,932 @@
   if (Args.hasArg(options::OPT_mno_neg_immediates))
 Features.push_back("+no-neg-immediates");
 }
+
+/// Checks if a string is a valid sysreg.
+// While it would be good to avoid duplication of
+// llvm::AArch64SysReg::lookupSysRegByName, we don't want to couple CFE to
+// Target/. This list is taken from the generated
+// lib/Target/AArch64/AArch64GenSystemOperands.inc.
+bool aarch64::isValidSysReg(StringRef RegName) {
+  static const char *ValidRegs[] = {
+  "ACCDATA_EL1",
+  "ACTLR_EL1",
+  "ACTLR_EL2",
+  "ACTLR_EL3",
+  "AFSR0_EL1",
+  "AFSR0_EL12",
+  "AFSR0_EL2",
+  "AFSR0_EL3",
+  "AFSR1_EL1",
+  "AFSR1_EL12",
+  "AFSR1_EL2",
+  "AFSR1_EL3",
+  "AIDR_EL1",
+  "AMAIR_EL1",
+  "AMAIR_EL12",
+  "AMAIR_EL2",
+  "AMAIR_EL3",
+  "AMCFGR_EL0",
+  "AMCGCR_EL0",
+  "AMCNTENCLR0_EL0",
+  "AMCNTENCLR1_EL0",
+  "AMCNTENSET0_EL0",
+  "AMCNTENSET1_EL0",
+  "AMCR_EL0",
+  "AMEVCNTR00_EL0",
+  "AMEVCNTR01_EL0",
+  "AMEVCNTR02_EL0",
+  "AMEVCNTR03_EL0",
+  "AMEVCNTR10_EL0",
+  "AMEVCNTR110_EL0",
+  "AMEVCNTR111_EL0",
+  "AMEVCNTR112_EL0",
+  "AMEVCNTR113_EL0",
+  "AMEVCNTR114_EL0",
+  "AMEVCNTR115_EL0",
+  "AMEVCNTR11_EL0",
+  "AMEVCNTR12_EL0",
+  "AMEVCNTR13_EL0",
+  "AMEVCNTR14_EL0",
+  "AMEVCNTR15_EL0",
+  "AMEVCNTR16_EL0",
+  "AMEVCNTR17_EL0",
+  "AMEVCNTR18_EL0",
+  "AMEVCNTR19_EL0",
+  

[PATCH] D99762: [OPENMP]Fix PR49777: Clang should not try to specialize orphaned directives in device codegen.

2021-04-27 Thread Alexey Bataev via Phabricator via cfe-commits
ABataev updated this revision to Diff 340909.
ABataev added a comment.

Rebase


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D99762/new/

https://reviews.llvm.org/D99762

Files:
  clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
  clang/lib/CodeGen/CGOpenMPRuntimeGPU.h
  clang/test/OpenMP/declare_target_codegen_globalization.cpp
  clang/test/OpenMP/nvptx_multi_target_parallel_codegen.cpp
  clang/test/OpenMP/nvptx_nested_parallel_codegen.cpp

Index: clang/test/OpenMP/nvptx_nested_parallel_codegen.cpp
===
--- clang/test/OpenMP/nvptx_nested_parallel_codegen.cpp
+++ clang/test/OpenMP/nvptx_nested_parallel_codegen.cpp
@@ -54,7 +54,7 @@
 // CHECK1-NEXT:[[IS_ACTIVE:%.*]] = icmp ne i8 [[TMP3]], 0
 // CHECK1-NEXT:br i1 [[IS_ACTIVE]], label [[DOTEXECUTE_PARALLEL:%.*]], label [[DOTBARRIER_PARALLEL:%.*]]
 // CHECK1:   .execute.parallel:
-// CHECK1-NEXT:[[TMP4:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1:[0-9]+]])
+// CHECK1-NEXT:[[TMP4:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB2:[0-9]+]])
 // CHECK1-NEXT:[[TMP5:%.*]] = load i8*, i8** [[WORK_FN]], align 8
 // CHECK1-NEXT:[[WORK_MATCH:%.*]] = icmp eq i8* [[TMP5]], bitcast (void (i16, i32)* @__omp_outlined___wrapper to i8*)
 // CHECK1-NEXT:br i1 [[WORK_MATCH]], label [[DOTEXECUTE_FN:%.*]], label [[DOTCHECK_NEXT:%.*]]
@@ -114,14 +114,14 @@
 // CHECK1-NEXT:[[THREAD_LIMIT6:%.*]] = sub nuw i32 [[NVPTX_NUM_THREADS4]], [[NVPTX_WARP_SIZE5]]
 // CHECK1-NEXT:call void @__kmpc_kernel_init(i32 [[THREAD_LIMIT6]], i16 1)
 // CHECK1-NEXT:call void @__kmpc_data_sharing_init_stack()
-// CHECK1-NEXT:[[TMP6:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1]])
+// CHECK1-NEXT:[[TMP6:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB2]])
 // CHECK1-NEXT:call void @_Z3usePi(i32* [[TMP0]]) #[[ATTR7:[0-9]+]]
-// CHECK1-NEXT:call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB1]], i32 [[TMP6]], i32 2)
+// CHECK1-NEXT:call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB2]], i32 [[TMP6]], i32 2)
 // CHECK1-NEXT:[[TMP7:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[CAPTURED_VARS_ADDRS]], i64 0, i64 0
 // CHECK1-NEXT:[[TMP8:%.*]] = bitcast i32* [[TMP0]] to i8*
 // CHECK1-NEXT:store i8* [[TMP8]], i8** [[TMP7]], align 8
 // CHECK1-NEXT:[[TMP9:%.*]] = bitcast [1 x i8*]* [[CAPTURED_VARS_ADDRS]] to i8**
-// CHECK1-NEXT:call void @__kmpc_parallel_51(%struct.ident_t* @[[GLOB1]], i32 [[TMP6]], i32 1, i32 -1, i32 -1, i8* bitcast (void (i32*, i32*, i32*)* @__omp_outlined__1 to i8*), i8* bitcast (void (i16, i32)* @__omp_outlined__1_wrapper to i8*), i8** [[TMP9]], i64 1)
+// CHECK1-NEXT:call void @__kmpc_parallel_51(%struct.ident_t* @[[GLOB2]], i32 [[TMP6]], i32 1, i32 -1, i32 -1, i8* bitcast (void (i32*, i32*, i32*)* @__omp_outlined__1 to i8*), i8* bitcast (void (i16, i32)* @__omp_outlined__1_wrapper to i8*), i8** [[TMP9]], i64 1)
 // CHECK1-NEXT:br label [[DOTTERMINATION_NOTIFIER:%.*]]
 // CHECK1:   .termination.notifier:
 // CHECK1-NEXT:call void @__kmpc_kernel_deinit(i16 1)
@@ -136,7 +136,7 @@
 // CHECK1-NEXT:  entry:
 // CHECK1-NEXT:[[C_ADDR:%.*]] = alloca i32*, align 8
 // CHECK1-NEXT:[[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x i8*], align 8
-// CHECK1-NEXT:[[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1]])
+// CHECK1-NEXT:[[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1:[0-9]+]])
 // CHECK1-NEXT:store i32* [[C]], i32** [[C_ADDR]], align 8
 // CHECK1-NEXT:call void @__kmpc_push_num_threads(%struct.ident_t* @[[GLOB1]], i32 [[TMP0]], i32 2)
 // CHECK1-NEXT:[[TMP1:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[CAPTURED_VARS_ADDRS]], i64 0, i64 0
@@ -260,7 +260,7 @@
 // CHECK2-NEXT:[[IS_ACTIVE:%.*]] = icmp ne i8 [[TMP3]], 0
 // CHECK2-NEXT:br i1 [[IS_ACTIVE]], label [[DOTEXECUTE_PARALLEL:%.*]], label [[DOTBARRIER_PARALLEL:%.*]]
 // CHECK2:   .execute.parallel:
-// CHECK2-NEXT:[[TMP4:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1:[0-9]+]])
+// CHECK2-NEXT:[[TMP4:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB2:[0-9]+]])
 // CHECK2-NEXT:[[TMP5:%.*]] = load i8*, i8** [[WORK_FN]], align 4
 // CHECK2-NEXT:[[WORK_MATCH:%.*]] = icmp eq i8* [[TMP5]], bitcast (void (i16, i32)* @__omp_outlined___wrapper to i8*)
 // CHECK2-NEXT:br i1 [[WORK_MATCH]], label [[DOTEXECUTE_FN:%.*]], label [[DOTCHECK_NEXT:%.*]]
@@ -320,14 +320,14 @@
 // CHECK2-NEXT:[[THREAD_LIMIT6:%.*]] = sub nuw i32 [[NVPTX_NUM_THREADS4]], [[NVPTX_WARP_SIZE5]]
 // CHECK2-NEXT:call void @__kmpc_kernel_init(i32 [[THREAD_LIMIT6]], i16 1)
 // CHECK2-NEXT:call void @__kmpc_data_sharing_init_stack()
-// CHECK2-NEXT:[[TMP6:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* 

[PATCH] D99741: [RISCV][Clang] Add some RVV Floating-Point intrinsic functions. (vfclass, vfmerge, vfrec7, vfrsqrt7, vfsqrt)

2021-04-27 Thread Nico Weber via Phabricator via cfe-commits
thakis added a comment.

(here's a build form a few minutes ago: 
http://45.33.8.238/macm1/8325/summary.html)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D99741/new/

https://reviews.llvm.org/D99741

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


[PATCH] D99741: [RISCV][Clang] Add some RVV Floating-Point intrinsic functions. (vfclass, vfmerge, vfrec7, vfrsqrt7, vfsqrt)

2021-04-27 Thread Nico Weber via Phabricator via cfe-commits
thakis added a comment.

No effect, or even worse. We're back at 5:30 cycle time and we'v been in that 
state for over 2 weeks now. I think it's time to revert back to green, so this 
slowdown doesn't become permanent.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D99741/new/

https://reviews.llvm.org/D99741

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


[PATCH] D94355: [Passes] Add relative lookup table converter pass

2021-04-27 Thread Nathan Chancellor via Phabricator via cfe-commits
nathanchance added a comment.

In D94355#2717958 , @gulfem wrote:

> @nathanchance do you prefer me to revert the patch first as it might take me 
> a while to investigate it?
> Btw, I was able to reproduce the issue by following your steps.

I would say if it is going to take longer than the end of the week to fix the 
issue, it might be nice to have it reverted so that other people's builds 
continue to work (I know a few people who build with full LTO in a two stage 
configuration every week).


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D94355/new/

https://reviews.llvm.org/D94355

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


[PATCH] D100919: [AArch64] Support customizing stack protector guard

2021-04-27 Thread Nick Desaulniers via Phabricator via cfe-commits
nickdesaulniers added inline comments.



Comment at: clang/lib/Driver/ToolChains/Clang.cpp:3138
 }
+if (EffectiveTriple.isAArch64() && Value != "sp_el0") {
+  D.Diag(diag::err_drv_invalid_value_with_suggestion)

DavidSpickett wrote:
> nickdesaulniers wrote:
> > nickdesaulniers wrote:
> > > nickdesaulniers wrote:
> > > > nickdesaulniers wrote:
> > > > > nickdesaulniers wrote:
> > > > > > TODO: can we re-use `AArch64SysReg::lookupSysRegByName` in the 
> > > > > > frontend?
> > > > > I don't think so because 
> > > > > `llvm/lib/Target/AArch64/Utils/AArch64BaseInfo.h` is under lib/ not 
> > > > > include/. Not sure if I should just remove reg validation?
> > > > Guidance provided by @echristo and @jyknight was that we should avoid 
> > > > such linkage requirements on Target/, so instead I'll work on adding a 
> > > > helper to clang/lib/Driver/ToolChains/Arch/AArch64.cpp that duplicates 
> > > > logic from `AArch64SysReg::lookupSysRegByName`.
> > > It looks like there's ~1000 possible sysregs for aarch64 ATM; do we 
> > > really want to add all of those to clang?
> > I'm going to post that as a separate commit/review on top of this series, 
> > that way it doesn't pollute this code review. This is ready to be reviewed.
> If the number of different registers people actually use with this option is 
> somewhere < 10 I'd just hardcode the names here as needed. (a large amount of 
> those sysregs won't be suitable for this purpose anyway)
Right, I figure that can be a separate decision from the rest of the 
implementation, I've forked that off in https://reviews.llvm.org/D101327. 
Whether it lands or not doesn't matter to me.



Comment at: clang/lib/Driver/ToolChains/Clang.cpp:3110
+}
+if (EffectiveTriple.isAArch64() && Value != "sysreg" && Value != "global") 
{
+  D.Diag(diag::err_drv_invalid_value_with_suggestion)

DavidSpickett wrote:
> Shouldn't this also allow "tls"? At least that's what the previous code works 
> out to, I don't know if that actually works on AArch64 or if it just didn't 
> error.
I don't think so; GCC seems to support `tls` for x86 but not for aarch64.
https://godbolt.org/z/6WjEPfhT5



Comment at: clang/test/Driver/stack-protector-guard.c:59
+// INVALID-VALUE-AARCH64: error: invalid value 'tls' in 
'mstack-protector-guard=','valid arguments to '-mstack-protector-guard=' 
are:sysreg global'
+// INVALID-REG-AARCH64: error: invalid value 'foo' in 
'mstack-protector-guard-reg=','for AArch64'

DavidSpickett wrote:
> I'm not sure if this is due to your code or the error machinery itself but 
> these errors are strangely written.
> 
> I'd expect:
> ```
> error: invalid value 'tls' in 'mstack-protector-guard='tls', valid arguments 
> to '-mstack-protector-guard=' are:sysreg global'
> ```
> 
> Maybe it's assuming that there could be multiple values and `','` means that 
> list option treats the value as a list? Or it's not using the right value and 
> the comma is meant to be after the `=''` as in my example.
Sure, `err_drv_invalid_value` would be better.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100919/new/

https://reviews.llvm.org/D100919

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


[PATCH] D100919: [AArch64] Support customizing stack protector guard

2021-04-27 Thread Nick Desaulniers via Phabricator via cfe-commits
nickdesaulniers updated this revision to Diff 340905.
nickdesaulniers marked 3 inline comments as done.
nickdesaulniers added a comment.

- prefer err_drv_invalid_value


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100919/new/

https://reviews.llvm.org/D100919

Files:
  clang/include/clang/Basic/CodeGenOptions.h
  clang/lib/CodeGen/BackendUtil.cpp
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/Driver/stack-protector-guard.c
  llvm/include/llvm/Target/TargetOptions.h
  llvm/lib/CodeGen/CommandFlags.cpp
  llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
  llvm/test/CodeGen/AArch64/stack-guard-sysreg.ll

Index: llvm/test/CodeGen/AArch64/stack-guard-sysreg.ll
===
--- /dev/null
+++ llvm/test/CodeGen/AArch64/stack-guard-sysreg.ll
@@ -0,0 +1,73 @@
+; RUN: llc %s --stack-protector-guard=sysreg \
+; RUN:   --stack-protector-guard-reg=sp_el0 \
+; RUN:   --stack-protector-guard-offset=0 -o - | \
+; RUN: FileCheck --check-prefix=CHECK --check-prefix=CHECK-NO-OFFSET %s
+; RUN: llc %s --stack-protector-guard=sysreg \
+; RUN:   --stack-protector-guard-reg=sp_el0 \
+; RUN:   --stack-protector-guard-offset=8 -o - | \
+; RUN: FileCheck --check-prefix=CHECK --check-prefix=CHECK-POSITIVE-OFFSET %s
+; RUN: llc %s --stack-protector-guard=sysreg \
+; RUN:   --stack-protector-guard-reg=sp_el0 \
+; RUN:   --stack-protector-guard-offset=-8 -o - | \
+; RUN: FileCheck --check-prefix=CHECK --check-prefix=CHECK-NEGATIVE-OFFSET %s
+; RUN: llc %s --stack-protector-guard=sysreg \
+; RUN:   --stack-protector-guard-reg=sp_el0 \
+; RUN:   --stack-protector-guard-offset=1 -o - | \
+; RUN: FileCheck --check-prefix=CHECK --check-prefix=CHECK-NPOT-OFFSET %s
+; RUN: llc %s --stack-protector-guard=sysreg \
+; RUN:   --stack-protector-guard-reg=sp_el0 \
+; RUN:   --stack-protector-guard-offset=-1 -o - | \
+; RUN: FileCheck --check-prefix=CHECK --check-prefix=CHECK-NPOT-NEG-OFFSET %s
+
+target triple = "aarch64-unknown-linux-gnu"
+
+; Verify that we `mrs` from `SP_EL0` twice, rather than load from
+; __stack_chk_guard.
+define dso_local void @foo(i64 %t) local_unnamed_addr #0 {
+; CHECK-LABEL:   foo:
+; CHECK: // %bb.0: // %entry
+; CHECK-NEXT:stp x29, x30, [sp, #-16]! // 16-byte Folded Spill
+; CHECK-NEXT:mov x29, sp
+; CHECK-NEXT:sub sp, sp, #16 // =16
+; CHECK-NEXT:.cfi_def_cfa w29, 16
+; CHECK-NEXT:.cfi_offset w30, -8
+; CHECK-NEXT:.cfi_offset w29, -16
+; CHECK-NEXT:mrs x8, SP_EL0
+; CHECK-NO-OFFSET:   ldr x8, [x8]
+; CHECK-POSITIVE-OFFSET: ldr x8, [x8, #8]
+; CHECK-NEGATIVE-OFFSET: ldr x8, [x8, #-8]
+; CHECK-NPOT-OFFSET: ldur x8, [x8, #1]
+; CHECK-NPOT-NEG-OFFSET: ldur x8, [x8, #-1]
+; CHECK-NEXT:lsl x9, x0, #2
+; CHECK-NEXT:add x9, x9, #15 // =15
+; CHECK-NEXT:and x9, x9, #0xfff0
+; CHECK-NEXT:stur x8, [x29, #-8]
+; CHECK-NEXT:mov x8, sp
+; CHECK-NEXT:sub x0, x8, x9
+; CHECK-NEXT:mov sp, x0
+; CHECK-NEXT:bl baz
+; CHECK-NEXT:ldur x8, [x29, #-8]
+; CHECK-NEXT:mrs x9, SP_EL0
+; CHECK-NO-OFFSET:   ldr x9, [x9]
+; CHECK-POSITIVE-OFFSET: ldr x9, [x9, #8]
+; CHECK-NEGATIVE-OFFSET: ldr x9, [x9, #-8]
+; CHECK-NPOT-OFFSET: ldur x9, [x9, #1]
+; CHECK-NPOT-NEG-OFFSET: ldur x9, [x9, #-1]
+; CHECK-NEXT:cmp x9, x8
+; CHECK-NEXT:b.ne .LBB0_2
+; CHECK-NEXT:  // %bb.1: // %entry
+; CHECK-NEXT:mov sp, x29
+; CHECK-NEXT:ldp x29, x30, [sp], #16 // 16-byte Folded Reload
+; CHECK-NEXT:ret
+; CHECK-NEXT:  .LBB0_2: // %entry
+; CHECK-NEXT:bl __stack_chk_fail
+; CHECK-NOT: __stack_chk_guard
+entry:
+  %vla = alloca i32, i64 %t, align 4
+  call void @baz(i32* nonnull %vla)
+  ret void
+}
+
+declare dso_local void @baz(i32*) local_unnamed_addr
+
+attributes #0 = { sspstrong }
Index: llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
===
--- llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
+++ llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
@@ -1901,6 +1901,30 @@
   }
 
   Register Reg = MI.getOperand(0).getReg();
+  if (MI.getOpcode() == AArch64::LOAD_STACK_GUARD) {
+TargetOptions Options = MI.getParent()->getParent()->getTarget().Options;
+if (Options.StackProtectorGuard == StackProtectorGuards::SysReg) {
+  const AArch64SysReg::SysReg *SrcReg =
+  AArch64SysReg::lookupSysRegByName(Options.StackProtectorGuardReg);
+  assert(SrcReg && "Unable to encode SysReg");
+  BuildMI(MBB, MI, DL, get(AArch64::MRS))
+  .addReg(Reg, RegState::Define)
+  .addImm(SrcReg->Encoding);
+  if (Options.StackProtectorGuardOffset % 8 == 0)
+BuildMI(MBB, MI, DL, get(AArch64::LDRXui))
+.addReg(Reg, getKillRegState(false))
+.addReg(Reg, RegState::Define)
+.addImm(Options.StackProtectorGuardOffset >> 3);
+  else
+BuildMI(MBB, MI, DL, get(AArch64::LDURXi))
+.addReg(Reg, getKillRegState(false))

[PATCH] D100807: [clang][driver] Use the canonical Darwin arch name when printing out the triple for a Darwin target

2021-04-27 Thread Nico Weber via Phabricator via cfe-commits
thakis added a comment.

In D100807#2719873 , @arphaman wrote:

> We have M1  CI running internally but it's post 
> commit only right now

Which tests is it running?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100807/new/

https://reviews.llvm.org/D100807

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


[PATCH] D101365: [clang-query] Add check to prevent setting srcloc when no introspection is available.

2021-04-27 Thread Nathan James via Phabricator via cfe-commits
njames93 updated this revision to Diff 340902.
njames93 added a comment.

Fix up tests(probably, see what premerge says)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101365/new/

https://reviews.llvm.org/D101365

Files:
  clang-tools-extra/clang-query/Query.h
  clang-tools-extra/clang-query/QueryParser.cpp
  clang-tools-extra/unittests/clang-query/QueryParserTest.cpp

Index: clang-tools-extra/unittests/clang-query/QueryParserTest.cpp
===
--- clang-tools-extra/unittests/clang-query/QueryParserTest.cpp
+++ clang-tools-extra/unittests/clang-query/QueryParserTest.cpp
@@ -9,6 +9,7 @@
 #include "QueryParser.h"
 #include "Query.h"
 #include "QuerySession.h"
+#include "clang/Tooling/NodeIntrospection.h"
 #include "llvm/LineEditor/LineEditor.h"
 #include "gtest/gtest.h"
 
@@ -59,6 +60,8 @@
 }
 
 TEST_F(QueryParserTest, Set) {
+
+  bool HasIntrospection = tooling::NodeIntrospection::hasIntrospectionSupport();
   QueryRef Q = parse("set");
   ASSERT_TRUE(isa(Q));
   EXPECT_EQ("expected variable name", cast(Q)->ErrStr);
@@ -69,8 +72,13 @@
 
   Q = parse("set output");
   ASSERT_TRUE(isa(Q));
-  EXPECT_EQ("expected 'diag', 'print', 'detailed-ast' or 'dump', got ''",
-cast(Q)->ErrStr);
+  if (HasIntrospection)
+EXPECT_EQ(
+"expected 'diag', 'print', 'detailed-ast', 'srcloc' or 'dump', got ''",
+cast(Q)->ErrStr);
+  else
+EXPECT_EQ("expected 'diag', 'print', 'detailed-ast' or 'dump', got ''",
+  cast(Q)->ErrStr);
 
   Q = parse("set bind-root true foo");
   ASSERT_TRUE(isa(Q));
@@ -78,8 +86,13 @@
 
   Q = parse("set output foo");
   ASSERT_TRUE(isa(Q));
-  EXPECT_EQ("expected 'diag', 'print', 'detailed-ast' or 'dump', got 'foo'",
-cast(Q)->ErrStr);
+  if (HasIntrospection)
+EXPECT_EQ("expected 'diag', 'print', 'detailed-ast', 'srcloc' or 'dump', "
+  "got 'foo'",
+  cast(Q)->ErrStr);
+  else
+EXPECT_EQ("expected 'diag', 'print', 'detailed-ast' or 'dump', got 'foo'",
+  cast(Q)->ErrStr);
 
   Q = parse("set output dump");
   ASSERT_TRUE(isa(Q));
@@ -217,8 +230,10 @@
   EXPECT_EQ("output ", Comps[0].TypedText);
   EXPECT_EQ("output", Comps[0].DisplayText);
 
+  bool HasIntrospection = tooling::NodeIntrospection::hasIntrospectionSupport();
+
   Comps = QueryParser::complete("enable output ", 14, QS);
-  ASSERT_EQ(5u, Comps.size());
+  ASSERT_EQ(HasIntrospection ? 5u : 4u, Comps.size());
 
   EXPECT_EQ("diag ", Comps[0].TypedText);
   EXPECT_EQ("diag", Comps[0].DisplayText);
@@ -226,10 +241,12 @@
   EXPECT_EQ("print", Comps[1].DisplayText);
   EXPECT_EQ("detailed-ast ", Comps[2].TypedText);
   EXPECT_EQ("detailed-ast", Comps[2].DisplayText);
-  EXPECT_EQ("srcloc ", Comps[3].TypedText);
-  EXPECT_EQ("srcloc", Comps[3].DisplayText);
-  EXPECT_EQ("dump ", Comps[4].TypedText);
-  EXPECT_EQ("dump", Comps[4].DisplayText);
+  if (HasIntrospection) {
+EXPECT_EQ("srcloc ", Comps[3].TypedText);
+EXPECT_EQ("srcloc", Comps[3].DisplayText);
+  }
+  EXPECT_EQ("dump ", Comps[3 + static_cast(HasIntrospection)].TypedText);
+  EXPECT_EQ("dump", Comps[3 + static_cast(HasIntrospection)].DisplayText);
 
   Comps = QueryParser::complete("set traversal ", 14, QS);
   ASSERT_EQ(2u, Comps.size());
Index: clang-tools-extra/clang-query/QueryParser.cpp
===
--- clang-tools-extra/clang-query/QueryParser.cpp
+++ clang-tools-extra/clang-query/QueryParser.cpp
@@ -11,6 +11,7 @@
 #include "QuerySession.h"
 #include "clang/ASTMatchers/Dynamic/Parser.h"
 #include "clang/Basic/CharInfo.h"
+#include "clang/Tooling/NodeIntrospection.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/StringSwitch.h"
 #include 
@@ -104,17 +105,19 @@
 
 template  QueryRef QueryParser::parseSetOutputKind() {
   StringRef ValStr;
-  unsigned OutKind = LexOrCompleteWord(this, ValStr)
- .Case("diag", OK_Diag)
- .Case("print", OK_Print)
- .Case("detailed-ast", OK_DetailedAST)
- .Case("srcloc", OK_SrcLoc)
- .Case("dump", OK_DetailedAST)
- .Default(~0u);
+  bool HasIntrospection = tooling::NodeIntrospection::hasIntrospectionSupport();
+  unsigned OutKind =
+  LexOrCompleteWord(this, ValStr)
+  .Case("diag", OK_Diag)
+  .Case("print", OK_Print)
+  .Case("detailed-ast", OK_DetailedAST)
+  .Case("srcloc", OK_SrcLoc, /*IsCompletion=*/HasIntrospection)
+  .Case("dump", OK_DetailedAST)
+  .Default(~0u);
   if (OutKind == ~0u) {
-return new InvalidQuery(
-"expected 'diag', 'print', 'detailed-ast' or 'dump', got '" + ValStr +
-"'");
+return new InvalidQuery("expected 'diag', 'print', 'detailed-ast'" +
+StringRef(HasIntrospection ? ", 'srcloc'" : "") +
+ 

[PATCH] D101348: [Driver] Fix tests failing in per-target multiarch layout

2021-04-27 Thread Petr Hosek via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG887bdff8bae7: [Driver] Fix tests failing in per-target 
multiarch layout (authored by phosek).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101348/new/

https://reviews.llvm.org/D101348

Files:
  clang/test/Driver/compiler-rt-unwind.c
  clang/test/Driver/cross-linux.c
  clang/test/Driver/env.c
  clang/test/Driver/sanitizer-ld.c

Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -115,6 +115,7 @@
 
 // RUN: %clang -no-canonical-prefixes %s -### -o /dev/null -fsanitize=address \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -stdlib=platform \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
 // RUN: --sysroot=%S/Inputs/basic_linux_tree -lstdc++ -static 2>&1 \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-LINUX-CXX-STATIC %s
 //
@@ -284,16 +285,19 @@
 
 // RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX %s
 
 // RUN: %clang -fsanitize=float-divide-by-zero %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX %s
 
 // RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN: -static-libsan \
 // RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX %s
@@ -317,18 +321,21 @@
 
 // RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN: -shared-libsan \
 // RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX-SHAREDLIBASAN %s
 
 // RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN: -static-libsan -shared-libsan \
 // RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX-SHAREDLIBASAN %s
 
 // RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN: -shared -shared-libsan \
 // RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX-SHAREDLIBASAN %s
@@ -338,6 +345,7 @@
 
 // RUN: %clang -fsanitize=undefined -fsanitize-link-c++-runtime %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX-LINK-CXX %s
 // CHECK-UBSAN-LINUX-LINK-CXX-NOT: "-lstdc++"
@@ -361,6 +369,7 @@
 
 // RUN: %clang -fsanitize=undefined -fsanitize-minimal-runtime %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-UBSAN-MINIMAL-LINUX %s
 // CHECK-UBSAN-MINIMAL-LINUX: "{{.*}}ld{{(.exe)?}}"
@@ -383,6 +392,7 @@
 
 // RUN: %clang -fsanitize=address,undefined %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-UBSAN-LINUX %s
 // CHECK-ASAN-UBSAN-LINUX: "{{.*}}ld{{(.exe)?}}"
@@ -393,6 +403,7 @@
 
 // RUN: %clangxx -fsanitize=address,undefined %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -stdlib=platform \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-UBSAN-LINUX-CXX %s
 // CHECK-ASAN-UBSAN-LINUX-CXX: "{{.*}}ld{{(.exe)?}}"
@@ -404,6 +415,7 @@
 
 // RUN: %clangxx -fsanitize=memory,undefined %s -### -o %t.o 2>&1 \
 // RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-MSAN-UBSAN-LINUX-CXX %s
 // CHECK-MSAN-UBSAN-LINUX-CXX: "{{.*}}ld{{(.exe)?}}"
@@ -412,6 +424,7 @@
 
 // RUN: %clangxx -fsanitize=thread,undefined %s -### -o %t.o 2>&1 \
 // RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: 

[clang] 887bdff - [Driver] Fix tests failing in per-target multiarch layout

2021-04-27 Thread Petr Hosek via cfe-commits

Author: Petr Hosek
Date: 2021-04-27T10:19:00-07:00
New Revision: 887bdff8bae74ae0cedadbbe35f39141da3642c9

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

LOG: [Driver] Fix tests failing in per-target multiarch layout

These failures were revealed by b4537c3f51bc6c011ddd9c10b80043ac4ce16a01.

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

Added: 


Modified: 
clang/test/Driver/compiler-rt-unwind.c
clang/test/Driver/cross-linux.c
clang/test/Driver/env.c
clang/test/Driver/sanitizer-ld.c

Removed: 




diff  --git a/clang/test/Driver/compiler-rt-unwind.c 
b/clang/test/Driver/compiler-rt-unwind.c
index b7e43b6d8f752..c17c4a9a2d935 100644
--- a/clang/test/Driver/compiler-rt-unwind.c
+++ b/clang/test/Driver/compiler-rt-unwind.c
@@ -3,14 +3,14 @@
 //
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: --target=x86_64-unknown-linux -rtlib=libgcc --unwindlib=platform \
-// RUN: --gcc-toolchain="" \
+// RUN: --gcc-toolchain="" -resource-dir=%S/Inputs/resource_dir \
 // RUN:   | FileCheck --check-prefix=RTLIB-GCC %s
 // RTLIB-GCC: "{{.*}}lgcc"
 // RTLIB-GCC: "{{.*}}lgcc_s"
 //
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: --target=x86_64-unknown-linux -rtlib=libgcc --unwindlib=libunwind \
-// RUN: --gcc-toolchain="" \
+// RUN: --gcc-toolchain="" -resource-dir=%S/Inputs/resource_dir \
 // RUN:   | FileCheck --check-prefix=RTLIB-GCC-UNWINDLIB-COMPILER-RT %s
 // RTLIB-GCC-UNWINDLIB-COMPILER-RT: "{{.*}}lgcc"
 // RTLIB-GCC-UNWINDLIB-COMPILER-RT: "{{.*}}l:libunwind.so"
@@ -18,34 +18,34 @@
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: --target=x86_64-unknown-linux -rtlib=libgcc --unwindlib=libunwind \
 // RUN: -static-libgcc \
-// RUN: --gcc-toolchain="" \
+// RUN: --gcc-toolchain="" -resource-dir=%S/Inputs/resource_dir \
 // RUN:   | FileCheck --check-prefix=RTLIB-GCC-STATIC-UNWINDLIB-COMPILER-RT %s
 // RTLIB-GCC-STATIC-UNWINDLIB-COMPILER-RT: "{{.*}}lgcc"
 // RTLIB-GCC-STATIC-UNWINDLIB-COMPILER-RT: "{{.*}}l:libunwind.a"
 //
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1   \
 // RUN: --target=x86_64-unknown-linux -rtlib=compiler-rt \
-// RUN: --gcc-toolchain="" \
+// RUN: --gcc-toolchain="" -resource-dir=%S/Inputs/resource_dir \
 // RUN:   | FileCheck --check-prefix=RTLIB-COMPILER-RT %s
 // RTLIB-COMPILER-RT: "{{.*}}libclang_rt.builtins-x86_64.a"
 //
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1   \
 // RUN: --target=x86_64-unknown-linux -rtlib=compiler-rt 
--unwindlib=libgcc \
-// RUN: --gcc-toolchain="" \
+// RUN: --gcc-toolchain="" -resource-dir=%S/Inputs/resource_dir \
 // RUN:   | FileCheck --check-prefix=RTLIB-COMPILER-RT-UNWINDLIB-GCC %s
 // RTLIB-COMPILER-RT-UNWINDLIB-GCC: "{{.*}}libclang_rt.builtins-x86_64.a"
 // RTLIB-COMPILER-RT-UNWINDLIB-GCC: "{{.*}}lgcc_s"
 //
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1  \
 // RUN: --target=x86_64-unknown-linux -rtlib=compiler-rt 
--unwindlib=libgcc \
-// RUN: -static --gcc-toolchain="" \
+// RUN: -static --gcc-toolchain="" -resource-dir=%S/Inputs/resource_dir \
 // RUN:   | FileCheck --check-prefix=RTLIB-COMPILER-RT-UNWINDLIB-GCC-STATIC %s
 // RTLIB-COMPILER-RT-UNWINDLIB-GCC-STATIC: 
"{{.*}}libclang_rt.builtins-x86_64.a"
 // RTLIB-COMPILER-RT-UNWINDLIB-GCC-STATIC: "{{.*}}lgcc_eh"
 //
 // RUN: not %clang -no-canonical-prefixes %s -o %t.o 2> %t.err  \
 // RUN: --target=x86_64-unknown-linux -rtlib=libgcc --unwindlib=libunwind \
-// RUN: --gcc-toolchain="" \
+// RUN: --gcc-toolchain="" -resource-dir=%S/Inputs/resource_dir \
 // RUN: FileCheck --input-file=%t.err 
--check-prefix=RTLIB-GCC-UNWINDLIB-COMPILER_RT %s
 // RTLIB-GCC-UNWINDLIB-COMPILER_RT: "{{[.|\\\n]*}}--rtlib=libgcc requires 
--unwindlib=libgcc"
 //

diff  --git a/clang/test/Driver/cross-linux.c b/clang/test/Driver/cross-linux.c
index da0952b3f2d4e..59f5a97d2d9d2 100644
--- a/clang/test/Driver/cross-linux.c
+++ b/clang/test/Driver/cross-linux.c
@@ -35,6 +35,7 @@
 // RUN: %clang -### -o %t %s 2>&1 -no-integrated-as -fuse-ld=ld \
 // RUN:   --gcc-toolchain=%S/Inputs/multilib_32bit_linux_tree/usr \
 // RUN:   --target=i386-unknown-linux \
+// RUN:   --rtlib=platform \
 // RUN:   --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-MULTI32-I386 %s
 // CHECK-MULTI32-I386: "-cc1" "-triple" "i386-unknown-linux"

diff  --git a/clang/test/Driver/env.c b/clang/test/Driver/env.c
index b96c831fc1499..e9b86cbcf4289 100644
--- a/clang/test/Driver/env.c
+++ b/clang/test/Driver/env.c
@@ -8,6 +8,7 @@
 // RUN:   %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: --target=i386-unknown-linux \
 // RUN: 

[PATCH] D101325: [CodeGenOptions] make StackProtectorGuardOffset signed

2021-04-27 Thread Nick Desaulniers via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGea8416bf4df4: [CodeGenOptions] make 
StackProtectorGuardOffset signed (authored by nickdesaulniers).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101325/new/

https://reviews.llvm.org/D101325

Files:
  clang/include/clang/Basic/CodeGenOptions.def
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/ToolChains/Clang.cpp
  llvm/include/llvm/CodeGen/CommandFlags.h
  llvm/include/llvm/Target/TargetOptions.h
  llvm/lib/CodeGen/CommandFlags.cpp
  llvm/lib/Target/X86/X86ISelLowering.cpp
  llvm/test/CodeGen/X86/stack-protector-3.ll

Index: llvm/test/CodeGen/X86/stack-protector-3.ll
===
--- llvm/test/CodeGen/X86/stack-protector-3.ll
+++ llvm/test/CodeGen/X86/stack-protector-3.ll
@@ -4,6 +4,7 @@
 ; RUN: llc -mtriple=x86_64-pc-linux-gnu -stack-protector-guard-reg=fs -o - < %s | FileCheck --check-prefix=CHECK-TLS-FS-40 %s
 ; RUN: llc -mtriple=x86_64-pc-linux-gnu -stack-protector-guard-reg=gs -o - < %s | FileCheck --check-prefix=CHECK-GS %s
 ; RUN: llc -mtriple=x86_64-pc-linux-gnu -stack-protector-guard-offset=20 -o - < %s | FileCheck --check-prefix=CHECK-OFFSET %s
+; RUN: llc -mtriple=x86_64-pc-linux-gnu -stack-protector-guard-offset=-20 -o - < %s | FileCheck --check-prefix=CHECK-NEGATIVE-OFFSET %s
 
 ; CHECK-TLS-FS-40:   movq%fs:40, %rax
 ; CHECK-TLS-FS-40:   movq%fs:40, %rax
@@ -29,6 +30,15 @@
 ; CHECK-OFFSET-NEXT:  .cfi_def_cfa_offset 32
 ; CHECK-OFFSET-NEXT:  callq   __stack_chk_fail
 
+; CHECK-NEGATIVE-OFFSET:   movl$4294967276, %eax   # imm = 0xFFEC
+; CHECK-NEGATIVE-OFFSET:   movq%fs:(%rax), %rcx
+; CHECK-NEGATIVE-OFFSET:   movq%fs:(%rax), %rax
+; CHECK-NEGATIVE-OFFSET-NEXT:  cmpq16(%rsp), %rax
+; CHECK-NEGATIVE-OFFSET-NEXT:  jne .LBB0_2
+; CHECK-NEGATIVE-OFFSET:   .LBB0_2:
+; CHECK-NEGATIVE-OFFSET-NEXT:  .cfi_def_cfa_offset 32
+; CHECK-NEGATIVE-OFFSET-NEXT:  callq   __stack_chk_fail
+
 ; CHECK-GLOBAL:   movq__stack_chk_guard(%rip), %rax
 ; CHECK-GLOBAL:   movq__stack_chk_guard(%rip), %rax
 ; CHECK-GLOBAL-NEXT:  cmpq16(%rsp), %rax
Index: llvm/lib/Target/X86/X86ISelLowering.cpp
===
--- llvm/lib/Target/X86/X86ISelLowering.cpp
+++ llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -2484,7 +2484,7 @@
 }
 
 static Constant* SegmentOffset(IRBuilder<> ,
-   unsigned Offset, unsigned AddressSpace) {
+   int Offset, unsigned AddressSpace) {
   return ConstantExpr::getIntToPtr(
   ConstantInt::get(Type::getInt32Ty(IRB.getContext()), Offset),
   Type::getInt8PtrTy(IRB.getContext())->getPointerTo(AddressSpace));
@@ -2501,11 +2501,11 @@
 } else {
   unsigned AddressSpace = getAddressSpace();
   // Specially, some users may customize the base reg and offset.
-  unsigned Offset = getTargetMachine().Options.StackProtectorGuardOffset;
+  int Offset = getTargetMachine().Options.StackProtectorGuardOffset;
   // If we don't set -stack-protector-guard-offset value:
   // %fs:0x28, unless we're using a Kernel code model, in which case
   // it's %gs:0x28.  gs:0x14 on i386.
-  if (Offset == (unsigned)-1)
+  if (Offset == INT_MAX)
 Offset = (Subtarget.is64Bit()) ? 0x28 : 0x14;
 
   const auto  = getTargetMachine().Options.StackProtectorGuardReg;
@@ -2576,7 +2576,7 @@
   if (Subtarget.isTargetAndroid()) {
 // %fs:0x48, unless we're using a Kernel code model, in which case it's %gs:
 // %gs:0x24 on i386
-unsigned Offset = (Subtarget.is64Bit()) ? 0x48 : 0x24;
+int Offset = (Subtarget.is64Bit()) ? 0x48 : 0x24;
 return SegmentOffset(IRB, Offset, getAddressSpace());
   }
 
Index: llvm/lib/CodeGen/CommandFlags.cpp
===
--- llvm/lib/CodeGen/CommandFlags.cpp
+++ llvm/lib/CodeGen/CommandFlags.cpp
@@ -80,7 +80,7 @@
 CGOPT(bool, XCOFFTracebackTable)
 CGOPT(std::string, BBSections)
 CGOPT(std::string, StackProtectorGuard)
-CGOPT(unsigned, StackProtectorGuardOffset)
+CGOPT(int, StackProtectorGuardOffset)
 CGOPT(std::string, StackProtectorGuardReg)
 CGOPT(unsigned, TLSSize)
 CGOPT(bool, EmulatedTLS)
@@ -375,9 +375,9 @@
   cl::init("none"));
   CGBINDOPT(StackProtectorGuardReg);
 
-  static cl::opt StackProtectorGuardOffset(
+  static cl::opt StackProtectorGuardOffset(
   "stack-protector-guard-offset", cl::desc("Stack protector guard offset"),
-  cl::init((unsigned)-1));
+  cl::init(INT_MAX));
   CGBINDOPT(StackProtectorGuardOffset);
 
   static cl::opt TLSSize(
Index: llvm/include/llvm/Target/TargetOptions.h
===
--- llvm/include/llvm/Target/TargetOptions.h
+++ 

[clang] ea8416b - [CodeGenOptions] make StackProtectorGuardOffset signed

2021-04-27 Thread Nick Desaulniers via cfe-commits

Author: Nick Desaulniers
Date: 2021-04-27T10:12:58-07:00
New Revision: ea8416bf4df4e2823d85d50d8ddd69dd8ed54720

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

LOG: [CodeGenOptions] make StackProtectorGuardOffset signed

GCC supports negative values for -mstack-protector-guard-offset=, this
should be a signed value. Pre-req to D100919.

Reviewed By: MaskRay

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

Added: 


Modified: 
clang/include/clang/Basic/CodeGenOptions.def
clang/include/clang/Driver/Options.td
clang/lib/Driver/ToolChains/Clang.cpp
llvm/include/llvm/CodeGen/CommandFlags.h
llvm/include/llvm/Target/TargetOptions.h
llvm/lib/CodeGen/CommandFlags.cpp
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/stack-protector-3.ll

Removed: 




diff  --git a/clang/include/clang/Basic/CodeGenOptions.def 
b/clang/include/clang/Basic/CodeGenOptions.def
index d3ea7d2a94df5..68ebcc62ab2c8 100644
--- a/clang/include/clang/Basic/CodeGenOptions.def
+++ b/clang/include/clang/Basic/CodeGenOptions.def
@@ -371,7 +371,7 @@ ENUM_CODEGENOPT(DefaultTLSModel, TLSModel, 2, 
GeneralDynamicTLSModel)
 VALUE_CODEGENOPT(TLSSize, 8, 0)
 
 /// The default stack protector guard offset to use.
-VALUE_CODEGENOPT(StackProtectorGuardOffset, 32, (unsigned)-1)
+VALUE_CODEGENOPT(StackProtectorGuardOffset, 32, INT_MAX)
 
 /// Number of path components to strip when emitting checks. (0 == full
 /// filename)

diff  --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 8de28538192c5..4c171b94193e0 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -3345,7 +3345,7 @@ def mstack_protector_guard_EQ : Joined<["-"], 
"mstack-protector-guard=">, Group<
   MarshallingInfoString>;
 def mstack_protector_guard_offset_EQ : Joined<["-"], 
"mstack-protector-guard-offset=">, Group, Flags<[CC1Option]>,
   HelpText<"Use the given offset for addressing the stack-protector guard">,
-  MarshallingInfoInt, "(unsigned)-1">;
+  MarshallingInfoInt, "INT_MAX">;
 def mstack_protector_guard_reg_EQ : Joined<["-"], 
"mstack-protector-guard-reg=">, Group, Flags<[CC1Option]>,
   HelpText<"Use the given reg for addressing the stack-protector guard">,
   MarshallingInfoString, [{"none"}]>;

diff  --git a/clang/lib/Driver/ToolChains/Clang.cpp 
b/clang/lib/Driver/ToolChains/Clang.cpp
index 42d215103ee3c..e90d4744d7851 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -3124,7 +3124,7 @@ static void RenderSSPOptions(const Driver , const 
ToolChain ,
 if (!EffectiveTriple.isX86())
   D.Diag(diag::err_drv_unsupported_opt_for_target)
   << A->getAsString(Args) << TripleStr;
-unsigned Offset;
+int Offset;
 if (Value.getAsInteger(10, Offset)) {
   D.Diag(diag::err_drv_invalid_value) << A->getOption().getName() << Value;
   return;

diff  --git a/llvm/include/llvm/CodeGen/CommandFlags.h 
b/llvm/include/llvm/CodeGen/CommandFlags.h
index 69ce85e6d7ec8..a12733801213e 100644
--- a/llvm/include/llvm/CodeGen/CommandFlags.h
+++ b/llvm/include/llvm/CodeGen/CommandFlags.h
@@ -107,7 +107,7 @@ bool getXCOFFTracebackTable();
 std::string getBBSections();
 
 std::string getStackProtectorGuard();
-unsigned getStackProtectorGuardOffset();
+int getStackProtectorGuardOffset();
 std::string getStackProtectorGuardReg();
 
 unsigned getTLSSize();

diff  --git a/llvm/include/llvm/Target/TargetOptions.h 
b/llvm/include/llvm/Target/TargetOptions.h
index 651dbe163a811..5dab7de949066 100644
--- a/llvm/include/llvm/Target/TargetOptions.h
+++ b/llvm/include/llvm/Target/TargetOptions.h
@@ -332,7 +332,7 @@ namespace llvm {
 unsigned XRayOmitFunctionIndex : 1;
 
 /// Stack protector guard offset to use.
-unsigned StackProtectorGuardOffset = -1U;
+int StackProtectorGuardOffset = INT_MAX;
 
 /// Stack protector guard mode to use, e.g. tls, global.
 StackProtectorGuards StackProtectorGuard =

diff  --git a/llvm/lib/CodeGen/CommandFlags.cpp 
b/llvm/lib/CodeGen/CommandFlags.cpp
index 76d871978532f..4c6c5950117fe 100644
--- a/llvm/lib/CodeGen/CommandFlags.cpp
+++ b/llvm/lib/CodeGen/CommandFlags.cpp
@@ -80,7 +80,7 @@ CGOPT(bool, IgnoreXCOFFVisibility)
 CGOPT(bool, XCOFFTracebackTable)
 CGOPT(std::string, BBSections)
 CGOPT(std::string, StackProtectorGuard)
-CGOPT(unsigned, StackProtectorGuardOffset)
+CGOPT(int, StackProtectorGuardOffset)
 CGOPT(std::string, StackProtectorGuardReg)
 CGOPT(unsigned, TLSSize)
 CGOPT(bool, EmulatedTLS)
@@ -375,9 +375,9 @@ codegen::RegisterCodeGenFlags::RegisterCodeGenFlags() {
   cl::init("none"));
   CGBINDOPT(StackProtectorGuardReg);
 
-  static cl::opt StackProtectorGuardOffset(
+  static cl::opt 

[PATCH] D99350: [OPENMP]Fix PR49649: The introduction of $ref globals is not always valid.

2021-04-27 Thread Alexey Bataev via Phabricator via cfe-commits
ABataev updated this revision to Diff 340894.
ABataev added a comment.

Rebase


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D99350/new/

https://reviews.llvm.org/D99350

Files:
  clang/lib/CodeGen/CGOpenMPRuntime.cpp
  clang/test/OpenMP/declare_target_codegen.cpp


Index: clang/test/OpenMP/declare_target_codegen.cpp
===
--- clang/test/OpenMP/declare_target_codegen.cpp
+++ clang/test/OpenMP/declare_target_codegen.cpp
@@ -43,10 +43,10 @@
 // CHECK-DAG: @c = external global i32,
 // CHECK-DAG: @globals ={{ hidden | }}global %struct.S zeroinitializer,
 // CHECK-DAG: [[STAT:@.+stat]] = internal global %struct.S zeroinitializer,
-// CHECK-DAG: [[STAT_REF:@.+]] = internal constant %struct.S* [[STAT]]
+// CHECK-DAG: [[STAT_REF:@.+]] = internal constant i8* bitcast (%struct.S* 
[[STAT]] to i8*)
 // CHECK-DAG: @out_decl_target ={{ hidden | }}global i32 0,
 // CHECK-DAG: @llvm.used = appending global [2 x i8*] [i8* bitcast (void ()* 
@__omp_offloading__{{.+}}_globals_l[[@LINE+84]]_ctor to i8*), i8* bitcast (void 
()* @__omp_offloading__{{.+}}_stat_l[[@LINE+85]]_ctor to i8*)],
-// CHECK-DAG: @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast 
(%struct.S** [[STAT_REF]] to i8*)],
+// CHECK-DAG: @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast 
(i8** [[STAT_REF]] to i8*)],
 
 // CHECK-DAG: define {{.*}}i32 @{{.*}}{{foo|bar|baz2|baz3|FA|f_method}}{{.*}}()
 // CHECK-DAG: define {{.*}}void 
@{{.*}}TemplateClass{{.*}}(%class.TemplateClass* {{[^,]*}} %{{.*}})
Index: clang/lib/CodeGen/CGOpenMPRuntime.cpp
===
--- clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -10653,11 +10653,13 @@
   std::string RefName = getName({VarName, "ref"});
   if (!CGM.GetGlobalValue(RefName)) {
 llvm::Constant *AddrRef =
-getOrCreateInternalVariable(Addr->getType(), RefName);
+getOrCreateInternalVariable(CGM.VoidPtrTy, RefName);
 auto *GVAddrRef = cast(AddrRef);
 GVAddrRef->setConstant(/*Val=*/true);
 GVAddrRef->setLinkage(llvm::GlobalValue::InternalLinkage);
-GVAddrRef->setInitializer(Addr);
+GVAddrRef->setInitializer(
+llvm::ConstantExpr::getPointerBitCastOrAddrSpaceCast(
+Addr, CGM.VoidPtrTy));
 CGM.addCompilerUsedGlobal(GVAddrRef);
   }
 }


Index: clang/test/OpenMP/declare_target_codegen.cpp
===
--- clang/test/OpenMP/declare_target_codegen.cpp
+++ clang/test/OpenMP/declare_target_codegen.cpp
@@ -43,10 +43,10 @@
 // CHECK-DAG: @c = external global i32,
 // CHECK-DAG: @globals ={{ hidden | }}global %struct.S zeroinitializer,
 // CHECK-DAG: [[STAT:@.+stat]] = internal global %struct.S zeroinitializer,
-// CHECK-DAG: [[STAT_REF:@.+]] = internal constant %struct.S* [[STAT]]
+// CHECK-DAG: [[STAT_REF:@.+]] = internal constant i8* bitcast (%struct.S* [[STAT]] to i8*)
 // CHECK-DAG: @out_decl_target ={{ hidden | }}global i32 0,
 // CHECK-DAG: @llvm.used = appending global [2 x i8*] [i8* bitcast (void ()* @__omp_offloading__{{.+}}_globals_l[[@LINE+84]]_ctor to i8*), i8* bitcast (void ()* @__omp_offloading__{{.+}}_stat_l[[@LINE+85]]_ctor to i8*)],
-// CHECK-DAG: @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (%struct.S** [[STAT_REF]] to i8*)],
+// CHECK-DAG: @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (i8** [[STAT_REF]] to i8*)],
 
 // CHECK-DAG: define {{.*}}i32 @{{.*}}{{foo|bar|baz2|baz3|FA|f_method}}{{.*}}()
 // CHECK-DAG: define {{.*}}void @{{.*}}TemplateClass{{.*}}(%class.TemplateClass* {{[^,]*}} %{{.*}})
Index: clang/lib/CodeGen/CGOpenMPRuntime.cpp
===
--- clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -10653,11 +10653,13 @@
   std::string RefName = getName({VarName, "ref"});
   if (!CGM.GetGlobalValue(RefName)) {
 llvm::Constant *AddrRef =
-getOrCreateInternalVariable(Addr->getType(), RefName);
+getOrCreateInternalVariable(CGM.VoidPtrTy, RefName);
 auto *GVAddrRef = cast(AddrRef);
 GVAddrRef->setConstant(/*Val=*/true);
 GVAddrRef->setLinkage(llvm::GlobalValue::InternalLinkage);
-GVAddrRef->setInitializer(Addr);
+GVAddrRef->setInitializer(
+llvm::ConstantExpr::getPointerBitCastOrAddrSpaceCast(
+Addr, CGM.VoidPtrTy));
 CGM.addCompilerUsedGlobal(GVAddrRef);
   }
 }
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


  1   2   3   >