; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 ; RUN: llc -mtriple=mipsel < %s | FileCheck %s ; RUN: llc -mtriple=mips -mcpu=mips32r6 -mattr=micromips -relocation-model=pic < %s -asm-show-inst | FileCheck %s -check-prefix=MMR6 @g1 = external global i32 define i32 @seteq0(i32 %a) { ; CHECK-LABEL: seteq0: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: jr $ra ; CHECK-NEXT: sltiu $2, $4, 1 ; ; MMR6-LABEL: seteq0: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: sltiu $2, $4, 1 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: jrc $ra # > entry: %cmp = icmp eq i32 %a, 0 %conv = zext i1 %cmp to i32 ret i32 %conv } define i32 @setne0(i32 %a) { ; CHECK-LABEL: setne0: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: jr $ra ; CHECK-NEXT: sltu $2, $zero, $4 ; ; MMR6-LABEL: setne0: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: sltu $2, $zero, $4 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: jrc $ra # > entry: %cmp = icmp ne i32 %a, 0 %conv = zext i1 %cmp to i32 ret i32 %conv } define void @slti_beq0(i32 %a) { ; CHECK-LABEL: slti_beq0: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: slti $1, $4, -32768 ; CHECK-NEXT: beqz $1, $BB2_2 ; CHECK-NEXT: nop ; CHECK-NEXT: # %bb.1: # %if.then ; CHECK-NEXT: lui $1, %hi(g1) ; CHECK-NEXT: sw $4, %lo(g1)($1) ; CHECK-NEXT: $BB2_2: # %if.end ; CHECK-NEXT: jr $ra ; CHECK-NEXT: nop ; ; MMR6-LABEL: slti_beq0: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: lui $2, %hi(_gp_disp) # ; MMR6-NEXT: # > ; MMR6-NEXT: addiu $2, $2, %lo(_gp_disp) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: addu $2, $2, $25 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: slti $1, $4, -32768 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: beqzc $1, $BB2_2 # ; MMR6-NEXT: # > ; MMR6-NEXT: # %bb.1: # %if.then ; MMR6-NEXT: lw $2, %got(g1)($2) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: sw16 $4, 0($2) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: $BB2_2: # %if.end ; MMR6-NEXT: jrc $ra # > entry: %cmp = icmp slt i32 %a, -32768 br i1 %cmp, label %if.then, label %if.end if.then: store i32 %a, ptr @g1, align 4 br label %if.end if.end: ret void } define void @slti_beq1(i32 %a) { ; CHECK-LABEL: slti_beq1: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: lui $1, 65535 ; CHECK-NEXT: ori $1, $1, 32766 ; CHECK-NEXT: slt $1, $1, $4 ; CHECK-NEXT: bnez $1, $BB3_2 ; CHECK-NEXT: nop ; CHECK-NEXT: # %bb.1: # %if.then ; CHECK-NEXT: lui $1, %hi(g1) ; CHECK-NEXT: sw $4, %lo(g1)($1) ; CHECK-NEXT: $BB3_2: # %if.end ; CHECK-NEXT: jr $ra ; CHECK-NEXT: nop ; ; MMR6-LABEL: slti_beq1: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: lui $2, %hi(_gp_disp) # ; MMR6-NEXT: # > ; MMR6-NEXT: addiu $2, $2, %lo(_gp_disp) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: addu $2, $2, $25 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: lui $1, 65535 # ; MMR6-NEXT: # > ; MMR6-NEXT: ori $1, $1, 32766 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: slt $1, $1, $4 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: bnezc $1, $BB3_2 # ; MMR6-NEXT: # > ; MMR6-NEXT: # %bb.1: # %if.then ; MMR6-NEXT: lw $2, %got(g1)($2) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: sw16 $4, 0($2) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: $BB3_2: # %if.end ; MMR6-NEXT: jrc $ra # > entry: %cmp = icmp slt i32 %a, -32769 br i1 %cmp, label %if.then, label %if.end if.then: store i32 %a, ptr @g1, align 4 br label %if.end if.end: ret void } define void @slti_beq2(i32 %a) { ; CHECK-LABEL: slti_beq2: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: slti $1, $4, 32767 ; CHECK-NEXT: beqz $1, $BB4_2 ; CHECK-NEXT: nop ; CHECK-NEXT: # %bb.1: # %if.then ; CHECK-NEXT: lui $1, %hi(g1) ; CHECK-NEXT: sw $4, %lo(g1)($1) ; CHECK-NEXT: $BB4_2: # %if.end ; CHECK-NEXT: jr $ra ; CHECK-NEXT: nop ; ; MMR6-LABEL: slti_beq2: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: lui $2, %hi(_gp_disp) # ; MMR6-NEXT: # > ; MMR6-NEXT: addiu $2, $2, %lo(_gp_disp) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: addu $2, $2, $25 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: slti $1, $4, 32767 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: beqzc $1, $BB4_2 # ; MMR6-NEXT: # > ; MMR6-NEXT: # %bb.1: # %if.then ; MMR6-NEXT: lw $2, %got(g1)($2) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: sw16 $4, 0($2) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: $BB4_2: # %if.end ; MMR6-NEXT: jrc $ra # > entry: %cmp = icmp slt i32 %a, 32767 br i1 %cmp, label %if.then, label %if.end if.then: store i32 %a, ptr @g1, align 4 br label %if.end if.end: ret void } define void @slti_beq3(i32 %a) { ; CHECK-LABEL: slti_beq3: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: addiu $1, $zero, 32767 ; CHECK-NEXT: slt $1, $1, $4 ; CHECK-NEXT: bnez $1, $BB5_2 ; CHECK-NEXT: nop ; CHECK-NEXT: # %bb.1: # %if.then ; CHECK-NEXT: lui $1, %hi(g1) ; CHECK-NEXT: sw $4, %lo(g1)($1) ; CHECK-NEXT: $BB5_2: # %if.end ; CHECK-NEXT: jr $ra ; CHECK-NEXT: nop ; ; MMR6-LABEL: slti_beq3: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: lui $2, %hi(_gp_disp) # ; MMR6-NEXT: # > ; MMR6-NEXT: addiu $2, $2, %lo(_gp_disp) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: addu $2, $2, $25 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: addiu $1, $zero, 32767 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: slt $1, $1, $4 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: bnezc $1, $BB5_2 # ; MMR6-NEXT: # > ; MMR6-NEXT: # %bb.1: # %if.then ; MMR6-NEXT: lw $2, %got(g1)($2) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: sw16 $4, 0($2) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: $BB5_2: # %if.end ; MMR6-NEXT: jrc $ra # > entry: %cmp = icmp slt i32 %a, 32768 br i1 %cmp, label %if.then, label %if.end if.then: store i32 %a, ptr @g1, align 4 br label %if.end if.end: ret void } define void @sltiu_beq0(i32 %a) { ; CHECK-LABEL: sltiu_beq0: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: sltiu $1, $4, 32767 ; CHECK-NEXT: beqz $1, $BB6_2 ; CHECK-NEXT: nop ; CHECK-NEXT: # %bb.1: # %if.then ; CHECK-NEXT: lui $1, %hi(g1) ; CHECK-NEXT: sw $4, %lo(g1)($1) ; CHECK-NEXT: $BB6_2: # %if.end ; CHECK-NEXT: jr $ra ; CHECK-NEXT: nop ; ; MMR6-LABEL: sltiu_beq0: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: lui $2, %hi(_gp_disp) # ; MMR6-NEXT: # > ; MMR6-NEXT: addiu $2, $2, %lo(_gp_disp) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: addu $2, $2, $25 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: sltiu $1, $4, 32767 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: beqzc $1, $BB6_2 # ; MMR6-NEXT: # > ; MMR6-NEXT: # %bb.1: # %if.then ; MMR6-NEXT: lw $2, %got(g1)($2) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: sw16 $4, 0($2) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: $BB6_2: # %if.end ; MMR6-NEXT: jrc $ra # > entry: %cmp = icmp ult i32 %a, 32767 br i1 %cmp, label %if.then, label %if.end if.then: store i32 %a, ptr @g1, align 4 br label %if.end if.end: ret void } define void @sltiu_beq1(i32 %a) { ; CHECK-LABEL: sltiu_beq1: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: addiu $1, $zero, 32767 ; CHECK-NEXT: sltu $1, $1, $4 ; CHECK-NEXT: bnez $1, $BB7_2 ; CHECK-NEXT: nop ; CHECK-NEXT: # %bb.1: # %if.then ; CHECK-NEXT: lui $1, %hi(g1) ; CHECK-NEXT: sw $4, %lo(g1)($1) ; CHECK-NEXT: $BB7_2: # %if.end ; CHECK-NEXT: jr $ra ; CHECK-NEXT: nop ; ; MMR6-LABEL: sltiu_beq1: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: lui $2, %hi(_gp_disp) # ; MMR6-NEXT: # > ; MMR6-NEXT: addiu $2, $2, %lo(_gp_disp) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: addu $2, $2, $25 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: addiu $1, $zero, 32767 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: sltu $1, $1, $4 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: bnezc $1, $BB7_2 # ; MMR6-NEXT: # > ; MMR6-NEXT: # %bb.1: # %if.then ; MMR6-NEXT: lw $2, %got(g1)($2) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: sw16 $4, 0($2) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: $BB7_2: # %if.end ; MMR6-NEXT: jrc $ra # > entry: %cmp = icmp ult i32 %a, 32768 br i1 %cmp, label %if.then, label %if.end if.then: store i32 %a, ptr @g1, align 4 br label %if.end if.end: ret void } define void @sltiu_beq2(i32 %a) { ; CHECK-LABEL: sltiu_beq2: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: sltiu $1, $4, -32768 ; CHECK-NEXT: beqz $1, $BB8_2 ; CHECK-NEXT: nop ; CHECK-NEXT: # %bb.1: # %if.then ; CHECK-NEXT: lui $1, %hi(g1) ; CHECK-NEXT: sw $4, %lo(g1)($1) ; CHECK-NEXT: $BB8_2: # %if.end ; CHECK-NEXT: jr $ra ; CHECK-NEXT: nop ; ; MMR6-LABEL: sltiu_beq2: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: lui $2, %hi(_gp_disp) # ; MMR6-NEXT: # > ; MMR6-NEXT: addiu $2, $2, %lo(_gp_disp) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: addu $2, $2, $25 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: sltiu $1, $4, -32768 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: beqzc $1, $BB8_2 # ; MMR6-NEXT: # > ; MMR6-NEXT: # %bb.1: # %if.then ; MMR6-NEXT: lw $2, %got(g1)($2) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: sw16 $4, 0($2) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: $BB8_2: # %if.end ; MMR6-NEXT: jrc $ra # > entry: %cmp = icmp ult i32 %a, -32768 br i1 %cmp, label %if.then, label %if.end if.then: store i32 %a, ptr @g1, align 4 br label %if.end if.end: ret void } define void @sltiu_beq3(i32 %a) { ; CHECK-LABEL: sltiu_beq3: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: lui $1, 65535 ; CHECK-NEXT: ori $1, $1, 32766 ; CHECK-NEXT: sltu $1, $1, $4 ; CHECK-NEXT: bnez $1, $BB9_2 ; CHECK-NEXT: nop ; CHECK-NEXT: # %bb.1: # %if.then ; CHECK-NEXT: lui $1, %hi(g1) ; CHECK-NEXT: sw $4, %lo(g1)($1) ; CHECK-NEXT: $BB9_2: # %if.end ; CHECK-NEXT: jr $ra ; CHECK-NEXT: nop ; ; MMR6-LABEL: sltiu_beq3: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: lui $2, %hi(_gp_disp) # ; MMR6-NEXT: # > ; MMR6-NEXT: addiu $2, $2, %lo(_gp_disp) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: addu $2, $2, $25 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: lui $1, 65535 # ; MMR6-NEXT: # > ; MMR6-NEXT: ori $1, $1, 32766 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: sltu $1, $1, $4 # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: bnezc $1, $BB9_2 # ; MMR6-NEXT: # > ; MMR6-NEXT: # %bb.1: # %if.then ; MMR6-NEXT: lw $2, %got(g1)($2) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: sw16 $4, 0($2) # ; MMR6-NEXT: # ; MMR6-NEXT: # > ; MMR6-NEXT: $BB9_2: # %if.end ; MMR6-NEXT: jrc $ra # > entry: %cmp = icmp ult i32 %a, -32769 br i1 %cmp, label %if.then, label %if.end if.then: store i32 %a, ptr @g1, align 4 br label %if.end if.end: ret void }