| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
crashes.
llvm-svn: 61992
|
|
|
|
|
|
|
|
|
|
|
|
| |
Emit the size even if the declared type is a variably modified type. This lets us handle
void f(int n) {
int (*a)[n];
printf("size: %d\n", sizeof(*a));
}
llvm-svn: 61285
|
|
|
|
| |
llvm-svn: 61284
|
|
|
|
|
|
| |
ivars.
llvm-svn: 61043
|
|
|
|
|
|
| |
when a break/continue won't cross a try block.
llvm-svn: 60998
|
|
|
|
| |
llvm-svn: 60939
|
|
|
|
|
|
| |
(Saving the stack isn't implemented right now :)
llvm-svn: 60925
|
|
|
|
|
|
|
| |
the synthesis is in an implementation of s subclass of
a super class where the property has been declared.
llvm-svn: 60792
|
|
|
|
| |
llvm-svn: 59886
|
|
|
|
|
|
|
| |
Issuing diagnostics when assigning to read-only properties.
This is work in progress.
llvm-svn: 59874
|
|
|
|
|
|
| |
to static function. Added comments.
llvm-svn: 59738
|
|
|
|
|
|
|
| |
diagnostics on use of __weak attribute on fields,
Early support for read/write barriers for objc fields.
llvm-svn: 59682
|
|
|
|
|
|
|
|
|
| |
value).
- Use extra argument to EmitStoreThroughLValue to provide place to
write update bit-field value if caller requires it.
- This fixes several FIXMEs.
llvm-svn: 59615
|
|
|
|
|
|
| |
Patch by Fariborz!
llvm-svn: 59377
|
|
|
|
|
|
|
|
|
|
| |
- Indicates that caller is done with the block and it can be dropped
if it has no predecessors. Useful for callers who need to make
landing pads but which may not be reached.
No functionality change.
llvm-svn: 59207
|
|
|
|
| |
llvm-svn: 59127
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Split out "simple" statements which can easily handle IR generation
when there is no insert point. These are generally statements which
start by emitting a new block or are only containers for other
statements.
- This fixes a regression in emitting dummy blocks, notably for case
statements.
- This also fixes spurious emission of a number of debug stoppoint
intrinsic instructions.
Remove unneeded sw.body block, just clear the insertion point.
Lift out CodeGenFunction::EmitStopPoint which calls into the
CGDebugInfo class when generating debug info.
Normalize definitions of Emit{Break,Continue}Stmt and usage of
ErrorUnsupported.
llvm-svn: 59118
|
|
|
|
|
|
|
|
|
|
| |
CodeGenFunction.cpp. Change VisitConditionalOperator to use
constant fold instead of codegen'ing a constant conditional.
Change ForStmt to use EmitBranchOnBoolExpr, this shrinks
expr.c very slightly to 40239 lines.
llvm-svn: 59113
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
have a condition that is an &&/||. Before we used to compile things like this:
int test() {
if (x && y) foo(); else bar();
}
into:
%0 = load i32* @x ; <i32> [#uses=1]
%1 = icmp ne i32 %0, 0 ; <i1> [#uses=1]
br i1 %1, label %land_rhs, label %land_cont
land_rhs: ; preds = %entry
%2 = load i32* @y ; <i32> [#uses=1]
%3 = icmp ne i32 %2, 0 ; <i1> [#uses=1]
br label %land_cont
land_cont: ; preds = %land_rhs, %entry
%4 = phi i1 [ false, %entry ], [ %3, %land_rhs ] ; <i1> [#uses=1]
br i1 %4, label %ifthen, label %ifelse
ifthen: ; preds = %land_cont
%call = call i32 (...)* @foo() ; <i32> [#uses=0]
br label %ifend
ifelse: ; preds = %land_cont
%call1 = call i32 (...)* @bar() ; <i32> [#uses=0]
br label %ifend
ifend: ; preds = %ifelse, %ifthen
Now we turn it into the much more svelte code:
%0 = load i32* @x ; <i32> [#uses=1]
%1 = icmp ne i32 %0, 0 ; <i1> [#uses=1]
br i1 %1, label %land_lhs_true, label %ifelse
land_lhs_true: ; preds = %entry
%2 = load i32* @y ; <i32> [#uses=1]
%3 = icmp ne i32 %2, 0 ; <i1> [#uses=1]
br i1 %3, label %ifthen, label %ifelse
ifthen: ; preds = %land_lhs_true
%call = call i32 (...)* @foo() ; <i32> [#uses=0]
br label %ifend
ifelse: ; preds = %land_lhs_true, %entry
%call1 = call i32 (...)* @bar() ; <i32> [#uses=0]
br label %ifend
ifend: ; preds = %ifelse, %ifthen
Note the lack of a phi node.
This shrinks the -O0 .ll file for 176.gcc/expr.c from 43176 to 40267 lines.
llvm-svn: 59111
|
|
|
|
|
|
|
| |
Revert to enabling generation of instruction names when not in NDEBUG
mode.
llvm-svn: 59094
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- EmitStmt is no longer required to finish with a current insertion
point defined (i.e. it does not need to make dummy
blocks). Instead, it can clear the insertion point in the builder
which indicates that the current insertion point is unreachable.
- CodeGenFunction provides HaveInsertPoint and EnsureInsertPoint
which respectively test if there is an insert point and ensure an
insertion point exists (by making a dummy block).
- Clearly mark functions in CodeGenFunction which can be called with
no insertion point defined. Currently this is a limited set, and
EmitStmt simply EnsureInsertPoint()s before emitting subsequent IR.
Remove EmitDummyBlock, which is no longer needed. Clients who haven't
already cleared the insertion point (typically via EmitBranch) can do
so by hand.
Remove isDummyBlock, which has effectively been renamed to
HaveInsertPoint.
The main thrust of this change is that we no longer have create dummy
blocks just to destroy them a short time later in EmitBlock in the
common case that there is no unreachable code following something like
a goto.
Additionally, this means that we are not using the hokey condition in
isDummyBlock that a block without a name is a dummy block. Guess how
well that works when we never emit block names!
llvm-svn: 59089
|
|
|
|
|
|
| |
invariants.
llvm-svn: 59085
|
|
|
|
|
|
|
| |
- Emits an unconditional branch, with extra logic to avoid generating
spurious branches out of dummy blocks.
llvm-svn: 59037
|
|
|
|
|
|
|
|
| |
the size of the -O0 output on some cases. For example, on expr.c from
176.gcc, it shrinks the .ll file from 43164 to 42835 lines, and removed
references to two external symbols.
llvm-svn: 59034
|
|
|
|
|
|
|
| |
"dummy" blocks (blocks just used to make sure we have a place to dump
code to).
llvm-svn: 59022
|
|
|
|
|
|
| |
- No functionality change.
llvm-svn: 59017
|
|
|
|
|
|
| |
'super'. Remove ObjCThis from PredefinedExpr
llvm-svn: 58698
|
|
|
|
|
|
| |
now).
llvm-svn: 58681
|
|
|
|
|
|
| |
- No functionality change.
llvm-svn: 58546
|
|
|
|
|
|
| |
for Obj-C methods.
llvm-svn: 57769
|
|
|
|
|
|
|
| |
- Shouldn't assume predefined expr is a function printing one.
- Uses CGM functionality to cache function names per module.
llvm-svn: 57737
|
|
|
|
| |
llvm-svn: 57335
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Provides a basic primitive to jump to an arbitrary basic block,
through the finally code.
- Only used for return statements and rethrow currently. Still need
to handle break, continue and goto.
- Code still needs to be shuffled around to live elsewhere.
llvm-svn: 56827
|
|
|
|
|
|
| |
Comment exception-handling code generation strategy.
llvm-svn: 56763
|
|
|
|
|
|
|
|
|
|
| |
- Add CodeGenFunction::{EmitReturnOfRValue, EmitIvarOffset}
- Factor EmitLValueForIvar out of EmitObjCIvarRefLValue.
No non-error functionality change (some unsupported errors are
degraded to asserts for the time being).
llvm-svn: 56543
|
|
|
|
|
|
| |
- No functionality change.
llvm-svn: 56269
|
|
|
|
| |
llvm-svn: 56102
|
|
|
|
| |
llvm-svn: 56101
|
|
|
|
|
|
| |
which represents a 'condition' declaration, e.g: "if (int x=0) {...}".
llvm-svn: 56045
|
|
|
|
|
|
|
|
| |
- Realized these functions will eventually need access to more data,
moved to CodeGenModule. Eventually they should probably live
together in some other helper class.
llvm-svn: 56039
|
|
|
|
|
|
|
|
| |
- Move actual param attr list creation to
CodeGenFunction::ConstructParamAttrList.
- Make ReturnTypeUsesSret static.
llvm-svn: 56038
|
|
|
|
|
|
| |
- Hook so NeXT runtime doesn't depend on ABI.
llvm-svn: 56034
|
|
|
|
|
|
| |
- Factor out EmitFunction{Pro,Epi}log
llvm-svn: 56031
|
|
|
|
|
|
| |
StartObjCMethod.
llvm-svn: 56030
|
|
|
|
|
|
|
| |
- For the time being this means our emitted code is somewhat worse,
especially for aggregates. This will be fixed.
llvm-svn: 56013
|
|
|
|
|
|
| |
- No functionality change.
llvm-svn: 56010
|
|
|
|
| |
llvm-svn: 55983
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Add CodeGenFunction::EmitAnyExprToTemp
o Like EmitAnyExpr, but emits aggregates to a temporary location if
none is available. Seems like this should be simpler (even aside
from using first class aggregates).
- Killed CodeGenFunction::EmitCallArg (just append the pair)
- Conversion of RValues to actual call arguments is now isolated in
CodeGenFunction::EmitCall.
llvm-svn: 55970
|
|
|
|
|
|
|
|
|
| |
- Add CGCall.h for dealing with ABI issues related to calls.
- Add CGFunctionInfo and CGCallInfo for capturing ABI relevant
information about functions and calls.
- Isolate LLVM parameter attribute handling inside CGCall.cpp
llvm-svn: 55963
|
|
|
|
| |
llvm-svn: 55759
|