|  | Commit message (Collapse) | Author | Age | Files | Lines | 
|---|
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | emit call results into potentially aliased slots.  This allows us
to properly mark indirect return slots as noalias, at the cost
of requiring an extra memcpy when assigning an aggregate call
result into a l-value.  It also brings us into compliance with
the x86-64 ABI.
llvm-svn: 138599 | 
| | 
| 
| 
| 
| 
| 
| | creators to tell us whether something needs GC barriers.
No functionality change.
llvm-svn: 138581 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | hierarchy of delegation, and that EH selector values are meaningful
function-wide (good thing, too, or inlining wouldn't work).
2,3d
1a
hierarchy of delegation and that EH selector values have the same
meaning everywhere in the function instead of being meaningful only
in the context of a specific selector.
This removes the need for routing edges through EH cleanups,
since a cleanup simply always branches to its enclosing scope.
llvm-svn: 137293 | 
| | 
| 
| 
| 
| 
| | Mulder!
llvm-svn: 135855 | 
| | 
| 
| 
| | llvm-svn: 135577 | 
| | 
| 
| 
| 
| 
| 
| | some common llvm types: stringref and smallvector.  This cleans up the codebase
quite a bit.
llvm-svn: 135576 | 
| | 
| 
| 
| | llvm-svn: 135370 | 
| | 
| 
| 
| | llvm-svn: 135265 | 
| | 
| 
| 
| 
| 
| | them, too.
llvm-svn: 135038 | 
| | 
| 
| 
| | llvm-svn: 135029 | 
| | 
| 
| 
| 
| 
| 
| | storage duration, then explicitly exempt ownership-qualified
types from it.
llvm-svn: 135028 | 
| | 
| 
| 
| 
| 
| | of flags.  No functionality change.
llvm-svn: 134997 | 
| | 
| 
| 
| 
| 
| | and kill a lot of redundant code.
llvm-svn: 134988 | 
| | 
| 
| 
| 
| 
| | fixes the -m32 build of oggenc.
llvm-svn: 134971 | 
| | 
| 
| 
| 
| 
| | people write useful cleanup classes.
llvm-svn: 134942 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | - an off-by-one error in emission of irregular array limits for
   InitListExprs
 - use an EH partial-destruction cleanup within the normal
   array-destruction cleanup
 - get the branch destinations right for the empty check
Also some refactoring which unfortunately obscures these changes.
llvm-svn: 134890 | 
| | 
| 
| 
| | llvm-svn: 134831 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | - Emit default-initialization of arrays that were partially initialized
    with initializer lists with a loop, rather than emitting the default
    initializer N times;
  - support destroying VLAs of non-trivial type, although this is not
    yet exposed to users; and
  - support the partial destruction of arrays initialized with
    initializer lists when an initializer throws an exception.
llvm-svn: 134784 | 
| | 
| 
| 
| 
| 
| | by removing the redundant type parameter.
llvm-svn: 133860 | 
| | 
| 
| 
| 
| 
| 
| | in the variable to an inline asm which gets run when the variable
goes out of scope.
llvm-svn: 133840 | 
| | 
| 
| 
| 
| 
| 
| | not sizes;  so that we use well-typed allocas;  and so that we
properly recurse through the full set of variably-modified types.
llvm-svn: 133827 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| | retain/release the temporary object appropriately. Previously, we
would only perform the retain/release operations when the reference
would extend the lifetime of the temporary, but this does the wrong
thing across calls.
llvm-svn: 133620 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | existence by always threading an edge from the catchall.  Not doing
this was previously causing a crash in the very extreme case where
neither the normal cleanup nor the EH catchall was actually reachable:
we would delete the catchall entry block, which would cause us to
delete the entry block of the finally cleanup as well because the
cleanup logic would merge the blocks, which in turn triggered an assert
because later blocks in the finally would still be using values from the
entry.  Laziness turns out to be the most elegant solution to the problem.
llvm-svn: 133601 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | MaterializeTemporaryExpr captures a reference binding to a temporary
value, making explicit that the temporary value (a prvalue) needs to
be materialized into memory so that its address can be used. The
intended AST invariant here is that a reference will always bind to a
glvalue, and MaterializeTemporaryExpr will be used to convert prvalues
into glvalues for that binding to happen. For example, given
  const int& r = 1.0;
The initializer of "r" will be a MaterializeTemporaryExpr whose
subexpression is an implicit conversion from the double literal "1.0"
to an integer value. 
IR generation benefits most from this new node, since it was
previously guessing (badly) when to materialize temporaries for the
purposes of reference binding. There are likely more refactoring and
cleanups we could perform there, but the introduction of
MaterializeTemporaryExpr fixes PR9565, a case where IR generation
would effectively bind a const reference directly to a bitfield in a
struct. Addresses <rdar://problem/9552231>.
llvm-svn: 133521 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | they should still be officially __strong for the purposes of errors, 
block capture, etc.  Make a new bit on variables, isARCPseudoStrong(),
and set this for 'self' and these enumeration-loop variables.  Change
the code that was looking for the old patterns to look for this bit,
and change IR generation to find this bit and treat the resulting         
variable as __unsafe_unretained for the purposes of init/destroy in
the two places it can come up.
llvm-svn: 133243 | 
| | 
| 
| 
| | llvm-svn: 133144 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | Language-design credit goes to a lot of people, but I particularly want
to single out Blaine Garst and Patrick Beard for their contributions.
Compiler implementation credit goes to Argyrios, Doug, Fariborz, and myself,
in no particular order.
llvm-svn: 133103 | 
| | 
| 
| 
| 
| 
| | It's quite likely that this will explode, but I need to know how. :)
llvm-svn: 132269 | 
| | 
| 
| 
| | llvm-svn: 132219 | 
| | 
| 
| 
| 
| 
| 
| 
| | to be careful to emit landing pads that are always prepared to handle a
cleanup path.  This is correct mostly because of the fix to the LLVM
inliner, r132200.
llvm-svn: 132209 | 
| | 
| 
| 
| | llvm-svn: 131701 | 
| | 
| 
| 
| 
| 
| | hasAggregateLLVMType.
llvm-svn: 131375 | 
| | 
| 
| 
| 
| 
| | function in CGClass.cpp
llvm-svn: 131075 | 
| | 
| 
| 
| 
| 
| | a bit messy, but it is correct as long as the method in question doesn't use indirect gotos.  A couple of possible alternative implementations are outlined in FIXME's in this patch. rdar://problem/8077308 .
llvm-svn: 130993 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | As far as I know, this implementation is complete but might be missing a
few optimizations. Exceptions and virtual bases are handled correctly.
Because I'm an optimist, the web page has appropriately been updated. If
I'm wrong, feel free to downgrade its support categories.
llvm-svn: 130642 | 
| | 
| 
| 
| 
| 
| 
| 
| | empty IR block,
a -O0 code quality issue.
llvm-svn: 129652 | 
| | 
| 
| 
| 
| 
| | Luis Felipe Strano Moraes!
llvm-svn: 129559 | 
| | 
| 
| 
| 
| 
| | draft standard (N3291).
llvm-svn: 129541 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | __block object copy/dispose helpers for C++ objects with those for
different variables with completely different semantics simply because
they happen to both be no more aligned than a pointer.
Found by inspection.
Also, internalize most of the helper generation logic within CGBlocks.cpp,
and refactor it to fit my peculiar aesthetic sense.
llvm-svn: 128618 | 
| | 
| 
| 
| 
| 
| | change.
llvm-svn: 128608 | 
| | 
| 
| 
| 
| 
| | CharUnits. No change in functionality intended.
llvm-svn: 128129 | 
| | 
| 
| 
| | llvm-svn: 127494 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | simplify the logic of initializing function parameters so that we don't need
both a variable declaration and a type in FunctionArgList.  This also means
that we need to propagate the CGFunctionInfo down in a lot of places rather
than recalculating it from the FAL.  There's more we can do to eliminate
redundancy here, and I've left FIXMEs behind to do it.
llvm-svn: 127314 | 
| | 
| 
| 
| 
| 
| | for a local variable.
llvm-svn: 127227 | 
| | 
| 
| 
| 
| 
| | attribute). However, at module level it is determined by command line option and the state of command line option does not change during compilation. Make this layering explicit and fix accidental cases where the code generator was checking whether module has debug info enabled instead of checking whether debug info is enabled for this function or not.
llvm-svn: 127165 | 
| | 
| 
| 
| 
| 
| 
| 
| | in order.
This fixes few blocks.exp regressions.
llvm-svn: 126960 | 
| | 
| 
| 
| 
| 
| | This reverts commit 126863.
llvm-svn: 126886 | 
| | 
| 
| 
| | llvm-svn: 126874 | 
| | 
| 
| 
| | llvm-svn: 126863 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | in order.
This fixes few blocks.exp regressions.
Reapply r126795 with a fix (one character change) for gdb testsuite regressions.
llvm-svn: 126858 |