summaryrefslogtreecommitdiffstats
path: root/llvm/lib
Commit message (Collapse)AuthorAgeFilesLines
* Fix this assertion string to mention subreg_to_reg.Dan Gohman2009-09-211-2/+2
| | | | llvm-svn: 82455
* initialize SymbolsCanStartWithDigit to false by defaultNuno Lopes2009-09-211-1/+1
| | | | llvm-svn: 82454
* 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-211-30/+66
| | | | | | | 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
* Improve GVN to be able to forward substitute a small load Chris Lattner2009-09-211-7/+170
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Fix PR4986. "r1024 = insert_subreg r1024, undef, 2" cannot be turned in an ↵Evan Cheng2009-09-211-10/+23
| | | | | | implicit_def. Instead, it's an identity copy so it should be eliminated. Also make sure to update livevariable kill information. llvm-svn: 82436
* 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
* Implement the JIT side of the GDB JIT debugging interface. To enable thisReid Kleckner2009-09-209-18/+396
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* simplify as daniel suggestsChris Lattner2009-09-201-16/+9
| | | | llvm-svn: 82415
* Revert r82404, it is causing a bootstrap miscompile. This is very very Chris Lattner2009-09-201-14/+1
| | | | | | scary, as it indicates a lurking bug. yay. llvm-svn: 82411
* improve memdep to eliminate bitcasts (and aliases, and noop geps) Chris Lattner2009-09-201-1/+14
| | | | | | | 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-201-105/+152
| | | | | | | | 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
* enhance GVN to forward substitute a stored value to a loadChris Lattner2009-09-201-15/+129
| | | | | | | | (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
* rename X86ATTAsmPrinter.cpp -> X86AsmPrinter.cpp likewise the .h file.Chris Lattner2009-09-205-958/+941
| | | | llvm-svn: 82394
* move target registry stuff to X86ATTAsmPrinter.cppChris Lattner2009-09-202-27/+25
| | | | llvm-svn: 82393
* simplify this now that createX86CodePrinterPass is trivialChris Lattner2009-09-201-14/+2
| | | | llvm-svn: 82392
* rename X86ATTAsmPrinter class -> X86AsmPrinterChris Lattner2009-09-205-37/+35
| | | | llvm-svn: 82391
* remove the asmstring, it is now dead. Improve comment.Chris Lattner2009-09-201-3/+4
| | | | llvm-svn: 82390
* Peer through zext and sext to eliminate them when it is safe to do so.Nick Lewycky2009-09-202-22/+16
| | | | llvm-svn: 82389
* kill off printPICLabel now, it's specialness is handled byChris Lattner2009-09-205-18/+2
| | | | | | | the MachineInstr ->MCInst lowering process, not in the asmprinter. llvm-svn: 82388
* delete X86IntelAsmPrinter! Now -x86-asm-syntax just switchesChris Lattner2009-09-205-815/+5
| | | | | | the instruction syntax, not the entire asmprinter. llvm-svn: 82387
* Fold 'icmp eq (icmp), true' into an xor(icmp).Nick Lewycky2009-09-201-0/+14
| | | | llvm-svn: 82386
* Add an intel syntax MCInstPrinter implementation. You can nowChris Lattner2009-09-206-10/+244
| | | | | | transcode from AT&T to intel syntax with "llvm-mc foo.s -output-asm-variant=1" llvm-svn: 82385
* tidy upChris Lattner2009-09-201-1/+1
| | | | llvm-svn: 82384
* eliminate a use of strtoul.Chris Lattner2009-09-201-12/+2
| | | | llvm-svn: 82382
* split random COFF asmprinter state out to X86COFFMachineModuleInfo.h.Chris Lattner2009-09-206-137/+238
| | | | | | Make dllexport directives come out in determinstic order. llvm-svn: 82381
* Correct the comment; this applies to fcmp too.Nick Lewycky2009-09-201-1/+1
| | | | llvm-svn: 82380
* Remove tab, again.Nick Lewycky2009-09-201-1/+1
| | | | llvm-svn: 82379
* Teach the constant folder how to not a cmpinst.Nick Lewycky2009-09-201-0/+14
| | | | llvm-svn: 82378
* smallvectorize getExtraOptionNamesChris Lattner2009-09-201-2/+1
| | | | llvm-svn: 82377
* minor cleanups.Chris Lattner2009-09-201-22/+24
| | | | llvm-svn: 82375
* strength reduce further StringRef-> const char*, saving another 620 bytes.Chris Lattner2009-09-201-5/+11
| | | | llvm-svn: 82372
* Try turning icmp(bitcast(x), bitcast(y)) into icmp(bitcast(bitcast(x)), y) inNick Lewycky2009-09-201-0/+10
| | | | | | the hopes that the two bitcasts will merge. llvm-svn: 82371
* switch an std::string to StringRef, shaving 400 bytes off CommandLine.oChris Lattner2009-09-201-11/+10
| | | | llvm-svn: 82370
* Remove tabs I added.Nick Lewycky2009-09-201-8/+8
| | | | llvm-svn: 82369
* the switch from std::map -> StringMap caused --help output to be in Chris Lattner2009-09-201-5/+15
| | | | | | non-sorted order, restore the sort. llvm-svn: 82368
* eliminate the duplicate detection loop, moving it into the loop that ↵Chris Lattner2009-09-201-13/+6
| | | | | | populates the Opts vector in the first place. llvm-svn: 82367
* Eliminate a masochistic "algorithm" loop, shrinking CommandLine.o from ↵Chris Lattner2009-09-201-13/+8
| | | | | | 71524->70700 bytes. llvm-svn: 82366
OpenPOWER on IntegriCloud