mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-25 21:46:50 +00:00
add a note, progress unblocked by PR8575 being fixed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124599 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
78e2074eee
commit
fd2ad8783c
@ -2274,3 +2274,51 @@ llc time when it gets inlined, because we can use smaller transfers. This also
|
||||
avoids partial register stalls in some important cases.
|
||||
|
||||
//===---------------------------------------------------------------------===//
|
||||
|
||||
With PR8575 we're now generating better code for:
|
||||
|
||||
static _Bool foo(int x) { return x == 1; }
|
||||
static _Bool bar(int x) { return x == 2; }
|
||||
static _Bool baz(int x) { return x == 3; }
|
||||
|
||||
_Bool quux(int x) {
|
||||
return foo(x) || bar(x) || baz(x);
|
||||
}
|
||||
|
||||
$ clang t.c -S -o - -O3 -mkernel -fomit-frame-pointer
|
||||
_quux: ## @quux
|
||||
## BB#0: ## %entry
|
||||
decl %edi
|
||||
cmpl $3, %edi
|
||||
movb $1, %al
|
||||
jb LBB0_2
|
||||
## BB#1: ## %lor.rhs
|
||||
xorb %al, %al
|
||||
LBB0_2: ## %lor.end
|
||||
movzbl %al, %eax
|
||||
andl $1, %eax
|
||||
ret
|
||||
|
||||
But this should use a "setcc" instead of materializing a 0/1 value
|
||||
the hard way. This looks like #1: simplifycfg should transform the
|
||||
switch into a sub+icmp+branch, and an instcombine hack to replace
|
||||
the PHI with a zext of the branch condition. Here's the IR today:
|
||||
|
||||
define zeroext i1 @quux(i32 %x) nounwind readnone ssp noredzone {
|
||||
entry:
|
||||
switch i32 %x, label %lor.rhs [
|
||||
i32 1, label %lor.end
|
||||
i32 2, label %lor.end
|
||||
i32 3, label %lor.end
|
||||
]
|
||||
|
||||
lor.rhs: ; preds = %entry
|
||||
br label %lor.end
|
||||
|
||||
lor.end: ; preds = %lor.rhs, %entry, %entry, %entry
|
||||
%0 = phi i1 [ true, %entry ], [ false, %lor.rhs ], [ true, %entry ], [ true, %entry ]
|
||||
ret i1 %0
|
||||
}
|
||||
|
||||
//===---------------------------------------------------------------------===//
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user