diff options
Diffstat (limited to 'test/Transforms/InstSimplify')
-rw-r--r-- | test/Transforms/InstSimplify/AndOrXor.ll | 45 | ||||
-rw-r--r-- | test/Transforms/InstSimplify/compare.ll | 29 | ||||
-rw-r--r-- | test/Transforms/InstSimplify/icmp-ranges.ll | 2726 | ||||
-rw-r--r-- | test/Transforms/InstSimplify/shufflevector.ll | 14 |
4 files changed, 2812 insertions, 2 deletions
diff --git a/test/Transforms/InstSimplify/AndOrXor.ll b/test/Transforms/InstSimplify/AndOrXor.ll index f9aaa4fa0c6c..e059d77f1fa8 100644 --- a/test/Transforms/InstSimplify/AndOrXor.ll +++ b/test/Transforms/InstSimplify/AndOrXor.ll @@ -468,6 +468,51 @@ define <2 x i3> @and_of_different_cast_icmps_vec(<2 x i8> %i, <2 x i16> %j) { ret <2 x i3> %and } +define i32 @or_of_zexted_icmps(i32 %i) { +; CHECK-LABEL: @or_of_zexted_icmps( +; CHECK-NEXT: ret i32 1 +; + %cmp0 = icmp ne i32 %i, 0 + %conv0 = zext i1 %cmp0 to i32 + %cmp1 = icmp uge i32 4, %i + %conv1 = zext i1 %cmp1 to i32 + %or = or i32 %conv0, %conv1 + ret i32 %or +} + +; Try a different cast and weird vector types. + +define i3 @or_of_bitcast_icmps_vec(<3 x i65> %i) { +; CHECK-LABEL: @or_of_bitcast_icmps_vec( +; CHECK-NEXT: ret i3 bitcast (<3 x i1> <i1 true, i1 true, i1 true> to i3) +; + %cmp0 = icmp sge <3 x i65> %i, zeroinitializer + %conv0 = bitcast <3 x i1> %cmp0 to i3 + %cmp1 = icmp slt <3 x i65> %i, zeroinitializer + %conv1 = bitcast <3 x i1> %cmp1 to i3 + %or = or i3 %conv0, %conv1 + ret i3 %or +} + +; We can't simplify if the casts are different. + +define i16 @or_of_different_cast_icmps(i8 %i) { +; CHECK-LABEL: @or_of_different_cast_icmps( +; CHECK-NEXT: [[CMP0:%.*]] = icmp ne i8 %i, 0 +; CHECK-NEXT: [[CONV0:%.*]] = zext i1 [[CMP0]] to i16 +; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %i, 1 +; CHECK-NEXT: [[CONV1:%.*]] = sext i1 [[CMP1]] to i16 +; CHECK-NEXT: [[OR:%.*]] = or i16 [[CONV0]], [[CONV1]] +; CHECK-NEXT: ret i16 [[OR]] +; + %cmp0 = icmp ne i8 %i, 0 + %conv0 = zext i1 %cmp0 to i16 + %cmp1 = icmp ne i8 %i, 1 + %conv1 = sext i1 %cmp1 to i16 + %or = or i16 %conv0, %conv1 + ret i16 %or +} + ; (A & ~B) | (A ^ B) -> A ^ B define i32 @test43(i32 %a, i32 %b) { diff --git a/test/Transforms/InstSimplify/compare.ll b/test/Transforms/InstSimplify/compare.ll index cd2fa880294a..883bf31ff77a 100644 --- a/test/Transforms/InstSimplify/compare.ll +++ b/test/Transforms/InstSimplify/compare.ll @@ -576,13 +576,38 @@ define i1 @srem3(i16 %X, i32 %Y) { ret i1 %E } -define i1 @udiv2(i32 %X, i32 %Y, i32 %Z) { +define i1 @udiv2(i32 %Z) { ; CHECK-LABEL: @udiv2( +; CHECK-NEXT: ret i1 true +; %A = udiv exact i32 10, %Z %B = udiv exact i32 20, %Z %C = icmp ult i32 %A, %B ret i1 %C -; CHECK: ret i1 true +} + +; Exact sdiv and equality preds can simplify. + +define i1 @sdiv_exact_equality(i32 %Z) { +; CHECK-LABEL: @sdiv_exact_equality( +; CHECK-NEXT: ret i1 false +; + %A = sdiv exact i32 10, %Z + %B = sdiv exact i32 20, %Z + %C = icmp eq i32 %A, %B + ret i1 %C +} + +; FIXME: But not other preds: PR32949 - https://bugs.llvm.org/show_bug.cgi?id=32949 + +define i1 @sdiv_exact_not_equality(i32 %Z) { +; CHECK-LABEL: @sdiv_exact_not_equality( +; CHECK-NEXT: ret i1 true +; + %A = sdiv exact i32 10, %Z + %B = sdiv exact i32 20, %Z + %C = icmp ult i32 %A, %B + ret i1 %C } define i1 @udiv3(i32 %X, i32 %Y) { diff --git a/test/Transforms/InstSimplify/icmp-ranges.ll b/test/Transforms/InstSimplify/icmp-ranges.ll index 292be6a8a559..45194f2df4f1 100644 --- a/test/Transforms/InstSimplify/icmp-ranges.ll +++ b/test/Transforms/InstSimplify/icmp-ranges.ll @@ -2729,6 +2729,2732 @@ define i1 @and_ult_ult_swap(i8 %x) { ret i1 %c } +; eq +; x == 13 || x == 17 + +define i1 @or_eq_eq(i8 %x) { +; CHECK-LABEL: @or_eq_eq( +; CHECK-NEXT: [[A:%.*]] = icmp eq i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp eq i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp eq i8 %x, 13 + %b = icmp eq i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x == 13 || x != 17 + +define i1 @or_eq_ne(i8 %x) { +; CHECK-LABEL: @or_eq_ne( +; CHECK-NEXT: [[B:%.*]] = icmp ne i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp eq i8 %x, 13 + %b = icmp ne i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x == 13 || x >=s 17 + +define i1 @or_eq_sge(i8 %x) { +; CHECK-LABEL: @or_eq_sge( +; CHECK-NEXT: [[A:%.*]] = icmp eq i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp eq i8 %x, 13 + %b = icmp sge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x == 13 || x >s 17 + +define i1 @or_eq_sgt(i8 %x) { +; CHECK-LABEL: @or_eq_sgt( +; CHECK-NEXT: [[A:%.*]] = icmp eq i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp eq i8 %x, 13 + %b = icmp sgt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x == 13 || x <=s 17 + +define i1 @or_eq_sle(i8 %x) { +; CHECK-LABEL: @or_eq_sle( +; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp eq i8 %x, 13 + %b = icmp sle i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x == 13 || x <s 17 + +define i1 @or_eq_slt(i8 %x) { +; CHECK-LABEL: @or_eq_slt( +; CHECK-NEXT: [[B:%.*]] = icmp slt i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp eq i8 %x, 13 + %b = icmp slt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x == 13 || x >=u 17 + +define i1 @or_eq_uge(i8 %x) { +; CHECK-LABEL: @or_eq_uge( +; CHECK-NEXT: [[A:%.*]] = icmp eq i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp eq i8 %x, 13 + %b = icmp uge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x == 13 || x >u 17 + +define i1 @or_eq_ugt(i8 %x) { +; CHECK-LABEL: @or_eq_ugt( +; CHECK-NEXT: [[A:%.*]] = icmp eq i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp eq i8 %x, 13 + %b = icmp ugt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x == 13 || x <=u 17 + +define i1 @or_eq_ule(i8 %x) { +; CHECK-LABEL: @or_eq_ule( +; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp eq i8 %x, 13 + %b = icmp ule i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x == 13 || x <u 17 + +define i1 @or_eq_ult(i8 %x) { +; CHECK-LABEL: @or_eq_ult( +; CHECK-NEXT: [[B:%.*]] = icmp ult i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp eq i8 %x, 13 + %b = icmp ult i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; ne +; x != 13 || x == 17 + +define i1 @or_ne_eq(i8 %x) { +; CHECK-LABEL: @or_ne_eq( +; CHECK-NEXT: [[A:%.*]] = icmp ne i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ne i8 %x, 13 + %b = icmp eq i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x != 13 || x != 17 + +define i1 @or_ne_ne(i8 %x) { +; CHECK-LABEL: @or_ne_ne( +; CHECK-NEXT: ret i1 true +; + %a = icmp ne i8 %x, 13 + %b = icmp ne i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x != 13 || x >=s 17 + +define i1 @or_ne_sge(i8 %x) { +; CHECK-LABEL: @or_ne_sge( +; CHECK-NEXT: [[A:%.*]] = icmp ne i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ne i8 %x, 13 + %b = icmp sge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x != 13 || x >s 17 + +define i1 @or_ne_sgt(i8 %x) { +; CHECK-LABEL: @or_ne_sgt( +; CHECK-NEXT: [[A:%.*]] = icmp ne i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ne i8 %x, 13 + %b = icmp sgt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x != 13 || x <=s 17 + +define i1 @or_ne_sle(i8 %x) { +; CHECK-LABEL: @or_ne_sle( +; CHECK-NEXT: ret i1 true +; + %a = icmp ne i8 %x, 13 + %b = icmp sle i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x != 13 || x <s 17 + +define i1 @or_ne_slt(i8 %x) { +; CHECK-LABEL: @or_ne_slt( +; CHECK-NEXT: ret i1 true +; + %a = icmp ne i8 %x, 13 + %b = icmp slt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x != 13 || x >=u 17 + +define i1 @or_ne_uge(i8 %x) { +; CHECK-LABEL: @or_ne_uge( +; CHECK-NEXT: [[A:%.*]] = icmp ne i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ne i8 %x, 13 + %b = icmp uge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x != 13 || x >u 17 + +define i1 @or_ne_ugt(i8 %x) { +; CHECK-LABEL: @or_ne_ugt( +; CHECK-NEXT: [[A:%.*]] = icmp ne i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ne i8 %x, 13 + %b = icmp ugt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x != 13 || x <=u 17 + +define i1 @or_ne_ule(i8 %x) { +; CHECK-LABEL: @or_ne_ule( +; CHECK-NEXT: ret i1 true +; + %a = icmp ne i8 %x, 13 + %b = icmp ule i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x != 13 || x <u 17 + +define i1 @or_ne_ult(i8 %x) { +; CHECK-LABEL: @or_ne_ult( +; CHECK-NEXT: ret i1 true +; + %a = icmp ne i8 %x, 13 + %b = icmp ult i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; sge +; x >=s 13 || x == 17 + +define i1 @or_sge_eq(i8 %x) { +; CHECK-LABEL: @or_sge_eq( +; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp sge i8 %x, 13 + %b = icmp eq i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=s 13 || x != 17 + +define i1 @or_sge_ne(i8 %x) { +; CHECK-LABEL: @or_sge_ne( +; CHECK-NEXT: ret i1 true +; + %a = icmp sge i8 %x, 13 + %b = icmp ne i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=s 13 || x >=s 17 + +define i1 @or_sge_sge(i8 %x) { +; CHECK-LABEL: @or_sge_sge( +; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp sge i8 %x, 13 + %b = icmp sge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=s 13 || x >s 17 + +define i1 @or_sge_sgt(i8 %x) { +; CHECK-LABEL: @or_sge_sgt( +; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp sge i8 %x, 13 + %b = icmp sgt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=s 13 || x <=s 17 + +define i1 @or_sge_sle(i8 %x) { +; CHECK-LABEL: @or_sge_sle( +; CHECK-NEXT: ret i1 true +; + %a = icmp sge i8 %x, 13 + %b = icmp sle i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=s 13 || x <s 17 + +define i1 @or_sge_slt(i8 %x) { +; CHECK-LABEL: @or_sge_slt( +; CHECK-NEXT: ret i1 true +; + %a = icmp sge i8 %x, 13 + %b = icmp slt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=s 13 || x >=u 17 + +define i1 @or_sge_uge(i8 %x) { +; CHECK-LABEL: @or_sge_uge( +; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sge i8 %x, 13 + %b = icmp uge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=s 13 || x >u 17 + +define i1 @or_sge_ugt(i8 %x) { +; CHECK-LABEL: @or_sge_ugt( +; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sge i8 %x, 13 + %b = icmp ugt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=s 13 || x <=u 17 + +define i1 @or_sge_ule(i8 %x) { +; CHECK-LABEL: @or_sge_ule( +; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sge i8 %x, 13 + %b = icmp ule i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=s 13 || x <u 17 + +define i1 @or_sge_ult(i8 %x) { +; CHECK-LABEL: @or_sge_ult( +; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp ult i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sge i8 %x, 13 + %b = icmp ult i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; sgt +; x >s 13 || x == 17 + +define i1 @or_sgt_eq(i8 %x) { +; CHECK-LABEL: @or_sgt_eq( +; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp sgt i8 %x, 13 + %b = icmp eq i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >s 13 || x != 17 + +define i1 @or_sgt_ne(i8 %x) { +; CHECK-LABEL: @or_sgt_ne( +; CHECK-NEXT: ret i1 true +; + %a = icmp sgt i8 %x, 13 + %b = icmp ne i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >s 13 || x >=s 17 + +define i1 @or_sgt_sge(i8 %x) { +; CHECK-LABEL: @or_sgt_sge( +; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp sgt i8 %x, 13 + %b = icmp sge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >s 13 || x >s 17 + +define i1 @or_sgt_sgt(i8 %x) { +; CHECK-LABEL: @or_sgt_sgt( +; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp sgt i8 %x, 13 + %b = icmp sgt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >s 13 || x <=s 17 + +define i1 @or_sgt_sle(i8 %x) { +; CHECK-LABEL: @or_sgt_sle( +; CHECK-NEXT: ret i1 true +; + %a = icmp sgt i8 %x, 13 + %b = icmp sle i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >s 13 || x <s 17 + +define i1 @or_sgt_slt(i8 %x) { +; CHECK-LABEL: @or_sgt_slt( +; CHECK-NEXT: ret i1 true +; + %a = icmp sgt i8 %x, 13 + %b = icmp slt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >s 13 || x >=u 17 + +define i1 @or_sgt_uge(i8 %x) { +; CHECK-LABEL: @or_sgt_uge( +; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sgt i8 %x, 13 + %b = icmp uge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >s 13 || x >u 17 + +define i1 @or_sgt_ugt(i8 %x) { +; CHECK-LABEL: @or_sgt_ugt( +; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sgt i8 %x, 13 + %b = icmp ugt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >s 13 || x <=u 17 + +define i1 @or_sgt_ule(i8 %x) { +; CHECK-LABEL: @or_sgt_ule( +; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sgt i8 %x, 13 + %b = icmp ule i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >s 13 || x <u 17 + +define i1 @or_sgt_ult(i8 %x) { +; CHECK-LABEL: @or_sgt_ult( +; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp ult i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sgt i8 %x, 13 + %b = icmp ult i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; sle +; x <=s 13 || x == 17 + +define i1 @or_sle_eq(i8 %x) { +; CHECK-LABEL: @or_sle_eq( +; CHECK-NEXT: [[A:%.*]] = icmp sle i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp eq i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sle i8 %x, 13 + %b = icmp eq i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=s 13 || x != 17 + +define i1 @or_sle_ne(i8 %x) { +; CHECK-LABEL: @or_sle_ne( +; CHECK-NEXT: [[B:%.*]] = icmp ne i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp sle i8 %x, 13 + %b = icmp ne i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=s 13 || x >=s 17 + +define i1 @or_sle_sge(i8 %x) { +; CHECK-LABEL: @or_sle_sge( +; CHECK-NEXT: [[A:%.*]] = icmp sle i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sle i8 %x, 13 + %b = icmp sge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=s 13 || x >s 17 + +define i1 @or_sle_sgt(i8 %x) { +; CHECK-LABEL: @or_sle_sgt( +; CHECK-NEXT: [[A:%.*]] = icmp sle i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sle i8 %x, 13 + %b = icmp sgt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=s 13 || x <=s 17 + +define i1 @or_sle_sle(i8 %x) { +; CHECK-LABEL: @or_sle_sle( +; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp sle i8 %x, 13 + %b = icmp sle i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=s 13 || x <s 17 + +define i1 @or_sle_slt(i8 %x) { +; CHECK-LABEL: @or_sle_slt( +; CHECK-NEXT: [[B:%.*]] = icmp slt i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp sle i8 %x, 13 + %b = icmp slt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=s 13 || x >=u 17 + +define i1 @or_sle_uge(i8 %x) { +; CHECK-LABEL: @or_sle_uge( +; CHECK-NEXT: [[A:%.*]] = icmp sle i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sle i8 %x, 13 + %b = icmp uge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=s 13 || x >u 17 + +define i1 @or_sle_ugt(i8 %x) { +; CHECK-LABEL: @or_sle_ugt( +; CHECK-NEXT: [[A:%.*]] = icmp sle i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sle i8 %x, 13 + %b = icmp ugt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=s 13 || x <=u 17 + +define i1 @or_sle_ule(i8 %x) { +; CHECK-LABEL: @or_sle_ule( +; CHECK-NEXT: [[A:%.*]] = icmp sle i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sle i8 %x, 13 + %b = icmp ule i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=s 13 || x <u 17 + +define i1 @or_sle_ult(i8 %x) { +; CHECK-LABEL: @or_sle_ult( +; CHECK-NEXT: [[A:%.*]] = icmp sle i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp ult i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sle i8 %x, 13 + %b = icmp ult i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; slt +; x <s 13 || x == 17 + +define i1 @or_slt_eq(i8 %x) { +; CHECK-LABEL: @or_slt_eq( +; CHECK-NEXT: [[A:%.*]] = icmp slt i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp eq i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp slt i8 %x, 13 + %b = icmp eq i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <s 13 || x != 17 + +define i1 @or_slt_ne(i8 %x) { +; CHECK-LABEL: @or_slt_ne( +; CHECK-NEXT: [[B:%.*]] = icmp ne i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp slt i8 %x, 13 + %b = icmp ne i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <s 13 || x >=s 17 + +define i1 @or_slt_sge(i8 %x) { +; CHECK-LABEL: @or_slt_sge( +; CHECK-NEXT: [[A:%.*]] = icmp slt i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp slt i8 %x, 13 + %b = icmp sge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <s 13 || x >s 17 + +define i1 @or_slt_sgt(i8 %x) { +; CHECK-LABEL: @or_slt_sgt( +; CHECK-NEXT: [[A:%.*]] = icmp slt i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp slt i8 %x, 13 + %b = icmp sgt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <s 13 || x <=s 17 + +define i1 @or_slt_sle(i8 %x) { +; CHECK-LABEL: @or_slt_sle( +; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp slt i8 %x, 13 + %b = icmp sle i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <s 13 || x <s 17 + +define i1 @or_slt_slt(i8 %x) { +; CHECK-LABEL: @or_slt_slt( +; CHECK-NEXT: [[B:%.*]] = icmp slt i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp slt i8 %x, 13 + %b = icmp slt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <s 13 || x >=u 17 + +define i1 @or_slt_uge(i8 %x) { +; CHECK-LABEL: @or_slt_uge( +; CHECK-NEXT: [[A:%.*]] = icmp slt i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp slt i8 %x, 13 + %b = icmp uge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <s 13 || x >u 17 + +define i1 @or_slt_ugt(i8 %x) { +; CHECK-LABEL: @or_slt_ugt( +; CHECK-NEXT: [[A:%.*]] = icmp slt i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp slt i8 %x, 13 + %b = icmp ugt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <s 13 || x <=u 17 + +define i1 @or_slt_ule(i8 %x) { +; CHECK-LABEL: @or_slt_ule( +; CHECK-NEXT: [[A:%.*]] = icmp slt i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp slt i8 %x, 13 + %b = icmp ule i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <s 13 || x <u 17 + +define i1 @or_slt_ult(i8 %x) { +; CHECK-LABEL: @or_slt_ult( +; CHECK-NEXT: [[A:%.*]] = icmp slt i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp ult i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp slt i8 %x, 13 + %b = icmp ult i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; uge +; x >=u 13 || x == 17 + +define i1 @or_uge_eq(i8 %x) { +; CHECK-LABEL: @or_uge_eq( +; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp uge i8 %x, 13 + %b = icmp eq i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=u 13 || x != 17 + +define i1 @or_uge_ne(i8 %x) { +; CHECK-LABEL: @or_uge_ne( +; CHECK-NEXT: ret i1 true +; + %a = icmp uge i8 %x, 13 + %b = icmp ne i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=u 13 || x >=s 17 + +define i1 @or_uge_sge(i8 %x) { +; CHECK-LABEL: @or_uge_sge( +; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp uge i8 %x, 13 + %b = icmp sge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=u 13 || x >s 17 + +define i1 @or_uge_sgt(i8 %x) { +; CHECK-LABEL: @or_uge_sgt( +; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp uge i8 %x, 13 + %b = icmp sgt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=u 13 || x <=s 17 + +define i1 @or_uge_sle(i8 %x) { +; CHECK-LABEL: @or_uge_sle( +; CHECK-NEXT: ret i1 true +; + %a = icmp uge i8 %x, 13 + %b = icmp sle i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=u 13 || x <s 17 + +define i1 @or_uge_slt(i8 %x) { +; CHECK-LABEL: @or_uge_slt( +; CHECK-NEXT: ret i1 true +; + %a = icmp uge i8 %x, 13 + %b = icmp slt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=u 13 || x >=u 17 + +define i1 @or_uge_uge(i8 %x) { +; CHECK-LABEL: @or_uge_uge( +; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp uge i8 %x, 13 + %b = icmp uge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=u 13 || x >u 17 + +define i1 @or_uge_ugt(i8 %x) { +; CHECK-LABEL: @or_uge_ugt( +; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp uge i8 %x, 13 + %b = icmp ugt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=u 13 || x <=u 17 + +define i1 @or_uge_ule(i8 %x) { +; CHECK-LABEL: @or_uge_ule( +; CHECK-NEXT: ret i1 true +; + %a = icmp uge i8 %x, 13 + %b = icmp ule i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=u 13 || x <u 17 + +define i1 @or_uge_ult(i8 %x) { +; CHECK-LABEL: @or_uge_ult( +; CHECK-NEXT: ret i1 true +; + %a = icmp uge i8 %x, 13 + %b = icmp ult i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; ugt +; x >u 13 || x == 17 + +define i1 @or_ugt_eq(i8 %x) { +; CHECK-LABEL: @or_ugt_eq( +; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ugt i8 %x, 13 + %b = icmp eq i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >u 13 || x != 17 + +define i1 @or_ugt_ne(i8 %x) { +; CHECK-LABEL: @or_ugt_ne( +; CHECK-NEXT: ret i1 true +; + %a = icmp ugt i8 %x, 13 + %b = icmp ne i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >u 13 || x >=s 17 + +define i1 @or_ugt_sge(i8 %x) { +; CHECK-LABEL: @or_ugt_sge( +; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ugt i8 %x, 13 + %b = icmp sge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >u 13 || x >s 17 + +define i1 @or_ugt_sgt(i8 %x) { +; CHECK-LABEL: @or_ugt_sgt( +; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ugt i8 %x, 13 + %b = icmp sgt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >u 13 || x <=s 17 + +define i1 @or_ugt_sle(i8 %x) { +; CHECK-LABEL: @or_ugt_sle( +; CHECK-NEXT: ret i1 true +; + %a = icmp ugt i8 %x, 13 + %b = icmp sle i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >u 13 || x <s 17 + +define i1 @or_ugt_slt(i8 %x) { +; CHECK-LABEL: @or_ugt_slt( +; CHECK-NEXT: ret i1 true +; + %a = icmp ugt i8 %x, 13 + %b = icmp slt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >u 13 || x >=u 17 + +define i1 @or_ugt_uge(i8 %x) { +; CHECK-LABEL: @or_ugt_uge( +; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ugt i8 %x, 13 + %b = icmp uge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >u 13 || x >u 17 + +define i1 @or_ugt_ugt(i8 %x) { +; CHECK-LABEL: @or_ugt_ugt( +; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 13 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ugt i8 %x, 13 + %b = icmp ugt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >u 13 || x <=u 17 + +define i1 @or_ugt_ule(i8 %x) { +; CHECK-LABEL: @or_ugt_ule( +; CHECK-NEXT: ret i1 true +; + %a = icmp ugt i8 %x, 13 + %b = icmp ule i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >u 13 || x <u 17 + +define i1 @or_ugt_ult(i8 %x) { +; CHECK-LABEL: @or_ugt_ult( +; CHECK-NEXT: ret i1 true +; + %a = icmp ugt i8 %x, 13 + %b = icmp ult i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; ule +; x <=u 13 || x == 17 + +define i1 @or_ule_eq(i8 %x) { +; CHECK-LABEL: @or_ule_eq( +; CHECK-NEXT: [[A:%.*]] = icmp ule i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp eq i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ule i8 %x, 13 + %b = icmp eq i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=u 13 || x != 17 + +define i1 @or_ule_ne(i8 %x) { +; CHECK-LABEL: @or_ule_ne( +; CHECK-NEXT: [[B:%.*]] = icmp ne i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp ule i8 %x, 13 + %b = icmp ne i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=u 13 || x >=s 17 + +define i1 @or_ule_sge(i8 %x) { +; CHECK-LABEL: @or_ule_sge( +; CHECK-NEXT: [[A:%.*]] = icmp ule i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ule i8 %x, 13 + %b = icmp sge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=u 13 || x >s 17 + +define i1 @or_ule_sgt(i8 %x) { +; CHECK-LABEL: @or_ule_sgt( +; CHECK-NEXT: [[A:%.*]] = icmp ule i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ule i8 %x, 13 + %b = icmp sgt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=u 13 || x <=s 17 + +define i1 @or_ule_sle(i8 %x) { +; CHECK-LABEL: @or_ule_sle( +; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp ule i8 %x, 13 + %b = icmp sle i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=u 13 || x <s 17 + +define i1 @or_ule_slt(i8 %x) { +; CHECK-LABEL: @or_ule_slt( +; CHECK-NEXT: [[B:%.*]] = icmp slt i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp ule i8 %x, 13 + %b = icmp slt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=u 13 || x >=u 17 + +define i1 @or_ule_uge(i8 %x) { +; CHECK-LABEL: @or_ule_uge( +; CHECK-NEXT: [[A:%.*]] = icmp ule i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ule i8 %x, 13 + %b = icmp uge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=u 13 || x >u 17 + +define i1 @or_ule_ugt(i8 %x) { +; CHECK-LABEL: @or_ule_ugt( +; CHECK-NEXT: [[A:%.*]] = icmp ule i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ule i8 %x, 13 + %b = icmp ugt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=u 13 || x <=u 17 + +define i1 @or_ule_ule(i8 %x) { +; CHECK-LABEL: @or_ule_ule( +; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp ule i8 %x, 13 + %b = icmp ule i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=u 13 || x <u 17 + +define i1 @or_ule_ult(i8 %x) { +; CHECK-LABEL: @or_ule_ult( +; CHECK-NEXT: [[B:%.*]] = icmp ult i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp ule i8 %x, 13 + %b = icmp ult i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; ult +; x <u 13 || x == 17 + +define i1 @or_ult_eq(i8 %x) { +; CHECK-LABEL: @or_ult_eq( +; CHECK-NEXT: [[A:%.*]] = icmp ult i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp eq i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ult i8 %x, 13 + %b = icmp eq i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <u 13 || x != 17 + +define i1 @or_ult_ne(i8 %x) { +; CHECK-LABEL: @or_ult_ne( +; CHECK-NEXT: [[B:%.*]] = icmp ne i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp ult i8 %x, 13 + %b = icmp ne i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <u 13 || x >=s 17 + +define i1 @or_ult_sge(i8 %x) { +; CHECK-LABEL: @or_ult_sge( +; CHECK-NEXT: [[A:%.*]] = icmp ult i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ult i8 %x, 13 + %b = icmp sge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <u 13 || x >s 17 + +define i1 @or_ult_sgt(i8 %x) { +; CHECK-LABEL: @or_ult_sgt( +; CHECK-NEXT: [[A:%.*]] = icmp ult i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ult i8 %x, 13 + %b = icmp sgt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <u 13 || x <=s 17 + +define i1 @or_ult_sle(i8 %x) { +; CHECK-LABEL: @or_ult_sle( +; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp ult i8 %x, 13 + %b = icmp sle i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <u 13 || x <s 17 + +define i1 @or_ult_slt(i8 %x) { +; CHECK-LABEL: @or_ult_slt( +; CHECK-NEXT: [[B:%.*]] = icmp slt i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp ult i8 %x, 13 + %b = icmp slt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <u 13 || x >=u 17 + +define i1 @or_ult_uge(i8 %x) { +; CHECK-LABEL: @or_ult_uge( +; CHECK-NEXT: [[A:%.*]] = icmp ult i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ult i8 %x, 13 + %b = icmp uge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <u 13 || x >u 17 + +define i1 @or_ult_ugt(i8 %x) { +; CHECK-LABEL: @or_ult_ugt( +; CHECK-NEXT: [[A:%.*]] = icmp ult i8 %x, 13 +; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ult i8 %x, 13 + %b = icmp ugt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <u 13 || x <=u 17 + +define i1 @or_ult_ule(i8 %x) { +; CHECK-LABEL: @or_ult_ule( +; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp ult i8 %x, 13 + %b = icmp ule i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <u 13 || x <u 17 + +define i1 @or_ult_ult(i8 %x) { +; CHECK-LABEL: @or_ult_ult( +; CHECK-NEXT: [[B:%.*]] = icmp ult i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp ult i8 %x, 13 + %b = icmp ult i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; eq +; x == 23 || x == 17 + +define i1 @or_eq_eq_swap(i8 %x) { +; CHECK-LABEL: @or_eq_eq_swap( +; CHECK-NEXT: [[A:%.*]] = icmp eq i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp eq i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp eq i8 %x, 23 + %b = icmp eq i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x == 23 || x != 17 + +define i1 @or_eq_ne_swap(i8 %x) { +; CHECK-LABEL: @or_eq_ne_swap( +; CHECK-NEXT: [[B:%.*]] = icmp ne i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp eq i8 %x, 23 + %b = icmp ne i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x == 23 || x >=s 17 + +define i1 @or_eq_sge_swap(i8 %x) { +; CHECK-LABEL: @or_eq_sge_swap( +; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp eq i8 %x, 23 + %b = icmp sge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x == 23 || x >s 17 + +define i1 @or_eq_sgt_swap(i8 %x) { +; CHECK-LABEL: @or_eq_sgt_swap( +; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp eq i8 %x, 23 + %b = icmp sgt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x == 23 || x <=s 17 + +define i1 @or_eq_sle_swap(i8 %x) { +; CHECK-LABEL: @or_eq_sle_swap( +; CHECK-NEXT: [[A:%.*]] = icmp eq i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp eq i8 %x, 23 + %b = icmp sle i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x == 23 || x <s 17 + +define i1 @or_eq_slt_swap(i8 %x) { +; CHECK-LABEL: @or_eq_slt_swap( +; CHECK-NEXT: [[A:%.*]] = icmp eq i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp slt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp eq i8 %x, 23 + %b = icmp slt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x == 23 || x >=u 17 + +define i1 @or_eq_uge_swap(i8 %x) { +; CHECK-LABEL: @or_eq_uge_swap( +; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp eq i8 %x, 23 + %b = icmp uge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x == 23 || x >u 17 + +define i1 @or_eq_ugt_swap(i8 %x) { +; CHECK-LABEL: @or_eq_ugt_swap( +; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp eq i8 %x, 23 + %b = icmp ugt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x == 23 || x <=u 17 + +define i1 @or_eq_ule_swap(i8 %x) { +; CHECK-LABEL: @or_eq_ule_swap( +; CHECK-NEXT: [[A:%.*]] = icmp eq i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp eq i8 %x, 23 + %b = icmp ule i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x == 23 || x <u 17 + +define i1 @or_eq_ult_swap(i8 %x) { +; CHECK-LABEL: @or_eq_ult_swap( +; CHECK-NEXT: [[A:%.*]] = icmp eq i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp ult i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp eq i8 %x, 23 + %b = icmp ult i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; ne +; x != 23 || x == 17 + +define i1 @or_ne_eq_swap(i8 %x) { +; CHECK-LABEL: @or_ne_eq_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ne i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ne i8 %x, 23 + %b = icmp eq i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x != 23 || x != 17 + +define i1 @or_ne_ne_swap(i8 %x) { +; CHECK-LABEL: @or_ne_ne_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp ne i8 %x, 23 + %b = icmp ne i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x != 23 || x >=s 17 + +define i1 @or_ne_sge_swap(i8 %x) { +; CHECK-LABEL: @or_ne_sge_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp ne i8 %x, 23 + %b = icmp sge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x != 23 || x >s 17 + +define i1 @or_ne_sgt_swap(i8 %x) { +; CHECK-LABEL: @or_ne_sgt_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp ne i8 %x, 23 + %b = icmp sgt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x != 23 || x <=s 17 + +define i1 @or_ne_sle_swap(i8 %x) { +; CHECK-LABEL: @or_ne_sle_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ne i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ne i8 %x, 23 + %b = icmp sle i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x != 23 || x <s 17 + +define i1 @or_ne_slt_swap(i8 %x) { +; CHECK-LABEL: @or_ne_slt_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ne i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ne i8 %x, 23 + %b = icmp slt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x != 23 || x >=u 17 + +define i1 @or_ne_uge_swap(i8 %x) { +; CHECK-LABEL: @or_ne_uge_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp ne i8 %x, 23 + %b = icmp uge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x != 23 || x >u 17 + +define i1 @or_ne_ugt_swap(i8 %x) { +; CHECK-LABEL: @or_ne_ugt_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp ne i8 %x, 23 + %b = icmp ugt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x != 23 || x <=u 17 + +define i1 @or_ne_ule_swap(i8 %x) { +; CHECK-LABEL: @or_ne_ule_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ne i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ne i8 %x, 23 + %b = icmp ule i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x != 23 || x <u 17 + +define i1 @or_ne_ult_swap(i8 %x) { +; CHECK-LABEL: @or_ne_ult_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ne i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ne i8 %x, 23 + %b = icmp ult i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; sge +; x >=s 23 || x == 17 + +define i1 @or_sge_eq_swap(i8 %x) { +; CHECK-LABEL: @or_sge_eq_swap( +; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp eq i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sge i8 %x, 23 + %b = icmp eq i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=s 23 || x != 17 + +define i1 @or_sge_ne_swap(i8 %x) { +; CHECK-LABEL: @or_sge_ne_swap( +; CHECK-NEXT: [[B:%.*]] = icmp ne i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp sge i8 %x, 23 + %b = icmp ne i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=s 23 || x >=s 17 + +define i1 @or_sge_sge_swap(i8 %x) { +; CHECK-LABEL: @or_sge_sge_swap( +; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp sge i8 %x, 23 + %b = icmp sge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=s 23 || x >s 17 + +define i1 @or_sge_sgt_swap(i8 %x) { +; CHECK-LABEL: @or_sge_sgt_swap( +; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp sge i8 %x, 23 + %b = icmp sgt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=s 23 || x <=s 17 + +define i1 @or_sge_sle_swap(i8 %x) { +; CHECK-LABEL: @or_sge_sle_swap( +; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sge i8 %x, 23 + %b = icmp sle i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=s 23 || x <s 17 + +define i1 @or_sge_slt_swap(i8 %x) { +; CHECK-LABEL: @or_sge_slt_swap( +; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp slt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sge i8 %x, 23 + %b = icmp slt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=s 23 || x >=u 17 + +define i1 @or_sge_uge_swap(i8 %x) { +; CHECK-LABEL: @or_sge_uge_swap( +; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp sge i8 %x, 23 + %b = icmp uge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=s 23 || x >u 17 + +define i1 @or_sge_ugt_swap(i8 %x) { +; CHECK-LABEL: @or_sge_ugt_swap( +; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp sge i8 %x, 23 + %b = icmp ugt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=s 23 || x <=u 17 + +define i1 @or_sge_ule_swap(i8 %x) { +; CHECK-LABEL: @or_sge_ule_swap( +; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sge i8 %x, 23 + %b = icmp ule i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=s 23 || x <u 17 + +define i1 @or_sge_ult_swap(i8 %x) { +; CHECK-LABEL: @or_sge_ult_swap( +; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp ult i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sge i8 %x, 23 + %b = icmp ult i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; sgt +; x >s 23 || x == 17 + +define i1 @or_sgt_eq_swap(i8 %x) { +; CHECK-LABEL: @or_sgt_eq_swap( +; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp eq i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sgt i8 %x, 23 + %b = icmp eq i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >s 23 || x != 17 + +define i1 @or_sgt_ne_swap(i8 %x) { +; CHECK-LABEL: @or_sgt_ne_swap( +; CHECK-NEXT: [[B:%.*]] = icmp ne i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp sgt i8 %x, 23 + %b = icmp ne i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >s 23 || x >=s 17 + +define i1 @or_sgt_sge_swap(i8 %x) { +; CHECK-LABEL: @or_sgt_sge_swap( +; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp sgt i8 %x, 23 + %b = icmp sge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >s 23 || x >s 17 + +define i1 @or_sgt_sgt_swap(i8 %x) { +; CHECK-LABEL: @or_sgt_sgt_swap( +; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp sgt i8 %x, 23 + %b = icmp sgt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >s 23 || x <=s 17 + +define i1 @or_sgt_sle_swap(i8 %x) { +; CHECK-LABEL: @or_sgt_sle_swap( +; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sgt i8 %x, 23 + %b = icmp sle i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >s 23 || x <s 17 + +define i1 @or_sgt_slt_swap(i8 %x) { +; CHECK-LABEL: @or_sgt_slt_swap( +; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp slt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sgt i8 %x, 23 + %b = icmp slt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >s 23 || x >=u 17 + +define i1 @or_sgt_uge_swap(i8 %x) { +; CHECK-LABEL: @or_sgt_uge_swap( +; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp sgt i8 %x, 23 + %b = icmp uge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >s 23 || x >u 17 + +define i1 @or_sgt_ugt_swap(i8 %x) { +; CHECK-LABEL: @or_sgt_ugt_swap( +; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp sgt i8 %x, 23 + %b = icmp ugt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >s 23 || x <=u 17 + +define i1 @or_sgt_ule_swap(i8 %x) { +; CHECK-LABEL: @or_sgt_ule_swap( +; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sgt i8 %x, 23 + %b = icmp ule i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >s 23 || x <u 17 + +define i1 @or_sgt_ult_swap(i8 %x) { +; CHECK-LABEL: @or_sgt_ult_swap( +; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp ult i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp sgt i8 %x, 23 + %b = icmp ult i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; sle +; x <=s 23 || x == 17 + +define i1 @or_sle_eq_swap(i8 %x) { +; CHECK-LABEL: @or_sle_eq_swap( +; CHECK-NEXT: [[A:%.*]] = icmp sle i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp sle i8 %x, 23 + %b = icmp eq i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=s 23 || x != 17 + +define i1 @or_sle_ne_swap(i8 %x) { +; CHECK-LABEL: @or_sle_ne_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp sle i8 %x, 23 + %b = icmp ne i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=s 23 || x >=s 17 + +define i1 @or_sle_sge_swap(i8 %x) { +; CHECK-LABEL: @or_sle_sge_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp sle i8 %x, 23 + %b = icmp sge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=s 23 || x >s 17 + +define i1 @or_sle_sgt_swap(i8 %x) { +; CHECK-LABEL: @or_sle_sgt_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp sle i8 %x, 23 + %b = icmp sgt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=s 23 || x <=s 17 + +define i1 @or_sle_sle_swap(i8 %x) { +; CHECK-LABEL: @or_sle_sle_swap( +; CHECK-NEXT: [[A:%.*]] = icmp sle i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp sle i8 %x, 23 + %b = icmp sle i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=s 23 || x <s 17 + +define i1 @or_sle_slt_swap(i8 %x) { +; CHECK-LABEL: @or_sle_slt_swap( +; CHECK-NEXT: [[A:%.*]] = icmp sle i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp sle i8 %x, 23 + %b = icmp slt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=s 23 || x >=u 17 + +define i1 @or_sle_uge_swap(i8 %x) { +; CHECK-LABEL: @or_sle_uge_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp sle i8 %x, 23 + %b = icmp uge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=s 23 || x >u 17 + +define i1 @or_sle_ugt_swap(i8 %x) { +; CHECK-LABEL: @or_sle_ugt_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp sle i8 %x, 23 + %b = icmp ugt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=s 23 || x <=u 17 + +define i1 @or_sle_ule_swap(i8 %x) { +; CHECK-LABEL: @or_sle_ule_swap( +; CHECK-NEXT: [[A:%.*]] = icmp sle i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp sle i8 %x, 23 + %b = icmp ule i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=s 23 || x <u 17 + +define i1 @or_sle_ult_swap(i8 %x) { +; CHECK-LABEL: @or_sle_ult_swap( +; CHECK-NEXT: [[A:%.*]] = icmp sle i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp sle i8 %x, 23 + %b = icmp ult i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; slt +; x <s 23 || x == 17 + +define i1 @or_slt_eq_swap(i8 %x) { +; CHECK-LABEL: @or_slt_eq_swap( +; CHECK-NEXT: [[A:%.*]] = icmp slt i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp slt i8 %x, 23 + %b = icmp eq i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <s 23 || x != 17 + +define i1 @or_slt_ne_swap(i8 %x) { +; CHECK-LABEL: @or_slt_ne_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp slt i8 %x, 23 + %b = icmp ne i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <s 23 || x >=s 17 + +define i1 @or_slt_sge_swap(i8 %x) { +; CHECK-LABEL: @or_slt_sge_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp slt i8 %x, 23 + %b = icmp sge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <s 23 || x >s 17 + +define i1 @or_slt_sgt_swap(i8 %x) { +; CHECK-LABEL: @or_slt_sgt_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp slt i8 %x, 23 + %b = icmp sgt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <s 23 || x <=s 17 + +define i1 @or_slt_sle_swap(i8 %x) { +; CHECK-LABEL: @or_slt_sle_swap( +; CHECK-NEXT: [[A:%.*]] = icmp slt i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp slt i8 %x, 23 + %b = icmp sle i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <s 23 || x <s 17 + +define i1 @or_slt_slt_swap(i8 %x) { +; CHECK-LABEL: @or_slt_slt_swap( +; CHECK-NEXT: [[A:%.*]] = icmp slt i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp slt i8 %x, 23 + %b = icmp slt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <s 23 || x >=u 17 + +define i1 @or_slt_uge_swap(i8 %x) { +; CHECK-LABEL: @or_slt_uge_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp slt i8 %x, 23 + %b = icmp uge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <s 23 || x >u 17 + +define i1 @or_slt_ugt_swap(i8 %x) { +; CHECK-LABEL: @or_slt_ugt_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp slt i8 %x, 23 + %b = icmp ugt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <s 23 || x <=u 17 + +define i1 @or_slt_ule_swap(i8 %x) { +; CHECK-LABEL: @or_slt_ule_swap( +; CHECK-NEXT: [[A:%.*]] = icmp slt i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp slt i8 %x, 23 + %b = icmp ule i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <s 23 || x <u 17 + +define i1 @or_slt_ult_swap(i8 %x) { +; CHECK-LABEL: @or_slt_ult_swap( +; CHECK-NEXT: [[A:%.*]] = icmp slt i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp slt i8 %x, 23 + %b = icmp ult i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; uge +; x >=u 23 || x == 17 + +define i1 @or_uge_eq_swap(i8 %x) { +; CHECK-LABEL: @or_uge_eq_swap( +; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp eq i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp uge i8 %x, 23 + %b = icmp eq i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=u 23 || x != 17 + +define i1 @or_uge_ne_swap(i8 %x) { +; CHECK-LABEL: @or_uge_ne_swap( +; CHECK-NEXT: [[B:%.*]] = icmp ne i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp uge i8 %x, 23 + %b = icmp ne i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=u 23 || x >=s 17 + +define i1 @or_uge_sge_swap(i8 %x) { +; CHECK-LABEL: @or_uge_sge_swap( +; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp uge i8 %x, 23 + %b = icmp sge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=u 23 || x >s 17 + +define i1 @or_uge_sgt_swap(i8 %x) { +; CHECK-LABEL: @or_uge_sgt_swap( +; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp uge i8 %x, 23 + %b = icmp sgt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=u 23 || x <=s 17 + +define i1 @or_uge_sle_swap(i8 %x) { +; CHECK-LABEL: @or_uge_sle_swap( +; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp uge i8 %x, 23 + %b = icmp sle i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=u 23 || x <s 17 + +define i1 @or_uge_slt_swap(i8 %x) { +; CHECK-LABEL: @or_uge_slt_swap( +; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp slt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp uge i8 %x, 23 + %b = icmp slt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=u 23 || x >=u 17 + +define i1 @or_uge_uge_swap(i8 %x) { +; CHECK-LABEL: @or_uge_uge_swap( +; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp uge i8 %x, 23 + %b = icmp uge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=u 23 || x >u 17 + +define i1 @or_uge_ugt_swap(i8 %x) { +; CHECK-LABEL: @or_uge_ugt_swap( +; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp uge i8 %x, 23 + %b = icmp ugt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=u 23 || x <=u 17 + +define i1 @or_uge_ule_swap(i8 %x) { +; CHECK-LABEL: @or_uge_ule_swap( +; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp uge i8 %x, 23 + %b = icmp ule i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >=u 23 || x <u 17 + +define i1 @or_uge_ult_swap(i8 %x) { +; CHECK-LABEL: @or_uge_ult_swap( +; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp ult i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp uge i8 %x, 23 + %b = icmp ult i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; ugt +; x >u 23 || x == 17 + +define i1 @or_ugt_eq_swap(i8 %x) { +; CHECK-LABEL: @or_ugt_eq_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp eq i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ugt i8 %x, 23 + %b = icmp eq i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >u 23 || x != 17 + +define i1 @or_ugt_ne_swap(i8 %x) { +; CHECK-LABEL: @or_ugt_ne_swap( +; CHECK-NEXT: [[B:%.*]] = icmp ne i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp ugt i8 %x, 23 + %b = icmp ne i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >u 23 || x >=s 17 + +define i1 @or_ugt_sge_swap(i8 %x) { +; CHECK-LABEL: @or_ugt_sge_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ugt i8 %x, 23 + %b = icmp sge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >u 23 || x >s 17 + +define i1 @or_ugt_sgt_swap(i8 %x) { +; CHECK-LABEL: @or_ugt_sgt_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ugt i8 %x, 23 + %b = icmp sgt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >u 23 || x <=s 17 + +define i1 @or_ugt_sle_swap(i8 %x) { +; CHECK-LABEL: @or_ugt_sle_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ugt i8 %x, 23 + %b = icmp sle i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >u 23 || x <s 17 + +define i1 @or_ugt_slt_swap(i8 %x) { +; CHECK-LABEL: @or_ugt_slt_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp slt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ugt i8 %x, 23 + %b = icmp slt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >u 23 || x >=u 17 + +define i1 @or_ugt_uge_swap(i8 %x) { +; CHECK-LABEL: @or_ugt_uge_swap( +; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp ugt i8 %x, 23 + %b = icmp uge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >u 23 || x >u 17 + +define i1 @or_ugt_ugt_swap(i8 %x) { +; CHECK-LABEL: @or_ugt_ugt_swap( +; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 +; CHECK-NEXT: ret i1 [[B]] +; + %a = icmp ugt i8 %x, 23 + %b = icmp ugt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >u 23 || x <=u 17 + +define i1 @or_ugt_ule_swap(i8 %x) { +; CHECK-LABEL: @or_ugt_ule_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ugt i8 %x, 23 + %b = icmp ule i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x >u 23 || x <u 17 + +define i1 @or_ugt_ult_swap(i8 %x) { +; CHECK-LABEL: @or_ugt_ult_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp ult i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ugt i8 %x, 23 + %b = icmp ult i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; ule +; x <=u 23 || x == 17 + +define i1 @or_ule_eq_swap(i8 %x) { +; CHECK-LABEL: @or_ule_eq_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ule i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ule i8 %x, 23 + %b = icmp eq i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=u 23 || x != 17 + +define i1 @or_ule_ne_swap(i8 %x) { +; CHECK-LABEL: @or_ule_ne_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp ule i8 %x, 23 + %b = icmp ne i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=u 23 || x >=s 17 + +define i1 @or_ule_sge_swap(i8 %x) { +; CHECK-LABEL: @or_ule_sge_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ule i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ule i8 %x, 23 + %b = icmp sge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=u 23 || x >s 17 + +define i1 @or_ule_sgt_swap(i8 %x) { +; CHECK-LABEL: @or_ule_sgt_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ule i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ule i8 %x, 23 + %b = icmp sgt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=u 23 || x <=s 17 + +define i1 @or_ule_sle_swap(i8 %x) { +; CHECK-LABEL: @or_ule_sle_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ule i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ule i8 %x, 23 + %b = icmp sle i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=u 23 || x <s 17 + +define i1 @or_ule_slt_swap(i8 %x) { +; CHECK-LABEL: @or_ule_slt_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ule i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp slt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ule i8 %x, 23 + %b = icmp slt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=u 23 || x >=u 17 + +define i1 @or_ule_uge_swap(i8 %x) { +; CHECK-LABEL: @or_ule_uge_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp ule i8 %x, 23 + %b = icmp uge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=u 23 || x >u 17 + +define i1 @or_ule_ugt_swap(i8 %x) { +; CHECK-LABEL: @or_ule_ugt_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp ule i8 %x, 23 + %b = icmp ugt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=u 23 || x <=u 17 + +define i1 @or_ule_ule_swap(i8 %x) { +; CHECK-LABEL: @or_ule_ule_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ule i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ule i8 %x, 23 + %b = icmp ule i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <=u 23 || x <u 17 + +define i1 @or_ule_ult_swap(i8 %x) { +; CHECK-LABEL: @or_ule_ult_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ule i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ule i8 %x, 23 + %b = icmp ult i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; ult +; x <u 23 || x == 17 + +define i1 @or_ult_eq_swap(i8 %x) { +; CHECK-LABEL: @or_ult_eq_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ult i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ult i8 %x, 23 + %b = icmp eq i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <u 23 || x != 17 + +define i1 @or_ult_ne_swap(i8 %x) { +; CHECK-LABEL: @or_ult_ne_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp ult i8 %x, 23 + %b = icmp ne i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <u 23 || x >=s 17 + +define i1 @or_ult_sge_swap(i8 %x) { +; CHECK-LABEL: @or_ult_sge_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ult i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ult i8 %x, 23 + %b = icmp sge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <u 23 || x >s 17 + +define i1 @or_ult_sgt_swap(i8 %x) { +; CHECK-LABEL: @or_ult_sgt_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ult i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ult i8 %x, 23 + %b = icmp sgt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <u 23 || x <=s 17 + +define i1 @or_ult_sle_swap(i8 %x) { +; CHECK-LABEL: @or_ult_sle_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ult i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ult i8 %x, 23 + %b = icmp sle i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <u 23 || x <s 17 + +define i1 @or_ult_slt_swap(i8 %x) { +; CHECK-LABEL: @or_ult_slt_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ult i8 %x, 23 +; CHECK-NEXT: [[B:%.*]] = icmp slt i8 %x, 17 +; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]] +; CHECK-NEXT: ret i1 [[C]] +; + %a = icmp ult i8 %x, 23 + %b = icmp slt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <u 23 || x >=u 17 + +define i1 @or_ult_uge_swap(i8 %x) { +; CHECK-LABEL: @or_ult_uge_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp ult i8 %x, 23 + %b = icmp uge i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <u 23 || x >u 17 + +define i1 @or_ult_ugt_swap(i8 %x) { +; CHECK-LABEL: @or_ult_ugt_swap( +; CHECK-NEXT: ret i1 true +; + %a = icmp ult i8 %x, 23 + %b = icmp ugt i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <u 23 || x <=u 17 + +define i1 @or_ult_ule_swap(i8 %x) { +; CHECK-LABEL: @or_ult_ule_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ult i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ult i8 %x, 23 + %b = icmp ule i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + +; x <u 23 || x <u 17 + +define i1 @or_ult_ult_swap(i8 %x) { +; CHECK-LABEL: @or_ult_ult_swap( +; CHECK-NEXT: [[A:%.*]] = icmp ult i8 %x, 23 +; CHECK-NEXT: ret i1 [[A]] +; + %a = icmp ult i8 %x, 23 + %b = icmp ult i8 %x, 17 + %c = or i1 %a, %b + ret i1 %c +} + ; Special case - slt is uge ; x <u 31 && x <s 0 diff --git a/test/Transforms/InstSimplify/shufflevector.ll b/test/Transforms/InstSimplify/shufflevector.ll index 6af0db8e5a44..cc49ae3554c0 100644 --- a/test/Transforms/InstSimplify/shufflevector.ll +++ b/test/Transforms/InstSimplify/shufflevector.ll @@ -233,3 +233,17 @@ define <8 x i64> @PR30630(<8 x i64> %x) { ret <8 x i64> %s7 } +; This case covers internal canonicalization of shuffles with one constant input vector. + +;FIXME: Another issue exposed here, this whole function could be simplified to: +; ret <2 x float> zeroinitializer +define <2 x float> @PR32872(<2 x float> %x) { +; CHECK-LABEL: @PR32872( +; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <2 x float> [[X:%.*]], <2 x float> zeroinitializer, <4 x i32> <i32 2, i32 2, i32 0, i32 1> +; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <4 x float> zeroinitializer, <4 x float> [[TMP1]], <2 x i32> <i32 4, i32 5> +; CHECK-NEXT: ret <2 x float> [[TMP4]] +; + %tmp1 = shufflevector <2 x float> %x, <2 x float> zeroinitializer, <4 x i32> <i32 2, i32 2, i32 0, i32 1> + %tmp4 = shufflevector <4 x float> zeroinitializer, <4 x float> %tmp1, <2 x i32> <i32 4, i32 5> + ret <2 x float> %tmp4 +} |