mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-04 01:43:06 +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):
|
||||
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26629
|
||||
With: llvm-gcc t2.c -S -o - -O0 -emit-llvm | llvm-as |
|
||||
|
Loading…
Reference in New Issue
Block a user