diff options
| author | Chris Lattner <sabre@nondot.org> | 2004-04-09 22:50:22 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2004-04-09 22:50:22 +0000 |
| commit | 0aa565647c750019fa1fc4c598c05e280e3fc3d7 (patch) | |
| tree | c48fb2e2d06e31ef6d74b428d23fa95412ab6137 /llvm/test | |
| parent | 5bcb4eb13c136e5ed68c1764fb69df1856e0b072 (diff) | |
| download | bcm5719-llvm-0aa565647c750019fa1fc4c598c05e280e3fc3d7.tar.gz bcm5719-llvm-0aa565647c750019fa1fc4c598c05e280e3fc3d7.zip | |
Fold code like:
if (C)
V1 |= V2;
into:
Vx = V1 | V2;
V1 = select C, V1, Vx
when the expression can be evaluated unconditionally and is *cheap* to
execute. This limited form of if conversion is quite handy in lots of cases.
For example, it turns this testcase into straight-line code:
int in0 ; int in1 ; int in2 ; int in3 ;
int in4 ; int in5 ; int in6 ; int in7 ;
int in8 ; int in9 ; int in10; int in11;
int in12; int in13; int in14; int in15;
long output;
void mux(void) {
output =
(in0 ? 0x00000001 : 0) | (in1 ? 0x00000002 : 0) |
(in2 ? 0x00000004 : 0) | (in3 ? 0x00000008 : 0) |
(in4 ? 0x00000010 : 0) | (in5 ? 0x00000020 : 0) |
(in6 ? 0x00000040 : 0) | (in7 ? 0x00000080 : 0) |
(in8 ? 0x00000100 : 0) | (in9 ? 0x00000200 : 0) |
(in10 ? 0x00000400 : 0) | (in11 ? 0x00000800 : 0) |
(in12 ? 0x00001000 : 0) | (in13 ? 0x00002000 : 0) |
(in14 ? 0x00004000 : 0) | (in15 ? 0x00008000 : 0) ;
}
llvm-svn: 12798
Diffstat (limited to 'llvm/test')
0 files changed, 0 insertions, 0 deletions

