| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
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
|
|
|
|
|
|
| |
block. Fixes PR3536.
llvm-svn: 64252
|
|
|
|
| |
llvm-svn: 64205
|
|
|
|
|
|
| |
instead.
llvm-svn: 64203
|
|
|
|
|
|
| |
functionality change (yet).
llvm-svn: 64159
|
|
|
|
| |
llvm-svn: 64157
|
|
|
|
| |
llvm-svn: 64095
|
|
|
|
|
|
|
|
| |
If people could beat on it and let me know if there are any new
semantics required by newer language standards or DRs or any little
details I goofed on, I'd be happy to fix any issues found.
llvm-svn: 64079
|
|
|
|
|
|
| |
fixes and cleanup.
llvm-svn: 64053
|
|
|
|
|
|
| |
cleanup blocks if necessary
llvm-svn: 64051
|
|
|
|
|
|
|
| |
correctly. This should lay the ground work to throw the big switch
and start code gening break and continue in the presense of vlas.
llvm-svn: 64046
|
|
|
|
| |
llvm-svn: 64030
|
|
|
|
| |
llvm-svn: 64021
|