- Apr 26, 2011
-
-
Nick Lewycky authored
Add support for switch and indirectbr edges. This works by densely numbering all blocks which have such terminators, and then separately numbering the possible successors. The predecessors write down a number, the successor knows its own number (as a ConstantInt) and sends that and the pointer to the number the predecessor wrote down to the runtime, who looks up the counter in a per-function table. Coverage data should now be functional, but I haven't tested it on anything other than my 2-file synthetic test program for coverage. llvm-svn: 130186
-
Rafael Espindola authored
llvm-svn: 130181
-
Chris Lattner authored
return it as a clobber. This allows GVN to do smart things. Enhance GVN to be smart about the case when a small load is clobbered by a larger overlapping load. In this case, forward the value. This allows us to compile stuff like this: int test(void *P) { int tmp = *(unsigned int*)P; return tmp+*((unsigned char*)P+1); } into: _test: ## @test movl (%rdi), %ecx movzbl %ch, %eax addl %ecx, %eax ret which has one load. We already handled the case where the smaller load was from a must-aliased base pointer. llvm-svn: 130180
-
Devang Patel authored
Let dwarf writer allocate extra space in the debug location expression. This space, if requested, will be used for complex addresses of the Blocks' variables. llvm-svn: 130178
-
Devang Patel authored
llvm-svn: 130171
-
Devang Patel authored
s/addVariableAddress/addFrameVariableAddress/g llvm-svn: 130170
-
Devang Patel authored
Observed this while reading code, so I do not have a test case handy here. llvm-svn: 130167
-
Dan Gohman authored
llvm-svn: 130166
-
Chris Lattner authored
llvm-svn: 130160
-
- Apr 25, 2011
-
-
Chris Lattner authored
patch by Johannes Schaub! llvm-svn: 130151
-
Chris Lattner authored
llvm-svn: 130137
-
Akira Hatanaka authored
llvm-svn: 130131
-
Devang Patel authored
A dbg.declare may not be in entry block, even if it is referring to an incoming argument. However, It is appropriate to emit DBG_VALUE referring to this incoming argument in entry block in MachineFunction. llvm-svn: 130129
-
Chandler Carruth authored
these was just one line of a file. Explicitly set the eol-style property on the files to try and ensure this fix stays. llvm-svn: 130125
-
Duncan Sands authored
llvm-svn: 130120
-
- Apr 24, 2011
-
-
Rafael Espindola authored
llvm-svn: 130116
-
Rafael Espindola authored
Fixes PR9787. llvm-svn: 130115
-
Sebastian Redl authored
llvm-svn: 130097
-
Sebastian Redl authored
llvm-svn: 130096
-
Sebastian Redl authored
llvm-svn: 130095
-
Jay Foad authored
llvm-svn: 130093
-
Jay Foad authored
llvm-svn: 130086
-
- Apr 23, 2011
-
-
Jay Foad authored
llvm-svn: 130068
-
Jay Foad authored
llvm-svn: 130054
-
Benjamin Kramer authored
llvm-svn: 130053
-
Andrew Trick authored
Fixes Thumb2 ADCS and SBCS lowering: <rdar://problem/9275821>. t2ADCS/t2SBCS are now pseudo instructions, consistent with ARM, so the assembly printer correctly prints the 's' suffix. Fixes Thumb2 adde -> SBC matching to check for live/dead carry flags. Fixes the internal ARM machine opcode mnemonic for ADCS/SBCS. Fixes ARM SBC lowering to check for live carry (potential bug). llvm-svn: 130048
-
Andrew Trick authored
llvm-svn: 130046
-
Owen Anderson authored
llvm-svn: 130033
-
Devang Patel authored
llvm-svn: 130028
-
Jakob Stoklund Olesen authored
Sometimes it is better to split per block, and we missed those cases. llvm-svn: 130025
-
- Apr 22, 2011
-
-
rdar://9289512Chris Lattner authored
fix bugs exposed by the gcc dejagnu testsuite: 1. The load may actually be used by a dead instruction, which would cause an assert. 2. The load may not be used by the current chain of instructions, and we could move it past a side-effecting instruction. Change how we process uses to define the problem away. llvm-svn: 130018
-
Johnny Chen authored
print out ldr, not ldr.n. rdar://problem/9267772 llvm-svn: 130008
-
Benjamin Kramer authored
On x86 this allows to fold a load into the cmp, greatly reducing register pressure. movzbl (%rdi), %eax cmpl $47, %eax -> cmpb $47, (%rdi) This shaves 8k off gcc.o on i386. I'll leave applying the patch in README.txt to Chris :) llvm-svn: 130005
-
Devang Patel authored
llvm-svn: 130004
-
Devang Patel authored
llvm-svn: 129995
-
Benjamin Kramer authored
X86: Try to use a smaller encoding by transforming (X << C1) & C2 into (X & (C2 >> C1)) & C1. (Part of PR5039) This tends to happen a lot with bitfield code generated by clang. A simple example for x86_64 is uint64_t foo(uint64_t x) { return (x&1) << 42; } which used to compile into bloated code: shlq $42, %rdi ## encoding: [0x48,0xc1,0xe7,0x2a] movabsq $4398046511104, %rax ## encoding: [0x48,0xb8,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00] andq %rdi, %rax ## encoding: [0x48,0x21,0xf8] ret ## encoding: [0xc3] with this patch we can fold the immediate into the and: andq $1, %rdi ## encoding: [0x48,0x83,0xe7,0x01] movq %rdi, %rax ## encoding: [0x48,0x89,0xf8] shlq $42, %rax ## encoding: [0x48,0xc1,0xe0,0x2a] ret ## encoding: [0xc3] It's possible to save another byte by using 'andl' instead of 'andq' but I currently see no way of doing that without making this code even more complicated. See the TODOs in the code. llvm-svn: 129990
-
Eric Christopher authored
llvm-svn: 129984
-
Eric Christopher authored
llvm-svn: 129980
-
Eric Christopher authored
llvm-svn: 129978
-
Eric Christopher authored
llvm-svn: 129976
-