summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGStmt.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* indirectbr seems to work! Rip out the old code.Chris Lattner2009-11-061-5/+0
| | | | llvm-svn: 86256
* Implement clang support for indirect branch and address of labelChris Lattner2009-10-281-0/+5
| | | | | | | | 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
* reimplement codegen for indirect goto with the following advantages:Chris Lattner2009-10-131-5/+12
| | | | | | | | | | | | | 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
* Add support to attach debug info to an instruction.Devang Patel2009-10-061-10/+24
| | | | | | This is not yet enabled. llvm-svn: 83399
* CodeGen for try statements. (We just emit the body for now).Anders Carlsson2009-09-271-0/+4
| | | | llvm-svn: 82910
* Remove tabs, and whitespace cleanups.Mike Stump2009-09-091-103/+103
| | | | llvm-svn: 81346
* Update for LLVM API change.Owen Anderson2009-08-131-7/+7
| | | | llvm-svn: 78946
* Update for LLVM API change.Owen Anderson2009-08-051-1/+1
| | | | llvm-svn: 78259
* Revert the fix for PR3800, it broke things.Anders Carlsson2009-08-041-2/+5
| | | | llvm-svn: 78084
* Remove old code that was causing the new test to fail.Anders Carlsson2009-08-021-3/+0
| | | | llvm-svn: 77862
* Don't evaluate inout constraints twice. Fixes PR3800.Anders Carlsson2009-08-021-2/+2
| | | | llvm-svn: 77854
* Canonicalize else spacing.Mike Stump2009-07-301-1/+0
| | | | llvm-svn: 77629
* Update for LLVM API change.Owen Anderson2009-07-241-6/+7
| | | | llvm-svn: 77012
* Detect when the current generation point is unreachable after emittingDaniel Dunbar2009-07-191-3/+12
| | | | | | | | | | 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
* Fix thinko.Daniel Dunbar2009-07-191-0/+7
| | | | llvm-svn: 76362
* Avoid generation of dead code in a few more situations.Daniel Dunbar2009-07-191-8/+19
| | | | | | | | | | | | | - 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
* Update for LLVM API change.Owen Anderson2009-07-161-5/+5
| | | | llvm-svn: 76090
* Add IRGen support for return statements in functions with reference Eli Friedman2009-05-271-0/+4
| | | | | | type. llvm-svn: 72459
* Fixup codegen for volatile structs in the trivial cases (a a=a and a=a=a).Mike Stump2009-05-261-1/+1
| | | | llvm-svn: 72439
* Use v.data() instead of &v[0] when SmallVector v might be empty.Jay Foad2009-05-211-1/+1
| | | | llvm-svn: 72210
* "Fix" a problem with debug info in the presence of always_inlineChris Lattner2009-05-041-2/+9
| | | | | | | | | | | | | | | | | | | 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
* Remove unnecessary copy of constraint info.Daniel Dunbar2009-05-041-1/+1
| | | | llvm-svn: 70835
* Remove unnecessary push_back (at least, I think it's unnecessary); Eli Friedman2009-05-041-2/+0
| | | | | | hopefully, this fixes PR4144 without any regressions. llvm-svn: 70823
* look at the right operand when increasing the size of an asm output,Chris Lattner2009-05-031-3/+1
| | | | | | this fixes http://llvm.org/bugs/show_bug.cgi?id=3373#c20 llvm-svn: 70685
* don't shadow 'i'Chris Lattner2009-05-031-5/+7
| | | | llvm-svn: 70680
* add support for tying asm operands where the result is smaller thanChris Lattner2009-05-031-15/+64
| | | | | | the input. This is part of PR3373. llvm-svn: 70677
* implement support for asm outputs targetting non-simple lvalue destinationsChris Lattner2009-05-031-11/+13
| | | | | | like bitfields. incidentally llvm-gcc crashes on this sort of thing also. :) llvm-svn: 70675
* handle codegen of asms where a small input is tied to a large output.Chris Lattner2009-05-031-0/+22
| | | | llvm-svn: 70672
* refactor some code to get the input/output constraint info beforeChris Lattner2009-05-031-15/+27
| | | | | | processing the outputs, no functionality change. llvm-svn: 70671
* Don't use indirect memory destinations for inline asm. Fixes 6841383.Anders Carlsson2009-05-011-15/+27
| | | | llvm-svn: 70523
* pull operands names "[foo]" into ConstraintInfo.Chris Lattner2009-04-261-14/+11
| | | | llvm-svn: 70136
* pull the constraint string into the ConstraintInfo structChris Lattner2009-04-261-6/+4
| | | | | | instead of passing it around in addition to it. llvm-svn: 70135
* change TargetInfo::ConstraintInfo to be a struct that containsChris Lattner2009-04-261-6/+4
| | | | | | the enum along with some other data. llvm-svn: 70114
* Minor simplification.Eli Friedman2009-04-131-6/+1
| | | | llvm-svn: 68992
* Fix a subtle bug where the cleanup scope entries had a dangling block referenceDaniel Dunbar2009-04-011-14/+27
| | | | | | | | | - <rdar://problem/6732143> Crash when generating @synchronize for zero-cost exception - Thanks to Anders for helping track down the problem. llvm-svn: 68186
* introduce a new -fheinous-gnu-extensions flag that enables reallyChris Lattner2009-03-131-1/+6
| | | | | | | | | | | 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
* add plumbing to report diagnostics back through sema for malformed asmstrings.Chris Lattner2009-03-101-1/+2
| | | | llvm-svn: 66598
* move the asm string analysis code out of codegen into common Chris Lattner2009-03-101-112/+15
| | | | | | code where Sema can get to it. No functionality change. llvm-svn: 66596
* Fix PR3682 by just disabling a broken assertion. This check should beChris Lattner2009-03-101-3/+2
| | | | | | | | 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
* reduce duplication of parsing code between %0 and %x0 andChris Lattner2009-03-101-19/+18
| | | | | | add support for modifiers on named references, like %c[foo]. llvm-svn: 66532
* move matching of named operands into AsmStmt class. At the sameChris Lattner2009-03-101-24/+5
| | | | | | | time handle + operands in operand counting, fixing asm.c:t7 to expand into $2 instead of $1. llvm-svn: 66531
* reduce nesting, use memchr instead of explicit loop, eliminate aChris Lattner2009-03-101-93/+86
| | | | | | temporary std::string to fix a fixme. llvm-svn: 66530
* Expand %= into ${:uid} so that the code generator emits a unique ID for theChris Lattner2009-03-101-13/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* add some helper methods to AsmStmt and add some comments.Chris Lattner2009-03-101-4/+2
| | | | llvm-svn: 66521
* slightly simplify some code, pull the 'is simple asm' case up inChris Lattner2009-03-101-24/+30
| | | | | | ConvertAsmString and shrink it a bit. No functionality change. llvm-svn: 66520
* if we die in IR generation of a compound statement, include Chris Lattner2009-03-051-1/+4
| | | | | | | | | | | | | | 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
* add a special case for codegen that improves the case where we haveChris Lattner2009-03-041-1/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* inline asm calls should be nounwind. Chris, please review.Anders Carlsson2009-03-021-1/+4
| | | | llvm-svn: 65866
* Make sure to reset the DidCallStackSave variable before emitting a compound ↵Anders Carlsson2009-02-221-0/+1
| | | | | | statement. Fixes PR3649. llvm-svn: 65291
* Add CodeGen support for the nodebug attribute.Anders Carlsson2009-02-131-2/+2
| | | | llvm-svn: 64445
OpenPOWER on IntegriCloud