mirror of
https://git.proxmox.com/git/llvm-toolchain
synced 2025-06-24 14:04:24 +00:00
Disable force-gcc-header-obj.diff as it is introducing some regressions in the search headers (Closes: #903709) Very similar to the previous packages except that libc++abi-7-test & libc++-7-test are no longer shipped Useless now and misleading Useless now and misleading
This commit is contained in:
commit
6992ef87ef
13
debian/changelog
vendored
13
debian/changelog
vendored
@ -11,9 +11,12 @@ llvm-toolchain-snapshot (1:8~svn336894-1~exp1) experimental; urgency=medium
|
||||
clang_Type_getObjCObjectBaseType
|
||||
clang_Type_getObjCProtocolDecl
|
||||
clang_Type_getObjCTypeArg
|
||||
* python-recommonmark is a new build dep for the sphinx doc
|
||||
* python-recommonmark is a new build dep for the sphinx doc
|
||||
* Disable force-gcc-header-obj.diff as it is introducing
|
||||
some regressions in the search headers
|
||||
(Closes: #903709)
|
||||
|
||||
-- Sylvestre Ledru <sylvestre@debian.org> Sun, 12 Aug 2018 13:19:15 +0200
|
||||
-- Sylvestre Ledru <sylvestre@debian.org> Wed, 15 Aug 2018 15:35:08 +0200
|
||||
|
||||
llvm-toolchain-7 (1:7~+rc1-1~exp1) experimental; urgency=medium
|
||||
|
||||
@ -27,6 +30,8 @@ llvm-toolchain-7 (1:7~+rc1-1~exp1) experimental; urgency=medium
|
||||
|
||||
[ Reshabh Sharma ]
|
||||
* Integrate libcxx and libcxxabi as part of the llvm-toolchain packages
|
||||
Very similar to the previous packages
|
||||
except that libc++abi-7-test & libc++-7-test are no longer shipped
|
||||
Outcome of the LLVM GSoC 2018
|
||||
(Closes: #813673)
|
||||
|
||||
@ -1386,7 +1391,7 @@ llvm-toolchain-snapshot (1:3.5~svn195337-1) unstable; urgency=low
|
||||
|
||||
* Switch from 3.4 to 3.5
|
||||
* Remove patch 0046-Revert-Patch-to-set-is_stmt-a-little-better-for-prol.patch
|
||||
Useless now and missleading
|
||||
Useless now and misleading
|
||||
* Standards-Version updated to 3.9.5
|
||||
* kfreebsd.diff remove (applied upstream)
|
||||
|
||||
@ -1533,7 +1538,7 @@ llvm-toolchain-3.4 (1:3.4~+rc1-1) unstable; urgency=low
|
||||
* New testing upstream release
|
||||
* kfreebsd.diff removed. Applied upstream
|
||||
* Remove patch 0046-Revert-Patch-to-set-is_stmt-a-little-better-for-prol.patch
|
||||
Useless now and missleading
|
||||
Useless now and misleading
|
||||
* Branch from llvm-toolchain-snapshot
|
||||
* Standards-Version updated to 3.9.5
|
||||
|
||||
|
2
debian/clang++-libc++-X.Y.in
vendored
2
debian/clang++-libc++-X.Y.in
vendored
@ -1,2 +0,0 @@
|
||||
#!/bin/sh
|
||||
clang++ -stdlib=libc++ "$@"
|
2
debian/clang++-libc++.in
vendored
Executable file
2
debian/clang++-libc++.in
vendored
Executable file
@ -0,0 +1,2 @@
|
||||
#!/bin/sh
|
||||
clang++-@LLVM_VERSION@ -stdlib=libc++ "$@"
|
56
debian/control
vendored
56
debian/control
vendored
@ -445,7 +445,7 @@ Description: Next generation, high-performance debugger, library
|
||||
|
||||
Package: python-lldb-8
|
||||
Section: python
|
||||
Architecture: amd64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 ppc64el s390 sparc hppa m68k sh4 x32 mips mipsel arm64
|
||||
Architecture: amd64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 s390 sparc hppa m68k sh4 x32 mips mipsel arm64 ppc64el
|
||||
# ia64 mips mipsel hurd powerpc powerpcspe ppc64 alpha s390x sparc64 have been removed
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}, liblldb-8-dev, python, python-six
|
||||
Conflicts: python-lldb-3.8, python-lldb-3.9, python-lldb-x.y
|
||||
@ -462,7 +462,7 @@ Description: Next generation, high-performance debugger, python lib
|
||||
|
||||
Package: liblldb-8-dev
|
||||
Section: libdevel
|
||||
Architecture: amd64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 ppc64el s390 sparc hppa m68k sh4 x32 mips mipsel arm64
|
||||
Architecture: amd64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 s390 sparc hppa m68k sh4 x32 mips mipsel arm64 ppc64el
|
||||
# ia64 mips mipsel hurd powerpc powerpcspe ppc64 alpha s390x sparc64 have been removed
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}, lldb-8 (= ${binary:Version})
|
||||
Replaces: lldb-8-dev (<= 8~svn215195-2)
|
||||
@ -526,6 +526,9 @@ Multi-Arch: same
|
||||
Pre-Depends: ${misc:Pre-Depends}
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Suggests: clang
|
||||
Replaces: libc++1
|
||||
Breaks: libc++1
|
||||
Provides: libc++1
|
||||
Description: LLVM C++ Standard library
|
||||
libc++ is another implementation of the C++ standard library.
|
||||
.
|
||||
@ -546,6 +549,7 @@ Multi-Arch: same
|
||||
Depends: libc++1-8 (= ${binary:Version}), ${misc:Depends}, libc++-helpers
|
||||
Provides: libstdc++-dev, libc++-8-dev
|
||||
Breaks: libc++-dev
|
||||
Replaces: libc++-dev
|
||||
Description: LLVM C++ Standard library (development files)
|
||||
libc++ is another implementation of the C++ standard library
|
||||
.
|
||||
@ -559,27 +563,6 @@ Description: LLVM C++ Standard library (development files)
|
||||
as exception objects, rtti and memory allocation.
|
||||
* Extensive unit tests.
|
||||
|
||||
Package: libc++-8-test
|
||||
Section: libs
|
||||
Architecture: any
|
||||
Depends: libc++1-8 (= ${binary:Version}), ${misc:Depends}
|
||||
Breaks: libc++-test
|
||||
Provides: libc++-test
|
||||
Description: LLVM C++ Standard library (test cases)
|
||||
libc++ is another implementation of the C++ standard library.
|
||||
.
|
||||
Features and Goals
|
||||
.
|
||||
* Correctness as defined by the standards.
|
||||
* Fast execution.
|
||||
* Minimal memory use.
|
||||
* Fast compile times.
|
||||
* ABI compatibility with gcc's libstdc++ for some low-level features such
|
||||
as exception objects, rtti and memory allocation.
|
||||
* Extensive unit tests.
|
||||
.
|
||||
This package contains the test cases of libc++ library.
|
||||
|
||||
# ------------- libcxxabi -------------
|
||||
|
||||
Package: libc++abi1-8
|
||||
@ -590,6 +573,7 @@ Pre-Depends: ${misc:Pre-Depends}
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Breaks: libc++abi1
|
||||
Provides: libc++abi1
|
||||
Replaces: libc++abi1
|
||||
Description: LLVM low level support for a standard C++ library
|
||||
libc++abi is another implementation of low level support for a standard C++
|
||||
library.
|
||||
@ -605,8 +589,9 @@ Section: libdevel
|
||||
Architecture: any
|
||||
Multi-Arch: same
|
||||
Depends: libc++abi1-8 (= ${binary:Version}), ${misc:Depends}
|
||||
Replaces: libc++-8-dev (<< 3.9.0-3)
|
||||
Breaks: libc++-dev (<< 3.9.0-3), libc++-8-dev
|
||||
Replaces: libc++-8-dev
|
||||
Breaks: libc++-dev , libc++-8-dev, libc++abi-dev
|
||||
Provides: libc++-dev , libc++-8-dev, libc++abi-dev
|
||||
Description: LLVM low level support for a standard C++ library (development files)
|
||||
libc++abi is another implementation of low level support for a standard C++
|
||||
library.
|
||||
@ -617,30 +602,13 @@ Description: LLVM low level support for a standard C++ library (development file
|
||||
* Provide a portable sublayer to ease the porting of libc++
|
||||
.
|
||||
|
||||
Package: libc++abi-8-test
|
||||
Section: libs
|
||||
Architecture: any
|
||||
Depends: libc++abi1-8 (= ${binary:Version}), ${misc:Depends}
|
||||
Breaks: libc++abi-test
|
||||
Provides: libc++abi-test
|
||||
Description: libc++abi test cases
|
||||
libc++abi is another implementation of low level support for a standard C++
|
||||
library.
|
||||
.
|
||||
Features and Goals
|
||||
.
|
||||
* Correctness as defined by the C++ standards.
|
||||
* Provide a portable sublayer to ease the porting of libc++
|
||||
.
|
||||
Test cases of libc++abi library.
|
||||
|
||||
|
||||
Package: libc++-8-helpers
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: ${misc:Depends}
|
||||
Breaks: libc++-8-helpers
|
||||
Breaks: libc++-helpers
|
||||
Provides: libc++-helpers
|
||||
Replaces: libc++-helpers
|
||||
Description: LLVM C++ Standard library - build helpers
|
||||
libc++ is another implementation of the C++ standard library
|
||||
.
|
||||
|
57
debian/copyright
vendored
57
debian/copyright
vendored
@ -361,6 +361,7 @@ Files: utils/unittest/googletest/*
|
||||
Copyright: 2006-2008, Google Inc.
|
||||
License: BSD-3-Clause
|
||||
|
||||
Files: libcxx/*
|
||||
License: BSD-3-Clause
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
@ -378,6 +379,62 @@ License: BSD-3-Clause
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
|
||||
Files: libcxx*/*
|
||||
Copyright: 2009-2012 by the contributors listed below
|
||||
N: Howard Hinnant
|
||||
E: hhinnant@apple.com
|
||||
D: Architect and primary author of libc++
|
||||
.
|
||||
N: Marshall Clow
|
||||
E: marshall@idio.com
|
||||
E: mclow@qualcomm.com
|
||||
D: Minor patches and bug fixes.
|
||||
.
|
||||
N: Bjorn Reese
|
||||
E: breese@users.sourceforge.net
|
||||
D: Initial regex prototype
|
||||
.
|
||||
N: David Chisnall
|
||||
E: theraven at theravensnest dot org
|
||||
D: FreeBSD and Solaris ports, libcxxrt support, some atomics work.
|
||||
.
|
||||
N: Ruben Van Boxem
|
||||
E: vanboxem dot ruben at gmail dot com
|
||||
D: Initial Windows patches.
|
||||
.
|
||||
N: Arvid Picciani
|
||||
E: aep at exys dot org
|
||||
D: Minor patches and musl port.
|
||||
.
|
||||
N: Craig Silverstein
|
||||
E: csilvers@google.com
|
||||
D: Implemented Cityhash as the string hash function on 64-bit machines
|
||||
.
|
||||
N: Google Inc.
|
||||
D: Copyright owner and contributor of the CityHash algorithm
|
||||
.
|
||||
N: Jeffrey Yasskin
|
||||
E: jyasskin@gmail.com
|
||||
E: jyasskin@google.com
|
||||
D: Linux fixes.
|
||||
.
|
||||
N: Jonathan Sauer
|
||||
D: Minor patches, mostly related to constexpr
|
||||
.
|
||||
N: Richard Smith
|
||||
D: Minor patches.
|
||||
.
|
||||
The list is sorted by surname and formatted to allow easy grepping and
|
||||
beautification by scripts. The fields are: name (N), email (E), web-address
|
||||
(W), PGP key ID and fingerprint (P), description (D), and snail-mail address
|
||||
(S).
|
||||
.
|
||||
License: NCSA or MIT
|
||||
|
||||
Files: openmp/*
|
||||
Copyright: 1997-2015 Intel Corporation
|
||||
License: U-OF-I-BSD-LIKE
|
||||
|
||||
License: U-OF-I-BSD-LIKE
|
||||
==============================================================================
|
||||
LLVM Release License
|
||||
|
0
debian/g++-libc++-X.Y.in → debian/g++-libc++.in
vendored
Normal file → Executable file
0
debian/g++-libc++-X.Y.in → debian/g++-libc++.in
vendored
Normal file → Executable file
6
debian/libc++-X.Y-dev.install.in
vendored
6
debian/libc++-X.Y-dev.install.in
vendored
@ -1,3 +1,5 @@
|
||||
usr/lib/llvm-@LLVM_VERSION@/lib/libc++.so
|
||||
usr/lib/llvm-@LLVM_VERSION@/lib/libc++*.a
|
||||
usr/lib/llvm-@LLVM_VERSION@/include/c++/* usr/lib/llvm-@LLVM_VERSION@/include/c++
|
||||
usr/lib/llvm-@LLVM_VERSION@/lib/libc++.a
|
||||
usr/lib/llvm-@LLVM_VERSION@/lib/libc++fs.a
|
||||
usr/lib/llvm-@LLVM_VERSION@/lib/libc++experimental.a
|
||||
usr/lib/llvm-@LLVM_VERSION@/include/c++/* usr/lib/llvm-@LLVM_VERSION@/include/c++/v1
|
||||
|
3
debian/libc++-X.Y-dev.lintian-overrides.in
vendored
Normal file
3
debian/libc++-X.Y-dev.lintian-overrides.in
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
libc++-@LLVM_VERSION@-dev: arch-dependent-file-not-in-arch-specific-directory usr/lib/llvm-@LLVM_VERSION@/lib/libc++.a
|
||||
libc++-@LLVM_VERSION@-dev: arch-dependent-file-not-in-arch-specific-directory usr/lib/llvm-@LLVM_VERSION@/lib/libc++fs.a
|
||||
libc++-@LLVM_VERSION@-dev: arch-dependent-file-not-in-arch-specific-directory usr/lib/llvm-@LLVM_VERSION@/lib/libc++experimental.a
|
4
debian/libc++-X.Y-helpers.install.in
vendored
4
debian/libc++-X.Y-helpers.install.in
vendored
@ -1,2 +1,2 @@
|
||||
debian/clang++-libc++-@LLVM_VERSION@ usr/lib/llvm-@LLVM_VERSION@/bin/
|
||||
debian/g++-libc++-@LLVM_VERSION@ usr/lib/llvm-@LLVM_VERSION@/bin/
|
||||
debian/clang++-libc++ usr/lib/llvm-@LLVM_VERSION@/bin/
|
||||
debian/g++-libc++ usr/lib/llvm-@LLVM_VERSION@/bin/
|
||||
|
4
debian/libc++-X.Y-helpers.links.in
vendored
4
debian/libc++-X.Y-helpers.links.in
vendored
@ -1,2 +1,2 @@
|
||||
usr/lib/llvm-@LLVM_VERSION@/bin/clang++-libc++-@LLVM_VERSION@ usr/bin/clang++-libc++-@LLVM_VERSION@
|
||||
usr/lib/llvm-@LLVM_VERSION@/bin/g++-libc++-@LLVM_VERSION@ usr/bin/g++-libc++-@LLVM_VERSION@
|
||||
usr/lib/llvm-@LLVM_VERSION@/bin/clang++-libc++-@LLVM_VERSION@ usr/bin/clang++-libc++
|
||||
usr/lib/llvm-@LLVM_VERSION@/bin/g++-libc++-@LLVM_VERSION@ usr/bin/g++-libc++
|
||||
|
2
debian/libc++1-X.Y.install.in
vendored
2
debian/libc++1-X.Y.install.in
vendored
@ -1 +1 @@
|
||||
usr/lib/llvm-@LLVM_VERSION@/lib/libc++.so.*
|
||||
usr/lib/llvm-@LLVM_VERSION@/lib/libc++.so*
|
||||
|
3
debian/libc++1-X.Y.links.in
vendored
3
debian/libc++1-X.Y.links.in
vendored
@ -1 +1,2 @@
|
||||
usr/lib/llvm-@LLVM_VERSION@/lib/libc++.so.1 /usr/lib/@DEB_HOST_MULTIARCH@/libc++.so.1
|
||||
usr/lib/llvm-@LLVM_VERSION@/lib/libc++.so.1.0 /usr/lib/@DEB_HOST_MULTIARCH@/libc++.so.1.0
|
||||
/usr/lib/@DEB_HOST_MULTIARCH@/libc++.so.1.0 /usr/lib/@DEB_HOST_MULTIARCH@/libc++.so.1
|
||||
|
1
debian/libc++1-X.Y.lintian-overrides.in
vendored
Normal file
1
debian/libc++1-X.Y.lintian-overrides.in
vendored
Normal file
@ -0,0 +1 @@
|
||||
libc++1-@LLVM_VERSION@: arch-dependent-file-not-in-arch-specific-directory usr/lib/llvm-@LLVM_VERSION@/lib/libc++.so.1.0
|
4
debian/libc++abi-X.Y-dev.install.in
vendored
4
debian/libc++abi-X.Y-dev.install.in
vendored
@ -1,3 +1,3 @@
|
||||
usr/lib/llvm-@LLVM_VERSION@/lib/libc++abi.so
|
||||
usr/lib/llvm-@LLVM_VERSION@/lib/libc++abi*so
|
||||
usr/lib/llvm-@LLVM_VERSION@/lib/libc++abi.a
|
||||
usr/lib/llvm-@LLVM_VERSION@/include/c++/v1/*cxxabi*
|
||||
libcxxabi/include/* usr/lib/llvm-@LLVM_VERSION@/include/
|
||||
|
3
debian/libc++abi-X.Y-dev.links.in
vendored
3
debian/libc++abi-X.Y-dev.links.in
vendored
@ -1,4 +1 @@
|
||||
usr/lib/llvm-@LLVM_VERSION@/lib/libc++abi.a /usr/lib/@DEB_HOST_MULTIARCH@/libc++abi.a
|
||||
usr/lib/llvm-@LLVM_VERSION@/lib/libc++abi.so /usr/lib/@DEB_HOST_MULTIARCH@/libc++abi.so
|
||||
usr/lib/llvm-@LLVM_VERSION@/include/c++/v1/cxxabi.h /usr/include/c++/v1/cxxabi.h
|
||||
usr/lib/llvm-@LLVM_VERSION@/include/c++/v1/__cxxabi_config.h /usr/include/c++/v1/__cxxabi_config.h
|
||||
|
1
debian/libc++abi-X.Y-dev.lintian-overrides.in
vendored
Normal file
1
debian/libc++abi-X.Y-dev.lintian-overrides.in
vendored
Normal file
@ -0,0 +1 @@
|
||||
libc++abi-@LLVM_VERSION@-dev: arch-dependent-file-not-in-arch-specific-directory usr/lib/llvm-@LLVM_VERSION@/lib/libc++abi.a
|
2
debian/libc++abi1-X.Y.install.in
vendored
2
debian/libc++abi1-X.Y.install.in
vendored
@ -1 +1 @@
|
||||
usr/lib/llvm-@LLVM_VERSION@/lib/libc++abi*
|
||||
usr/lib/llvm-@LLVM_VERSION@/lib/libc++abi.so*
|
||||
|
3
debian/libc++abi1-X.Y.links.in
vendored
3
debian/libc++abi1-X.Y.links.in
vendored
@ -1 +1,2 @@
|
||||
usr/lib/llvm-@LLVM_VERSION@/lib/libc++abi.so.1 /usr/lib/@DEB_HOST_MULTIARCH@/libc++abi.so.1
|
||||
usr/lib/llvm-@LLVM_VERSION@/lib/libc++abi.so.1.0 /usr/lib/@DEB_HOST_MULTIARCH@/libc++abi.so.1.0
|
||||
/usr/lib/@DEB_HOST_MULTIARCH@/libc++abi.so.1.0 /usr/lib/@DEB_HOST_MULTIARCH@/libc++abi.so.1
|
||||
|
1
debian/libc++abi1-X.Y.lintian-overrides.in
vendored
Normal file
1
debian/libc++abi1-X.Y.lintian-overrides.in
vendored
Normal file
@ -0,0 +1 @@
|
||||
libc++abi1-@LLVM_VERSION@: arch-dependent-file-not-in-arch-specific-directory usr/lib/llvm-@LLVM_VERSION@/lib/libc++abi.so.1.0
|
2148
debian/patches/D40146-JumpThreading-backport-1.diff
vendored
Normal file
2148
debian/patches/D40146-JumpThreading-backport-1.diff
vendored
Normal file
File diff suppressed because it is too large
Load Diff
267
debian/patches/D42717-JumpThreading-backport-2.diff
vendored
Normal file
267
debian/patches/D42717-JumpThreading-backport-2.diff
vendored
Normal file
@ -0,0 +1,267 @@
|
||||
Index: llvm-toolchain-6.0-6.0.1/include/llvm/Analysis/LazyValueInfo.h
|
||||
===================================================================
|
||||
--- llvm-toolchain-6.0-6.0.1.orig/include/llvm/Analysis/LazyValueInfo.h
|
||||
+++ llvm-toolchain-6.0-6.0.1/include/llvm/Analysis/LazyValueInfo.h
|
||||
@@ -113,6 +113,13 @@ public:
|
||||
/// in LVI, so we need to pass it here as an argument.
|
||||
void printLVI(Function &F, DominatorTree &DTree, raw_ostream &OS);
|
||||
|
||||
+ /// Disables use of the DominatorTree within LVI.
|
||||
+ void disableDT();
|
||||
+
|
||||
+ /// Enables use of the DominatorTree within LVI. Does nothing if the class
|
||||
+ /// instance was initialized without a DT pointer.
|
||||
+ void enableDT();
|
||||
+
|
||||
// For old PM pass. Delete once LazyValueInfoWrapperPass is gone.
|
||||
void releaseMemory();
|
||||
|
||||
Index: llvm-toolchain-6.0-6.0.1/include/llvm/IR/Dominators.h
|
||||
===================================================================
|
||||
--- llvm-toolchain-6.0-6.0.1.orig/include/llvm/IR/Dominators.h
|
||||
+++ llvm-toolchain-6.0-6.0.1/include/llvm/IR/Dominators.h
|
||||
@@ -342,6 +342,9 @@ public:
|
||||
/// \brief Returns true if DelBB is awaiting deletion at a flush() event.
|
||||
bool pendingDeletedBB(BasicBlock *DelBB);
|
||||
|
||||
+ /// \brief Returns true if pending DT updates are queued for a flush() event.
|
||||
+ bool pending();
|
||||
+
|
||||
/// \brief Flushes all pending updates and block deletions. Returns a
|
||||
/// correct DominatorTree reference to be used by the caller for analysis.
|
||||
DominatorTree &flush();
|
||||
Index: llvm-toolchain-6.0-6.0.1/lib/Analysis/LazyValueInfo.cpp
|
||||
===================================================================
|
||||
--- llvm-toolchain-6.0-6.0.1.orig/lib/Analysis/LazyValueInfo.cpp
|
||||
+++ llvm-toolchain-6.0-6.0.1/lib/Analysis/LazyValueInfo.cpp
|
||||
@@ -401,6 +401,7 @@ namespace {
|
||||
AssumptionCache *AC; ///< A pointer to the cache of @llvm.assume calls.
|
||||
const DataLayout &DL; ///< A mandatory DataLayout
|
||||
DominatorTree *DT; ///< An optional DT pointer.
|
||||
+ DominatorTree *DisabledDT; ///< Stores DT if it's disabled.
|
||||
|
||||
ValueLatticeElement getBlockValue(Value *Val, BasicBlock *BB);
|
||||
bool getEdgeValue(Value *V, BasicBlock *F, BasicBlock *T,
|
||||
@@ -463,13 +464,30 @@ namespace {
|
||||
TheCache.eraseBlock(BB);
|
||||
}
|
||||
|
||||
+ /// Disables use of the DominatorTree within LVI.
|
||||
+ void disableDT() {
|
||||
+ if (DT) {
|
||||
+ assert(!DisabledDT && "Both DT and DisabledDT are not nullptr!");
|
||||
+ std::swap(DT, DisabledDT);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /// Enables use of the DominatorTree within LVI. Does nothing if the class
|
||||
+ /// instance was initialized without a DT pointer.
|
||||
+ void enableDT() {
|
||||
+ if (DisabledDT) {
|
||||
+ assert(!DT && "Both DT and DisabledDT are not nullptr!");
|
||||
+ std::swap(DT, DisabledDT);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/// This is the update interface to inform the cache that an edge from
|
||||
/// PredBB to OldSucc has been threaded to be from PredBB to NewSucc.
|
||||
void threadEdge(BasicBlock *PredBB,BasicBlock *OldSucc,BasicBlock *NewSucc);
|
||||
|
||||
LazyValueInfoImpl(AssumptionCache *AC, const DataLayout &DL,
|
||||
DominatorTree *DT = nullptr)
|
||||
- : AC(AC), DL(DL), DT(DT) {}
|
||||
+ : AC(AC), DL(DL), DT(DT), DisabledDT(nullptr) {}
|
||||
};
|
||||
} // end anonymous namespace
|
||||
|
||||
@@ -1791,6 +1809,16 @@ void LazyValueInfo::printLVI(Function &F
|
||||
}
|
||||
}
|
||||
|
||||
+void LazyValueInfo::disableDT() {
|
||||
+ if (PImpl)
|
||||
+ getImpl(PImpl, AC, DL, DT).disableDT();
|
||||
+}
|
||||
+
|
||||
+void LazyValueInfo::enableDT() {
|
||||
+ if (PImpl)
|
||||
+ getImpl(PImpl, AC, DL, DT).enableDT();
|
||||
+}
|
||||
+
|
||||
// Print the LVI for the function arguments at the start of each basic block.
|
||||
void LazyValueInfoAnnotatedWriter::emitBasicBlockStartAnnot(
|
||||
const BasicBlock *BB, formatted_raw_ostream &OS) {
|
||||
Index: llvm-toolchain-6.0-6.0.1/lib/IR/Dominators.cpp
|
||||
===================================================================
|
||||
--- llvm-toolchain-6.0-6.0.1.orig/lib/IR/Dominators.cpp
|
||||
+++ llvm-toolchain-6.0-6.0.1/lib/IR/Dominators.cpp
|
||||
@@ -453,6 +453,9 @@ bool DeferredDominance::pendingDeletedBB
|
||||
return DeletedBBs.count(DelBB) != 0;
|
||||
}
|
||||
|
||||
+/// \brief Returns true if pending DT updates are queued for a flush() event.
|
||||
+bool DeferredDominance::pending() { return !PendUpdates.empty(); }
|
||||
+
|
||||
/// \brief Flushes all pending updates and block deletions. Returns a
|
||||
/// correct DominatorTree reference to be used by the caller for analysis.
|
||||
DominatorTree &DeferredDominance::flush() {
|
||||
Index: llvm-toolchain-6.0-6.0.1/lib/Transforms/Scalar/JumpThreading.cpp
|
||||
===================================================================
|
||||
--- llvm-toolchain-6.0-6.0.1.orig/lib/Transforms/Scalar/JumpThreading.cpp
|
||||
+++ llvm-toolchain-6.0-6.0.1/lib/Transforms/Scalar/JumpThreading.cpp
|
||||
@@ -425,6 +425,7 @@ bool JumpThreadingPass::runImpl(Function
|
||||
|
||||
LoopHeaders.clear();
|
||||
DDT->flush();
|
||||
+ LVI->enableDT();
|
||||
return EverChanged;
|
||||
}
|
||||
|
||||
@@ -617,6 +618,10 @@ bool JumpThreadingPass::ComputeValueKnow
|
||||
// "X < 4" and "X < 3" is known true but "X < 4" itself is not available.
|
||||
// Perhaps getConstantOnEdge should be smart enough to do this?
|
||||
|
||||
+ if (DDT->pending())
|
||||
+ LVI->disableDT();
|
||||
+ else
|
||||
+ LVI->enableDT();
|
||||
for (BasicBlock *P : predecessors(BB)) {
|
||||
// If the value is known by LazyValueInfo to be a constant in a
|
||||
// predecessor, use that information to try to thread this block.
|
||||
@@ -630,6 +635,10 @@ bool JumpThreadingPass::ComputeValueKnow
|
||||
|
||||
/// If I is a PHI node, then we know the incoming values for any constants.
|
||||
if (PHINode *PN = dyn_cast<PHINode>(I)) {
|
||||
+ if (DDT->pending())
|
||||
+ LVI->disableDT();
|
||||
+ else
|
||||
+ LVI->enableDT();
|
||||
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
|
||||
Value *InVal = PN->getIncomingValue(i);
|
||||
if (Constant *KC = getKnownConstant(InVal, Preference)) {
|
||||
@@ -759,6 +768,10 @@ bool JumpThreadingPass::ComputeValueKnow
|
||||
const DataLayout &DL = PN->getModule()->getDataLayout();
|
||||
// We can do this simplification if any comparisons fold to true or false.
|
||||
// See if any do.
|
||||
+ if (DDT->pending())
|
||||
+ LVI->disableDT();
|
||||
+ else
|
||||
+ LVI->enableDT();
|
||||
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
|
||||
BasicBlock *PredBB = PN->getIncomingBlock(i);
|
||||
Value *LHS = PN->getIncomingValue(i);
|
||||
@@ -792,6 +805,10 @@ bool JumpThreadingPass::ComputeValueKnow
|
||||
|
||||
if (!isa<Instruction>(CmpLHS) ||
|
||||
cast<Instruction>(CmpLHS)->getParent() != BB) {
|
||||
+ if (DDT->pending())
|
||||
+ LVI->disableDT();
|
||||
+ else
|
||||
+ LVI->enableDT();
|
||||
for (BasicBlock *P : predecessors(BB)) {
|
||||
// If the value is known by LazyValueInfo to be a constant in a
|
||||
// predecessor, use that information to try to thread this block.
|
||||
@@ -820,6 +837,10 @@ bool JumpThreadingPass::ComputeValueKnow
|
||||
match(CmpLHS, m_Add(m_Value(AddLHS), m_ConstantInt(AddConst)))) {
|
||||
if (!isa<Instruction>(AddLHS) ||
|
||||
cast<Instruction>(AddLHS)->getParent() != BB) {
|
||||
+ if (DDT->pending())
|
||||
+ LVI->disableDT();
|
||||
+ else
|
||||
+ LVI->enableDT();
|
||||
for (BasicBlock *P : predecessors(BB)) {
|
||||
// If the value is known by LazyValueInfo to be a ConstantRange in
|
||||
// a predecessor, use that information to try to thread this
|
||||
@@ -901,6 +922,10 @@ bool JumpThreadingPass::ComputeValueKnow
|
||||
}
|
||||
|
||||
// If all else fails, see if LVI can figure out a constant value for us.
|
||||
+ if (DDT->pending())
|
||||
+ LVI->disableDT();
|
||||
+ else
|
||||
+ LVI->enableDT();
|
||||
Constant *CI = LVI->getConstant(V, BB, CxtI);
|
||||
if (Constant *KC = getKnownConstant(CI, Preference)) {
|
||||
for (BasicBlock *Pred : predecessors(BB))
|
||||
@@ -1102,6 +1127,10 @@ bool JumpThreadingPass::ProcessBlock(Bas
|
||||
// threading is concerned.
|
||||
assert(CondBr->isConditional() && "Threading on unconditional terminator");
|
||||
|
||||
+ if (DDT->pending())
|
||||
+ LVI->disableDT();
|
||||
+ else
|
||||
+ LVI->enableDT();
|
||||
LazyValueInfo::Tristate Ret =
|
||||
LVI->getPredicateAt(CondCmp->getPredicate(), CondCmp->getOperand(0),
|
||||
CondConst, CondBr);
|
||||
@@ -1914,6 +1943,10 @@ bool JumpThreadingPass::ThreadEdge(Basic
|
||||
<< ", across block:\n "
|
||||
<< *BB << "\n");
|
||||
|
||||
+ if (DDT->pending())
|
||||
+ LVI->disableDT();
|
||||
+ else
|
||||
+ LVI->enableDT();
|
||||
LVI->threadEdge(PredBB, BB, SuccBB);
|
||||
|
||||
// We are going to have to map operands from the original BB block to the new
|
||||
@@ -2383,6 +2416,10 @@ bool JumpThreadingPass::TryToUnfoldSelec
|
||||
// Now check if one of the select values would allow us to constant fold the
|
||||
// terminator in BB. We don't do the transform if both sides fold, those
|
||||
// cases will be threaded in any case.
|
||||
+ if (DDT->pending())
|
||||
+ LVI->disableDT();
|
||||
+ else
|
||||
+ LVI->enableDT();
|
||||
LazyValueInfo::Tristate LHSFolds =
|
||||
LVI->getPredicateOnEdge(CondCmp->getPredicate(), SI->getOperand(1),
|
||||
CondRHS, Pred, BB, CondCmp);
|
||||
Index: llvm-toolchain-6.0-6.0.1/test/Transforms/JumpThreading/pr36133.ll
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ llvm-toolchain-6.0-6.0.1/test/Transforms/JumpThreading/pr36133.ll
|
||||
@@ -0,0 +1,44 @@
|
||||
+; RUN: opt -jump-threading -S < %s | FileCheck %s
|
||||
+@global = external global i8*, align 8
|
||||
+
|
||||
+define i32 @foo(i32 %arg) {
|
||||
+; CHECK-LABEL: @foo
|
||||
+; CHECK-LABEL: bb:
|
||||
+; CHECK: icmp eq
|
||||
+; CHECK-NEXT: br i1 %tmp1, label %bb7, label %bb7
|
||||
+bb:
|
||||
+ %tmp = load i8*, i8** @global, align 8
|
||||
+ %tmp1 = icmp eq i8* %tmp, null
|
||||
+ br i1 %tmp1, label %bb3, label %bb2
|
||||
+
|
||||
+; CHECK-NOT: bb2:
|
||||
+bb2:
|
||||
+ br label %bb3
|
||||
+
|
||||
+; CHECK-NOT: bb3:
|
||||
+bb3:
|
||||
+ %tmp4 = phi i8 [ 1, %bb2 ], [ 0, %bb ]
|
||||
+ %tmp5 = icmp eq i8 %tmp4, 0
|
||||
+ br i1 %tmp5, label %bb7, label %bb6
|
||||
+
|
||||
+; CHECK-NOT: bb6:
|
||||
+bb6:
|
||||
+ br label %bb7
|
||||
+
|
||||
+; CHECK-LABEL: bb7:
|
||||
+bb7:
|
||||
+ %tmp8 = icmp eq i32 %arg, -1
|
||||
+ br i1 %tmp8, label %bb9, label %bb10
|
||||
+
|
||||
+; CHECK-LABEL: bb9:
|
||||
+bb9:
|
||||
+ ret i32 0
|
||||
+
|
||||
+; CHECK-LABEL: bb10:
|
||||
+bb10:
|
||||
+ %tmp11 = icmp sgt i32 %arg, -1
|
||||
+ call void @llvm.assume(i1 %tmp11)
|
||||
+ ret i32 1
|
||||
+}
|
||||
+
|
||||
+declare void @llvm.assume(i1)
|
2
debian/patches/lldb-soname.diff
vendored
2
debian/patches/lldb-soname.diff
vendored
@ -29,7 +29,7 @@ Index: llvm-toolchain-snapshot_8~svn339515/lldb/source/API/CMakeLists.txt
|
||||
)
|
||||
|
||||
if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
@@ -136,11 +141,6 @@ if ( CMAKE_SYSTEM_NAME MATCHES "Windows"
|
||||
@@ -141,11 +141,6 @@ if ( CMAKE_SYSTEM_NAME MATCHES "Windows"
|
||||
if (MSVC AND NOT LLDB_DISABLE_PYTHON)
|
||||
target_link_libraries(liblldb PRIVATE ${PYTHON_LIBRARY})
|
||||
endif()
|
||||
|
187
debian/patches/llvm-D49832-SCEVPred.patch
vendored
Normal file
187
debian/patches/llvm-D49832-SCEVPred.patch
vendored
Normal file
@ -0,0 +1,187 @@
|
||||
commit 98592fcc61307968f7df1362771534595a1e1c21
|
||||
Author: Keno Fischer <keno@juliacomputing.com>
|
||||
Date: Wed Jul 25 19:29:02 2018 -0400
|
||||
|
||||
[SCEV] Don't expand Wrap predicate using inttoptr in ni addrspaces
|
||||
|
||||
Summary:
|
||||
In non-integral address spaces, we're not allowed to introduce inttoptr/ptrtoint
|
||||
intrinsics. Instead, we need to expand any pointer arithmetic as geps on the
|
||||
base pointer. Luckily this is a common task for SCEV, so all we have to do here
|
||||
is hook up the corresponding helper function and add test case.
|
||||
|
||||
Fixes PR38290
|
||||
|
||||
Reviewers: reames, sanjoy
|
||||
|
||||
Subscribers: javed.absar, llvm-commits
|
||||
|
||||
Differential Revision: https://reviews.llvm.org/D49832
|
||||
|
||||
diff --git a/lib/Analysis/ScalarEvolutionExpander.cpp b/lib/Analysis/ScalarEvolutionExpander.cpp
|
||||
index 7f76f057216..f441a3647fb 100644
|
||||
--- a/lib/Analysis/ScalarEvolutionExpander.cpp
|
||||
+++ b/lib/Analysis/ScalarEvolutionExpander.cpp
|
||||
@@ -2154,8 +2154,9 @@ Value *SCEVExpander::generateOverflowCheck(const SCEVAddRecExpr *AR,
|
||||
const SCEV *Step = AR->getStepRecurrence(SE);
|
||||
const SCEV *Start = AR->getStart();
|
||||
|
||||
+ Type *ARTy = AR->getType();
|
||||
unsigned SrcBits = SE.getTypeSizeInBits(ExitCount->getType());
|
||||
- unsigned DstBits = SE.getTypeSizeInBits(AR->getType());
|
||||
+ unsigned DstBits = SE.getTypeSizeInBits(ARTy);
|
||||
|
||||
// The expression {Start,+,Step} has nusw/nssw if
|
||||
// Step < 0, Start - |Step| * Backedge <= Start
|
||||
@@ -2167,11 +2168,12 @@ Value *SCEVExpander::generateOverflowCheck(const SCEVAddRecExpr *AR,
|
||||
Value *TripCountVal = expandCodeFor(ExitCount, CountTy, Loc);
|
||||
|
||||
IntegerType *Ty =
|
||||
- IntegerType::get(Loc->getContext(), SE.getTypeSizeInBits(AR->getType()));
|
||||
+ IntegerType::get(Loc->getContext(), SE.getTypeSizeInBits(ARTy));
|
||||
+ Type *ARExpandTy = DL.isNonIntegralPointerType(ARTy) ? ARTy : Ty;
|
||||
|
||||
Value *StepValue = expandCodeFor(Step, Ty, Loc);
|
||||
Value *NegStepValue = expandCodeFor(SE.getNegativeSCEV(Step), Ty, Loc);
|
||||
- Value *StartValue = expandCodeFor(Start, Ty, Loc);
|
||||
+ Value *StartValue = expandCodeFor(Start, ARExpandTy, Loc);
|
||||
|
||||
ConstantInt *Zero =
|
||||
ConstantInt::get(Loc->getContext(), APInt::getNullValue(DstBits));
|
||||
@@ -2194,8 +2196,21 @@ Value *SCEVExpander::generateOverflowCheck(const SCEVAddRecExpr *AR,
|
||||
// Compute:
|
||||
// Start + |Step| * Backedge < Start
|
||||
// Start - |Step| * Backedge > Start
|
||||
- Value *Add = Builder.CreateAdd(StartValue, MulV);
|
||||
- Value *Sub = Builder.CreateSub(StartValue, MulV);
|
||||
+ Value *Add = nullptr, *Sub = nullptr;
|
||||
+ if (ARExpandTy->isPointerTy()) {
|
||||
+ PointerType *ARPtrTy = cast<PointerType>(ARExpandTy);
|
||||
+ const SCEV *MulS = SE.getSCEV(MulV);
|
||||
+ const SCEV *const StepArray[2] = {MulS, SE.getNegativeSCEV(MulS)};
|
||||
+ Add = Builder.CreateBitCast(
|
||||
+ expandAddToGEP(&StepArray[0], &StepArray[1], ARPtrTy, Ty, StartValue),
|
||||
+ ARPtrTy);
|
||||
+ Sub = Builder.CreateBitCast(
|
||||
+ expandAddToGEP(&StepArray[1], &StepArray[2], ARPtrTy, Ty, StartValue),
|
||||
+ ARPtrTy);
|
||||
+ } else {
|
||||
+ Add = Builder.CreateAdd(StartValue, MulV);
|
||||
+ Sub = Builder.CreateSub(StartValue, MulV);
|
||||
+ }
|
||||
|
||||
Value *EndCompareGT = Builder.CreateICmp(
|
||||
Signed ? ICmpInst::ICMP_SGT : ICmpInst::ICMP_UGT, Sub, StartValue);
|
||||
diff --git a/test/Analysis/LoopAccessAnalysis/wrapping-pointer-ni.ll b/test/Analysis/LoopAccessAnalysis/wrapping-pointer-ni.ll
|
||||
new file mode 100644
|
||||
index 00000000000..ddcf5e1a195
|
||||
--- /dev/null
|
||||
+++ b/test/Analysis/LoopAccessAnalysis/wrapping-pointer-ni.ll
|
||||
@@ -0,0 +1,73 @@
|
||||
+; RUN: opt -loop-versioning -S < %s | FileCheck %s -check-prefix=LV
|
||||
+
|
||||
+; NB: addrspaces 10-13 are non-integral
|
||||
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128-ni:10:11:12:13"
|
||||
+
|
||||
+; This matches the test case from PR38290
|
||||
+; Check that we expand the SCEV predicate check using GEP, rather
|
||||
+; than ptrtoint.
|
||||
+
|
||||
+%jl_value_t = type opaque
|
||||
+%jl_array_t = type { i8 addrspace(13)*, i64, i16, i16, i32 }
|
||||
+
|
||||
+declare i64 @julia_steprange_last_4949()
|
||||
+
|
||||
+define void @"japi1_align!_9477"(%jl_value_t addrspace(10)**) #0 {
|
||||
+; LV-LAVEL: L26.lver.check
|
||||
+; LV: [[OFMul:%[^ ]*]] = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 4, i64 [[Step:%[^ ]*]])
|
||||
+; LV-NEXT: [[OFMulResult:%[^ ]*]] = extractvalue { i64, i1 } [[OFMul]], 0
|
||||
+; LV-NEXT: [[OFMulOverflow:%[^ ]*]] = extractvalue { i64, i1 } [[OFMul]], 1
|
||||
+; LV-NEXT: [[PosGEP:%[^ ]*]] = getelementptr i32, i32 addrspace(13)* [[Base:%[^ ]*]], i64 [[Step]]
|
||||
+; LV-NEXT: [[NegGEP:%[^ ]*]] = getelementptr i32, i32 addrspace(13)* [[Base]], i64 [[NegStep:%[^ ]*]]
|
||||
+; LV-NEXT: icmp ugt i32 addrspace(13)* [[NegGEP]], [[Base]]
|
||||
+; LV-NEXT: icmp ult i32 addrspace(13)* [[PosGEP]], [[Base]]
|
||||
+; LV-NOT: inttoptr
|
||||
+; LV-NOT: ptrtoint
|
||||
+top:
|
||||
+ %1 = load %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)** %0, align 8, !nonnull !1, !dereferenceable !2, !align !3
|
||||
+ %2 = load i32, i32* inttoptr (i64 12 to i32*), align 4, !tbaa !4
|
||||
+ %3 = sub i32 0, %2
|
||||
+ %4 = call i64 @julia_steprange_last_4949()
|
||||
+ %5 = addrspacecast %jl_value_t addrspace(10)* %1 to %jl_value_t addrspace(11)*
|
||||
+ %6 = bitcast %jl_value_t addrspace(11)* %5 to %jl_value_t addrspace(10)* addrspace(11)*
|
||||
+ %7 = load %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)* addrspace(11)* %6, align 8, !tbaa !4, !nonnull !1, !dereferenceable !9, !align !2
|
||||
+ %8 = addrspacecast %jl_value_t addrspace(10)* %7 to %jl_value_t addrspace(11)*
|
||||
+ %9 = bitcast %jl_value_t addrspace(11)* %8 to i32 addrspace(13)* addrspace(11)*
|
||||
+ %10 = load i32 addrspace(13)*, i32 addrspace(13)* addrspace(11)* %9, align 8, !tbaa !10, !nonnull !1
|
||||
+ %11 = sext i32 %3 to i64
|
||||
+ br label %L26
|
||||
+
|
||||
+L26: ; preds = %L26, %top
|
||||
+ %value_phi3 = phi i64 [ 0, %top ], [ %12, %L26 ]
|
||||
+ %12 = add i64 %value_phi3, -1
|
||||
+ %13 = getelementptr inbounds i32, i32 addrspace(13)* %10, i64 %12
|
||||
+ %14 = load i32, i32 addrspace(13)* %13, align 4, !tbaa !13
|
||||
+ %15 = add i64 %12, %11
|
||||
+ %16 = getelementptr inbounds i32, i32 addrspace(13)* %10, i64 %15
|
||||
+ store i32 %14, i32 addrspace(13)* %16, align 4, !tbaa !13
|
||||
+ %17 = icmp eq i64 %value_phi3, %4
|
||||
+ br i1 %17, label %L45, label %L26
|
||||
+
|
||||
+L45: ; preds = %L26
|
||||
+ ret void
|
||||
+}
|
||||
+
|
||||
+attributes #0 = { "thunk" }
|
||||
+
|
||||
+!llvm.module.flags = !{!0}
|
||||
+
|
||||
+!0 = !{i32 1, !"Debug Info Version", i32 3}
|
||||
+!1 = !{}
|
||||
+!2 = !{i64 16}
|
||||
+!3 = !{i64 8}
|
||||
+!4 = !{!5, !5, i64 0}
|
||||
+!5 = !{!"jtbaa_mutab", !6, i64 0}
|
||||
+!6 = !{!"jtbaa_value", !7, i64 0}
|
||||
+!7 = !{!"jtbaa_data", !8, i64 0}
|
||||
+!8 = !{!"jtbaa"}
|
||||
+!9 = !{i64 40}
|
||||
+!10 = !{!11, !11, i64 0}
|
||||
+!11 = !{!"jtbaa_arrayptr", !12, i64 0}
|
||||
+!12 = !{!"jtbaa_array", !8, i64 0}
|
||||
+!13 = !{!14, !14, i64 0}
|
||||
+!14 = !{!"jtbaa_arraybuf", !7, i64 0}
|
||||
diff --git a/test/Analysis/LoopAccessAnalysis/wrapping-pointer-versioning.ll b/test/Analysis/LoopAccessAnalysis/wrapping-pointer-versioning.ll
|
||||
index a7e5bce7445..fa6fccecbf1 100644
|
||||
--- a/test/Analysis/LoopAccessAnalysis/wrapping-pointer-versioning.ll
|
||||
+++ b/test/Analysis/LoopAccessAnalysis/wrapping-pointer-versioning.ll
|
||||
@@ -58,10 +58,10 @@ target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
|
||||
; LV-NEXT: [[OFMul1:%[^ ]*]] = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 4, i64 [[BE]])
|
||||
; LV-NEXT: [[OFMulResult1:%[^ ]*]] = extractvalue { i64, i1 } [[OFMul1]], 0
|
||||
; LV-NEXT: [[OFMulOverflow1:%[^ ]*]] = extractvalue { i64, i1 } [[OFMul1]], 1
|
||||
-; LV-NEXT: [[AddEnd1:%[^ ]*]] = add i64 %a2, [[OFMulResult1]]
|
||||
-; LV-NEXT: [[SubEnd1:%[^ ]*]] = sub i64 %a2, [[OFMulResult1]]
|
||||
-; LV-NEXT: [[CmpNeg1:%[^ ]*]] = icmp ugt i64 [[SubEnd1]], %a2
|
||||
-; LV-NEXT: [[CmpPos1:%[^ ]*]] = icmp ult i64 [[AddEnd1]], %a2
|
||||
+; LV-NEXT: [[AddEnd1:%[^ ]*]] = add i64 [[A0:%[^ ]*]], [[OFMulResult1]]
|
||||
+; LV-NEXT: [[SubEnd1:%[^ ]*]] = sub i64 [[A0]], [[OFMulResult1]]
|
||||
+; LV-NEXT: [[CmpNeg1:%[^ ]*]] = icmp ugt i64 [[SubEnd1]], [[A0]]
|
||||
+; LV-NEXT: [[CmpPos1:%[^ ]*]] = icmp ult i64 [[AddEnd1]], [[A0]]
|
||||
; LV-NEXT: [[Cmp:%[^ ]*]] = select i1 false, i1 [[CmpNeg1]], i1 [[CmpPos1]]
|
||||
; LV-NEXT: [[PredCheck1:%[^ ]*]] = or i1 [[Cmp]], [[OFMulOverflow1]]
|
||||
|
||||
@@ -233,10 +233,10 @@ for.end: ; preds = %for.body
|
||||
; LV: [[OFMul1:%[^ ]*]] = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 4, i64 [[BE:%[^ ]*]])
|
||||
; LV-NEXT: [[OFMulResult1:%[^ ]*]] = extractvalue { i64, i1 } [[OFMul1]], 0
|
||||
; LV-NEXT: [[OFMulOverflow1:%[^ ]*]] = extractvalue { i64, i1 } [[OFMul1]], 1
|
||||
-; LV-NEXT: [[AddEnd1:%[^ ]*]] = add i64 %a2, [[OFMulResult1]]
|
||||
-; LV-NEXT: [[SubEnd1:%[^ ]*]] = sub i64 %a2, [[OFMulResult1]]
|
||||
-; LV-NEXT: [[CmpNeg1:%[^ ]*]] = icmp ugt i64 [[SubEnd1]], %a2
|
||||
-; LV-NEXT: [[CmpPos1:%[^ ]*]] = icmp ult i64 [[AddEnd1]], %a2
|
||||
+; LV-NEXT: [[AddEnd1:%[^ ]*]] = add i64 [[A0:%[^ ]*]], [[OFMulResult1]]
|
||||
+; LV-NEXT: [[SubEnd1:%[^ ]*]] = sub i64 [[A0]], [[OFMulResult1]]
|
||||
+; LV-NEXT: [[CmpNeg1:%[^ ]*]] = icmp ugt i64 [[SubEnd1]], [[A0]]
|
||||
+; LV-NEXT: [[CmpPos1:%[^ ]*]] = icmp ult i64 [[AddEnd1]], [[A0]]
|
||||
; LV-NEXT: [[Cmp:%[^ ]*]] = select i1 false, i1 [[CmpNeg1]], i1 [[CmpPos1]]
|
||||
; LV-NEXT: [[PredCheck1:%[^ ]*]] = or i1 [[Cmp]], [[OFMulOverflow1]]
|
||||
|
45
debian/patches/llvm-rL323946-LSRTy.patch
vendored
Normal file
45
debian/patches/llvm-rL323946-LSRTy.patch
vendored
Normal file
@ -0,0 +1,45 @@
|
||||
commit ab60b05a472e8651cbe53c19513b7e62b9ff32df
|
||||
Author: Mikael Holmen <mikael.holmen@ericsson.com>
|
||||
Date: Thu Feb 1 06:38:34 2018 +0000
|
||||
|
||||
[LSR] Don't force bases of foldable formulae to the final type.
|
||||
|
||||
Summary:
|
||||
Before emitting code for scaled registers, we prevent
|
||||
SCEVExpander from hoisting any scaled addressing mode
|
||||
by emitting all the bases first. However, these bases
|
||||
are being forced to the final type, resulting in some
|
||||
odd code.
|
||||
|
||||
For example, if the type of the base is an integer and
|
||||
the final type is a pointer, we will emit an inttoptr
|
||||
for the base, a ptrtoint for the scale, and then a
|
||||
'reverse' GEP where the GEP pointer is actually the base
|
||||
integer and the index is the pointer. It's more intuitive
|
||||
to use the pointer as a pointer and the integer as index.
|
||||
|
||||
Patch by: Bevin Hansson
|
||||
|
||||
Reviewers: atrick, qcolombet, sanjoy
|
||||
|
||||
Reviewed By: qcolombet
|
||||
|
||||
Subscribers: llvm-commits
|
||||
|
||||
Differential Revision: https://reviews.llvm.org/D42103
|
||||
|
||||
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@323946 91177308-0d34-0410-b5e6-96231b3b80d8
|
||||
|
||||
diff --git a/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/lib/Transforms/Scalar/LoopStrengthReduce.cpp
|
||||
index 332c074a1df..4b8e2286ed9 100644
|
||||
--- a/lib/Transforms/Scalar/LoopStrengthReduce.cpp
|
||||
+++ b/lib/Transforms/Scalar/LoopStrengthReduce.cpp
|
||||
@@ -4993,7 +4993,7 @@ Value *LSRInstance::Expand(const LSRUse &LU, const LSRFixup &LF,
|
||||
// Unless the addressing mode will not be folded.
|
||||
if (!Ops.empty() && LU.Kind == LSRUse::Address &&
|
||||
isAMCompletelyFolded(TTI, LU, F)) {
|
||||
- Value *FullV = Rewriter.expandCodeFor(SE.getAddExpr(Ops), Ty);
|
||||
+ Value *FullV = Rewriter.expandCodeFor(SE.getAddExpr(Ops), nullptr);
|
||||
Ops.clear();
|
||||
Ops.push_back(SE.getUnknown(FullV));
|
||||
}
|
3
debian/patches/series
vendored
3
debian/patches/series
vendored
@ -12,7 +12,8 @@ silent-gold-test.diff
|
||||
atomic_library_1.diff
|
||||
python-clangpath.diff
|
||||
fix-clang-path-and-build.diff
|
||||
force-gcc-header-obj.diff
|
||||
# commented because of bug 903709
|
||||
#force-gcc-header-obj.diff
|
||||
do-not-fail-on-unexpected-pass.diff
|
||||
silent-more-tests.diff
|
||||
disable-display-PASS-UNSUPPORTED-XFAIL.diff
|
||||
|
16
debian/rules
vendored
16
debian/rules
vendored
@ -338,7 +338,6 @@ LIBCXX_CMAKE_OPTIONS := \
|
||||
-DCMAKE_C_COMPILER=$(CURDIR)/$(TARGET_BUILD)/bin/clang \
|
||||
-DLLVM_EXTERNAL_LIT=$(BASE_PATH)/utils/lit/lit.py
|
||||
|
||||
|
||||
override_dh_auto_build:
|
||||
$(PRE_PROCESS) $(MAKE) $(NJOBS) -C $(TARGET_BUILD) VERBOSE=1 CLANG_VENDOR=$(VENDOR) CXXFLAGS="$(CXXFLAGS_EXTRA)" LDFLAGS="$(LDFLAGS_EXTRA)" REQUIRES_RTTI=1 DEBUGMAKE=1
|
||||
ifeq (${LIBFUZZER_ENABLE},yes)
|
||||
@ -350,7 +349,7 @@ ifeq (${LIBFUZZER_ENABLE},yes)
|
||||
ar ruv libFuzzer.a Fuzzer*.o
|
||||
endif
|
||||
|
||||
# Builds libcxx and libcxxabi
|
||||
# Builds libcxx and libcxxabi
|
||||
|
||||
mkdir -p libcxxabi/build
|
||||
mkdir -p libcxx/build
|
||||
@ -360,8 +359,10 @@ endif
|
||||
$(LIBCXX_CMAKE_OPTIONS) \
|
||||
-DLIBCXXABI_LIBCXX_PATH=$(BASE_PATH)/libcxx \
|
||||
-DLIBCXXABI_LIBCXX_LIBRARY_PATH=$(BASE_PATH)/libcxx/build/lib \
|
||||
-DLIBCXXABI_LIBCXX_INCLUDES=$(BASE_PATH)/libcxx/include \
|
||||
-DLIBCXXABI_ENABLE_EXCEPTIONS=$(LIBCXX_EXCEPTIONS) \
|
||||
-DLLVM_ENABLE_RTTI=ON
|
||||
-DLLVM_ENABLE_RTTI=ON && \
|
||||
$(MAKE) $(NJOBS) VERBOSE=1
|
||||
|
||||
cd libcxx/build && \
|
||||
cmake ../ \
|
||||
@ -370,7 +371,8 @@ endif
|
||||
-DLIBCXX_CXX_ABI_INCLUDE_PATHS=$(BASE_PATH)/libcxxabi/include \
|
||||
-DLIBCXX_CXX_ABI_LIBRARY_PATH=$(BASE_PATH)/libcxxabi/build/lib \
|
||||
-DLIBCXX_ENABLE_EXCEPTIONS=$(LIBCXX_EXCEPTIONS) \
|
||||
-DLIBCXX_INSTALL_EXPERIMENTAL_LIBRARY=ON
|
||||
-DLIBCXX_INSTALL_EXPERIMENTAL_LIBRARY=ON && \
|
||||
$(MAKE) $(NJOBS) VERBOSE=1
|
||||
|
||||
override_dh_prep: build_doc
|
||||
dh_prep
|
||||
@ -430,6 +432,8 @@ override_dh_auto_install:
|
||||
|
||||
# Only run on executable, not script
|
||||
chrpath -d `find $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/ -type f -executable -exec file -i '{}' \; | grep 'x-executable; charset=binary'|cut -d: -f1`
|
||||
chrpath -d libcxxabi/build/lib/libc++abi.so.1.0
|
||||
chrpath -d libcxx/build/lib/libc++.so.1.0
|
||||
|
||||
cd debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib/ && rm -f libclang.so.$(SONAME_EXT) libclang-$(LLVM_VERSION).so; \
|
||||
ln -s libclang-$(LLVM_VERSION).so.$(SONAME_EXT) libclang.so.$(SONAME_EXT)
|
||||
@ -440,7 +444,7 @@ override_dh_auto_install:
|
||||
mkdir -p debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/include/openmp
|
||||
cp openmp/runtime/exports/common.dia.50.ompt.optional/include/* debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/include/openmp
|
||||
|
||||
# Remove artefact (where compiler-rt is built)
|
||||
# Remove artifact (where compiler-rt is built)
|
||||
# if test -d $(TARGET_BUILD)/tools/clang/runtime/compiler-rt/clang_linux; then \
|
||||
# cd $(TARGET_BUILD)/tools/clang/runtime/compiler-rt/clang_linux && rm -rf $$(find . -mindepth 2 -maxdepth 2 -type d) && rm -rf $$(find -empty) && rm -rf */.dir; \
|
||||
# fi
|
||||
@ -559,7 +563,7 @@ endif
|
||||
|
||||
# Delete the target build directory to save some space on the build systems
|
||||
# All the files have been installed in $(CURDIR)/debian/tmp/ already
|
||||
# rm -rf $(TARGET_BUILD)
|
||||
rm -rf $(TARGET_BUILD)
|
||||
|
||||
|
||||
override_dh_makeshlibs:
|
||||
|
Loading…
Reference in New Issue
Block a user