1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 19:23:23 +01:00
llvm-mirror/test/Transforms/InstSimplify/or-icmps-same-ops.ll
Sanjay Patel a12bf57077 [InstSimplify] fixed (?) to not mutate icmps
As Eli noted in the post-commit thread for r288833, the use of
swapOperands() may not be allowed in InstSimplify, so I'm 
removing those calls here pending further review. 

The swap mutates the icmp, and there doesn't appear to be precedent
for instruction mutation in InstSimplify.

I didn't actually have any tests for those cases, so I'm adding
a few here. 

llvm-svn: 288855
2016-12-06 22:09:52 +00:00

1240 lines
29 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -instsimplify -S | FileCheck %s
; There are 10 * 10 combinations of icmp predicates that can be OR'd together.
; The majority of these can be simplified to always true or just one of the icmps.
define i1 @eq_eq(i8 %a, i8 %b) {
; CHECK-LABEL: @eq_eq(
; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp eq i8 %a, %b
%cmp2 = icmp eq i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @eq_ne(i8 %a, i8 %b) {
; CHECK-LABEL: @eq_ne(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp eq i8 %a, %b
%cmp2 = icmp ne i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @eq_sge(i8 %a, i8 %b) {
; CHECK-LABEL: @eq_sge(
; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp eq i8 %a, %b
%cmp2 = icmp sge i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @eq_sgt(i8 %a, i8 %b) {
; CHECK-LABEL: @eq_sgt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp eq i8 %a, %b
%cmp2 = icmp sgt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @eq_sle(i8 %a, i8 %b) {
; CHECK-LABEL: @eq_sle(
; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp eq i8 %a, %b
%cmp2 = icmp sle i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @eq_slt(i8 %a, i8 %b) {
; CHECK-LABEL: @eq_slt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp eq i8 %a, %b
%cmp2 = icmp slt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @eq_uge(i8 %a, i8 %b) {
; CHECK-LABEL: @eq_uge(
; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp eq i8 %a, %b
%cmp2 = icmp uge i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @eq_ugt(i8 %a, i8 %b) {
; CHECK-LABEL: @eq_ugt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp eq i8 %a, %b
%cmp2 = icmp ugt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @eq_ule(i8 %a, i8 %b) {
; CHECK-LABEL: @eq_ule(
; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp eq i8 %a, %b
%cmp2 = icmp ule i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @eq_ult(i8 %a, i8 %b) {
; CHECK-LABEL: @eq_ult(
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp eq i8 %a, %b
%cmp2 = icmp ult i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
;
define i1 @ne_eq(i8 %a, i8 %b) {
; CHECK-LABEL: @ne_eq(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp ne i8 %a, %b
%cmp2 = icmp eq i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ne_ne(i8 %a, i8 %b) {
; CHECK-LABEL: @ne_ne(
; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp ne i8 %a, %b
%cmp2 = icmp ne i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ne_sge(i8 %a, i8 %b) {
; CHECK-LABEL: @ne_sge(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp ne i8 %a, %b
%cmp2 = icmp sge i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ne_sgt(i8 %a, i8 %b) {
; CHECK-LABEL: @ne_sgt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP1]]
;
%cmp1 = icmp ne i8 %a, %b
%cmp2 = icmp sgt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ne_sle(i8 %a, i8 %b) {
; CHECK-LABEL: @ne_sle(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp ne i8 %a, %b
%cmp2 = icmp sle i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ne_slt(i8 %a, i8 %b) {
; CHECK-LABEL: @ne_slt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP1]]
;
%cmp1 = icmp ne i8 %a, %b
%cmp2 = icmp slt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ne_uge(i8 %a, i8 %b) {
; CHECK-LABEL: @ne_uge(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp ne i8 %a, %b
%cmp2 = icmp uge i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ne_ugt(i8 %a, i8 %b) {
; CHECK-LABEL: @ne_ugt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP1]]
;
%cmp1 = icmp ne i8 %a, %b
%cmp2 = icmp ugt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ne_ule(i8 %a, i8 %b) {
; CHECK-LABEL: @ne_ule(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp ne i8 %a, %b
%cmp2 = icmp ule i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ne_ult(i8 %a, i8 %b) {
; CHECK-LABEL: @ne_ult(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP1]]
;
%cmp1 = icmp ne i8 %a, %b
%cmp2 = icmp ult i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
;
define i1 @sge_eq(i8 %a, i8 %b) {
; CHECK-LABEL: @sge_eq(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP1]]
;
%cmp1 = icmp sge i8 %a, %b
%cmp2 = icmp eq i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sge_ne(i8 %a, i8 %b) {
; CHECK-LABEL: @sge_ne(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp sge i8 %a, %b
%cmp2 = icmp ne i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sge_sge(i8 %a, i8 %b) {
; CHECK-LABEL: @sge_sge(
; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp sge i8 %a, %b
%cmp2 = icmp sge i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sge_sgt(i8 %a, i8 %b) {
; CHECK-LABEL: @sge_sgt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP1]]
;
%cmp1 = icmp sge i8 %a, %b
%cmp2 = icmp sgt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sge_sle(i8 %a, i8 %b) {
; CHECK-LABEL: @sge_sle(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp sge i8 %a, %b
%cmp2 = icmp sle i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sge_slt(i8 %a, i8 %b) {
; CHECK-LABEL: @sge_slt(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp sge i8 %a, %b
%cmp2 = icmp slt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sge_uge(i8 %a, i8 %b) {
; CHECK-LABEL: @sge_uge(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp sge i8 %a, %b
%cmp2 = icmp uge i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sge_ugt(i8 %a, i8 %b) {
; CHECK-LABEL: @sge_ugt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp sge i8 %a, %b
%cmp2 = icmp ugt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sge_ule(i8 %a, i8 %b) {
; CHECK-LABEL: @sge_ule(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp sge i8 %a, %b
%cmp2 = icmp ule i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sge_ult(i8 %a, i8 %b) {
; CHECK-LABEL: @sge_ult(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp sge i8 %a, %b
%cmp2 = icmp ult i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
;
define i1 @sgt_eq(i8 %a, i8 %b) {
; CHECK-LABEL: @sgt_eq(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp sgt i8 %a, %b
%cmp2 = icmp eq i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sgt_ne(i8 %a, i8 %b) {
; CHECK-LABEL: @sgt_ne(
; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp sgt i8 %a, %b
%cmp2 = icmp ne i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sgt_sge(i8 %a, i8 %b) {
; CHECK-LABEL: @sgt_sge(
; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp sgt i8 %a, %b
%cmp2 = icmp sge i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sgt_sgt(i8 %a, i8 %b) {
; CHECK-LABEL: @sgt_sgt(
; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp sgt i8 %a, %b
%cmp2 = icmp sgt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sgt_sle(i8 %a, i8 %b) {
; CHECK-LABEL: @sgt_sle(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp sgt i8 %a, %b
%cmp2 = icmp sle i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sgt_slt(i8 %a, i8 %b) {
; CHECK-LABEL: @sgt_slt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp sgt i8 %a, %b
%cmp2 = icmp slt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sgt_uge(i8 %a, i8 %b) {
; CHECK-LABEL: @sgt_uge(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp sgt i8 %a, %b
%cmp2 = icmp uge i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sgt_ugt(i8 %a, i8 %b) {
; CHECK-LABEL: @sgt_ugt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp sgt i8 %a, %b
%cmp2 = icmp ugt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sgt_ule(i8 %a, i8 %b) {
; CHECK-LABEL: @sgt_ule(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp sgt i8 %a, %b
%cmp2 = icmp ule i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sgt_ult(i8 %a, i8 %b) {
; CHECK-LABEL: @sgt_ult(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp sgt i8 %a, %b
%cmp2 = icmp ult i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
;
define i1 @sle_eq(i8 %a, i8 %b) {
; CHECK-LABEL: @sle_eq(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP1]]
;
%cmp1 = icmp sle i8 %a, %b
%cmp2 = icmp eq i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sle_ne(i8 %a, i8 %b) {
; CHECK-LABEL: @sle_ne(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp sle i8 %a, %b
%cmp2 = icmp ne i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sle_sge(i8 %a, i8 %b) {
; CHECK-LABEL: @sle_sge(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp sle i8 %a, %b
%cmp2 = icmp sge i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sle_sgt(i8 %a, i8 %b) {
; CHECK-LABEL: @sle_sgt(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp sle i8 %a, %b
%cmp2 = icmp sgt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sle_sle(i8 %a, i8 %b) {
; CHECK-LABEL: @sle_sle(
; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp sle i8 %a, %b
%cmp2 = icmp sle i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sle_slt(i8 %a, i8 %b) {
; CHECK-LABEL: @sle_slt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP1]]
;
%cmp1 = icmp sle i8 %a, %b
%cmp2 = icmp slt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sle_uge(i8 %a, i8 %b) {
; CHECK-LABEL: @sle_uge(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp sle i8 %a, %b
%cmp2 = icmp uge i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sle_ugt(i8 %a, i8 %b) {
; CHECK-LABEL: @sle_ugt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp sle i8 %a, %b
%cmp2 = icmp ugt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sle_ule(i8 %a, i8 %b) {
; CHECK-LABEL: @sle_ule(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp sle i8 %a, %b
%cmp2 = icmp ule i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @sle_ult(i8 %a, i8 %b) {
; CHECK-LABEL: @sle_ult(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp sle i8 %a, %b
%cmp2 = icmp ult i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
;
define i1 @slt_eq(i8 %a, i8 %b) {
; CHECK-LABEL: @slt_eq(
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp slt i8 %a, %b
%cmp2 = icmp eq i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @slt_ne(i8 %a, i8 %b) {
; CHECK-LABEL: @slt_ne(
; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp slt i8 %a, %b
%cmp2 = icmp ne i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @slt_sge(i8 %a, i8 %b) {
; CHECK-LABEL: @slt_sge(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp slt i8 %a, %b
%cmp2 = icmp sge i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @slt_sgt(i8 %a, i8 %b) {
; CHECK-LABEL: @slt_sgt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp slt i8 %a, %b
%cmp2 = icmp sgt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @slt_sle(i8 %a, i8 %b) {
; CHECK-LABEL: @slt_sle(
; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp slt i8 %a, %b
%cmp2 = icmp sle i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @slt_slt(i8 %a, i8 %b) {
; CHECK-LABEL: @slt_slt(
; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp slt i8 %a, %b
%cmp2 = icmp slt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @slt_uge(i8 %a, i8 %b) {
; CHECK-LABEL: @slt_uge(
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp slt i8 %a, %b
%cmp2 = icmp uge i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @slt_ugt(i8 %a, i8 %b) {
; CHECK-LABEL: @slt_ugt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp slt i8 %a, %b
%cmp2 = icmp ugt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @slt_ule(i8 %a, i8 %b) {
; CHECK-LABEL: @slt_ule(
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp slt i8 %a, %b
%cmp2 = icmp ule i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @slt_ult(i8 %a, i8 %b) {
; CHECK-LABEL: @slt_ult(
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp slt i8 %a, %b
%cmp2 = icmp ult i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
;
define i1 @uge_eq(i8 %a, i8 %b) {
; CHECK-LABEL: @uge_eq(
; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP1]]
;
%cmp1 = icmp uge i8 %a, %b
%cmp2 = icmp eq i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @uge_ne(i8 %a, i8 %b) {
; CHECK-LABEL: @uge_ne(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp uge i8 %a, %b
%cmp2 = icmp ne i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @uge_sge(i8 %a, i8 %b) {
; CHECK-LABEL: @uge_sge(
; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp uge i8 %a, %b
%cmp2 = icmp sge i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @uge_sgt(i8 %a, i8 %b) {
; CHECK-LABEL: @uge_sgt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp uge i8 %a, %b
%cmp2 = icmp sgt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @uge_sle(i8 %a, i8 %b) {
; CHECK-LABEL: @uge_sle(
; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp uge i8 %a, %b
%cmp2 = icmp sle i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @uge_slt(i8 %a, i8 %b) {
; CHECK-LABEL: @uge_slt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp uge i8 %a, %b
%cmp2 = icmp slt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @uge_uge(i8 %a, i8 %b) {
; CHECK-LABEL: @uge_uge(
; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp uge i8 %a, %b
%cmp2 = icmp uge i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @uge_ugt(i8 %a, i8 %b) {
; CHECK-LABEL: @uge_ugt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP1]]
;
%cmp1 = icmp uge i8 %a, %b
%cmp2 = icmp ugt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @uge_ule(i8 %a, i8 %b) {
; CHECK-LABEL: @uge_ule(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp uge i8 %a, %b
%cmp2 = icmp ule i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @uge_ult(i8 %a, i8 %b) {
; CHECK-LABEL: @uge_ult(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp uge i8 %a, %b
%cmp2 = icmp ult i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
;
define i1 @ugt_eq(i8 %a, i8 %b) {
; CHECK-LABEL: @ugt_eq(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp ugt i8 %a, %b
%cmp2 = icmp eq i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ugt_ne(i8 %a, i8 %b) {
; CHECK-LABEL: @ugt_ne(
; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp ugt i8 %a, %b
%cmp2 = icmp ne i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ugt_sge(i8 %a, i8 %b) {
; CHECK-LABEL: @ugt_sge(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp ugt i8 %a, %b
%cmp2 = icmp sge i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ugt_sgt(i8 %a, i8 %b) {
; CHECK-LABEL: @ugt_sgt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp ugt i8 %a, %b
%cmp2 = icmp sgt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ugt_sle(i8 %a, i8 %b) {
; CHECK-LABEL: @ugt_sle(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp ugt i8 %a, %b
%cmp2 = icmp sle i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ugt_slt(i8 %a, i8 %b) {
; CHECK-LABEL: @ugt_slt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp ugt i8 %a, %b
%cmp2 = icmp slt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ugt_uge(i8 %a, i8 %b) {
; CHECK-LABEL: @ugt_uge(
; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp ugt i8 %a, %b
%cmp2 = icmp uge i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ugt_ugt(i8 %a, i8 %b) {
; CHECK-LABEL: @ugt_ugt(
; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp ugt i8 %a, %b
%cmp2 = icmp ugt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ugt_ule(i8 %a, i8 %b) {
; CHECK-LABEL: @ugt_ule(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp ugt i8 %a, %b
%cmp2 = icmp ule i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ugt_ult(i8 %a, i8 %b) {
; CHECK-LABEL: @ugt_ult(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp ugt i8 %a, %b
%cmp2 = icmp ult i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
;
define i1 @ule_eq(i8 %a, i8 %b) {
; CHECK-LABEL: @ule_eq(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP1]]
;
%cmp1 = icmp ule i8 %a, %b
%cmp2 = icmp eq i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ule_ne(i8 %a, i8 %b) {
; CHECK-LABEL: @ule_ne(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp ule i8 %a, %b
%cmp2 = icmp ne i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ule_sge(i8 %a, i8 %b) {
; CHECK-LABEL: @ule_sge(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp ule i8 %a, %b
%cmp2 = icmp sge i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ule_sgt(i8 %a, i8 %b) {
; CHECK-LABEL: @ule_sgt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp ule i8 %a, %b
%cmp2 = icmp sgt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ule_sle(i8 %a, i8 %b) {
; CHECK-LABEL: @ule_sle(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp ule i8 %a, %b
%cmp2 = icmp sle i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ule_slt(i8 %a, i8 %b) {
; CHECK-LABEL: @ule_slt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp ule i8 %a, %b
%cmp2 = icmp slt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ule_uge(i8 %a, i8 %b) {
; CHECK-LABEL: @ule_uge(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp ule i8 %a, %b
%cmp2 = icmp uge i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ule_ugt(i8 %a, i8 %b) {
; CHECK-LABEL: @ule_ugt(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp ule i8 %a, %b
%cmp2 = icmp ugt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ule_ule(i8 %a, i8 %b) {
; CHECK-LABEL: @ule_ule(
; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp ule i8 %a, %b
%cmp2 = icmp ule i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ule_ult(i8 %a, i8 %b) {
; CHECK-LABEL: @ule_ult(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP1]]
;
%cmp1 = icmp ule i8 %a, %b
%cmp2 = icmp ult i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
;
define i1 @ult_eq(i8 %a, i8 %b) {
; CHECK-LABEL: @ult_eq(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp ult i8 %a, %b
%cmp2 = icmp eq i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ult_ne(i8 %a, i8 %b) {
; CHECK-LABEL: @ult_ne(
; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp ult i8 %a, %b
%cmp2 = icmp ne i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ult_sge(i8 %a, i8 %b) {
; CHECK-LABEL: @ult_sge(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp ult i8 %a, %b
%cmp2 = icmp sge i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ult_sgt(i8 %a, i8 %b) {
; CHECK-LABEL: @ult_sgt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp ult i8 %a, %b
%cmp2 = icmp sgt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ult_sle(i8 %a, i8 %b) {
; CHECK-LABEL: @ult_sle(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp ult i8 %a, %b
%cmp2 = icmp sle i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ult_slt(i8 %a, i8 %b) {
; CHECK-LABEL: @ult_slt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp ult i8 %a, %b
%cmp2 = icmp slt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ult_uge(i8 %a, i8 %b) {
; CHECK-LABEL: @ult_uge(
; CHECK-NEXT: ret i1 true
;
%cmp1 = icmp ult i8 %a, %b
%cmp2 = icmp uge i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ult_ugt(i8 %a, i8 %b) {
; CHECK-LABEL: @ult_ugt(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp ult i8 %a, %b
%cmp2 = icmp ugt i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ult_ule(i8 %a, i8 %b) {
; CHECK-LABEL: @ult_ule(
; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp ult i8 %a, %b
%cmp2 = icmp ule i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ult_ult(i8 %a, i8 %b) {
; CHECK-LABEL: @ult_ult(
; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
; CHECK-NEXT: ret i1 [[CMP2]]
;
%cmp1 = icmp ult i8 %a, %b
%cmp2 = icmp ult i8 %a, %b
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
; Check a couple of vector variants to make sure those work too.
define <2 x i1> @ult_uge_vec(<2 x i8> %a, <2 x i8> %b) {
; CHECK-LABEL: @ult_uge_vec(
; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true>
;
%cmp1 = icmp ult <2 x i8> %a, %b
%cmp2 = icmp uge <2 x i8> %a, %b
%or = or <2 x i1> %cmp1, %cmp2
ret <2 x i1> %or
}
define <2 x i1> @ult_ule_vec(<2 x i8> %a, <2 x i8> %b) {
; CHECK-LABEL: @ult_ule_vec(
; CHECK-NEXT: [[CMP2:%.*]] = icmp ule <2 x i8> %a, %b
; CHECK-NEXT: ret <2 x i1> [[CMP2]]
;
%cmp1 = icmp ult <2 x i8> %a, %b
%cmp2 = icmp ule <2 x i8> %a, %b
%or = or <2 x i1> %cmp1, %cmp2
ret <2 x i1> %or
}
define i1 @ult_ne_swap(i8 %a, i8 %b) {
; CHECK-LABEL: @ult_ne_swap(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %b, %a
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp ult i8 %a, %b
%cmp2 = icmp ne i8 %b, %a
%or = or i1 %cmp1, %cmp2
ret i1 %or
}
define i1 @ult_ule_swap(i8 %a, i8 %b) {
; CHECK-LABEL: @ult_ule_swap(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %b, %a
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
; CHECK-NEXT: ret i1 [[OR]]
;
%cmp1 = icmp ult i8 %a, %b
%cmp2 = icmp uge i8 %b, %a
%or = or i1 %cmp1, %cmp2
ret i1 %or
}