mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-27 13:40:30 +00:00
[InstCombine] allow vector icmp bool transforms
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@271843 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4023ab727f
commit
1518a5c65d
@ -3188,7 +3188,7 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
|
||||
Type *Ty = Op0->getType();
|
||||
|
||||
// icmp's with boolean values can always be turned into bitwise operations
|
||||
if (Ty->isIntegerTy(1)) {
|
||||
if (Ty->getScalarType()->isIntegerTy(1)) {
|
||||
switch (I.getPredicate()) {
|
||||
default: llvm_unreachable("Invalid icmp instruction!");
|
||||
case ICmpInst::ICMP_EQ: { // icmp eq i1 A, B -> ~(A^B)
|
||||
|
@ -226,7 +226,7 @@ define <2 x i1> @test19vec(<2 x i32> %X) {
|
||||
|
||||
define <3 x i1> @test19vec2(<3 x i1> %X) {
|
||||
; CHECK-LABEL: @test19vec2(
|
||||
; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq <3 x i1> %X, zeroinitializer
|
||||
; CHECK-NEXT: [[CMPEQ:%.*]] = xor <3 x i1> %X, <i1 true, i1 true, i1 true>
|
||||
; CHECK-NEXT: ret <3 x i1> [[CMPEQ]]
|
||||
;
|
||||
%sext = sext <3 x i1> %X to <3 x i32>
|
||||
|
@ -118,10 +118,10 @@ define i1 @test13(i1 %A, i1 %B) {
|
||||
ret i1 %C
|
||||
}
|
||||
|
||||
; FIXME: Vectors should fold the same as scalars.
|
||||
define <2 x i1> @test13vec(<2 x i1> %A, <2 x i1> %B) {
|
||||
; CHECK-LABEL: @test13vec(
|
||||
; CHECK-NEXT: [[C:%.*]] = icmp uge <2 x i1> %A, %B
|
||||
; CHECK-NEXT: [[CTMP:%.*]] = xor <2 x i1> %B, <i1 true, i1 true>
|
||||
; CHECK-NEXT: [[C:%.*]] = or <2 x i1> [[CTMP]], %A
|
||||
; CHECK-NEXT: ret <2 x i1> [[C]]
|
||||
;
|
||||
%C = icmp uge <2 x i1> %A, %B
|
||||
@ -138,10 +138,10 @@ define i1 @test14(i1 %A, i1 %B) {
|
||||
ret i1 %C
|
||||
}
|
||||
|
||||
; FIXME: Vectors should fold the same as scalars.
|
||||
define <3 x i1> @test14vec(<3 x i1> %A, <3 x i1> %B) {
|
||||
; CHECK-LABEL: @test14vec(
|
||||
; CHECK-NEXT: [[C:%.*]] = icmp eq <3 x i1> %A, %B
|
||||
; CHECK-NEXT: [[CTMP:%.*]] = xor <3 x i1> %A, %B
|
||||
; CHECK-NEXT: [[C:%.*]] = xor <3 x i1> [[CTMP]], <i1 true, i1 true, i1 true>
|
||||
; CHECK-NEXT: ret <3 x i1> [[C]]
|
||||
;
|
||||
%C = icmp eq <3 x i1> %A, %B
|
||||
|
Loading…
Reference in New Issue
Block a user