mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-04 18:06:49 +00:00
with recent work, we now optimize this into:
define i32 @foo(i32 %x) nounwind readnone ssp { entry: %tobool = icmp eq i32 %x, 0 %tmp5 = select i1 %tobool, i32 2, i32 1 ret i32 %tmp5 } git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124091 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e3357863aa
commit
7ea7d32de6
@ -1270,26 +1270,6 @@ SingleSource/Benchmarks/Misc/dt.c
|
|||||||
|
|
||||||
//===---------------------------------------------------------------------===//
|
//===---------------------------------------------------------------------===//
|
||||||
|
|
||||||
A/B get pinned to the stack because we turn an if/then into a select instead
|
|
||||||
of PRE'ing the load/store. This may be fixable in instcombine:
|
|
||||||
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37892
|
|
||||||
|
|
||||||
struct X { int i; };
|
|
||||||
int foo (int x) {
|
|
||||||
struct X a;
|
|
||||||
struct X b;
|
|
||||||
struct X *p;
|
|
||||||
a.i = 1;
|
|
||||||
b.i = 2;
|
|
||||||
if (x)
|
|
||||||
p = &a;
|
|
||||||
else
|
|
||||||
p = &b;
|
|
||||||
return p->i;
|
|
||||||
}
|
|
||||||
|
|
||||||
//===---------------------------------------------------------------------===//
|
|
||||||
|
|
||||||
Interesting missed case because of control flow flattening (should be 2 loads):
|
Interesting missed case because of control flow flattening (should be 2 loads):
|
||||||
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26629
|
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26629
|
||||||
With: llvm-gcc t2.c -S -o - -O0 -emit-llvm | llvm-as |
|
With: llvm-gcc t2.c -S -o - -O0 -emit-llvm | llvm-as |
|
||||||
|
Loading…
Reference in New Issue
Block a user