Index: llvm/test/Transforms/InstCombine/and-or-icmps.ll =================================================================== --- llvm/test/Transforms/InstCombine/and-or-icmps.ll +++ llvm/test/Transforms/InstCombine/and-or-icmps.ll @@ -2568,3 +2568,31 @@ %r = or <2 x i1> %rx, %ry ret <2 x i1> %r } + +define i32 @icmp_slt_0_or_icmp_sgt_0_i32(i32 %x) { +; CHECK-LABEL: @icmp_slt_0_or_icmp_sgt_0_i32( +; CHECK-NEXT: [[B:%.*]] = icmp ne i32 [[X:%.*]], 0 +; CHECK-NEXT: [[C:%.*]] = zext i1 [[B:%.*]] to i32 +; CHECK-NEXT: ret i32 [[C]] +; + %A = icmp slt i32 %x, 0 + %B = icmp sgt i32 %x, 0 + %C = zext i1 %A to i32 + %D = zext i1 %B to i32 + %E = or i32 %C, %D + ret i32 %E +} + +define i64 @icmp_slt_0_or_icmp_sgt_0_i64(i64 %x) { +; CHECK-LABEL: @icmp_slt_0_or_icmp_sgt_0_i64( +; CHECK-NEXT: [[B:%.*]] = icmp ne i64 [[X:%.*]], 0 +; CHECK-NEXT: [[C:%.*]] = zext i1 [[B:%.*]] to i64 +; CHECK-NEXT: ret i64 [[C]] +; + %A = icmp slt i64 %x, 0 + %B = icmp sgt i64 %x, 0 + %C = zext i1 %A to i64 + %D = zext i1 %B to i64 + %E = or i64 %C, %D + ret i64 %E +}