mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
move some random notes out of my email into someplace useful
llvm-svn: 24956
This commit is contained in:
parent
e009e40008
commit
f7ed832fcf
@ -241,3 +241,35 @@ _test:
|
||||
|
||||
--> important for C++.
|
||||
|
||||
===-------------------------------------------------------------------------===
|
||||
|
||||
int test3(int a, int b) { return (a < 0) ? a : 0; }
|
||||
|
||||
should be branch free code. LLVM is turning it into < 1 because of the RHS.
|
||||
|
||||
===-------------------------------------------------------------------------===
|
||||
|
||||
For this testcase:
|
||||
int f1(int a, int b) { return (a&0xF)|(b&0xF0); }
|
||||
|
||||
We currently emit:
|
||||
_f1:
|
||||
rlwinm r2, r4, 0, 24, 27
|
||||
rlwimi r2, r3, 0, 28, 31
|
||||
or r3, r2, r2
|
||||
blr
|
||||
|
||||
We could emit:
|
||||
_f1:
|
||||
rlwinm r4, r4, 0, 24, 27
|
||||
rlwimi r3, r4, 0, 0, 27
|
||||
blr
|
||||
|
||||
===-------------------------------------------------------------------------===
|
||||
|
||||
No loads or stores of the constants should be needed:
|
||||
|
||||
struct foo { double X, Y; };
|
||||
void xxx(struct foo F);
|
||||
void bar() { struct foo R = { 1.0, 2.0 }; xxx(R); }
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user