| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 161286
|
| |
|
|
|
|
| |
TwoAddressInstructionPass doesn't remat any more.
llvm-svn: 161285
|
| |
|
|
| |
llvm-svn: 161284
|
| |
|
|
|
|
|
|
|
|
| |
Like base constructors, delegating constructors require no further
processing in the CFGInitializer node.
Also, add PrettyStackTraceLoc to the initializer and destructor logic
so we can get better stack traces in the future.
llvm-svn: 161283
|
| |
|
|
|
|
|
|
|
| |
This patch is mostly just refactoring a bunch of copy-and-pasted code, but
it also adds a check that the call instructions are readnone or readonly.
That check was already present for sin, cos, sqrt, log2, and exp2 calls, but
it was missing for the rest of the builtins being handled in this code.
llvm-svn: 161282
|
| |
|
|
|
|
|
| |
No functional change intended, except replacing a DenseMap with a
SmallDenseMap which should behave identically.
llvm-svn: 161281
|
| |
|
|
|
|
|
|
| |
Because of this, we would previously emit NO path notes when a parameter
is constrained to null (because there are no stores). Now we show where we
made the assumption, which is much more useful.
llvm-svn: 161280
|
| |
|
|
| |
llvm-svn: 161279
|
| |
|
|
| |
llvm-svn: 161278
|
| |
|
|
| |
llvm-svn: 161277
|
| |
|
|
|
|
|
|
|
|
|
| |
The visitor walks back through the ExplodedGraph as expected, but
it wasn't actually keeping track of when a value was assigned. This
meant that it only worked when the value was assigned when the variable
was defined.
Tests in the next commit (dependent on another change).
llvm-svn: 161276
|
| |
|
|
|
|
|
| |
This only applies in the case where ->* is not overloaded, since it
specifically looks for BinaryOperator and not CXXOperatorCallExpr.
llvm-svn: 161275
|
| |
|
|
| |
llvm-svn: 161274
|
| |
|
|
|
|
|
| |
This is far from complete, and only changes behavior when the
-early-live-intervals flag is passed to llc.
llvm-svn: 161273
|
| |
|
|
|
|
|
|
|
| |
Change these to patterns.
2. Add another 16 instructions.
Patch by Reed Kotler.
llvm-svn: 161272
|
| |
|
|
|
|
| |
that involve po'ing objects do not cause an endless recursion
llvm-svn: 161271
|
| |
|
|
|
|
|
|
|
|
| |
This option runs LiveIntervals before TwoAddressInstructionPass which
will eventually learn to exploit and update the analysis.
Eventually, LiveIntervals will run before PHIElimination, and we can get
rid of LiveVariables.
llvm-svn: 161270
|
| |
|
|
|
|
|
| |
Previously, the identity copy would survive through register allocation
before it was removed by the rewriter.
llvm-svn: 161269
|
| |
|
|
|
|
|
|
|
| |
substitution forward references. That is, sometimes a mangled name refers to
a substitution that hasn't yet been defined. The demangler was derferencing a
null pointer in this case because it wasn't properly guarded against a
forward reference. Test case added to catch this problem.
llvm-svn: 161267
|
| |
|
|
| |
llvm-svn: 161266
|
| |
|
|
| |
llvm-svn: 161265
|
| |
|
|
|
|
|
|
|
|
|
| |
In the following code, find the type of the symbolic receiver by
following it and updating the dynamic type info in the state when we
cast the symbol from id to MyClass *.
MyClass *a = [[self alloc] init];
return 5/[a testSelf];
llvm-svn: 161264
|
| |
|
|
|
|
|
|
|
|
|
|
| |
The previous change caused fast isel to not attempt handling any calls to
builtin functions. That included things like "printf" and caused some
noticable regressions in compile time. I wanted to avoid having fast isel
keep a separate list of functions that had to be kept in sync with what the
code in SelectionDAGBuilder.cpp was handling. I've resolved that here by
moving the list into TargetLibraryInfo. This is somewhat redundant in
SelectionDAGBuilder but it will ensure that we keep things consistent.
llvm-svn: 161263
|
| |
|
|
|
|
|
|
|
| |
I noticed that SelectionDAGBuilder::visitCall was missing a check for memcmp
in TargetLibraryInfo, so that it would use custom code for memcmp calls even
with -fno-builtin. I also had to add a new -disable-simplify-libcalls option
to llc so that I could write a test for this.
llvm-svn: 161262
|
| |
|
|
|
|
| |
the function returns void.
llvm-svn: 161261
|
| |
|
|
|
|
| |
non-type template parameter pack. Patch by Andy Gibbs!
llvm-svn: 161260
|
| |
|
|
|
|
|
|
| |
The 'unused' state of a value number can be represented as an invalid
def SlotIndex. This also exposed code that shouldn't have been looking
at unused value VNInfos.
llvm-svn: 161258
|
| |
|
|
|
|
|
| |
Unused VNInfos should be left alone. Their def SlotIndex doesn't point
to anything.
llvm-svn: 161257
|
| |
|
|
| |
llvm-svn: 161256
|
| |
|
|
|
|
|
|
|
|
| |
The only real user of the flag was removeCopyByCommutingDef(), and it
has been switched to LiveIntervals::hasPHIKill().
All the code changed by this patch was only concerned with computing and
propagating the flag.
llvm-svn: 161255
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
The VNInfo::HAS_PHI_KILL is only half supported. We precompute it in
LiveIntervalAnalysis, but it isn't properly updated by live range
splitting and functions like shrinkToUses().
It is only used in one place: RegisterCoalescer::removeCopyByCommutingDef().
This patch changes that function to use a new LiveIntervals::hasPHIKill()
function that computes the flag for a given value number.
llvm-svn: 161254
|
| |
|
|
|
|
| |
while building as requested by Lang.
llvm-svn: 161253
|
| |
|
|
|
|
| |
commit code in clang that uses this shortly.
llvm-svn: 161252
|
| |
|
|
|
|
| |
rdar://11366674
llvm-svn: 161251
|
| |
|
|
| |
llvm-svn: 161250
|
| |
|
|
| |
llvm-svn: 161249
|
| |
|
|
|
|
|
|
|
|
| |
There is no reason why we should not track the memory which was not
allocated in the current function, but was freed there. This would
allow to catch more use-after-free and double free with no/limited IPA.
Also fix a realloc issue which surfaced as the result of this patch.
llvm-svn: 161248
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
rotate is a critical algorithm because it is often used by other algorithms,
both std and non-std. The main thrust of this optimization is a specialized
algorithm when the 'distance' to be shifted is 1 (either left or right). To my
surprise, this 'optimization' was not effective for types like std::string.
std::string favors rotate algorithms which only use swap. But for types like
scalars, and especially when the sequence is random access, these new
specializations are a big win. If it is a vector<size_t> for example, the
rotate is done via a memmove and can be several times faster than the gcd
algorithm.
I'm using is_trivially_move_assignable to distinguish between types like int and
types like string. This is obviously an ad-hoc approximation, but I haven't
found a case where it doesn't give good results.
I've used a 'static if' (with is_trivially_move_assignable) in three places.
Testing with both -Os and -O3 showed that clang eliminated all code not be
executed by the 'static if' (including the 'static if' itself).
llvm-svn: 161247
|
| |
|
|
|
|
| |
packages for particular uses.
llvm-svn: 161246
|
| |
|
|
| |
llvm-svn: 161245
|
| |
|
|
| |
llvm-svn: 161244
|
| |
|
|
| |
llvm-svn: 161243
|
| |
|
|
| |
llvm-svn: 161242
|
| |
|
|
|
|
|
| |
This functionality was added before we started running
DeadMachineInstructionElim on all targets. It serves no purpose now.
llvm-svn: 161241
|
| |
|
|
|
|
|
|
| |
this makes this hack a bit more bearable
for poor souls who need to pass custom
preprocessor flags to the build process
llvm-svn: 161240
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Translate the selected parallel loop body into a ptx string and run it with the
cuda driver API. We limit this preliminary implementation to target the
following special test cases:
- Support only 2-dimensional parallel loops with or without only one innermost
non-parallel loop.
- Support write memory access to only one array in a SCoP.
The patch was committed with smaller changes to the build system:
There is now a flag to enable gpu code generation explictly. This was required
as we need the llvm.codegen() patch applied on the llvm sources, to compile this
feature correctly. Also, enabling gpu code generation does not require cuda.
This requirement was removed to allow 'make polly-test' runs, even without an
installed cuda runtime.
Contributed by: Yabin Hu <yabin.hwu@gmail.com>
llvm-svn: 161239
|
| |
|
|
| |
llvm-svn: 161237
|
| |
|
|
|
|
|
|
|
|
|
| |
By C++ standard, the vtable should be generated if the first non-inline
virtual function is defined in the TU. Current version of clang doesn't
generate vtable if the first virtual function is defaulted, because the
key function is regarded as the defaulted function.
Patch by Li Kan!
llvm-svn: 161236
|
| |
|
|
|
|
|
|
|
| |
This fixes a conflict between polly::createIndVarSimplifyPass() and
llvm::createIndVarSimplifyPass(), which causes problems on windows.
Reported by: Michael Kruse <MichaelKruse@meinersbur.de
llvm-svn: 161235
|
| |
|
|
|
|
|
|
|
|
| |
The Apple linker fails by default, if some function calls can not be resolved at
link time. However, all functions that are part of LLVM itself will not be
linked into Polly, but will be provided by the compiler that Polly is loaded
into. Hence, during linking we need to ignore failures due to unresolved
function calls.
llvm-svn: 161234
|