| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
switch should never be exited, so its bottom is now unreachable.
llvm-svn: 23234
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
directly out of R1 (without using a CopyFromReg, which uses a chain), multiple
allocas were getting CSE'd together, producing bogus code. For this:
int %foo(bool %X, int %A, int %B) {
br bool %X, label %T, label %F
F:
%G = alloca int
%H = alloca int
store int %A, int* %G
store int %B, int* %H
%R = load int* %G
ret int %R
T:
ret int 0
}
We were generating:
_foo:
stwu r1, -16(r1)
stw r31, 4(r1)
or r31, r1, r1
stw r1, 12(r31)
cmpwi cr0, r3, 0
bne cr0, .LBB_foo_2 ; T
.LBB_foo_1: ; F
li r2, 16
subf r2, r2, r1 ;; One alloca
or r1, r2, r2
or r3, r1, r1
or r1, r2, r2
or r2, r1, r1
stw r4, 0(r3)
stw r5, 0(r2)
lwz r3, 0(r3)
lwz r1, 12(r31)
lwz r31, 4(r31)
lwz r1, 0(r1)
blr
.LBB_foo_2: ; T
li r3, 0
lwz r1, 12(r31)
lwz r31, 4(r31)
lwz r1, 0(r1)
blr
Now we generate:
_foo:
stwu r1, -16(r1)
stw r31, 4(r1)
or r31, r1, r1
stw r1, 12(r31)
cmpwi cr0, r3, 0
bne cr0, .LBB_foo_2 ; T
.LBB_foo_1: ; F
or r2, r1, r1
li r3, 16
subf r2, r3, r2 ;; Alloca 1
or r1, r2, r2
or r2, r1, r1
or r6, r1, r1
subf r3, r3, r6 ;; Alloca 2
or r1, r3, r3
or r3, r1, r1
stw r4, 0(r2)
stw r5, 0(r3)
lwz r3, 0(r2)
lwz r1, 12(r31)
lwz r31, 4(r31)
lwz r1, 0(r1)
blr
.LBB_foo_2: ; T
li r3, 0
lwz r1, 12(r31)
lwz r31, 4(r31)
lwz r1, 0(r1)
blr
This fixes Povray and SPASS with the dag isel, the last two failing cases.
Tommorow we will hopefully turn it on by default! :)
llvm-svn: 23190
|
|
|
|
|
|
|
|
|
|
| |
could cause a miscompile. Fixing this didn't fix the two programs that fail
though. :(
This also changes the implementation to follow the pattern selector more
closely, causing us to select 0 to li instead of lis.
llvm-svn: 23189
|
|
|
|
|
|
| |
and selecting early prevents folding immediates into the cmpw* instructions
llvm-svn: 23188
|
|
|
|
|
|
| |
getting them out of the business of making stack slots.
llvm-svn: 23180
|
|
|
|
| |
llvm-svn: 23179
|
|
|
|
| |
llvm-svn: 23171
|
|
|
|
|
|
| |
fixes crafty and probably others.
llvm-svn: 23167
|
|
|
|
|
|
| |
ugly hacks
llvm-svn: 23162
|
|
|
|
| |
llvm-svn: 23159
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Remove code (last hunk) that miscompiled immediate and's, such as
and uint %tmp.30, 4294958079
into
andi. r8, r8, 56319
andis. r8, r8, 65535
instead of:
li r9, -9217
and r8, r8, r9
The first always generates zero.
This fixes espresso.
llvm-svn: 23155
|
|
|
|
|
|
| |
fixes fourinarow
llvm-svn: 23153
|
|
|
|
|
|
| |
fixes fhourstones
llvm-svn: 23152
|
|
|
|
| |
llvm-svn: 23150
|
|
|
|
|
|
|
|
|
| |
linking them to calls when appropriate, this prevents the scheduler from
pulling these copies away from the call.
This fixes Ptrdist/yacr2
llvm-svn: 23143
|
|
|
|
|
|
| |
fixes MediaBench/toast with the dag selector
llvm-svn: 23141
|
|
|
|
|
|
| |
STOREs, know the right type to store.
llvm-svn: 23139
|
|
|
|
| |
llvm-svn: 23137
|
|
|
|
| |
llvm-svn: 23136
|
|
|
|
|
|
| |
This fixes voronoi and bh in Olden, allowing all of olden to pass!
llvm-svn: 23133
|
|
|
|
| |
llvm-svn: 23127
|
|
|
|
| |
llvm-svn: 23126
|
|
|
|
|
|
|
| |
Olden/msFix order of operands for copytoreg node when emitting calls. This fixes
Olden/mstt.
llvm-svn: 23125
|
|
|
|
| |
llvm-svn: 23123
|
|
|
|
| |
llvm-svn: 23121
|
|
|
|
| |
llvm-svn: 23120
|
|
|
|
| |
llvm-svn: 23101
|
|
|
|
|
|
|
|
| |
giving it a non-instruction opcode. The dag->dag selector used to not
select the operands of the fsel, because it thought that whole tree was
already selected.
llvm-svn: 23091
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
bool %test(int %X, int %Y) {
%C = setne int %X, 0
ret bool %C
}
to:
_test:
addic r2, r3, -1
subfe r3, r2, r3
blr
llvm-svn: 23089
|
|
|
|
|
|
| |
just return its input, instead of emitting an explicit copy.
llvm-svn: 23088
|
|
|
|
| |
llvm-svn: 23084
|
|
|
|
|
|
|
|
| |
putting it into the constant pool. This allows the isel machinery to
create constants that it will end up deciding are not needed, without them
ending up in the resultant function constant pool.
llvm-svn: 23081
|
|
|
|
| |
llvm-svn: 23080
|
|
|
|
|
|
| |
every other SD API. Fix it to take the opcode before the types.
llvm-svn: 23079
|
|
|
|
| |
llvm-svn: 23073
|
|
|
|
| |
llvm-svn: 23072
|
|
|
|
| |
llvm-svn: 23068
|
|
|
|
|
|
|
| |
return. Allow the udiv breaker-upper to work with any non-zero constant
operand.
llvm-svn: 23066
|
|
|
|
|
|
| |
ISelPattern
llvm-svn: 23062
|
|
|
|
| |
llvm-svn: 23060
|
|
|
|
|
|
| |
they will come later.
llvm-svn: 23059
|
|
|
|
|
|
|
|
|
| |
_test:
srawi r2, r3, 2
addze r3, r2
blr
llvm-svn: 23052
|
|
|
|
|
|
|
| |
is used by the int -> FP code among other things. This gets
2005-05-12-Int64ToFP past that failure, to dying on lack of support for add_parts
llvm-svn: 23042
|
|
|
|
| |
llvm-svn: 23038
|
|
|
|
|
|
| |
around to functions and stuff
llvm-svn: 23036
|
|
|
|
| |
llvm-svn: 23034
|
|
|
|
| |
llvm-svn: 23032
|
|
|
|
|
|
|
| |
instructions take a consistent reg class. Implement ISD::UNDEF in the dag->dag
selector to generate this, fixing UnitTests/2003-07-06-IntOverflow.
llvm-svn: 23028
|
|
|
|
| |
llvm-svn: 23026
|
|
|
|
|
|
| |
Prefer 'neg X' to 'subfic 0, X' since neg does not set XER[CA]
llvm-svn: 23001
|