; RUN: opt < %s -instsimplify -S | FileCheck %s ; Cycle through all pairs of predicates to test ; simplification of range-intersection or range-union. ; eq ; x == 13 && x == 17 define i1 @and_eq_eq(i8 %x) { ; CHECK-LABEL: @and_eq_eq( ; CHECK-NEXT: ret i1 false ; %a = icmp eq i8 %x, 13 %b = icmp eq i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x == 13 && x != 17 define i1 @and_eq_ne(i8 %x) { ; CHECK-LABEL: @and_eq_ne( ; CHECK-NEXT: [[A:%.*]] = icmp eq i8 %x, 13 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp eq i8 %x, 13 %b = icmp ne i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x == 13 && x >=s 17 define i1 @and_eq_sge(i8 %x) { ; CHECK-LABEL: @and_eq_sge( ; CHECK-NEXT: ret i1 false ; %a = icmp eq i8 %x, 13 %b = icmp sge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x == 13 && x >s 17 define i1 @and_eq_sgt(i8 %x) { ; CHECK-LABEL: @and_eq_sgt( ; CHECK-NEXT: ret i1 false ; %a = icmp eq i8 %x, 13 %b = icmp sgt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x == 13 && x <=s 17 define i1 @and_eq_sle(i8 %x) { ; CHECK-LABEL: @and_eq_sle( ; CHECK-NEXT: [[A:%.*]] = icmp eq i8 %x, 13 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp eq i8 %x, 13 %b = icmp sle i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x == 13 && x =u 17 define i1 @and_eq_uge(i8 %x) { ; CHECK-LABEL: @and_eq_uge( ; CHECK-NEXT: ret i1 false ; %a = icmp eq i8 %x, 13 %b = icmp uge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x == 13 && x >u 17 define i1 @and_eq_ugt(i8 %x) { ; CHECK-LABEL: @and_eq_ugt( ; CHECK-NEXT: ret i1 false ; %a = icmp eq i8 %x, 13 %b = icmp ugt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x == 13 && x <=u 17 define i1 @and_eq_ule(i8 %x) { ; CHECK-LABEL: @and_eq_ule( ; CHECK-NEXT: [[A:%.*]] = icmp eq i8 %x, 13 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp eq i8 %x, 13 %b = icmp ule i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x == 13 && x =s 17 define i1 @and_ne_sge(i8 %x) { ; CHECK-LABEL: @and_ne_sge( ; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp ne i8 %x, 13 %b = icmp sge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x != 13 && x >s 17 define i1 @and_ne_sgt(i8 %x) { ; CHECK-LABEL: @and_ne_sgt( ; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp ne i8 %x, 13 %b = icmp sgt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x != 13 && x <=s 17 define i1 @and_ne_sle(i8 %x) { ; CHECK-LABEL: @and_ne_sle( ; CHECK-NEXT: [[A:%.*]] = icmp ne i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ne i8 %x, 13 %b = icmp sle i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x != 13 && x =u 17 define i1 @and_ne_uge(i8 %x) { ; CHECK-LABEL: @and_ne_uge( ; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp ne i8 %x, 13 %b = icmp uge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x != 13 && x >u 17 define i1 @and_ne_ugt(i8 %x) { ; CHECK-LABEL: @and_ne_ugt( ; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp ne i8 %x, 13 %b = icmp ugt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x != 13 && x <=u 17 define i1 @and_ne_ule(i8 %x) { ; CHECK-LABEL: @and_ne_ule( ; CHECK-NEXT: [[A:%.*]] = icmp ne i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ne i8 %x, 13 %b = icmp ule i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x != 13 && x =s 13 && x == 17 define i1 @and_sge_eq(i8 %x) { ; CHECK-LABEL: @and_sge_eq( ; CHECK-NEXT: [[B:%.*]] = icmp eq i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp sge i8 %x, 13 %b = icmp eq i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=s 13 && x != 17 define i1 @and_sge_ne(i8 %x) { ; CHECK-LABEL: @and_sge_ne( ; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp ne i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp sge i8 %x, 13 %b = icmp ne i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=s 13 && x >=s 17 define i1 @and_sge_sge(i8 %x) { ; CHECK-LABEL: @and_sge_sge( ; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp sge i8 %x, 13 %b = icmp sge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=s 13 && x >s 17 define i1 @and_sge_sgt(i8 %x) { ; CHECK-LABEL: @and_sge_sgt( ; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp sge i8 %x, 13 %b = icmp sgt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=s 13 && x <=s 17 define i1 @and_sge_sle(i8 %x) { ; CHECK-LABEL: @and_sge_sle( ; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp sge i8 %x, 13 %b = icmp sle i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=s 13 && x =s 13 && x >=u 17 define i1 @and_sge_uge(i8 %x) { ; CHECK-LABEL: @and_sge_uge( ; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp sge i8 %x, 13 %b = icmp uge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=s 13 && x >u 17 define i1 @and_sge_ugt(i8 %x) { ; CHECK-LABEL: @and_sge_ugt( ; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp sge i8 %x, 13 %b = icmp ugt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=s 13 && x <=u 17 define i1 @and_sge_ule(i8 %x) { ; CHECK-LABEL: @and_sge_ule( ; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp sge i8 %x, 13 %b = icmp ule i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=s 13 && x s 13 && x == 17 define i1 @and_sgt_eq(i8 %x) { ; CHECK-LABEL: @and_sgt_eq( ; CHECK-NEXT: [[B:%.*]] = icmp eq i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp sgt i8 %x, 13 %b = icmp eq i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >s 13 && x != 17 define i1 @and_sgt_ne(i8 %x) { ; CHECK-LABEL: @and_sgt_ne( ; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp ne i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp sgt i8 %x, 13 %b = icmp ne i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >s 13 && x >=s 17 define i1 @and_sgt_sge(i8 %x) { ; CHECK-LABEL: @and_sgt_sge( ; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp sgt i8 %x, 13 %b = icmp sge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >s 13 && x >s 17 define i1 @and_sgt_sgt(i8 %x) { ; CHECK-LABEL: @and_sgt_sgt( ; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp sgt i8 %x, 13 %b = icmp sgt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >s 13 && x <=s 17 define i1 @and_sgt_sle(i8 %x) { ; CHECK-LABEL: @and_sgt_sle( ; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp sgt i8 %x, 13 %b = icmp sle i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >s 13 && x s 13 && x >=u 17 define i1 @and_sgt_uge(i8 %x) { ; CHECK-LABEL: @and_sgt_uge( ; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp sgt i8 %x, 13 %b = icmp uge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >s 13 && x >u 17 define i1 @and_sgt_ugt(i8 %x) { ; CHECK-LABEL: @and_sgt_ugt( ; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp sgt i8 %x, 13 %b = icmp ugt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >s 13 && x <=u 17 define i1 @and_sgt_ule(i8 %x) { ; CHECK-LABEL: @and_sgt_ule( ; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp sgt i8 %x, 13 %b = icmp ule i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >s 13 && x =s 17 define i1 @and_sle_sge(i8 %x) { ; CHECK-LABEL: @and_sle_sge( ; CHECK-NEXT: ret i1 false ; %a = icmp sle i8 %x, 13 %b = icmp sge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=s 13 && x >s 17 define i1 @and_sle_sgt(i8 %x) { ; CHECK-LABEL: @and_sle_sgt( ; CHECK-NEXT: ret i1 false ; %a = icmp sle i8 %x, 13 %b = icmp sgt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=s 13 && x <=s 17 define i1 @and_sle_sle(i8 %x) { ; CHECK-LABEL: @and_sle_sle( ; CHECK-NEXT: [[A:%.*]] = icmp sle i8 %x, 13 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp sle i8 %x, 13 %b = icmp sle i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=s 13 && x =u 17 define i1 @and_sle_uge(i8 %x) { ; CHECK-LABEL: @and_sle_uge( ; CHECK-NEXT: [[A:%.*]] = icmp sle i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp sle i8 %x, 13 %b = icmp uge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=s 13 && x >u 17 define i1 @and_sle_ugt(i8 %x) { ; CHECK-LABEL: @and_sle_ugt( ; CHECK-NEXT: [[A:%.*]] = icmp sle i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp sle i8 %x, 13 %b = icmp ugt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=s 13 && x <=u 17 define i1 @and_sle_ule(i8 %x) { ; CHECK-LABEL: @and_sle_ule( ; CHECK-NEXT: [[A:%.*]] = icmp sle i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp sle i8 %x, 13 %b = icmp ule i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=s 13 && x =s 17 define i1 @and_slt_sge(i8 %x) { ; CHECK-LABEL: @and_slt_sge( ; CHECK-NEXT: ret i1 false ; %a = icmp slt i8 %x, 13 %b = icmp sge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x s 17 define i1 @and_slt_sgt(i8 %x) { ; CHECK-LABEL: @and_slt_sgt( ; CHECK-NEXT: ret i1 false ; %a = icmp slt i8 %x, 13 %b = icmp sgt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x =u 17 define i1 @and_slt_uge(i8 %x) { ; CHECK-LABEL: @and_slt_uge( ; CHECK-NEXT: [[A:%.*]] = icmp slt i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp slt i8 %x, 13 %b = icmp uge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x u 17 define i1 @and_slt_ugt(i8 %x) { ; CHECK-LABEL: @and_slt_ugt( ; CHECK-NEXT: [[A:%.*]] = icmp slt i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp slt i8 %x, 13 %b = icmp ugt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x =u 13 && x == 17 define i1 @and_uge_eq(i8 %x) { ; CHECK-LABEL: @and_uge_eq( ; CHECK-NEXT: [[B:%.*]] = icmp eq i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp uge i8 %x, 13 %b = icmp eq i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=u 13 && x != 17 define i1 @and_uge_ne(i8 %x) { ; CHECK-LABEL: @and_uge_ne( ; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp ne i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp uge i8 %x, 13 %b = icmp ne i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=u 13 && x >=s 17 define i1 @and_uge_sge(i8 %x) { ; CHECK-LABEL: @and_uge_sge( ; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp uge i8 %x, 13 %b = icmp sge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=u 13 && x >s 17 define i1 @and_uge_sgt(i8 %x) { ; CHECK-LABEL: @and_uge_sgt( ; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp uge i8 %x, 13 %b = icmp sgt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=u 13 && x <=s 17 define i1 @and_uge_sle(i8 %x) { ; CHECK-LABEL: @and_uge_sle( ; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp uge i8 %x, 13 %b = icmp sle i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=u 13 && x =u 13 && x >=u 17 define i1 @and_uge_uge(i8 %x) { ; CHECK-LABEL: @and_uge_uge( ; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp uge i8 %x, 13 %b = icmp uge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=u 13 && x >u 17 define i1 @and_uge_ugt(i8 %x) { ; CHECK-LABEL: @and_uge_ugt( ; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp uge i8 %x, 13 %b = icmp ugt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=u 13 && x <=u 17 define i1 @and_uge_ule(i8 %x) { ; CHECK-LABEL: @and_uge_ule( ; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp uge i8 %x, 13 %b = icmp ule i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=u 13 && x u 13 && x == 17 define i1 @and_ugt_eq(i8 %x) { ; CHECK-LABEL: @and_ugt_eq( ; CHECK-NEXT: [[B:%.*]] = icmp eq i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp ugt i8 %x, 13 %b = icmp eq i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >u 13 && x != 17 define i1 @and_ugt_ne(i8 %x) { ; CHECK-LABEL: @and_ugt_ne( ; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp ne i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ugt i8 %x, 13 %b = icmp ne i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >u 13 && x >=s 17 define i1 @and_ugt_sge(i8 %x) { ; CHECK-LABEL: @and_ugt_sge( ; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp ugt i8 %x, 13 %b = icmp sge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >u 13 && x >s 17 define i1 @and_ugt_sgt(i8 %x) { ; CHECK-LABEL: @and_ugt_sgt( ; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp ugt i8 %x, 13 %b = icmp sgt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >u 13 && x <=s 17 define i1 @and_ugt_sle(i8 %x) { ; CHECK-LABEL: @and_ugt_sle( ; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ugt i8 %x, 13 %b = icmp sle i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >u 13 && x u 13 && x >=u 17 define i1 @and_ugt_uge(i8 %x) { ; CHECK-LABEL: @and_ugt_uge( ; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp ugt i8 %x, 13 %b = icmp uge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >u 13 && x >u 17 define i1 @and_ugt_ugt(i8 %x) { ; CHECK-LABEL: @and_ugt_ugt( ; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp ugt i8 %x, 13 %b = icmp ugt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >u 13 && x <=u 17 define i1 @and_ugt_ule(i8 %x) { ; CHECK-LABEL: @and_ugt_ule( ; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 13 ; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ugt i8 %x, 13 %b = icmp ule i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >u 13 && x =s 17 define i1 @and_ule_sge(i8 %x) { ; CHECK-LABEL: @and_ule_sge( ; CHECK-NEXT: ret i1 false ; %a = icmp ule i8 %x, 13 %b = icmp sge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=u 13 && x >s 17 define i1 @and_ule_sgt(i8 %x) { ; CHECK-LABEL: @and_ule_sgt( ; CHECK-NEXT: ret i1 false ; %a = icmp ule i8 %x, 13 %b = icmp sgt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=u 13 && x <=s 17 define i1 @and_ule_sle(i8 %x) { ; CHECK-LABEL: @and_ule_sle( ; CHECK-NEXT: [[A:%.*]] = icmp ule i8 %x, 13 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp ule i8 %x, 13 %b = icmp sle i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=u 13 && x =u 17 define i1 @and_ule_uge(i8 %x) { ; CHECK-LABEL: @and_ule_uge( ; CHECK-NEXT: ret i1 false ; %a = icmp ule i8 %x, 13 %b = icmp uge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=u 13 && x >u 17 define i1 @and_ule_ugt(i8 %x) { ; CHECK-LABEL: @and_ule_ugt( ; CHECK-NEXT: ret i1 false ; %a = icmp ule i8 %x, 13 %b = icmp ugt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=u 13 && x <=u 17 define i1 @and_ule_ule(i8 %x) { ; CHECK-LABEL: @and_ule_ule( ; CHECK-NEXT: [[A:%.*]] = icmp ule i8 %x, 13 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp ule i8 %x, 13 %b = icmp ule i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=u 13 && x =s 17 define i1 @and_ult_sge(i8 %x) { ; CHECK-LABEL: @and_ult_sge( ; CHECK-NEXT: ret i1 false ; %a = icmp ult i8 %x, 13 %b = icmp sge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x s 17 define i1 @and_ult_sgt(i8 %x) { ; CHECK-LABEL: @and_ult_sgt( ; CHECK-NEXT: ret i1 false ; %a = icmp ult i8 %x, 13 %b = icmp sgt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x =u 17 define i1 @and_ult_uge(i8 %x) { ; CHECK-LABEL: @and_ult_uge( ; CHECK-NEXT: ret i1 false ; %a = icmp ult i8 %x, 13 %b = icmp uge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x u 17 define i1 @and_ult_ugt(i8 %x) { ; CHECK-LABEL: @and_ult_ugt( ; CHECK-NEXT: ret i1 false ; %a = icmp ult i8 %x, 13 %b = icmp ugt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x =s 17 define i1 @and_eq_sge_swap(i8 %x) { ; CHECK-LABEL: @and_eq_sge_swap( ; CHECK-NEXT: [[A:%.*]] = icmp eq i8 %x, 23 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp eq i8 %x, 23 %b = icmp sge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x == 23 && x >s 17 define i1 @and_eq_sgt_swap(i8 %x) { ; CHECK-LABEL: @and_eq_sgt_swap( ; CHECK-NEXT: [[A:%.*]] = icmp eq i8 %x, 23 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp eq i8 %x, 23 %b = icmp sgt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x == 23 && x <=s 17 define i1 @and_eq_sle_swap(i8 %x) { ; CHECK-LABEL: @and_eq_sle_swap( ; CHECK-NEXT: ret i1 false ; %a = icmp eq i8 %x, 23 %b = icmp sle i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x == 23 && x =u 17 define i1 @and_eq_uge_swap(i8 %x) { ; CHECK-LABEL: @and_eq_uge_swap( ; CHECK-NEXT: [[A:%.*]] = icmp eq i8 %x, 23 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp eq i8 %x, 23 %b = icmp uge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x == 23 && x >u 17 define i1 @and_eq_ugt_swap(i8 %x) { ; CHECK-LABEL: @and_eq_ugt_swap( ; CHECK-NEXT: [[A:%.*]] = icmp eq i8 %x, 23 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp eq i8 %x, 23 %b = icmp ugt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x == 23 && x <=u 17 define i1 @and_eq_ule_swap(i8 %x) { ; CHECK-LABEL: @and_eq_ule_swap( ; CHECK-NEXT: ret i1 false ; %a = icmp eq i8 %x, 23 %b = icmp ule i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x == 23 && x =s 17 define i1 @and_ne_sge_swap(i8 %x) { ; CHECK-LABEL: @and_ne_sge_swap( ; CHECK-NEXT: [[A:%.*]] = icmp ne i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ne i8 %x, 23 %b = icmp sge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x != 23 && x >s 17 define i1 @and_ne_sgt_swap(i8 %x) { ; CHECK-LABEL: @and_ne_sgt_swap( ; CHECK-NEXT: [[A:%.*]] = icmp ne i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ne i8 %x, 23 %b = icmp sgt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x != 23 && x <=s 17 define i1 @and_ne_sle_swap(i8 %x) { ; CHECK-LABEL: @and_ne_sle_swap( ; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp ne i8 %x, 23 %b = icmp sle i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x != 23 && x =u 17 define i1 @and_ne_uge_swap(i8 %x) { ; CHECK-LABEL: @and_ne_uge_swap( ; CHECK-NEXT: [[A:%.*]] = icmp ne i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ne i8 %x, 23 %b = icmp uge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x != 23 && x >u 17 define i1 @and_ne_ugt_swap(i8 %x) { ; CHECK-LABEL: @and_ne_ugt_swap( ; CHECK-NEXT: [[A:%.*]] = icmp ne i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ne i8 %x, 23 %b = icmp ugt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x != 23 && x <=u 17 define i1 @and_ne_ule_swap(i8 %x) { ; CHECK-LABEL: @and_ne_ule_swap( ; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp ne i8 %x, 23 %b = icmp ule i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x != 23 && x =s 23 && x == 17 define i1 @and_sge_eq_swap(i8 %x) { ; CHECK-LABEL: @and_sge_eq_swap( ; CHECK-NEXT: ret i1 false ; %a = icmp sge i8 %x, 23 %b = icmp eq i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=s 23 && x != 17 define i1 @and_sge_ne_swap(i8 %x) { ; CHECK-LABEL: @and_sge_ne_swap( ; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 23 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp sge i8 %x, 23 %b = icmp ne i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=s 23 && x >=s 17 define i1 @and_sge_sge_swap(i8 %x) { ; CHECK-LABEL: @and_sge_sge_swap( ; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 23 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp sge i8 %x, 23 %b = icmp sge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=s 23 && x >s 17 define i1 @and_sge_sgt_swap(i8 %x) { ; CHECK-LABEL: @and_sge_sgt_swap( ; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 23 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp sge i8 %x, 23 %b = icmp sgt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=s 23 && x <=s 17 define i1 @and_sge_sle_swap(i8 %x) { ; CHECK-LABEL: @and_sge_sle_swap( ; CHECK-NEXT: ret i1 false ; %a = icmp sge i8 %x, 23 %b = icmp sle i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=s 23 && x =s 23 && x >=u 17 define i1 @and_sge_uge_swap(i8 %x) { ; CHECK-LABEL: @and_sge_uge_swap( ; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 23 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp sge i8 %x, 23 %b = icmp uge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=s 23 && x >u 17 define i1 @and_sge_ugt_swap(i8 %x) { ; CHECK-LABEL: @and_sge_ugt_swap( ; CHECK-NEXT: [[A:%.*]] = icmp sge i8 %x, 23 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp sge i8 %x, 23 %b = icmp ugt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=s 23 && x <=u 17 define i1 @and_sge_ule_swap(i8 %x) { ; CHECK-LABEL: @and_sge_ule_swap( ; CHECK-NEXT: ret i1 false ; %a = icmp sge i8 %x, 23 %b = icmp ule i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=s 23 && x s 23 && x == 17 define i1 @and_sgt_eq_swap(i8 %x) { ; CHECK-LABEL: @and_sgt_eq_swap( ; CHECK-NEXT: ret i1 false ; %a = icmp sgt i8 %x, 23 %b = icmp eq i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >s 23 && x != 17 define i1 @and_sgt_ne_swap(i8 %x) { ; CHECK-LABEL: @and_sgt_ne_swap( ; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 23 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp sgt i8 %x, 23 %b = icmp ne i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >s 23 && x >=s 17 define i1 @and_sgt_sge_swap(i8 %x) { ; CHECK-LABEL: @and_sgt_sge_swap( ; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 23 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp sgt i8 %x, 23 %b = icmp sge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >s 23 && x >s 17 define i1 @and_sgt_sgt_swap(i8 %x) { ; CHECK-LABEL: @and_sgt_sgt_swap( ; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 23 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp sgt i8 %x, 23 %b = icmp sgt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >s 23 && x <=s 17 define i1 @and_sgt_sle_swap(i8 %x) { ; CHECK-LABEL: @and_sgt_sle_swap( ; CHECK-NEXT: ret i1 false ; %a = icmp sgt i8 %x, 23 %b = icmp sle i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >s 23 && x s 23 && x >=u 17 define i1 @and_sgt_uge_swap(i8 %x) { ; CHECK-LABEL: @and_sgt_uge_swap( ; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 23 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp sgt i8 %x, 23 %b = icmp uge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >s 23 && x >u 17 define i1 @and_sgt_ugt_swap(i8 %x) { ; CHECK-LABEL: @and_sgt_ugt_swap( ; CHECK-NEXT: [[A:%.*]] = icmp sgt i8 %x, 23 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp sgt i8 %x, 23 %b = icmp ugt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >s 23 && x <=u 17 define i1 @and_sgt_ule_swap(i8 %x) { ; CHECK-LABEL: @and_sgt_ule_swap( ; CHECK-NEXT: ret i1 false ; %a = icmp sgt i8 %x, 23 %b = icmp ule i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >s 23 && x =s 17 define i1 @and_sle_sge_swap(i8 %x) { ; CHECK-LABEL: @and_sle_sge_swap( ; CHECK-NEXT: [[A:%.*]] = icmp sle i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp sle i8 %x, 23 %b = icmp sge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=s 23 && x >s 17 define i1 @and_sle_sgt_swap(i8 %x) { ; CHECK-LABEL: @and_sle_sgt_swap( ; CHECK-NEXT: [[A:%.*]] = icmp sle i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp sle i8 %x, 23 %b = icmp sgt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=s 23 && x <=s 17 define i1 @and_sle_sle_swap(i8 %x) { ; CHECK-LABEL: @and_sle_sle_swap( ; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp sle i8 %x, 23 %b = icmp sle i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=s 23 && x =u 17 define i1 @and_sle_uge_swap(i8 %x) { ; CHECK-LABEL: @and_sle_uge_swap( ; CHECK-NEXT: [[A:%.*]] = icmp sle i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp sle i8 %x, 23 %b = icmp uge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=s 23 && x >u 17 define i1 @and_sle_ugt_swap(i8 %x) { ; CHECK-LABEL: @and_sle_ugt_swap( ; CHECK-NEXT: [[A:%.*]] = icmp sle i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp sle i8 %x, 23 %b = icmp ugt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=s 23 && x <=u 17 define i1 @and_sle_ule_swap(i8 %x) { ; CHECK-LABEL: @and_sle_ule_swap( ; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp sle i8 %x, 23 %b = icmp ule i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=s 23 && x =s 17 define i1 @and_slt_sge_swap(i8 %x) { ; CHECK-LABEL: @and_slt_sge_swap( ; CHECK-NEXT: [[A:%.*]] = icmp slt i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp slt i8 %x, 23 %b = icmp sge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x s 17 define i1 @and_slt_sgt_swap(i8 %x) { ; CHECK-LABEL: @and_slt_sgt_swap( ; CHECK-NEXT: [[A:%.*]] = icmp slt i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp slt i8 %x, 23 %b = icmp sgt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x =u 17 define i1 @and_slt_uge_swap(i8 %x) { ; CHECK-LABEL: @and_slt_uge_swap( ; CHECK-NEXT: [[A:%.*]] = icmp slt i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp slt i8 %x, 23 %b = icmp uge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x u 17 define i1 @and_slt_ugt_swap(i8 %x) { ; CHECK-LABEL: @and_slt_ugt_swap( ; CHECK-NEXT: [[A:%.*]] = icmp slt i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp slt i8 %x, 23 %b = icmp ugt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x =u 23 && x == 17 define i1 @and_uge_eq_swap(i8 %x) { ; CHECK-LABEL: @and_uge_eq_swap( ; CHECK-NEXT: ret i1 false ; %a = icmp uge i8 %x, 23 %b = icmp eq i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=u 23 && x != 17 define i1 @and_uge_ne_swap(i8 %x) { ; CHECK-LABEL: @and_uge_ne_swap( ; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 23 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp uge i8 %x, 23 %b = icmp ne i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=u 23 && x >=s 17 define i1 @and_uge_sge_swap(i8 %x) { ; CHECK-LABEL: @and_uge_sge_swap( ; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp uge i8 %x, 23 %b = icmp sge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=u 23 && x >s 17 define i1 @and_uge_sgt_swap(i8 %x) { ; CHECK-LABEL: @and_uge_sgt_swap( ; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp uge i8 %x, 23 %b = icmp sgt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=u 23 && x <=s 17 define i1 @and_uge_sle_swap(i8 %x) { ; CHECK-LABEL: @and_uge_sle_swap( ; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp uge i8 %x, 23 %b = icmp sle i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=u 23 && x =u 23 && x >=u 17 define i1 @and_uge_uge_swap(i8 %x) { ; CHECK-LABEL: @and_uge_uge_swap( ; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 23 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp uge i8 %x, 23 %b = icmp uge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=u 23 && x >u 17 define i1 @and_uge_ugt_swap(i8 %x) { ; CHECK-LABEL: @and_uge_ugt_swap( ; CHECK-NEXT: [[A:%.*]] = icmp uge i8 %x, 23 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp uge i8 %x, 23 %b = icmp ugt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=u 23 && x <=u 17 define i1 @and_uge_ule_swap(i8 %x) { ; CHECK-LABEL: @and_uge_ule_swap( ; CHECK-NEXT: ret i1 false ; %a = icmp uge i8 %x, 23 %b = icmp ule i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >=u 23 && x u 23 && x == 17 define i1 @and_ugt_eq_swap(i8 %x) { ; CHECK-LABEL: @and_ugt_eq_swap( ; CHECK-NEXT: ret i1 false ; %a = icmp ugt i8 %x, 23 %b = icmp eq i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >u 23 && x != 17 define i1 @and_ugt_ne_swap(i8 %x) { ; CHECK-LABEL: @and_ugt_ne_swap( ; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 23 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp ugt i8 %x, 23 %b = icmp ne i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >u 23 && x >=s 17 define i1 @and_ugt_sge_swap(i8 %x) { ; CHECK-LABEL: @and_ugt_sge_swap( ; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ugt i8 %x, 23 %b = icmp sge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >u 23 && x >s 17 define i1 @and_ugt_sgt_swap(i8 %x) { ; CHECK-LABEL: @and_ugt_sgt_swap( ; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ugt i8 %x, 23 %b = icmp sgt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >u 23 && x <=s 17 define i1 @and_ugt_sle_swap(i8 %x) { ; CHECK-LABEL: @and_ugt_sle_swap( ; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ugt i8 %x, 23 %b = icmp sle i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >u 23 && x u 23 && x >=u 17 define i1 @and_ugt_uge_swap(i8 %x) { ; CHECK-LABEL: @and_ugt_uge_swap( ; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 23 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp ugt i8 %x, 23 %b = icmp uge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >u 23 && x >u 17 define i1 @and_ugt_ugt_swap(i8 %x) { ; CHECK-LABEL: @and_ugt_ugt_swap( ; CHECK-NEXT: [[A:%.*]] = icmp ugt i8 %x, 23 ; CHECK-NEXT: ret i1 [[A]] ; %a = icmp ugt i8 %x, 23 %b = icmp ugt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >u 23 && x <=u 17 define i1 @and_ugt_ule_swap(i8 %x) { ; CHECK-LABEL: @and_ugt_ule_swap( ; CHECK-NEXT: ret i1 false ; %a = icmp ugt i8 %x, 23 %b = icmp ule i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x >u 23 && x =s 17 define i1 @and_ule_sge_swap(i8 %x) { ; CHECK-LABEL: @and_ule_sge_swap( ; CHECK-NEXT: [[A:%.*]] = icmp ule i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ule i8 %x, 23 %b = icmp sge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=u 23 && x >s 17 define i1 @and_ule_sgt_swap(i8 %x) { ; CHECK-LABEL: @and_ule_sgt_swap( ; CHECK-NEXT: [[A:%.*]] = icmp ule i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ule i8 %x, 23 %b = icmp sgt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=u 23 && x <=s 17 define i1 @and_ule_sle_swap(i8 %x) { ; CHECK-LABEL: @and_ule_sle_swap( ; CHECK-NEXT: [[A:%.*]] = icmp ule i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp sle i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ule i8 %x, 23 %b = icmp sle i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=u 23 && x =u 17 define i1 @and_ule_uge_swap(i8 %x) { ; CHECK-LABEL: @and_ule_uge_swap( ; CHECK-NEXT: [[A:%.*]] = icmp ule i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ule i8 %x, 23 %b = icmp uge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=u 23 && x >u 17 define i1 @and_ule_ugt_swap(i8 %x) { ; CHECK-LABEL: @and_ule_ugt_swap( ; CHECK-NEXT: [[A:%.*]] = icmp ule i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ule i8 %x, 23 %b = icmp ugt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=u 23 && x <=u 17 define i1 @and_ule_ule_swap(i8 %x) { ; CHECK-LABEL: @and_ule_ule_swap( ; CHECK-NEXT: [[B:%.*]] = icmp ule i8 %x, 17 ; CHECK-NEXT: ret i1 [[B]] ; %a = icmp ule i8 %x, 23 %b = icmp ule i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x <=u 23 && x =s 17 define i1 @and_ult_sge_swap(i8 %x) { ; CHECK-LABEL: @and_ult_sge_swap( ; CHECK-NEXT: [[A:%.*]] = icmp ult i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp sge i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ult i8 %x, 23 %b = icmp sge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x s 17 define i1 @and_ult_sgt_swap(i8 %x) { ; CHECK-LABEL: @and_ult_sgt_swap( ; CHECK-NEXT: [[A:%.*]] = icmp ult i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp sgt i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ult i8 %x, 23 %b = icmp sgt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x =u 17 define i1 @and_ult_uge_swap(i8 %x) { ; CHECK-LABEL: @and_ult_uge_swap( ; CHECK-NEXT: [[A:%.*]] = icmp ult i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp uge i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ult i8 %x, 23 %b = icmp uge i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; x u 17 define i1 @and_ult_ugt_swap(i8 %x) { ; CHECK-LABEL: @and_ult_ugt_swap( ; CHECK-NEXT: [[A:%.*]] = icmp ult i8 %x, 23 ; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 %x, 17 ; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]] ; CHECK-NEXT: ret i1 [[C]] ; %a = icmp ult i8 %x, 23 %b = icmp ugt i8 %x, 17 %c = and i1 %a, %b ret i1 %c } ; 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 =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 =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 =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 =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 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 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 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 =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 =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 =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 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 =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 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 =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 =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 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 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 =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 =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 =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 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 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 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 =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 =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 =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 =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 =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 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 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 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 =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 =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 =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 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 =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 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 =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 =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 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 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 =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 =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 =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 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 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 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