Fork of llvm with experimental commits and workarounds for RPCS3
Go to file
Peter Collingbourne 42b450c977 Introduce an optimisation for special case lists with large numbers of literal entries.
Our internal regex implementation does not cope with large numbers
of anchors very efficiently.  Given a ~3600-entry special case list,
regex compilation can take on the order of seconds.  This patch solves
the problem for the special case of patterns matching literal global
names (i.e. patterns with no regex metacharacters).  Rather than
forming regexes from literal global name patterns, add them to
a StringSet which is checked before matching against the regex.
This reduces regex compilation time by an order of roughly thousands
when reading the aforementioned special case list, according to a
completely unscientific study.

No test cases.  I figure that any new tests for this code should
check that regex metacharacters are properly recognised.  However,
I could not find any documentation which documents the fact that the
syntax of global names in special case lists is based on regexes.
The extent to which regex syntax is supported in special case lists
should probably be decided on/documented before writing tests.

Differential Revision: http://llvm-reviews.chandlerc.com/D1150

llvm-svn: 187732
2013-08-05 17:48:04 +00:00
autoconf Link with -rdynamic instead of -Wl,-export-dynamic. 2013-08-02 22:51:06 +00:00
bindings
cmake Pass -G argument to cmake with the same generator's name as used for the 2013-08-01 18:04:07 +00:00
docs Update the release notes about the status of the vectorizers. 2013-08-05 04:31:05 +00:00
examples ExceptionDemo.cpp: Tweak a @param. [-Wdocumentation] 2013-07-29 11:03:50 +00:00
include Introduce an optimisation for special case lists with large numbers of literal entries. 2013-08-05 17:48:04 +00:00
lib Introduce an optimisation for special case lists with large numbers of literal entries. 2013-08-05 17:48:04 +00:00
projects Build with the $RDYNAMIC flag on Darwin as well as other platforms. 2013-08-04 22:06:11 +00:00
runtime Use @rpath for libraries rather than @executable_path on OSX. 2013-08-02 01:51:52 +00:00
test LLVM Interpreter: This patch implements vector support for cast operations (zext, sext, uitofp, sitofp, trunc, fpext, fptosi, fptrunc, bitcast) and shift operations (shl, ashr, lshr) for integer and floating point data types. 2013-08-05 12:17:06 +00:00
tools Unbreak llvm-rtdyld build. 2013-08-03 22:18:45 +00:00
unittests Introduce Regex::isLiteralERE function. 2013-08-05 17:47:59 +00:00
utils Fix handling of CHECK-DAG combined with CHECK-NOT 2013-08-02 11:32:50 +00:00
.arcconfig
.gitignore
CMakeLists.txt Add capability for building with -gsplit-dwarf to the cmake build. 2013-07-30 21:44:10 +00:00
CODE_OWNERS.TXT
configure Regenerate with changes for -rdynamic. 2013-08-02 22:51:11 +00:00
CREDITS.TXT
LICENSE.TXT
llvm.spec.in
LLVMBuild.txt
Makefile
Makefile.common
Makefile.config.in
Makefile.rules Build with the $RDYNAMIC flag on Darwin as well as other platforms. 2013-08-04 22:06:11 +00:00
README.txt

Low Level Virtual Machine (LLVM)
================================

This directory and its subdirectories contain source code for the Low Level
Virtual Machine, a toolkit for the construction of highly optimized compilers,
optimizers, and runtime environments.

LLVM is open source software. You may freely distribute it under the terms of
the license agreement found in LICENSE.txt.

Please see the documentation provided in docs/ for further
assistance with LLVM, and in particular docs/GettingStarted.rst for getting
started with LLVM and docs/README.txt for an overview of LLVM's
documentation setup.

If you're writing a package for LLVM, see docs/Packaging.rst for our
suggestions.