| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 86256
|
|
|
|
|
|
|
|
| |
using the new LLVM support for this. This is temporarily hiding
behind horrible and ugly #ifdefs until the time when the optimizer
is stable (hopefully a week or so). Until then, lets make it "opt in" :)
llvm-svn: 85446
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1. CGF now has fewer bytes of state (one pointer instead of a vector).
2. The generated code is determinstic, instead of getting labels in
'map order' based on pointer addresses.
3. Clang now emits one 'indirect goto switch' for each function, instead
of one for each indirect goto. This fixes an M*N = N^2 IR size issue
when there are lots of address-taken labels and lots of indirect gotos.
4. This also makes the default cause do something useful, reducing the
size of the jump table needed (by one).
llvm-svn: 83952
|
|
|
|
|
|
| |
This is not yet enabled.
llvm-svn: 83399
|
|
|
|
| |
llvm-svn: 82910
|
|
|
|
| |
llvm-svn: 81346
|
|
|
|
| |
llvm-svn: 78946
|
|
|
|
| |
llvm-svn: 78259
|
|
|
|
| |
llvm-svn: 78084
|
|
|
|
| |
llvm-svn: 77862
|
|
|
|
| |
llvm-svn: 77854
|
|
|
|
| |
llvm-svn: 77629
|
|
|
|
| |
llvm-svn: 77012
|
|
|
|
|
|
|
|
|
|
| |
expressions.
- This generally catches the important case of noreturn functions.
- With the last two changes, we are down to 152 unreachable blocks emitted on
403.gcc, vs the 1805 we started with.
llvm-svn: 76364
|
|
|
|
| |
llvm-svn: 76362
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Emit variable declarations as "simple", we want to avoid forcing the creation
of a dummy basic block, but still need to make the variable available for
later use.
- With that, we can now skip IRgen for other unreachable statements (which
don't define a label).
- Anders, I added two fixmes on calls to EmitVLASize, can you check them?
llvm-svn: 76361
|
|
|
|
| |
llvm-svn: 76090
|
|
|
|
|
|
| |
type.
llvm-svn: 72459
|
|
|
|
| |
llvm-svn: 72439
|
|
|
|
| |
llvm-svn: 72210
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
function calls. For a program like this:
#include <stdio.h>
static __inline__ __attribute__((always_inline))
int bar(int x) { return 4; }
int main() {
int X = bar(4);
printf("%d\n", X);
}
clang was not outputing any debug info for the body of main(). This is
because the backend is getting confused by the region_start/end that clang
is emitting for block scopes. For now, just disable these (matching llvm-gcc),
this stuff is in progress of rework anyway.
llvm-svn: 70889
|
|
|
|
| |
llvm-svn: 70835
|
|
|
|
|
|
| |
hopefully, this fixes PR4144 without any regressions.
llvm-svn: 70823
|
|
|
|
|
|
| |
this fixes http://llvm.org/bugs/show_bug.cgi?id=3373#c20
llvm-svn: 70685
|
|
|
|
| |
llvm-svn: 70680
|
|
|
|
|
|
| |
the input. This is part of PR3373.
llvm-svn: 70677
|
|
|
|
|
|
| |
like bitfields. incidentally llvm-gcc crashes on this sort of thing also. :)
llvm-svn: 70675
|
|
|
|
| |
llvm-svn: 70672
|
|
|
|
|
|
| |
processing the outputs, no functionality change.
llvm-svn: 70671
|
|
|
|
| |
llvm-svn: 70523
|
|
|
|
| |
llvm-svn: 70136
|
|
|
|
|
|
| |
instead of passing it around in addition to it.
llvm-svn: 70135
|
|
|
|
|
|
| |
the enum along with some other data.
llvm-svn: 70114
|
|
|
|
| |
llvm-svn: 68992
|
|
|
|
|
|
|
|
|
| |
- <rdar://problem/6732143> Crash when generating @synchronize for
zero-cost exception
- Thanks to Anders for helping track down the problem.
llvm-svn: 68186
|
|
|
|
|
|
|
|
|
|
|
| |
really horrible extensions that are disabled by default but that can
be accepted by -fheinous-gnu-extensions (but which always emit a
warning when enabled).
As our first instance of this, implement PR3788/PR3794, which allows
non-lvalues in inline asms in contexts where lvalues are required. bleh.
llvm-svn: 66910
|
|
|
|
| |
llvm-svn: 66598
|
|
|
|
|
|
| |
code where Sema can get to it. No functionality change.
llvm-svn: 66596
|
|
|
|
|
|
|
|
| |
done in sema, and is reflected by the existing PR3258. In the meantime,
fix PR3682 by disabling a bogus assertion (which doesn't account for +
operands).
llvm-svn: 66533
|
|
|
|
|
|
| |
add support for modifiers on named references, like %c[foo].
llvm-svn: 66532
|
|
|
|
|
|
|
| |
time handle + operands in operand counting, fixing asm.c:t7 to
expand into $2 instead of $1.
llvm-svn: 66531
|
|
|
|
|
|
| |
temporary std::string to fix a fixme.
llvm-svn: 66530
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
asm. This allows us to properly handle the case when an optimizer duplicates
the asm, such as here:
void bar() {
int i;
for (i = 0; i < 3; ++i)
asm("foo %=" : : "r"(0));
}
we now produce:
_bar:
xorl %eax, %eax
## InlineAsm Start
foo 0
## InlineAsm End
## InlineAsm Start
foo 1
## InlineAsm End
## InlineAsm Start
foo 2
## InlineAsm End
ret
instead of:
_bar:
xorl %eax, %eax
## InlineAsm Start
foo 1
## InlineAsm End
## InlineAsm Start
foo 1
## InlineAsm End
## InlineAsm Start
foo 1
## InlineAsm End
ret
This also fixes a fixme by eliminating a static.
llvm-svn: 66528
|
|
|
|
| |
llvm-svn: 66521
|
|
|
|
|
|
| |
ConvertAsmString and shrink it a bit. No functionality change.
llvm-svn: 66520
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
it in the stack trace, giving us stuff like:
Stack dump:
0. Program arguments: clang t.c -emit-llvm
1. <eof> parser at end of file
2. t.c:1:5: LLVM IR generation of declaration 'a'
3. t.c:1:9: LLVM IR generation of compound statement ('{}')
4. t.c:2:3: LLVM IR generation of compound statement ('{}')
Abort
llvm-svn: 66154
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
multiple sequential cases to a) not create tons of fall-through basic blocks
and b) not recurse deeply. This fixes codegen on 100K deep cases, and improves
codegen on moderate cases from this:
switch i32 %tmp, label %sw.epilog [
i32 1000, label %sw.bb
i32 1001, label %sw.bb1
i32 1002, label %sw.bb2
i32 1003, label %sw.bb3
i32 1004, label %sw.bb4
...
sw.bb: ; preds = %entry
br label %sw.bb1
sw.bb1: ; preds = %entry, %sw.bb
br label %sw.bb2
sw.bb2: ; preds = %entry, %sw.bb1
br label %sw.bb3
sw.bb3: ; preds = %entry, %sw.bb2
br label %sw.bb4
to:
switch i32 %tmp, label %sw.epilog [
i32 1000, label %sw.bb
i32 1001, label %sw.bb
i32 1002, label %sw.bb
i32 1003, label %sw.bb
i32 1004, label %sw.bb
sw.bb: ;; many preds
llvm-svn: 66015
|
|
|
|
| |
llvm-svn: 65866
|
|
|
|
|
|
| |
statement. Fixes PR3649.
llvm-svn: 65291
|
|
|
|
| |
llvm-svn: 64445
|