summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGStmt.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* 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
* Handle the case where EmitBlock might be called multiple times for the same ↵Anders Carlsson2009-02-101-2/+8
| | | | | | block. Fixes PR3536. llvm-svn: 64252
* Remove the last remnants of the Obj-C EH stack code.Anders Carlsson2009-02-101-113/+1
| | | | llvm-svn: 64205
* Start removing the old Obj-C EH stack now that the cleanup stack is used ↵Anders Carlsson2009-02-101-43/+12
| | | | | | instead. llvm-svn: 64203
* Replace a bunch of EmitBranch calls with EmitBranchThroughCleanup. No ↵Anders Carlsson2009-02-091-5/+5
| | | | | | functionality change (yet). llvm-svn: 64159
* Save and restore the DidCallStackSave variableAnders Carlsson2009-02-091-0/+4
| | | | llvm-svn: 64157
* When we're at the stack depth we want, there isn't anything to do.Mike Stump2009-02-081-0/+4
| | | | llvm-svn: 64095
* Wire up break and continue processing to the new stack depth adjuster.Mike Stump2009-02-081-39/+49
| | | | | | | | 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
* When emitting blocks, keep track of which cleanup scope they have. Minor ↵Anders Carlsson2009-02-081-0/+6
| | | | | | fixes and cleanup. llvm-svn: 64053
* Add support for emitting cleanup blocks. Make EmitCompoundStatement emit ↵Anders Carlsson2009-02-071-1/+6
| | | | | | cleanup blocks if necessary llvm-svn: 64051
* Ensure we track all the stack depths for all break and continue pointsMike Stump2009-02-071-4/+16
| | | | | | | 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
* Format for 80-cols.Mike Stump2009-02-071-2/+2
| | | | llvm-svn: 64030
* Arrange to have the correct StackDepth for while statements.Mike Stump2009-02-071-8/+8
| | | | llvm-svn: 64021
OpenPOWER on IntegriCloud