summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Update cmake.Xerxes Ranby2009-09-211-0/+1
| | | | llvm-svn: 82449
* Verify that phi instructions refer to MBBs in the CFG.Jakob Stoklund Olesen2009-09-211-7/+8
| | | | | | | The machine code verifier no longer tolerates phi instructions with noop operands. All MBBs on a phi instruction must be in the CFG. llvm-svn: 82448
* enable non-local analysis and PRE of large store -> little load.Chris Lattner2009-09-212-31/+117
| | | | | | | This doesn't kick in too much because of phi translation issues, but this can be resolved in the future. llvm-svn: 82447
* convert an std::pair to an explicit struct.Chris Lattner2009-09-211-17/+32
| | | | llvm-svn: 82446
* move some functions, add a comment.Chris Lattner2009-09-211-164/+165
| | | | llvm-svn: 82444
* split HandleLoadFromClobberingStore in two pieces: one that does theChris Lattner2009-09-211-21/+41
| | | | | | analysis, one that does the xform. llvm-svn: 82443
* add a noteChris Lattner2009-09-211-1/+14
| | | | llvm-svn: 82442
* Register the MachineModuleInfo for the ARM JIT, and update JITDwarfEmitter toDaniel Dunbar2009-09-212-1/+12
| | | | | | assert if the setModuleInfo hasn't been called. llvm-svn: 82441
* add pr#Chris Lattner2009-09-211-0/+1
| | | | llvm-svn: 82440
* Improve GVN to be able to forward substitute a small load Chris Lattner2009-09-212-7/+220
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | from a piece of a large store when both are in the same block. This allows clang to compile the testcase in PR4216 to this code: _test_bitfield: movl 4(%esp), %eax movl %eax, %ecx andl $-65536, %ecx orl $32962, %eax andl $40186, %eax orl %ecx, %eax ret This is not ideal, but is a whole lot better than the code produced by llvm-gcc: _test_bitfield: movw $-32574, %ax orw 4(%esp), %ax andw $-25350, %ax movw %ax, 4(%esp) movw 7(%esp), %cx shlw $8, %cx movzbl 6(%esp), %edx orw %cx, %dx movzwl %dx, %ecx shll $16, %ecx movzwl %ax, %eax orl %ecx, %eax ret and dramatically better than that produced by gcc 4.2: _test_bitfield: pushl %ebx call L3 "L00000000001$pb": L3: popl %ebx movl 8(%esp), %eax leal 0(,%eax,4), %edx sarb $7, %dl movl %eax, %ecx andl $7168, %ecx andl $-7201, %ebx movzbl %dl, %edx andl $1, %edx sall $5, %edx orl %ecx, %ebx orl %edx, %ebx andl $24, %eax andl $-58336, %ebx orl %eax, %ebx orl $32962, %ebx movl %ebx, %eax popl %ebx ret llvm-svn: 82439
* add a helper method.Chris Lattner2009-09-211-0/+12
| | | | llvm-svn: 82438
* Add an XFAIL test which compiles differently from a .ast.Daniel Dunbar2009-09-211-0/+9
| | | | llvm-svn: 82437
* Fix PR4986. "r1024 = insert_subreg r1024, undef, 2" cannot be turned in an ↵Evan Cheng2009-09-212-10/+57
| | | | | | implicit_def. Instead, it's an identity copy so it should be eliminated. Also make sure to update livevariable kill information. llvm-svn: 82436
* Add missing PCH support for -fstack-protector.Daniel Dunbar2009-09-213-2/+11
| | | | llvm-svn: 82435
* Don't allow formatted_ostream to be unbuffered, even if its underlying bufferDaniel Dunbar2009-09-211-1/+6
| | | | | | | | | | | | is. - The problem is that formatted_ostream forces its underlying buffer to be unbuffered, so if some client happens to wrap a formatted_ostream around something, but still use the underlying stream, then we can end up writing on a fully unbuffered output (which was never intended to be unbuffered). - This makes clang (and presumably llvm-gcc) -emit-llvm -S a mere 10x faster. llvm-svn: 82434
* Implement __builtin_unreachable(), a GCC 4.5 extension.Chris Lattner2009-09-214-1/+60
| | | | llvm-svn: 82433
* Switch ProcessASTInputFile to still use ParseAST.Daniel Dunbar2009-09-212-7/+17
| | | | | | | | - Currently this requires us to fake an input file. - This allows Sema to be keep all the logic for how to pull decls out of the external AST source and how to handle things like tentative definitions. llvm-svn: 82432
* Change ASTUnit to only initialize the predefines buffer to the suggested ↵Daniel Dunbar2009-09-211-1/+1
| | | | | | | | predefines. - It isn't really clear what to do with the preprocessor here, but this is more sensible. llvm-svn: 82431
* Change ASTUnit to take the Diagnostic as an argument, the client should have ↵Daniel Dunbar2009-09-216-35/+36
| | | | | | control of this. llvm-svn: 82430
* Add Diagnostic to Indexer, and have it keep its own FileManager instead of ↵Daniel Dunbar2009-09-213-11/+18
| | | | | | taking an external reference (which was leaked in the case of the CIndex library). llvm-svn: 82429
* one case handled, expanded another testcase inline.Chris Lattner2009-09-211-20/+16
| | | | llvm-svn: 82427
* formatting cleanups, no functionality change.Chris Lattner2009-09-211-118/+116
| | | | llvm-svn: 82426
* Add documentation on how to use enable debug information in the JIT and use ↵Reid Kleckner2009-09-212-0/+174
| | | | | | it with GDB. llvm-svn: 82425
* fix a FileCheck bug where:Chris Lattner2009-09-212-4/+3
| | | | | | | | | | ; CHECK: foo ; CHECK-NOT: foo ; CHECK: bar would always fail. llvm-svn: 82424
* Start mangling expressions.Anders Carlsson2009-09-212-4/+54
| | | | llvm-svn: 82423
* Move ARM and X86 specific AsmParser tests into separate subdirectories, and onlyDaniel Dunbar2009-09-217-3/+11
| | | | | | run if appropriate target is supported. llvm-svn: 82419
* Implement the JIT side of the GDB JIT debugging interface. To enable thisReid Kleckner2009-09-2010-18/+405
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | feature, either build the JIT in debug mode to enable it by default or pass -jit-emit-debug to lli. Right now, the only debug information that this communicates to GDB is call frame information, since it's already being generated to support exceptions in the JIT. Eventually, when DWARF generation isn't tied so tightly to AsmPrinter, it will be easy to push that information to GDB through this interface. Here's a step-by-step breakdown of how the feature works: - The JIT generates the machine code and DWARF call frame info (.eh_frame/.debug_frame) for a function into memory. - The JIT copies that info into an in-memory ELF file with a symbol for the function. - The JIT creates a code entry pointing to the ELF buffer and adds it to a linked list hanging off of a global descriptor at a special symbol that GDB knows about. - The JIT calls a function marked noinline that GDB knows about and has put an internal breakpoint in. - GDB catches the breakpoint and reads the global descriptor to look for new code. - When sees there is new code, it reads the ELF from the inferior's memory and adds it to itself as an object file. - The JIT continues, and the next time we stop the program, we are able to produce a proper backtrace. Consider running the following program through the JIT: #include <stdio.h> void baz(short z) { long w = z + 1; printf("%d, %x\n", w, *((int*)NULL)); // SEGFAULT here } void bar(short y) { int z = y + 1; baz(z); } void foo(char x) { short y = x + 1; bar(y); } int main(int argc, char** argv) { char x = 1; foo(x); } Here is a backtrace before this patch: Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x2aaaabdfbd10 (LWP 25476)] 0x00002aaaabe7d1a8 in ?? () (gdb) bt #0 0x00002aaaabe7d1a8 in ?? () #1 0x0000000000000003 in ?? () #2 0x0000000000000004 in ?? () #3 0x00032aaaabe7cfd0 in ?? () #4 0x00002aaaabe7d12c in ?? () #5 0x00022aaa00000003 in ?? () #6 0x00002aaaabe7d0aa in ?? () #7 0x01000002abe7cff0 in ?? () #8 0x00002aaaabe7d02c in ?? () #9 0x0100000000000001 in ?? () #10 0x00000000014388e0 in ?? () #11 0x00007fff00000001 in ?? () #12 0x0000000000b870a2 in llvm::JIT::runFunction (this=0x1405b70, F=0x14024e0, ArgValues=@0x7fffffffe050) at /home/rnk/llvm-gdb/lib/ExecutionEngine/JIT/JIT.cpp:395 #13 0x0000000000baa4c5 in llvm::ExecutionEngine::runFunctionAsMain (this=0x1405b70, Fn=0x14024e0, argv=@0x13f06f8, envp=0x7fffffffe3b0) at /home/rnk/llvm-gdb/lib/ExecutionEngine/ExecutionEngine.cpp:377 #14 0x00000000007ebd52 in main (argc=2, argv=0x7fffffffe398, envp=0x7fffffffe3b0) at /home/rnk/llvm-gdb/tools/lli/lli.cpp:208 And a backtrace after this patch: Program received signal SIGSEGV, Segmentation fault. 0x00002aaaabe7d1a8 in baz () (gdb) bt #0 0x00002aaaabe7d1a8 in baz () #1 0x00002aaaabe7d12c in bar () #2 0x00002aaaabe7d0aa in foo () #3 0x00002aaaabe7d02c in main () #4 0x0000000000b870a2 in llvm::JIT::runFunction (this=0x1405b70, F=0x14024e0, ArgValues=...) at /home/rnk/llvm-gdb/lib/ExecutionEngine/JIT/JIT.cpp:395 #5 0x0000000000baa4c5 in llvm::ExecutionEngine::runFunctionAsMain (this=0x1405b70, Fn=0x14024e0, argv=..., envp=0x7fffffffe3c0) at /home/rnk/llvm-gdb/lib/ExecutionEngine/ExecutionEngine.cpp:377 #6 0x00000000007ebd52 in main (argc=2, argv=0x7fffffffe3a8, envp=0x7fffffffe3c0) at /home/rnk/llvm-gdb/tools/lli/lli.cpp:208 llvm-svn: 82418
* Work around FileCheck -NOT restriction.Daniel Dunbar2009-09-201-0/+4
| | | | llvm-svn: 82417
* Work around a FileCheck bug, for now.Daniel Dunbar2009-09-201-0/+1
| | | | llvm-svn: 82416
* simplify as daniel suggestsChris Lattner2009-09-201-16/+9
| | | | llvm-svn: 82415
* write rfind in terms of npos as daniel requestedChris Lattner2009-09-201-6/+4
| | | | llvm-svn: 82414
* remove a dead method.Chris Lattner2009-09-201-7/+0
| | | | llvm-svn: 82413
* grammaroChris Lattner2009-09-201-1/+1
| | | | llvm-svn: 82412
* Revert r82404, it is causing a bootstrap miscompile. This is very very Chris Lattner2009-09-202-40/+1
| | | | | | scary, as it indicates a lurking bug. yay. llvm-svn: 82411
* rewrite CountNumNewlinesBetween to be in terms of StringRef.Chris Lattner2009-09-201-13/+15
| | | | llvm-svn: 82410
* this was not supposed to be committedChris Lattner2009-09-201-21/+0
| | | | llvm-svn: 82409
* implement and document support for CHECK-NOTChris Lattner2009-09-203-8/+101
| | | | llvm-svn: 82408
* rewrite FileCheck in terms of StringRef instead of manual pointer pairs.Chris Lattner2009-09-201-68/+37
| | | | llvm-svn: 82407
* Switch TestRunner.sh to just use 'lit'.Daniel Dunbar2009-09-201-127/+8
| | | | | | - Does people use this? llvm-svn: 82406
* Switch to using the new LLVM lit test runner by default.Daniel Dunbar2009-09-201-1/+1
| | | | llvm-svn: 82405
* improve memdep to eliminate bitcasts (and aliases, and noop geps) Chris Lattner2009-09-202-1/+40
| | | | | | | early for the stated reasons: this allows it to find more equivalences and depend less on code layout. llvm-svn: 82404
* Move CoerceAvailableValueToLoadType earlier in GVN.cpp. Hook it upChris Lattner2009-09-202-108/+203
| | | | | | | | so that nonlocal and partially redundant loads can use it as well. The testcase shows examples of craziness this can handle. This triggers *many* times in 176.gcc. llvm-svn: 82403
* change the interface to CoerceAvailableValueToLoadType to be Chris Lattner2009-09-201-15/+21
| | | | | | more generic. llvm-svn: 82402
* Include LLVM {src,obj} root in lit.site.cfg, to support non-standard layouts.Daniel Dunbar2009-09-204-13/+18
| | | | llvm-svn: 82401
* Teach 'make check-all' to build the site configuration for clang, if it is ↵Daniel Dunbar2009-09-201-5/+15
| | | | | | in tree. llvm-svn: 82400
* enhance GVN to forward substitute a stored value to a loadChris Lattner2009-09-202-15/+248
| | | | | | | | (and load -> load) when the base pointers must alias but when they are different types. This occurs very very frequently in 176.gcc and other code that uses bitfields a lot. llvm-svn: 82399
* update an entry, delete an entry which has been fixed.Chris Lattner2009-09-201-36/+15
| | | | llvm-svn: 82398
* tidy upChris Lattner2009-09-201-3/+3
| | | | llvm-svn: 82397
* --- Reverse-merging r82282 into '.':Bill Wendling2009-09-203-58/+22
| | | | | | | | | | | | | U lib/CodeGen/AsmPrinter/DwarfException.cpp U lib/CodeGen/AsmPrinter/DwarfException.h --- Reverse-merging r82274 into '.': U lib/Target/TargetLoweringObjectFile.cpp G lib/CodeGen/AsmPrinter/DwarfException.cpp These revisions were breaking everything. llvm-svn: 82396
* remove a temporary hack.Chris Lattner2009-09-202-4/+2
| | | | llvm-svn: 82395
OpenPOWER on IntegriCloud