| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 14159
|
|
|
|
|
|
| |
instructions generated.
llvm-svn: 14154
|
|
|
|
|
|
|
|
|
| |
being
printed incorrectly, and we were reserving 8 extra bytes of stack space for functions
on X86.
llvm-svn: 14152
|
|
|
|
| |
llvm-svn: 14151
|
|
|
|
| |
llvm-svn: 14150
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
comparisons. In an 'isunordered' predicate, which looks like this at
the LLVM level:
%a = call bool %llvm.isnan(double %X)
%b = call bool %llvm.isnan(double %Y)
%COM = or bool %a, %b
We used to generate this code:
fxch %ST(1)
fucomip %ST(0), %ST(0)
setp %AL
fucomip %ST(0), %ST(0)
setp %AH
or %AL, %AH
With this patch, we generate this code:
fucomip %ST(0), %ST(1)
fstp %ST(0)
setp %AL
Which should make alkis happy. Tested as X86/compare_folding.llx:test1
llvm-svn: 14148
|
|
|
|
| |
llvm-svn: 14146
|
|
|
|
| |
llvm-svn: 14145
|
|
|
|
|
|
|
|
|
| |
instructions,
we can get rid of the FpUCOM/FpUCOMi pseudo instructions, which makes stuff simpler
and faster.
llvm-svn: 14144
|
|
|
|
|
|
| |
twoarg cases.
llvm-svn: 14143
|
|
|
|
|
|
|
|
| |
test/Regression/CodeGen/X86/isnan.llx
testcase
llvm-svn: 14141
|
|
|
|
| |
llvm-svn: 14140
|
|
|
|
|
|
|
|
|
|
|
|
| |
This makes the code much simpler, and the two cases really do belong apart.
Once we do it, it's pretty obvious how flawed the logic was for A != A case,
so I fixed it (fixing PR369).
This also uses freeStackSlotAfter instead of inserting an fxchg then
popStackAfter'ing in the case where there is a dead result (unlikely, but
possible), producing better code.
llvm-svn: 14139
|
|
|
|
| |
llvm-svn: 14137
|
|
|
|
| |
llvm-svn: 14134
|
|
|
|
|
|
|
|
| |
isunordered(X, Y) === isnan(X) | isnan(Y)
Remove isunordered, add isnan.
llvm-svn: 14132
|
|
|
|
|
|
| |
them into the constant pool.
llvm-svn: 14128
|
|
|
|
| |
llvm-svn: 14127
|
|
|
|
| |
llvm-svn: 14123
|
|
|
|
| |
llvm-svn: 14122
|
|
|
|
| |
llvm-svn: 14121
|
|
|
|
| |
llvm-svn: 14120
|
|
|
|
| |
llvm-svn: 14115
|
|
|
|
| |
llvm-svn: 14113
|
|
|
|
|
|
|
|
| |
targets whose stack grows up.
Patch contributed by Vladimir Prus
llvm-svn: 14111
|
|
|
|
| |
llvm-svn: 14110
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
186.crafty, fhourstones and 132.ijpeg.
Bugpoint makes really nasty miscompilations embarassingly easy to find. It
narrowed it down to the instcombiner and this testcase (from fhourstones):
bool %l7153_l4706_htstat_loopentry_2E_4_no_exit_2E_4(int* %i, [32 x int]* %works, int* %tmp.98.out) {
newFuncRoot:
%tmp.96 = load int* %i ; <int> [#uses=1]
%tmp.97 = getelementptr [32 x int]* %works, long 0, int %tmp.96 ; <int*> [#uses=1]
%tmp.98 = load int* %tmp.97 ; <int> [#uses=2]
%tmp.99 = load int* %i ; <int> [#uses=1]
%tmp.100 = and int %tmp.99, 7 ; <int> [#uses=1]
%tmp.101 = seteq int %tmp.100, 7 ; <bool> [#uses=2]
%tmp.102 = cast bool %tmp.101 to int ; <int> [#uses=0]
br bool %tmp.101, label %codeRepl4.exitStub, label %codeRepl3.exitStub
codeRepl4.exitStub: ; preds = %newFuncRoot
store int %tmp.98, int* %tmp.98.out
ret bool true
codeRepl3.exitStub: ; preds = %newFuncRoot
store int %tmp.98, int* %tmp.98.out
ret bool false
}
... which only has one combination performed on it:
$ llvm-as < t.ll | opt -instcombine -debug | llvm-dis
IC: Old = %tmp.101 = seteq int %tmp.100, 7 ; <bool> [#uses=1]
New = setne int %tmp.100, 0 ; <bool>:<badref> [#uses=0]
IC: MOD = br bool %tmp.101, label %codeRepl3.exitStub, label %codeRepl4.exitStub
IC: MOD = %tmp.97 = getelementptr [32 x int]* %works, uint 0, int %tmp.96 ; <int*> [#uses=1]
It doesn't get much better than this. :)
llvm-svn: 14109
|
|
|
|
| |
llvm-svn: 14108
|
|
|
|
| |
llvm-svn: 14107
|
|
|
|
| |
llvm-svn: 14106
|
|
|
|
| |
llvm-svn: 14104
|
|
|
|
| |
llvm-svn: 14103
|
|
|
|
| |
llvm-svn: 14102
|
|
|
|
| |
llvm-svn: 14101
|
|
|
|
|
|
| |
on new front-ends and stuff). Also get rid of some tabs that snuck in.
llvm-svn: 14100
|
|
|
|
|
|
|
| |
such a way that if the Value being printed is standalone that we don't
assert and abort but just print ":??" for the slot number instead.
llvm-svn: 14097
|
|
|
|
|
|
| |
that cast to bool.
llvm-svn: 14096
|
|
|
|
| |
llvm-svn: 14095
|
|
|
|
| |
llvm-svn: 14093
|
|
|
|
| |
llvm-svn: 14091
|
|
|
|
| |
llvm-svn: 14090
|
|
|
|
|
|
| |
Don't dump functions unless "detailedResults" is requested.
llvm-svn: 14089
|
|
|
|
| |
llvm-svn: 14088
|
|
|
|
| |
llvm-svn: 14087
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
us to
collapse this:
bool %le(int %A, int %B) {
%c1 = setgt int %A, %B
%tmp = select bool %c1, int 1, int 0
%c2 = setlt int %A, %B
%result = select bool %c2, int -1, int %tmp
%c3 = setle int %result, 0
ret bool %c3
}
into:
bool %le(int %A, int %B) {
%c3 = setle int %A, %B ; <bool> [#uses=1]
ret bool %c3
}
which is handy, because the Java FE makes these sequences all over the place.
This is tested as: test/Regression/Transforms/InstCombine/JavaCompare.ll
llvm-svn: 14086
|
|
|
|
|
|
| |
in doxygen.
llvm-svn: 14084
|
|
|
|
| |
llvm-svn: 14083
|
|
|
|
| |
llvm-svn: 14078
|
|
|
|
|
|
| |
This fixes PR363
llvm-svn: 14076
|
|
|
|
|
|
| |
accounted for in the map (at least, in its current format).
llvm-svn: 14075
|