blob: a7e0d05544be817d29eab2b107b9cf6d0b1deaa7 [file] [log] [blame]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -O0 -mtriple=mipsel-linux-gnu -global-isel -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS32
define i1 @eq_i32(i32 %a, i32 %b){
; MIPS32-LABEL: eq_i32:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: xor $1, $4, $5
; MIPS32-NEXT: sltiu $2, $1, 1
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp eq i32 %a, %b
ret i1 %cmp
}
define i1 @ne_i32(i32 %a, i32 %b) {
; MIPS32-LABEL: ne_i32:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: xor $1, $4, $5
; MIPS32-NEXT: sltu $2, $zero, $1
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp ne i32 %a, %b
ret i1 %cmp
}
define i1 @sgt_i32(i32 %a, i32 %b) {
; MIPS32-LABEL: sgt_i32:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: slt $2, $5, $4
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp sgt i32 %a, %b
ret i1 %cmp
}
define i1 @sge_i32(i32 %a, i32 %b) {
; MIPS32-LABEL: sge_i32:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: slt $1, $4, $5
; MIPS32-NEXT: xori $2, $1, 1
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp sge i32 %a, %b
ret i1 %cmp
}
define i1 @slt_i32(i32 %a, i32 %b) {
; MIPS32-LABEL: slt_i32:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: slt $2, $4, $5
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp slt i32 %a, %b
ret i1 %cmp
}
define i1 @sle_i32(i32 %a, i32 %b) {
; MIPS32-LABEL: sle_i32:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: slt $1, $5, $4
; MIPS32-NEXT: xori $2, $1, 1
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp sle i32 %a, %b
ret i1 %cmp
}
define i1 @ugt_i32(i32 %a, i32 %b) {
; MIPS32-LABEL: ugt_i32:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: sltu $2, $5, $4
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp ugt i32 %a, %b
ret i1 %cmp
}
define i1 @uge_i32(i32 %a, i32 %b) {
; MIPS32-LABEL: uge_i32:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: sltu $1, $4, $5
; MIPS32-NEXT: xori $2, $1, 1
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp uge i32 %a, %b
ret i1 %cmp
}
define i1 @ult_i32(i32 %a, i32 %b) {
; MIPS32-LABEL: ult_i32:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: sltu $2, $4, $5
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp ult i32 %a, %b
ret i1 %cmp
}
define i1 @ule_i32(i32 %a, i32 %b) {
; MIPS32-LABEL: ule_i32:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: sltu $1, $5, $4
; MIPS32-NEXT: xori $2, $1, 1
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp ule i32 %a, %b
ret i1 %cmp
}
define i1 @eq_ptr(i32* %a, i32* %b){
; MIPS32-LABEL: eq_ptr:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: xor $1, $4, $5
; MIPS32-NEXT: sltiu $2, $1, 1
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp eq i32* %a, %b
ret i1 %cmp
}
define i1 @ult_i8(i8 %a, i8 %b) {
; MIPS32-LABEL: ult_i8:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: andi $1, $4, 255
; MIPS32-NEXT: andi $2, $5, 255
; MIPS32-NEXT: sltu $2, $1, $2
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp ult i8 %a, %b
ret i1 %cmp
}
define i1 @slt_i16(i16 %a, i16 %b) {
; MIPS32-LABEL: slt_i16:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: sll $1, $4, 16
; MIPS32-NEXT: sra $1, $1, 16
; MIPS32-NEXT: sll $2, $5, 16
; MIPS32-NEXT: sra $2, $2, 16
; MIPS32-NEXT: slt $2, $1, $2
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp slt i16 %a, %b
ret i1 %cmp
}
define i1 @eq_i64(i64 %a, i64 %b){
; MIPS32-LABEL: eq_i64:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: xor $1, $4, $6
; MIPS32-NEXT: xor $2, $5, $7
; MIPS32-NEXT: or $1, $1, $2
; MIPS32-NEXT: sltiu $2, $1, 1
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp eq i64 %a, %b
ret i1 %cmp
}
define i1 @ne_i64(i64 %a, i64 %b) {
; MIPS32-LABEL: ne_i64:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: xor $1, $4, $6
; MIPS32-NEXT: xor $2, $5, $7
; MIPS32-NEXT: or $1, $1, $2
; MIPS32-NEXT: sltu $2, $zero, $1
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp ne i64 %a, %b
ret i1 %cmp
}
define i1 @sgt_i64(i64 %a, i64 %b) {
; MIPS32-LABEL: sgt_i64:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: slt $2, $7, $5
; MIPS32-NEXT: xor $1, $5, $7
; MIPS32-NEXT: sltiu $3, $1, 1
; MIPS32-NEXT: sltu $1, $6, $4
; MIPS32-NEXT: andi $3, $3, 1
; MIPS32-NEXT: movn $2, $1, $3
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp sgt i64 %a, %b
ret i1 %cmp
}
define i1 @sge_i64(i64 %a, i64 %b) {
; MIPS32-LABEL: sge_i64:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: slt $1, $5, $7
; MIPS32-NEXT: xori $2, $1, 1
; MIPS32-NEXT: xor $1, $5, $7
; MIPS32-NEXT: sltiu $3, $1, 1
; MIPS32-NEXT: sltu $1, $4, $6
; MIPS32-NEXT: xori $1, $1, 1
; MIPS32-NEXT: andi $3, $3, 1
; MIPS32-NEXT: movn $2, $1, $3
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp sge i64 %a, %b
ret i1 %cmp
}
define i1 @slt_i64(i64 %a, i64 %b) {
; MIPS32-LABEL: slt_i64:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: slt $2, $5, $7
; MIPS32-NEXT: xor $1, $5, $7
; MIPS32-NEXT: sltiu $3, $1, 1
; MIPS32-NEXT: sltu $1, $4, $6
; MIPS32-NEXT: andi $3, $3, 1
; MIPS32-NEXT: movn $2, $1, $3
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp slt i64 %a, %b
ret i1 %cmp
}
define i1 @sle_i64(i64 %a, i64 %b) {
; MIPS32-LABEL: sle_i64:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: slt $1, $7, $5
; MIPS32-NEXT: xori $2, $1, 1
; MIPS32-NEXT: xor $1, $5, $7
; MIPS32-NEXT: sltiu $3, $1, 1
; MIPS32-NEXT: sltu $1, $6, $4
; MIPS32-NEXT: xori $1, $1, 1
; MIPS32-NEXT: andi $3, $3, 1
; MIPS32-NEXT: movn $2, $1, $3
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp sle i64 %a, %b
ret i1 %cmp
}
define i1 @ugt_i64(i64 %a, i64 %b) {
; MIPS32-LABEL: ugt_i64:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: sltu $2, $7, $5
; MIPS32-NEXT: xor $1, $5, $7
; MIPS32-NEXT: sltiu $3, $1, 1
; MIPS32-NEXT: sltu $1, $6, $4
; MIPS32-NEXT: andi $3, $3, 1
; MIPS32-NEXT: movn $2, $1, $3
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp ugt i64 %a, %b
ret i1 %cmp
}
define i1 @uge_i64(i64 %a, i64 %b) {
; MIPS32-LABEL: uge_i64:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: sltu $1, $5, $7
; MIPS32-NEXT: xori $2, $1, 1
; MIPS32-NEXT: xor $1, $5, $7
; MIPS32-NEXT: sltiu $3, $1, 1
; MIPS32-NEXT: sltu $1, $4, $6
; MIPS32-NEXT: xori $1, $1, 1
; MIPS32-NEXT: andi $3, $3, 1
; MIPS32-NEXT: movn $2, $1, $3
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp uge i64 %a, %b
ret i1 %cmp
}
define i1 @ult_i64(i64 %a, i64 %b) {
; MIPS32-LABEL: ult_i64:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: sltu $2, $5, $7
; MIPS32-NEXT: xor $1, $5, $7
; MIPS32-NEXT: sltiu $3, $1, 1
; MIPS32-NEXT: sltu $1, $4, $6
; MIPS32-NEXT: andi $3, $3, 1
; MIPS32-NEXT: movn $2, $1, $3
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp ult i64 %a, %b
ret i1 %cmp
}
define i1 @ule_i64(i64 %a, i64 %b) {
; MIPS32-LABEL: ule_i64:
; MIPS32: # %bb.0: # %entry
; MIPS32-NEXT: sltu $1, $7, $5
; MIPS32-NEXT: xori $2, $1, 1
; MIPS32-NEXT: xor $1, $5, $7
; MIPS32-NEXT: sltiu $3, $1, 1
; MIPS32-NEXT: sltu $1, $6, $4
; MIPS32-NEXT: xori $1, $1, 1
; MIPS32-NEXT: andi $3, $3, 1
; MIPS32-NEXT: movn $2, $1, $3
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
entry:
%cmp = icmp ule i64 %a, %b
ret i1 %cmp
}