| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
| |
is to manage processor specific attributes from the command line. See examples
of use in llc/lli and PowerPCTargetSubtarget.
llvm-svn: 23191
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 23186
|
|
|
|
|
|
| |
statement in visit().
llvm-svn: 23185
|
|
|
|
|
|
|
| |
be mostly functional. It currently has all folds from SelectionDAG.cpp
that do not involve a condition code.
llvm-svn: 23184
|
|
|
|
| |
llvm-svn: 23181
|
|
|
|
|
|
| |
getting them out of the business of making stack slots.
llvm-svn: 23180
|
|
|
|
| |
llvm-svn: 23179
|
|
|
|
| |
llvm-svn: 23178
|
|
|
|
| |
llvm-svn: 23177
|
|
|
|
|
|
| |
the ops to dag optimization.
llvm-svn: 23176
|
|
|
|
| |
llvm-svn: 23173
|
|
|
|
| |
llvm-svn: 23171
|
|
|
|
| |
llvm-svn: 23170
|
|
|
|
| |
llvm-svn: 23169
|
|
|
|
| |
llvm-svn: 23168
|
|
|
|
|
|
| |
fixes crafty and probably others.
llvm-svn: 23167
|
|
|
|
| |
llvm-svn: 23166
|
|
|
|
|
|
| |
case in MaskedValueIsZero was wrong.
llvm-svn: 23165
|
|
|
|
|
|
| |
MaskedValueIsZero.
llvm-svn: 23164
|
|
|
|
|
|
| |
ugly hacks
llvm-svn: 23162
|
|
|
|
|
|
|
|
| |
likethis, it is a requirement on PPC, which can have an f32 value in r3 at onepoint in a function and a f64 value in r3 at another point. :(
This fixes compilation of mesa
llvm-svn: 23161
|
|
|
|
| |
llvm-svn: 23159
|
|
|
|
|
|
| |
This fixes PR621 and Regression/CodeGen/X86/2005-08-30-RegAllocAliasProblem.ll
llvm-svn: 23158
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
to SHIFT_PARTS nodes
llvm-svn: 23151
|
|
|
|
| |
llvm-svn: 23150
|
|
|
|
|
|
| |
at least tends to expose problems elsewhere.
llvm-svn: 23149
|
|
|
|
| |
llvm-svn: 23148
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
them. This allows for elminination of redundant extends in the entry
blocks of functions on PowerPC.
Add support for i32 x i32 -> i64 multiplies, by recognizing when the inputs
to ISD::MUL in ExpandOp are actually just extended i32 values and not real
i64 values. this allows us to codegen
int mulhs(int a, int b) { return ((long long)a * b) >> 32; }
as:
_mulhs:
mulhw r3, r4, r3
blr
instead of:
_mulhs:
mulhwu r2, r4, r3
srawi r5, r3, 31
mullw r5, r4, r5
add r2, r2, r5
srawi r4, r4, 31
mullw r3, r4, r3
add r3, r2, r3
blr
with a similar improvement on x86.
llvm-svn: 23147
|
|
|
|
| |
llvm-svn: 23145
|
|
|
|
| |
llvm-svn: 23144
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
which I failed to include when I moved the code over. This fixes
MallocBench/gs.
llvm-svn: 23140
|
|
|
|
|
|
| |
STOREs, know the right type to store.
llvm-svn: 23139
|
|
|
|
|
|
|
|
|
| |
no xcode, this is not right:
if (!foo) break;
X;
llvm-svn: 23138
|
|
|
|
| |
llvm-svn: 23137
|
|
|
|
| |
llvm-svn: 23136
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
token chains first. For this C function:
int test() {
int i;
for (i = 0; i < 100000; ++i)
foo();
}
Instead of emitting this (condition before call)
.LBB_test_1: ; no_exit
addi r30, r30, 1
lis r2, 1
ori r2, r2, 34464
cmpw cr2, r30, r2
bl L_foo$stub
bne cr2, .LBB_test_1 ; no_exit
Emit this:
.LBB_test_1: ; no_exit
bl L_foo$stub
addi r30, r30, 1
lis r2, 1
ori r2, r2, 34464
cmpw cr0, r30, r2
bne cr0, .LBB_test_1 ; no_exit
Which makes it so we don't have to save/restore cr2 in the prolog/epilog of
the function.
This also makes the code much more similar to what the pattern isel produces.
llvm-svn: 23135
|
|
|
|
|
|
| |
This fixes voronoi and bh in Olden, allowing all of olden to pass!
llvm-svn: 23133
|
|
|
|
| |
llvm-svn: 23131
|
|
|
|
| |
llvm-svn: 23130
|
|
|
|
| |
llvm-svn: 23129
|
|
|
|
| |
llvm-svn: 23128
|
|
|
|
| |
llvm-svn: 23127
|