- Aug 26, 2010
-
-
Bill Wendling authored
comparison with 0. These two pieces of code should give identical results: rsbs r1, r1, 0 cmp r0, r1 mov r0, #0 it ls mov r0, #1 and: cmn r0, r1 mov r0, #0 it ls mov r0, #1 However, the CMN gives the *opposite* result when r1 is 0. This is because the carry flag is set in the CMP case but not in the CMN case. In short, the CMP instruction doesn't perform a truncate of the (logical) NOT of 0 plus the value of r0 and the carry bit (because the "carry bit" parameter to AddWithCarry is defined as 1 in this case, the carry flag will always be set when r0 >= 0). The CMN instruction doesn't perform a NOT of 0 so there is never a "carry" when this AddWithCarry is performed (because the "carry bit" parameter to AddWithCarry is defined as 0). The AddWithCarry in the CMP case seems to be relying upon the identity: ~x + 1 = -x However when x is 0 and unsigned, this doesn't hold: x = 0 ~x = 0xFFFF FFFF ~x + 1 = 0x1 0000 0000 (-x = 0) != (0x1 0000 0000 = ~x + 1) Therefore, we should disable *all* versions of CMN, especially when comparing against zero, until we can limit when the CMN instruction is used (when we know that the RHS is not 0) or when we have a hardware fix for this. (See the ARM docs for the "AddWithCarry" pseudo-code.) This is related to <rdar://problem/7569620>. llvm-svn: 112176
-
Bob Wilson authored
llvm-svn: 112170
-
-
Bob Wilson authored
a VLD result was not used (Radar 8355607). It should also fix pr7988, but I haven't verified that yet. llvm-svn: 112118
-
Bob Wilson authored
with the VST4 instructions. Until after register allocation, we want to represent sets of adjacent registers by a single super-register. These VST4 pseudo instructions have a single QQ or QQQQ source register operand. They get expanded to the real VST4 instructions with 4 separate D register operands. Once this conversion is complete, we'll be able to remove the NEONPreAllocPass and avoid some fragile and hacky code elsewhere. llvm-svn: 112108
-
- Aug 25, 2010
-
-
Jim Grosbach authored
When doing copy/paste/modify, it's apparently rather important to remember the 'modify' bit... llvm-svn: 112075
-
Daniel Dunbar authored
comparison that would overflow. - The other under/overflow cases can't actually happen because the immediates which would trigger them are legal (so we don't enter this code), but adjusted the style to make it clear the transform is always valid. llvm-svn: 112053
-
Eric Christopher authored
llvm-svn: 112039
-
Eric Christopher authored
Fix some todos. No functional change. llvm-svn: 112031
-
Eric Christopher authored
llvm-svn: 111981
-
Eric Christopher authored
llvm-svn: 111974
-
Eric Christopher authored
to fix this in the port. llvm-svn: 111973
-
- Aug 24, 2010
-
-
Jim Grosbach authored
access. rdar://8277890&7352504 llvm-svn: 111968
-
Jim Grosbach authored
For now it's still a command line option, but the interface to the generic code doesn't need to know that. llvm-svn: 111942
-
Jim Grosbach authored
Intended to help ease reproducing problems by increasing base register usage after heuristics for only using the when needed are in place. llvm-svn: 111930
-
Bill Wendling authored
llvm-svn: 111889
-
Eric Christopher authored
llvm-svn: 111887
-
Eric Christopher authored
llvm-svn: 111885
-
Eric Christopher authored
that it needs to go away. Use loadRegFromStackSlot where possible. Also, remember to update the value map. llvm-svn: 111883
-
Eric Christopher authored
getting an address for an object and select some default values. llvm-svn: 111871
-
Eric Christopher authored
llvm-svn: 111864
-
Eric Christopher authored
llvm-svn: 111860
-
Eric Christopher authored
llvm-svn: 111854
-
- Aug 23, 2010
-
-
Eric Christopher authored
llvm-svn: 111850
-
- Aug 20, 2010
-
-
Bob Wilson authored
zero-extend operations. llvm-svn: 111614
-
Eric Christopher authored
move some constraints around. llvm-svn: 111594
-
Eric Christopher authored
llvm-svn: 111592
-
-
- Aug 19, 2010
-
-
Jim Grosbach authored
rdar://8277890 llvm-svn: 111533
-
Eric Christopher authored
llvm-svn: 111518
-
Eric Christopher authored
llvm-svn: 111489
-
Bill Wendling authored
llvm-svn: 111481
-
Eric Christopher authored
llvm-svn: 111456
-
Jim Grosbach authored
frame index reference to an object in the local block is seen, check if it's near enough to any previously allocaated base register to re-use. rdar://8277890 llvm-svn: 111443
-
- Aug 18, 2010
-
-
Bill Wendling authored
llvm-svn: 111430
-
Jim Grosbach authored
Nothing fancy, just ask the target if any currently available base reg is in range for the instruction under consideration and use the first one that is. Placeholder ARM implementation simply returns false for now. ongoing saga of rdar://8277890 llvm-svn: 111374
-
Bob Wilson authored
Testcase from Nick Lewycky. llvm-svn: 111341
-
Jim Grosbach authored
the local block. Resolve references to those indices to a new base register. For simplification and testing purposes, a new virtual base register is allocated for each frame index being resolved. The result is truly horrible, but correct, code that's good for exercising the new code paths. Next up is adding thumb1 support, which should be very simple. Following that will be adding base register re-use and implementing a reasonable ARM heuristic for when a virtual base register should be generated at all. llvm-svn: 111315
-
- Aug 17, 2010
-
-
Jakob Stoklund Olesen authored
llvm-svn: 111277
-
Jim Grosbach authored
llvm-svn: 111266
-