; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -march=mips -O0 -mcpu=mips32r2 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MIPS ; RUN: llc -march=mips -O0 -mcpu=mips32r6 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MIPSR6 ; RUN: llc -march=mips -O0 -mcpu=mips32r2 -mattr=+micromips -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MM ; RUN: llc -march=mips -O0 -mcpu=mips32r6 -mattr=+micromips -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MMR6 ; RUN: llc -march=mipsel -O0 -mcpu=mips32r2 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MIPSEL ; RUN: llc -march=mipsel -O0 -mcpu=mips32r6 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MIPSELR6 ; RUN: llc -march=mipsel -O0 -mcpu=mips32r2 -mattr=+micromips -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MMEL ; RUN: llc -march=mipsel -O0 -mcpu=mips32r6 -mattr=+micromips -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MMELR6 ; RUN: llc -march=mips64 -O0 -mcpu=mips64r2 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MIPS64 ; RUN: llc -march=mips64 -O0 -mcpu=mips64r6 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MIPS64R6 ; RUN: llc -march=mips64el -O0 -mcpu=mips64r2 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MIPS64EL ; RUN: llc -march=mips64el -O0 -mcpu=mips64r6 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MIPS64ELR6 define i32 @test_max_32(i32* nocapture %ptr, i32 signext %val) { ; MIPS-LABEL: test_max_32: ; MIPS: # %bb.0: # %entry ; MIPS-NEXT: sync ; MIPS-NEXT: $BB0_1: # %entry ; MIPS-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS-NEXT: ll $2, 0($4) ; MIPS-NEXT: slt $3, $2, $5 ; MIPS-NEXT: move $1, $2 ; MIPS-NEXT: movn $1, $5, $3 ; MIPS-NEXT: sc $1, 0($4) ; MIPS-NEXT: beqz $1, $BB0_1 ; MIPS-NEXT: nop ; MIPS-NEXT: # %bb.2: # %entry ; MIPS-NEXT: sync ; MIPS-NEXT: jr $ra ; MIPS-NEXT: nop ; ; MIPSR6-LABEL: test_max_32: ; MIPSR6: # %bb.0: # %entry ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: $BB0_1: # %entry ; MIPSR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSR6-NEXT: ll $2, 0($4) ; MIPSR6-NEXT: slt $3, $2, $5 ; MIPSR6-NEXT: seleqz $1, $2, $3 ; MIPSR6-NEXT: selnez $3, $5, $3 ; MIPSR6-NEXT: or $1, $1, $3 ; MIPSR6-NEXT: sc $1, 0($4) ; MIPSR6-NEXT: beqzc $1, $BB0_1 ; MIPSR6-NEXT: # %bb.2: # %entry ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: jrc $ra ; ; MM-LABEL: test_max_32: ; MM: # %bb.0: # %entry ; MM-NEXT: sync ; MM-NEXT: $BB0_1: # %entry ; MM-NEXT: # =>This Inner Loop Header: Depth=1 ; MM-NEXT: ll $2, 0($4) ; MM-NEXT: slt $3, $2, $5 ; MM-NEXT: or $1, $2, $zero ; MM-NEXT: movn $1, $5, $3 ; MM-NEXT: sc $1, 0($4) ; MM-NEXT: beqzc $1, $BB0_1 ; MM-NEXT: # %bb.2: # %entry ; MM-NEXT: sync ; MM-NEXT: jrc $ra ; ; MMR6-LABEL: test_max_32: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: sync ; MMR6-NEXT: $BB0_1: # %entry ; MMR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMR6-NEXT: ll $2, 0($4) ; MMR6-NEXT: slt $3, $2, $5 ; MMR6-NEXT: seleqz $1, $2, $3 ; MMR6-NEXT: selnez $3, $5, $3 ; MMR6-NEXT: or $1, $1, $3 ; MMR6-NEXT: sc $1, 0($4) ; MMR6-NEXT: beqc $1, $zero, $BB0_1 ; MMR6-NEXT: # %bb.2: # %entry ; MMR6-NEXT: sync ; MMR6-NEXT: jrc $ra ; ; MIPSEL-LABEL: test_max_32: ; MIPSEL: # %bb.0: # %entry ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: $BB0_1: # %entry ; MIPSEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSEL-NEXT: ll $2, 0($4) ; MIPSEL-NEXT: slt $3, $2, $5 ; MIPSEL-NEXT: move $1, $2 ; MIPSEL-NEXT: movn $1, $5, $3 ; MIPSEL-NEXT: sc $1, 0($4) ; MIPSEL-NEXT: beqz $1, $BB0_1 ; MIPSEL-NEXT: nop ; MIPSEL-NEXT: # %bb.2: # %entry ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: jr $ra ; MIPSEL-NEXT: nop ; ; MIPSELR6-LABEL: test_max_32: ; MIPSELR6: # %bb.0: # %entry ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: $BB0_1: # %entry ; MIPSELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSELR6-NEXT: ll $2, 0($4) ; MIPSELR6-NEXT: slt $3, $2, $5 ; MIPSELR6-NEXT: seleqz $1, $2, $3 ; MIPSELR6-NEXT: selnez $3, $5, $3 ; MIPSELR6-NEXT: or $1, $1, $3 ; MIPSELR6-NEXT: sc $1, 0($4) ; MIPSELR6-NEXT: beqzc $1, $BB0_1 ; MIPSELR6-NEXT: # %bb.2: # %entry ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: jrc $ra ; ; MMEL-LABEL: test_max_32: ; MMEL: # %bb.0: # %entry ; MMEL-NEXT: sync ; MMEL-NEXT: $BB0_1: # %entry ; MMEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MMEL-NEXT: ll $2, 0($4) ; MMEL-NEXT: slt $3, $2, $5 ; MMEL-NEXT: or $1, $2, $zero ; MMEL-NEXT: movn $1, $5, $3 ; MMEL-NEXT: sc $1, 0($4) ; MMEL-NEXT: beqzc $1, $BB0_1 ; MMEL-NEXT: # %bb.2: # %entry ; MMEL-NEXT: sync ; MMEL-NEXT: jrc $ra ; ; MMELR6-LABEL: test_max_32: ; MMELR6: # %bb.0: # %entry ; MMELR6-NEXT: sync ; MMELR6-NEXT: $BB0_1: # %entry ; MMELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMELR6-NEXT: ll $2, 0($4) ; MMELR6-NEXT: slt $3, $2, $5 ; MMELR6-NEXT: seleqz $1, $2, $3 ; MMELR6-NEXT: selnez $3, $5, $3 ; MMELR6-NEXT: or $1, $1, $3 ; MMELR6-NEXT: sc $1, 0($4) ; MMELR6-NEXT: beqc $1, $zero, $BB0_1 ; MMELR6-NEXT: # %bb.2: # %entry ; MMELR6-NEXT: sync ; MMELR6-NEXT: jrc $ra ; ; MIPS64-LABEL: test_max_32: ; MIPS64: # %bb.0: # %entry ; MIPS64-NEXT: # kill: def $a1 killed $a1 killed $a1_64 ; MIPS64-NEXT: sync ; MIPS64-NEXT: .LBB0_1: # %entry ; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64-NEXT: ll $2, 0($4) ; MIPS64-NEXT: slt $3, $2, $5 ; MIPS64-NEXT: move $1, $2 ; MIPS64-NEXT: movn $1, $5, $3 ; MIPS64-NEXT: sc $1, 0($4) ; MIPS64-NEXT: beqz $1, .LBB0_1 ; MIPS64-NEXT: nop ; MIPS64-NEXT: # %bb.2: # %entry ; MIPS64-NEXT: sync ; MIPS64-NEXT: jr $ra ; MIPS64-NEXT: nop ; ; MIPS64R6-LABEL: test_max_32: ; MIPS64R6: # %bb.0: # %entry ; MIPS64R6-NEXT: # kill: def $a1 killed $a1 killed $a1_64 ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: .LBB0_1: # %entry ; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64R6-NEXT: ll $2, 0($4) ; MIPS64R6-NEXT: slt $3, $2, $5 ; MIPS64R6-NEXT: seleqz $1, $2, $3 ; MIPS64R6-NEXT: selnez $3, $5, $3 ; MIPS64R6-NEXT: or $1, $1, $3 ; MIPS64R6-NEXT: sc $1, 0($4) ; MIPS64R6-NEXT: beqzc $1, .LBB0_1 ; MIPS64R6-NEXT: # %bb.2: # %entry ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: jrc $ra ; ; MIPS64EL-LABEL: test_max_32: ; MIPS64EL: # %bb.0: # %entry ; MIPS64EL-NEXT: # kill: def $a1 killed $a1 killed $a1_64 ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: .LBB0_1: # %entry ; MIPS64EL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64EL-NEXT: ll $2, 0($4) ; MIPS64EL-NEXT: slt $3, $2, $5 ; MIPS64EL-NEXT: move $1, $2 ; MIPS64EL-NEXT: movn $1, $5, $3 ; MIPS64EL-NEXT: sc $1, 0($4) ; MIPS64EL-NEXT: beqz $1, .LBB0_1 ; MIPS64EL-NEXT: nop ; MIPS64EL-NEXT: # %bb.2: # %entry ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: jr $ra ; MIPS64EL-NEXT: nop ; ; MIPS64ELR6-LABEL: test_max_32: ; MIPS64ELR6: # %bb.0: # %entry ; MIPS64ELR6-NEXT: # kill: def $a1 killed $a1 killed $a1_64 ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: .LBB0_1: # %entry ; MIPS64ELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64ELR6-NEXT: ll $2, 0($4) ; MIPS64ELR6-NEXT: slt $3, $2, $5 ; MIPS64ELR6-NEXT: seleqz $1, $2, $3 ; MIPS64ELR6-NEXT: selnez $3, $5, $3 ; MIPS64ELR6-NEXT: or $1, $1, $3 ; MIPS64ELR6-NEXT: sc $1, 0($4) ; MIPS64ELR6-NEXT: beqzc $1, .LBB0_1 ; MIPS64ELR6-NEXT: # %bb.2: # %entry ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: jrc $ra entry: %0 = atomicrmw max i32* %ptr, i32 %val seq_cst ret i32 %0 } define i32 @test_min_32(i32* nocapture %ptr, i32 signext %val) { ; MIPS-LABEL: test_min_32: ; MIPS: # %bb.0: # %entry ; MIPS-NEXT: sync ; MIPS-NEXT: $BB1_1: # %entry ; MIPS-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS-NEXT: ll $2, 0($4) ; MIPS-NEXT: slt $3, $2, $5 ; MIPS-NEXT: move $1, $2 ; MIPS-NEXT: movz $1, $5, $3 ; MIPS-NEXT: sc $1, 0($4) ; MIPS-NEXT: beqz $1, $BB1_1 ; MIPS-NEXT: nop ; MIPS-NEXT: # %bb.2: # %entry ; MIPS-NEXT: sync ; MIPS-NEXT: jr $ra ; MIPS-NEXT: nop ; ; MIPSR6-LABEL: test_min_32: ; MIPSR6: # %bb.0: # %entry ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: $BB1_1: # %entry ; MIPSR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSR6-NEXT: ll $2, 0($4) ; MIPSR6-NEXT: slt $3, $2, $5 ; MIPSR6-NEXT: selnez $1, $2, $3 ; MIPSR6-NEXT: seleqz $3, $5, $3 ; MIPSR6-NEXT: or $1, $1, $3 ; MIPSR6-NEXT: sc $1, 0($4) ; MIPSR6-NEXT: beqzc $1, $BB1_1 ; MIPSR6-NEXT: # %bb.2: # %entry ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: jrc $ra ; ; MM-LABEL: test_min_32: ; MM: # %bb.0: # %entry ; MM-NEXT: sync ; MM-NEXT: $BB1_1: # %entry ; MM-NEXT: # =>This Inner Loop Header: Depth=1 ; MM-NEXT: ll $2, 0($4) ; MM-NEXT: slt $3, $2, $5 ; MM-NEXT: or $1, $2, $zero ; MM-NEXT: movz $1, $5, $3 ; MM-NEXT: sc $1, 0($4) ; MM-NEXT: beqzc $1, $BB1_1 ; MM-NEXT: # %bb.2: # %entry ; MM-NEXT: sync ; MM-NEXT: jrc $ra ; ; MMR6-LABEL: test_min_32: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: sync ; MMR6-NEXT: $BB1_1: # %entry ; MMR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMR6-NEXT: ll $2, 0($4) ; MMR6-NEXT: slt $3, $2, $5 ; MMR6-NEXT: selnez $1, $2, $3 ; MMR6-NEXT: seleqz $3, $5, $3 ; MMR6-NEXT: or $1, $1, $3 ; MMR6-NEXT: sc $1, 0($4) ; MMR6-NEXT: beqc $1, $zero, $BB1_1 ; MMR6-NEXT: # %bb.2: # %entry ; MMR6-NEXT: sync ; MMR6-NEXT: jrc $ra ; ; MIPSEL-LABEL: test_min_32: ; MIPSEL: # %bb.0: # %entry ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: $BB1_1: # %entry ; MIPSEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSEL-NEXT: ll $2, 0($4) ; MIPSEL-NEXT: slt $3, $2, $5 ; MIPSEL-NEXT: move $1, $2 ; MIPSEL-NEXT: movz $1, $5, $3 ; MIPSEL-NEXT: sc $1, 0($4) ; MIPSEL-NEXT: beqz $1, $BB1_1 ; MIPSEL-NEXT: nop ; MIPSEL-NEXT: # %bb.2: # %entry ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: jr $ra ; MIPSEL-NEXT: nop ; ; MIPSELR6-LABEL: test_min_32: ; MIPSELR6: # %bb.0: # %entry ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: $BB1_1: # %entry ; MIPSELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSELR6-NEXT: ll $2, 0($4) ; MIPSELR6-NEXT: slt $3, $2, $5 ; MIPSELR6-NEXT: selnez $1, $2, $3 ; MIPSELR6-NEXT: seleqz $3, $5, $3 ; MIPSELR6-NEXT: or $1, $1, $3 ; MIPSELR6-NEXT: sc $1, 0($4) ; MIPSELR6-NEXT: beqzc $1, $BB1_1 ; MIPSELR6-NEXT: # %bb.2: # %entry ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: jrc $ra ; ; MMEL-LABEL: test_min_32: ; MMEL: # %bb.0: # %entry ; MMEL-NEXT: sync ; MMEL-NEXT: $BB1_1: # %entry ; MMEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MMEL-NEXT: ll $2, 0($4) ; MMEL-NEXT: slt $3, $2, $5 ; MMEL-NEXT: or $1, $2, $zero ; MMEL-NEXT: movz $1, $5, $3 ; MMEL-NEXT: sc $1, 0($4) ; MMEL-NEXT: beqzc $1, $BB1_1 ; MMEL-NEXT: # %bb.2: # %entry ; MMEL-NEXT: sync ; MMEL-NEXT: jrc $ra ; ; MMELR6-LABEL: test_min_32: ; MMELR6: # %bb.0: # %entry ; MMELR6-NEXT: sync ; MMELR6-NEXT: $BB1_1: # %entry ; MMELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMELR6-NEXT: ll $2, 0($4) ; MMELR6-NEXT: slt $3, $2, $5 ; MMELR6-NEXT: selnez $1, $2, $3 ; MMELR6-NEXT: seleqz $3, $5, $3 ; MMELR6-NEXT: or $1, $1, $3 ; MMELR6-NEXT: sc $1, 0($4) ; MMELR6-NEXT: beqc $1, $zero, $BB1_1 ; MMELR6-NEXT: # %bb.2: # %entry ; MMELR6-NEXT: sync ; MMELR6-NEXT: jrc $ra ; ; MIPS64-LABEL: test_min_32: ; MIPS64: # %bb.0: # %entry ; MIPS64-NEXT: # kill: def $a1 killed $a1 killed $a1_64 ; MIPS64-NEXT: sync ; MIPS64-NEXT: .LBB1_1: # %entry ; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64-NEXT: ll $2, 0($4) ; MIPS64-NEXT: slt $3, $2, $5 ; MIPS64-NEXT: move $1, $2 ; MIPS64-NEXT: movz $1, $5, $3 ; MIPS64-NEXT: sc $1, 0($4) ; MIPS64-NEXT: beqz $1, .LBB1_1 ; MIPS64-NEXT: nop ; MIPS64-NEXT: # %bb.2: # %entry ; MIPS64-NEXT: sync ; MIPS64-NEXT: jr $ra ; MIPS64-NEXT: nop ; ; MIPS64R6-LABEL: test_min_32: ; MIPS64R6: # %bb.0: # %entry ; MIPS64R6-NEXT: # kill: def $a1 killed $a1 killed $a1_64 ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: .LBB1_1: # %entry ; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64R6-NEXT: ll $2, 0($4) ; MIPS64R6-NEXT: slt $3, $2, $5 ; MIPS64R6-NEXT: selnez $1, $2, $3 ; MIPS64R6-NEXT: seleqz $3, $5, $3 ; MIPS64R6-NEXT: or $1, $1, $3 ; MIPS64R6-NEXT: sc $1, 0($4) ; MIPS64R6-NEXT: beqzc $1, .LBB1_1 ; MIPS64R6-NEXT: # %bb.2: # %entry ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: jrc $ra ; ; MIPS64EL-LABEL: test_min_32: ; MIPS64EL: # %bb.0: # %entry ; MIPS64EL-NEXT: # kill: def $a1 killed $a1 killed $a1_64 ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: .LBB1_1: # %entry ; MIPS64EL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64EL-NEXT: ll $2, 0($4) ; MIPS64EL-NEXT: slt $3, $2, $5 ; MIPS64EL-NEXT: move $1, $2 ; MIPS64EL-NEXT: movz $1, $5, $3 ; MIPS64EL-NEXT: sc $1, 0($4) ; MIPS64EL-NEXT: beqz $1, .LBB1_1 ; MIPS64EL-NEXT: nop ; MIPS64EL-NEXT: # %bb.2: # %entry ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: jr $ra ; MIPS64EL-NEXT: nop ; ; MIPS64ELR6-LABEL: test_min_32: ; MIPS64ELR6: # %bb.0: # %entry ; MIPS64ELR6-NEXT: # kill: def $a1 killed $a1 killed $a1_64 ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: .LBB1_1: # %entry ; MIPS64ELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64ELR6-NEXT: ll $2, 0($4) ; MIPS64ELR6-NEXT: slt $3, $2, $5 ; MIPS64ELR6-NEXT: selnez $1, $2, $3 ; MIPS64ELR6-NEXT: seleqz $3, $5, $3 ; MIPS64ELR6-NEXT: or $1, $1, $3 ; MIPS64ELR6-NEXT: sc $1, 0($4) ; MIPS64ELR6-NEXT: beqzc $1, .LBB1_1 ; MIPS64ELR6-NEXT: # %bb.2: # %entry ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: jrc $ra entry: %0 = atomicrmw min i32* %ptr, i32 %val seq_cst ret i32 %0 } define i32 @test_umax_32(i32* nocapture %ptr, i32 signext %val) { ; MIPS-LABEL: test_umax_32: ; MIPS: # %bb.0: # %entry ; MIPS-NEXT: sync ; MIPS-NEXT: $BB2_1: # %entry ; MIPS-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS-NEXT: ll $2, 0($4) ; MIPS-NEXT: sltu $3, $2, $5 ; MIPS-NEXT: move $1, $2 ; MIPS-NEXT: movn $1, $5, $3 ; MIPS-NEXT: sc $1, 0($4) ; MIPS-NEXT: beqz $1, $BB2_1 ; MIPS-NEXT: nop ; MIPS-NEXT: # %bb.2: # %entry ; MIPS-NEXT: sync ; MIPS-NEXT: jr $ra ; MIPS-NEXT: nop ; ; MIPSR6-LABEL: test_umax_32: ; MIPSR6: # %bb.0: # %entry ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: $BB2_1: # %entry ; MIPSR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSR6-NEXT: ll $2, 0($4) ; MIPSR6-NEXT: sltu $3, $2, $5 ; MIPSR6-NEXT: seleqz $1, $2, $3 ; MIPSR6-NEXT: selnez $3, $5, $3 ; MIPSR6-NEXT: or $1, $1, $3 ; MIPSR6-NEXT: sc $1, 0($4) ; MIPSR6-NEXT: beqzc $1, $BB2_1 ; MIPSR6-NEXT: # %bb.2: # %entry ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: jrc $ra ; ; MM-LABEL: test_umax_32: ; MM: # %bb.0: # %entry ; MM-NEXT: sync ; MM-NEXT: $BB2_1: # %entry ; MM-NEXT: # =>This Inner Loop Header: Depth=1 ; MM-NEXT: ll $2, 0($4) ; MM-NEXT: sltu $3, $2, $5 ; MM-NEXT: or $1, $2, $zero ; MM-NEXT: movn $1, $5, $3 ; MM-NEXT: sc $1, 0($4) ; MM-NEXT: beqzc $1, $BB2_1 ; MM-NEXT: # %bb.2: # %entry ; MM-NEXT: sync ; MM-NEXT: jrc $ra ; ; MMR6-LABEL: test_umax_32: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: sync ; MMR6-NEXT: $BB2_1: # %entry ; MMR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMR6-NEXT: ll $2, 0($4) ; MMR6-NEXT: sltu $3, $2, $5 ; MMR6-NEXT: seleqz $1, $2, $3 ; MMR6-NEXT: selnez $3, $5, $3 ; MMR6-NEXT: or $1, $1, $3 ; MMR6-NEXT: sc $1, 0($4) ; MMR6-NEXT: beqc $1, $zero, $BB2_1 ; MMR6-NEXT: # %bb.2: # %entry ; MMR6-NEXT: sync ; MMR6-NEXT: jrc $ra ; ; MIPSEL-LABEL: test_umax_32: ; MIPSEL: # %bb.0: # %entry ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: $BB2_1: # %entry ; MIPSEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSEL-NEXT: ll $2, 0($4) ; MIPSEL-NEXT: sltu $3, $2, $5 ; MIPSEL-NEXT: move $1, $2 ; MIPSEL-NEXT: movn $1, $5, $3 ; MIPSEL-NEXT: sc $1, 0($4) ; MIPSEL-NEXT: beqz $1, $BB2_1 ; MIPSEL-NEXT: nop ; MIPSEL-NEXT: # %bb.2: # %entry ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: jr $ra ; MIPSEL-NEXT: nop ; ; MIPSELR6-LABEL: test_umax_32: ; MIPSELR6: # %bb.0: # %entry ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: $BB2_1: # %entry ; MIPSELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSELR6-NEXT: ll $2, 0($4) ; MIPSELR6-NEXT: sltu $3, $2, $5 ; MIPSELR6-NEXT: seleqz $1, $2, $3 ; MIPSELR6-NEXT: selnez $3, $5, $3 ; MIPSELR6-NEXT: or $1, $1, $3 ; MIPSELR6-NEXT: sc $1, 0($4) ; MIPSELR6-NEXT: beqzc $1, $BB2_1 ; MIPSELR6-NEXT: # %bb.2: # %entry ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: jrc $ra ; ; MMEL-LABEL: test_umax_32: ; MMEL: # %bb.0: # %entry ; MMEL-NEXT: sync ; MMEL-NEXT: $BB2_1: # %entry ; MMEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MMEL-NEXT: ll $2, 0($4) ; MMEL-NEXT: sltu $3, $2, $5 ; MMEL-NEXT: or $1, $2, $zero ; MMEL-NEXT: movn $1, $5, $3 ; MMEL-NEXT: sc $1, 0($4) ; MMEL-NEXT: beqzc $1, $BB2_1 ; MMEL-NEXT: # %bb.2: # %entry ; MMEL-NEXT: sync ; MMEL-NEXT: jrc $ra ; ; MMELR6-LABEL: test_umax_32: ; MMELR6: # %bb.0: # %entry ; MMELR6-NEXT: sync ; MMELR6-NEXT: $BB2_1: # %entry ; MMELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMELR6-NEXT: ll $2, 0($4) ; MMELR6-NEXT: sltu $3, $2, $5 ; MMELR6-NEXT: seleqz $1, $2, $3 ; MMELR6-NEXT: selnez $3, $5, $3 ; MMELR6-NEXT: or $1, $1, $3 ; MMELR6-NEXT: sc $1, 0($4) ; MMELR6-NEXT: beqc $1, $zero, $BB2_1 ; MMELR6-NEXT: # %bb.2: # %entry ; MMELR6-NEXT: sync ; MMELR6-NEXT: jrc $ra ; ; MIPS64-LABEL: test_umax_32: ; MIPS64: # %bb.0: # %entry ; MIPS64-NEXT: # kill: def $a1 killed $a1 killed $a1_64 ; MIPS64-NEXT: sync ; MIPS64-NEXT: .LBB2_1: # %entry ; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64-NEXT: ll $2, 0($4) ; MIPS64-NEXT: sltu $3, $2, $5 ; MIPS64-NEXT: move $1, $2 ; MIPS64-NEXT: movn $1, $5, $3 ; MIPS64-NEXT: sc $1, 0($4) ; MIPS64-NEXT: beqz $1, .LBB2_1 ; MIPS64-NEXT: nop ; MIPS64-NEXT: # %bb.2: # %entry ; MIPS64-NEXT: sync ; MIPS64-NEXT: jr $ra ; MIPS64-NEXT: nop ; ; MIPS64R6-LABEL: test_umax_32: ; MIPS64R6: # %bb.0: # %entry ; MIPS64R6-NEXT: # kill: def $a1 killed $a1 killed $a1_64 ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: .LBB2_1: # %entry ; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64R6-NEXT: ll $2, 0($4) ; MIPS64R6-NEXT: sltu $3, $2, $5 ; MIPS64R6-NEXT: seleqz $1, $2, $3 ; MIPS64R6-NEXT: selnez $3, $5, $3 ; MIPS64R6-NEXT: or $1, $1, $3 ; MIPS64R6-NEXT: sc $1, 0($4) ; MIPS64R6-NEXT: beqzc $1, .LBB2_1 ; MIPS64R6-NEXT: # %bb.2: # %entry ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: jrc $ra ; ; MIPS64EL-LABEL: test_umax_32: ; MIPS64EL: # %bb.0: # %entry ; MIPS64EL-NEXT: # kill: def $a1 killed $a1 killed $a1_64 ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: .LBB2_1: # %entry ; MIPS64EL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64EL-NEXT: ll $2, 0($4) ; MIPS64EL-NEXT: sltu $3, $2, $5 ; MIPS64EL-NEXT: move $1, $2 ; MIPS64EL-NEXT: movn $1, $5, $3 ; MIPS64EL-NEXT: sc $1, 0($4) ; MIPS64EL-NEXT: beqz $1, .LBB2_1 ; MIPS64EL-NEXT: nop ; MIPS64EL-NEXT: # %bb.2: # %entry ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: jr $ra ; MIPS64EL-NEXT: nop ; ; MIPS64ELR6-LABEL: test_umax_32: ; MIPS64ELR6: # %bb.0: # %entry ; MIPS64ELR6-NEXT: # kill: def $a1 killed $a1 killed $a1_64 ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: .LBB2_1: # %entry ; MIPS64ELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64ELR6-NEXT: ll $2, 0($4) ; MIPS64ELR6-NEXT: sltu $3, $2, $5 ; MIPS64ELR6-NEXT: seleqz $1, $2, $3 ; MIPS64ELR6-NEXT: selnez $3, $5, $3 ; MIPS64ELR6-NEXT: or $1, $1, $3 ; MIPS64ELR6-NEXT: sc $1, 0($4) ; MIPS64ELR6-NEXT: beqzc $1, .LBB2_1 ; MIPS64ELR6-NEXT: # %bb.2: # %entry ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: jrc $ra entry: %0 = atomicrmw umax i32* %ptr, i32 %val seq_cst ret i32 %0 } define i32 @test_umin_32(i32* nocapture %ptr, i32 signext %val) { ; MIPS-LABEL: test_umin_32: ; MIPS: # %bb.0: # %entry ; MIPS-NEXT: sync ; MIPS-NEXT: $BB3_1: # %entry ; MIPS-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS-NEXT: ll $2, 0($4) ; MIPS-NEXT: sltu $3, $2, $5 ; MIPS-NEXT: move $1, $2 ; MIPS-NEXT: movz $1, $5, $3 ; MIPS-NEXT: sc $1, 0($4) ; MIPS-NEXT: beqz $1, $BB3_1 ; MIPS-NEXT: nop ; MIPS-NEXT: # %bb.2: # %entry ; MIPS-NEXT: sync ; MIPS-NEXT: jr $ra ; MIPS-NEXT: nop ; ; MIPSR6-LABEL: test_umin_32: ; MIPSR6: # %bb.0: # %entry ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: $BB3_1: # %entry ; MIPSR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSR6-NEXT: ll $2, 0($4) ; MIPSR6-NEXT: sltu $3, $2, $5 ; MIPSR6-NEXT: selnez $1, $2, $3 ; MIPSR6-NEXT: seleqz $3, $5, $3 ; MIPSR6-NEXT: or $1, $1, $3 ; MIPSR6-NEXT: sc $1, 0($4) ; MIPSR6-NEXT: beqzc $1, $BB3_1 ; MIPSR6-NEXT: # %bb.2: # %entry ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: jrc $ra ; ; MM-LABEL: test_umin_32: ; MM: # %bb.0: # %entry ; MM-NEXT: sync ; MM-NEXT: $BB3_1: # %entry ; MM-NEXT: # =>This Inner Loop Header: Depth=1 ; MM-NEXT: ll $2, 0($4) ; MM-NEXT: sltu $3, $2, $5 ; MM-NEXT: or $1, $2, $zero ; MM-NEXT: movz $1, $5, $3 ; MM-NEXT: sc $1, 0($4) ; MM-NEXT: beqzc $1, $BB3_1 ; MM-NEXT: # %bb.2: # %entry ; MM-NEXT: sync ; MM-NEXT: jrc $ra ; ; MMR6-LABEL: test_umin_32: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: sync ; MMR6-NEXT: $BB3_1: # %entry ; MMR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMR6-NEXT: ll $2, 0($4) ; MMR6-NEXT: sltu $3, $2, $5 ; MMR6-NEXT: selnez $1, $2, $3 ; MMR6-NEXT: seleqz $3, $5, $3 ; MMR6-NEXT: or $1, $1, $3 ; MMR6-NEXT: sc $1, 0($4) ; MMR6-NEXT: beqc $1, $zero, $BB3_1 ; MMR6-NEXT: # %bb.2: # %entry ; MMR6-NEXT: sync ; MMR6-NEXT: jrc $ra ; ; MIPSEL-LABEL: test_umin_32: ; MIPSEL: # %bb.0: # %entry ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: $BB3_1: # %entry ; MIPSEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSEL-NEXT: ll $2, 0($4) ; MIPSEL-NEXT: sltu $3, $2, $5 ; MIPSEL-NEXT: move $1, $2 ; MIPSEL-NEXT: movz $1, $5, $3 ; MIPSEL-NEXT: sc $1, 0($4) ; MIPSEL-NEXT: beqz $1, $BB3_1 ; MIPSEL-NEXT: nop ; MIPSEL-NEXT: # %bb.2: # %entry ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: jr $ra ; MIPSEL-NEXT: nop ; ; MIPSELR6-LABEL: test_umin_32: ; MIPSELR6: # %bb.0: # %entry ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: $BB3_1: # %entry ; MIPSELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSELR6-NEXT: ll $2, 0($4) ; MIPSELR6-NEXT: sltu $3, $2, $5 ; MIPSELR6-NEXT: selnez $1, $2, $3 ; MIPSELR6-NEXT: seleqz $3, $5, $3 ; MIPSELR6-NEXT: or $1, $1, $3 ; MIPSELR6-NEXT: sc $1, 0($4) ; MIPSELR6-NEXT: beqzc $1, $BB3_1 ; MIPSELR6-NEXT: # %bb.2: # %entry ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: jrc $ra ; ; MMEL-LABEL: test_umin_32: ; MMEL: # %bb.0: # %entry ; MMEL-NEXT: sync ; MMEL-NEXT: $BB3_1: # %entry ; MMEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MMEL-NEXT: ll $2, 0($4) ; MMEL-NEXT: sltu $3, $2, $5 ; MMEL-NEXT: or $1, $2, $zero ; MMEL-NEXT: movz $1, $5, $3 ; MMEL-NEXT: sc $1, 0($4) ; MMEL-NEXT: beqzc $1, $BB3_1 ; MMEL-NEXT: # %bb.2: # %entry ; MMEL-NEXT: sync ; MMEL-NEXT: jrc $ra ; ; MMELR6-LABEL: test_umin_32: ; MMELR6: # %bb.0: # %entry ; MMELR6-NEXT: sync ; MMELR6-NEXT: $BB3_1: # %entry ; MMELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMELR6-NEXT: ll $2, 0($4) ; MMELR6-NEXT: sltu $3, $2, $5 ; MMELR6-NEXT: selnez $1, $2, $3 ; MMELR6-NEXT: seleqz $3, $5, $3 ; MMELR6-NEXT: or $1, $1, $3 ; MMELR6-NEXT: sc $1, 0($4) ; MMELR6-NEXT: beqc $1, $zero, $BB3_1 ; MMELR6-NEXT: # %bb.2: # %entry ; MMELR6-NEXT: sync ; MMELR6-NEXT: jrc $ra ; ; MIPS64-LABEL: test_umin_32: ; MIPS64: # %bb.0: # %entry ; MIPS64-NEXT: # kill: def $a1 killed $a1 killed $a1_64 ; MIPS64-NEXT: sync ; MIPS64-NEXT: .LBB3_1: # %entry ; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64-NEXT: ll $2, 0($4) ; MIPS64-NEXT: sltu $3, $2, $5 ; MIPS64-NEXT: move $1, $2 ; MIPS64-NEXT: movz $1, $5, $3 ; MIPS64-NEXT: sc $1, 0($4) ; MIPS64-NEXT: beqz $1, .LBB3_1 ; MIPS64-NEXT: nop ; MIPS64-NEXT: # %bb.2: # %entry ; MIPS64-NEXT: sync ; MIPS64-NEXT: jr $ra ; MIPS64-NEXT: nop ; ; MIPS64R6-LABEL: test_umin_32: ; MIPS64R6: # %bb.0: # %entry ; MIPS64R6-NEXT: # kill: def $a1 killed $a1 killed $a1_64 ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: .LBB3_1: # %entry ; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64R6-NEXT: ll $2, 0($4) ; MIPS64R6-NEXT: sltu $3, $2, $5 ; MIPS64R6-NEXT: selnez $1, $2, $3 ; MIPS64R6-NEXT: seleqz $3, $5, $3 ; MIPS64R6-NEXT: or $1, $1, $3 ; MIPS64R6-NEXT: sc $1, 0($4) ; MIPS64R6-NEXT: beqzc $1, .LBB3_1 ; MIPS64R6-NEXT: # %bb.2: # %entry ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: jrc $ra ; ; MIPS64EL-LABEL: test_umin_32: ; MIPS64EL: # %bb.0: # %entry ; MIPS64EL-NEXT: # kill: def $a1 killed $a1 killed $a1_64 ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: .LBB3_1: # %entry ; MIPS64EL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64EL-NEXT: ll $2, 0($4) ; MIPS64EL-NEXT: sltu $3, $2, $5 ; MIPS64EL-NEXT: move $1, $2 ; MIPS64EL-NEXT: movz $1, $5, $3 ; MIPS64EL-NEXT: sc $1, 0($4) ; MIPS64EL-NEXT: beqz $1, .LBB3_1 ; MIPS64EL-NEXT: nop ; MIPS64EL-NEXT: # %bb.2: # %entry ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: jr $ra ; MIPS64EL-NEXT: nop ; ; MIPS64ELR6-LABEL: test_umin_32: ; MIPS64ELR6: # %bb.0: # %entry ; MIPS64ELR6-NEXT: # kill: def $a1 killed $a1 killed $a1_64 ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: .LBB3_1: # %entry ; MIPS64ELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64ELR6-NEXT: ll $2, 0($4) ; MIPS64ELR6-NEXT: sltu $3, $2, $5 ; MIPS64ELR6-NEXT: selnez $1, $2, $3 ; MIPS64ELR6-NEXT: seleqz $3, $5, $3 ; MIPS64ELR6-NEXT: or $1, $1, $3 ; MIPS64ELR6-NEXT: sc $1, 0($4) ; MIPS64ELR6-NEXT: beqzc $1, .LBB3_1 ; MIPS64ELR6-NEXT: # %bb.2: # %entry ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: jrc $ra entry: %0 = atomicrmw umin i32* %ptr, i32 %val seq_cst ret i32 %0 } define i16 @test_max_16(i16* nocapture %ptr, i16 signext %val) { ; MIPS-LABEL: test_max_16: ; MIPS: # %bb.0: # %entry ; MIPS-NEXT: addiu $sp, $sp, -8 ; MIPS-NEXT: .cfi_def_cfa_offset 8 ; MIPS-NEXT: # kill: def $at killed $a1 ; MIPS-NEXT: sync ; MIPS-NEXT: addiu $1, $zero, -4 ; MIPS-NEXT: and $6, $4, $1 ; MIPS-NEXT: andi $1, $4, 3 ; MIPS-NEXT: xori $1, $1, 2 ; MIPS-NEXT: sll $10, $1, 3 ; MIPS-NEXT: ori $1, $zero, 65535 ; MIPS-NEXT: sllv $8, $1, $10 ; MIPS-NEXT: nor $9, $zero, $8 ; MIPS-NEXT: sllv $7, $5, $10 ; MIPS-NEXT: $BB4_1: # %entry ; MIPS-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS-NEXT: ll $2, 0($6) ; MIPS-NEXT: slt $5, $2, $7 ; MIPS-NEXT: move $3, $2 ; MIPS-NEXT: movn $3, $7, $5 ; MIPS-NEXT: and $3, $3, $8 ; MIPS-NEXT: and $4, $2, $9 ; MIPS-NEXT: or $4, $4, $3 ; MIPS-NEXT: sc $4, 0($6) ; MIPS-NEXT: beqz $4, $BB4_1 ; MIPS-NEXT: nop ; MIPS-NEXT: # %bb.2: # %entry ; MIPS-NEXT: and $1, $2, $8 ; MIPS-NEXT: srlv $1, $1, $10 ; MIPS-NEXT: seh $1, $1 ; MIPS-NEXT: # %bb.3: # %entry ; MIPS-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPS-NEXT: # %bb.4: # %entry ; MIPS-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPS-NEXT: sync ; MIPS-NEXT: addiu $sp, $sp, 8 ; MIPS-NEXT: jr $ra ; MIPS-NEXT: nop ; ; MIPSR6-LABEL: test_max_16: ; MIPSR6: # %bb.0: # %entry ; MIPSR6-NEXT: addiu $sp, $sp, -8 ; MIPSR6-NEXT: .cfi_def_cfa_offset 8 ; MIPSR6-NEXT: # kill: def $at killed $a1 ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: addiu $1, $zero, -4 ; MIPSR6-NEXT: and $6, $4, $1 ; MIPSR6-NEXT: andi $1, $4, 3 ; MIPSR6-NEXT: xori $1, $1, 2 ; MIPSR6-NEXT: sll $10, $1, 3 ; MIPSR6-NEXT: ori $1, $zero, 65535 ; MIPSR6-NEXT: sllv $8, $1, $10 ; MIPSR6-NEXT: nor $9, $zero, $8 ; MIPSR6-NEXT: sllv $7, $5, $10 ; MIPSR6-NEXT: $BB4_1: # %entry ; MIPSR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSR6-NEXT: ll $2, 0($6) ; MIPSR6-NEXT: slt $5, $2, $7 ; MIPSR6-NEXT: seleqz $3, $2, $5 ; MIPSR6-NEXT: selnez $5, $7, $5 ; MIPSR6-NEXT: or $3, $3, $5 ; MIPSR6-NEXT: and $3, $3, $8 ; MIPSR6-NEXT: and $4, $2, $9 ; MIPSR6-NEXT: or $4, $4, $3 ; MIPSR6-NEXT: sc $4, 0($6) ; MIPSR6-NEXT: beqzc $4, $BB4_1 ; MIPSR6-NEXT: # %bb.2: # %entry ; MIPSR6-NEXT: and $1, $2, $8 ; MIPSR6-NEXT: srlv $1, $1, $10 ; MIPSR6-NEXT: seh $1, $1 ; MIPSR6-NEXT: # %bb.3: # %entry ; MIPSR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSR6-NEXT: # %bb.4: # %entry ; MIPSR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: addiu $sp, $sp, 8 ; MIPSR6-NEXT: jrc $ra ; ; MM-LABEL: test_max_16: ; MM: # %bb.0: # %entry ; MM-NEXT: addiu $sp, $sp, -8 ; MM-NEXT: .cfi_def_cfa_offset 8 ; MM-NEXT: # kill: def $at killed $a1 ; MM-NEXT: sync ; MM-NEXT: addiu $1, $zero, -4 ; MM-NEXT: and $6, $4, $1 ; MM-NEXT: andi $1, $4, 3 ; MM-NEXT: xori $1, $1, 2 ; MM-NEXT: sll $10, $1, 3 ; MM-NEXT: ori $1, $zero, 65535 ; MM-NEXT: sllv $8, $1, $10 ; MM-NEXT: nor $9, $zero, $8 ; MM-NEXT: sllv $7, $5, $10 ; MM-NEXT: $BB4_1: # %entry ; MM-NEXT: # =>This Inner Loop Header: Depth=1 ; MM-NEXT: ll $2, 0($6) ; MM-NEXT: slt $5, $2, $7 ; MM-NEXT: or $3, $2, $zero ; MM-NEXT: movn $3, $7, $5 ; MM-NEXT: and $3, $3, $8 ; MM-NEXT: and $4, $2, $9 ; MM-NEXT: or $4, $4, $3 ; MM-NEXT: sc $4, 0($6) ; MM-NEXT: beqzc $4, $BB4_1 ; MM-NEXT: # %bb.2: # %entry ; MM-NEXT: and $1, $2, $8 ; MM-NEXT: srlv $1, $1, $10 ; MM-NEXT: seh $1, $1 ; MM-NEXT: # %bb.3: # %entry ; MM-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MM-NEXT: # %bb.4: # %entry ; MM-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MM-NEXT: sync ; MM-NEXT: addiusp 8 ; MM-NEXT: jrc $ra ; ; MMR6-LABEL: test_max_16: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: addiu $sp, $sp, -8 ; MMR6-NEXT: .cfi_def_cfa_offset 8 ; MMR6-NEXT: # kill: def $at killed $a1 ; MMR6-NEXT: sync ; MMR6-NEXT: addiu $1, $zero, -4 ; MMR6-NEXT: and $6, $4, $1 ; MMR6-NEXT: andi $1, $4, 3 ; MMR6-NEXT: xori $1, $1, 2 ; MMR6-NEXT: sll $10, $1, 3 ; MMR6-NEXT: ori $1, $zero, 65535 ; MMR6-NEXT: sllv $8, $1, $10 ; MMR6-NEXT: nor $9, $zero, $8 ; MMR6-NEXT: sllv $7, $5, $10 ; MMR6-NEXT: $BB4_1: # %entry ; MMR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMR6-NEXT: ll $2, 0($6) ; MMR6-NEXT: slt $5, $2, $7 ; MMR6-NEXT: seleqz $3, $2, $5 ; MMR6-NEXT: selnez $5, $7, $5 ; MMR6-NEXT: or $3, $3, $5 ; MMR6-NEXT: and $3, $3, $8 ; MMR6-NEXT: and $4, $2, $9 ; MMR6-NEXT: or $4, $4, $3 ; MMR6-NEXT: sc $4, 0($6) ; MMR6-NEXT: beqc $4, $zero, $BB4_1 ; MMR6-NEXT: # %bb.2: # %entry ; MMR6-NEXT: and $1, $2, $8 ; MMR6-NEXT: srlv $1, $1, $10 ; MMR6-NEXT: seh $1, $1 ; MMR6-NEXT: # %bb.3: # %entry ; MMR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMR6-NEXT: # %bb.4: # %entry ; MMR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMR6-NEXT: sync ; MMR6-NEXT: addiu $sp, $sp, 8 ; MMR6-NEXT: jrc $ra ; ; MIPSEL-LABEL: test_max_16: ; MIPSEL: # %bb.0: # %entry ; MIPSEL-NEXT: addiu $sp, $sp, -8 ; MIPSEL-NEXT: .cfi_def_cfa_offset 8 ; MIPSEL-NEXT: # kill: def $at killed $a1 ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: addiu $1, $zero, -4 ; MIPSEL-NEXT: and $6, $4, $1 ; MIPSEL-NEXT: andi $1, $4, 3 ; MIPSEL-NEXT: sll $10, $1, 3 ; MIPSEL-NEXT: ori $1, $zero, 65535 ; MIPSEL-NEXT: sllv $8, $1, $10 ; MIPSEL-NEXT: nor $9, $zero, $8 ; MIPSEL-NEXT: sllv $7, $5, $10 ; MIPSEL-NEXT: $BB4_1: # %entry ; MIPSEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSEL-NEXT: ll $2, 0($6) ; MIPSEL-NEXT: and $2, $2, $8 ; MIPSEL-NEXT: and $7, $7, $8 ; MIPSEL-NEXT: slt $5, $2, $7 ; MIPSEL-NEXT: move $3, $2 ; MIPSEL-NEXT: movn $3, $7, $5 ; MIPSEL-NEXT: and $3, $3, $8 ; MIPSEL-NEXT: and $4, $2, $9 ; MIPSEL-NEXT: or $4, $4, $3 ; MIPSEL-NEXT: sc $4, 0($6) ; MIPSEL-NEXT: beqz $4, $BB4_1 ; MIPSEL-NEXT: nop ; MIPSEL-NEXT: # %bb.2: # %entry ; MIPSEL-NEXT: and $1, $2, $8 ; MIPSEL-NEXT: srlv $1, $1, $10 ; MIPSEL-NEXT: seh $1, $1 ; MIPSEL-NEXT: # %bb.3: # %entry ; MIPSEL-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSEL-NEXT: # %bb.4: # %entry ; MIPSEL-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: addiu $sp, $sp, 8 ; MIPSEL-NEXT: jr $ra ; MIPSEL-NEXT: nop ; ; MIPSELR6-LABEL: test_max_16: ; MIPSELR6: # %bb.0: # %entry ; MIPSELR6-NEXT: addiu $sp, $sp, -8 ; MIPSELR6-NEXT: .cfi_def_cfa_offset 8 ; MIPSELR6-NEXT: # kill: def $at killed $a1 ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: addiu $1, $zero, -4 ; MIPSELR6-NEXT: and $6, $4, $1 ; MIPSELR6-NEXT: andi $1, $4, 3 ; MIPSELR6-NEXT: sll $10, $1, 3 ; MIPSELR6-NEXT: ori $1, $zero, 65535 ; MIPSELR6-NEXT: sllv $8, $1, $10 ; MIPSELR6-NEXT: nor $9, $zero, $8 ; MIPSELR6-NEXT: sllv $7, $5, $10 ; MIPSELR6-NEXT: $BB4_1: # %entry ; MIPSELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSELR6-NEXT: ll $2, 0($6) ; MIPSELR6-NEXT: and $2, $2, $8 ; MIPSELR6-NEXT: and $7, $7, $8 ; MIPSELR6-NEXT: slt $5, $2, $7 ; MIPSELR6-NEXT: seleqz $3, $2, $5 ; MIPSELR6-NEXT: selnez $5, $7, $5 ; MIPSELR6-NEXT: or $3, $3, $5 ; MIPSELR6-NEXT: and $3, $3, $8 ; MIPSELR6-NEXT: and $4, $2, $9 ; MIPSELR6-NEXT: or $4, $4, $3 ; MIPSELR6-NEXT: sc $4, 0($6) ; MIPSELR6-NEXT: beqzc $4, $BB4_1 ; MIPSELR6-NEXT: # %bb.2: # %entry ; MIPSELR6-NEXT: and $1, $2, $8 ; MIPSELR6-NEXT: srlv $1, $1, $10 ; MIPSELR6-NEXT: seh $1, $1 ; MIPSELR6-NEXT: # %bb.3: # %entry ; MIPSELR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSELR6-NEXT: # %bb.4: # %entry ; MIPSELR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: addiu $sp, $sp, 8 ; MIPSELR6-NEXT: jrc $ra ; ; MMEL-LABEL: test_max_16: ; MMEL: # %bb.0: # %entry ; MMEL-NEXT: addiu $sp, $sp, -8 ; MMEL-NEXT: .cfi_def_cfa_offset 8 ; MMEL-NEXT: # kill: def $at killed $a1 ; MMEL-NEXT: sync ; MMEL-NEXT: addiu $1, $zero, -4 ; MMEL-NEXT: and $6, $4, $1 ; MMEL-NEXT: andi $1, $4, 3 ; MMEL-NEXT: sll $10, $1, 3 ; MMEL-NEXT: ori $1, $zero, 65535 ; MMEL-NEXT: sllv $8, $1, $10 ; MMEL-NEXT: nor $9, $zero, $8 ; MMEL-NEXT: sllv $7, $5, $10 ; MMEL-NEXT: $BB4_1: # %entry ; MMEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MMEL-NEXT: ll $2, 0($6) ; MMEL-NEXT: and $2, $2, $8 ; MMEL-NEXT: and $7, $7, $8 ; MMEL-NEXT: slt $5, $2, $7 ; MMEL-NEXT: or $3, $2, $zero ; MMEL-NEXT: movn $3, $7, $5 ; MMEL-NEXT: and $3, $3, $8 ; MMEL-NEXT: and $4, $2, $9 ; MMEL-NEXT: or $4, $4, $3 ; MMEL-NEXT: sc $4, 0($6) ; MMEL-NEXT: beqzc $4, $BB4_1 ; MMEL-NEXT: # %bb.2: # %entry ; MMEL-NEXT: and $1, $2, $8 ; MMEL-NEXT: srlv $1, $1, $10 ; MMEL-NEXT: seh $1, $1 ; MMEL-NEXT: # %bb.3: # %entry ; MMEL-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMEL-NEXT: # %bb.4: # %entry ; MMEL-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMEL-NEXT: sync ; MMEL-NEXT: addiusp 8 ; MMEL-NEXT: jrc $ra ; ; MMELR6-LABEL: test_max_16: ; MMELR6: # %bb.0: # %entry ; MMELR6-NEXT: addiu $sp, $sp, -8 ; MMELR6-NEXT: .cfi_def_cfa_offset 8 ; MMELR6-NEXT: # kill: def $at killed $a1 ; MMELR6-NEXT: sync ; MMELR6-NEXT: addiu $1, $zero, -4 ; MMELR6-NEXT: and $6, $4, $1 ; MMELR6-NEXT: andi $1, $4, 3 ; MMELR6-NEXT: sll $10, $1, 3 ; MMELR6-NEXT: ori $1, $zero, 65535 ; MMELR6-NEXT: sllv $8, $1, $10 ; MMELR6-NEXT: nor $9, $zero, $8 ; MMELR6-NEXT: sllv $7, $5, $10 ; MMELR6-NEXT: $BB4_1: # %entry ; MMELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMELR6-NEXT: ll $2, 0($6) ; MMELR6-NEXT: and $2, $2, $8 ; MMELR6-NEXT: and $7, $7, $8 ; MMELR6-NEXT: slt $5, $2, $7 ; MMELR6-NEXT: seleqz $3, $2, $5 ; MMELR6-NEXT: selnez $5, $7, $5 ; MMELR6-NEXT: or $3, $3, $5 ; MMELR6-NEXT: and $3, $3, $8 ; MMELR6-NEXT: and $4, $2, $9 ; MMELR6-NEXT: or $4, $4, $3 ; MMELR6-NEXT: sc $4, 0($6) ; MMELR6-NEXT: beqc $4, $zero, $BB4_1 ; MMELR6-NEXT: # %bb.2: # %entry ; MMELR6-NEXT: and $1, $2, $8 ; MMELR6-NEXT: srlv $1, $1, $10 ; MMELR6-NEXT: seh $1, $1 ; MMELR6-NEXT: # %bb.3: # %entry ; MMELR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMELR6-NEXT: # %bb.4: # %entry ; MMELR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMELR6-NEXT: sync ; MMELR6-NEXT: addiu $sp, $sp, 8 ; MMELR6-NEXT: jrc $ra ; ; MIPS64-LABEL: test_max_16: ; MIPS64: # %bb.0: # %entry ; MIPS64-NEXT: daddiu $sp, $sp, -16 ; MIPS64-NEXT: .cfi_def_cfa_offset 16 ; MIPS64-NEXT: move $1, $5 ; MIPS64-NEXT: sync ; MIPS64-NEXT: daddiu $2, $zero, -4 ; MIPS64-NEXT: and $6, $4, $2 ; MIPS64-NEXT: andi $2, $4, 3 ; MIPS64-NEXT: xori $2, $2, 2 ; MIPS64-NEXT: sll $10, $2, 3 ; MIPS64-NEXT: ori $2, $zero, 65535 ; MIPS64-NEXT: sllv $8, $2, $10 ; MIPS64-NEXT: nor $9, $zero, $8 ; MIPS64-NEXT: sllv $7, $1, $10 ; MIPS64-NEXT: .LBB4_1: # %entry ; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64-NEXT: ll $2, 0($6) ; MIPS64-NEXT: slt $5, $2, $7 ; MIPS64-NEXT: move $3, $2 ; MIPS64-NEXT: movn $3, $7, $5 ; MIPS64-NEXT: and $3, $3, $8 ; MIPS64-NEXT: and $4, $2, $9 ; MIPS64-NEXT: or $4, $4, $3 ; MIPS64-NEXT: sc $4, 0($6) ; MIPS64-NEXT: beqz $4, .LBB4_1 ; MIPS64-NEXT: nop ; MIPS64-NEXT: # %bb.2: # %entry ; MIPS64-NEXT: and $1, $2, $8 ; MIPS64-NEXT: srlv $1, $1, $10 ; MIPS64-NEXT: seh $1, $1 ; MIPS64-NEXT: # %bb.3: # %entry ; MIPS64-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64-NEXT: # %bb.4: # %entry ; MIPS64-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64-NEXT: sync ; MIPS64-NEXT: daddiu $sp, $sp, 16 ; MIPS64-NEXT: jr $ra ; MIPS64-NEXT: nop ; ; MIPS64R6-LABEL: test_max_16: ; MIPS64R6: # %bb.0: # %entry ; MIPS64R6-NEXT: daddiu $sp, $sp, -16 ; MIPS64R6-NEXT: .cfi_def_cfa_offset 16 ; MIPS64R6-NEXT: move $1, $5 ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: daddiu $2, $zero, -4 ; MIPS64R6-NEXT: and $6, $4, $2 ; MIPS64R6-NEXT: andi $2, $4, 3 ; MIPS64R6-NEXT: xori $2, $2, 2 ; MIPS64R6-NEXT: sll $10, $2, 3 ; MIPS64R6-NEXT: ori $2, $zero, 65535 ; MIPS64R6-NEXT: sllv $8, $2, $10 ; MIPS64R6-NEXT: nor $9, $zero, $8 ; MIPS64R6-NEXT: sllv $7, $1, $10 ; MIPS64R6-NEXT: .LBB4_1: # %entry ; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64R6-NEXT: ll $2, 0($6) ; MIPS64R6-NEXT: slt $5, $2, $7 ; MIPS64R6-NEXT: seleqz $3, $2, $5 ; MIPS64R6-NEXT: selnez $5, $7, $5 ; MIPS64R6-NEXT: or $3, $3, $5 ; MIPS64R6-NEXT: and $3, $3, $8 ; MIPS64R6-NEXT: and $4, $2, $9 ; MIPS64R6-NEXT: or $4, $4, $3 ; MIPS64R6-NEXT: sc $4, 0($6) ; MIPS64R6-NEXT: beqzc $4, .LBB4_1 ; MIPS64R6-NEXT: # %bb.2: # %entry ; MIPS64R6-NEXT: and $1, $2, $8 ; MIPS64R6-NEXT: srlv $1, $1, $10 ; MIPS64R6-NEXT: seh $1, $1 ; MIPS64R6-NEXT: # %bb.3: # %entry ; MIPS64R6-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64R6-NEXT: # %bb.4: # %entry ; MIPS64R6-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: daddiu $sp, $sp, 16 ; MIPS64R6-NEXT: jrc $ra ; ; MIPS64EL-LABEL: test_max_16: ; MIPS64EL: # %bb.0: # %entry ; MIPS64EL-NEXT: daddiu $sp, $sp, -16 ; MIPS64EL-NEXT: .cfi_def_cfa_offset 16 ; MIPS64EL-NEXT: move $1, $5 ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: daddiu $2, $zero, -4 ; MIPS64EL-NEXT: and $6, $4, $2 ; MIPS64EL-NEXT: andi $2, $4, 3 ; MIPS64EL-NEXT: sll $10, $2, 3 ; MIPS64EL-NEXT: ori $2, $zero, 65535 ; MIPS64EL-NEXT: sllv $8, $2, $10 ; MIPS64EL-NEXT: nor $9, $zero, $8 ; MIPS64EL-NEXT: sllv $7, $1, $10 ; MIPS64EL-NEXT: .LBB4_1: # %entry ; MIPS64EL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64EL-NEXT: ll $2, 0($6) ; MIPS64EL-NEXT: and $2, $2, $8 ; MIPS64EL-NEXT: and $7, $7, $8 ; MIPS64EL-NEXT: slt $5, $2, $7 ; MIPS64EL-NEXT: move $3, $2 ; MIPS64EL-NEXT: movn $3, $7, $5 ; MIPS64EL-NEXT: and $3, $3, $8 ; MIPS64EL-NEXT: and $4, $2, $9 ; MIPS64EL-NEXT: or $4, $4, $3 ; MIPS64EL-NEXT: sc $4, 0($6) ; MIPS64EL-NEXT: beqz $4, .LBB4_1 ; MIPS64EL-NEXT: nop ; MIPS64EL-NEXT: # %bb.2: # %entry ; MIPS64EL-NEXT: and $1, $2, $8 ; MIPS64EL-NEXT: srlv $1, $1, $10 ; MIPS64EL-NEXT: seh $1, $1 ; MIPS64EL-NEXT: # %bb.3: # %entry ; MIPS64EL-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64EL-NEXT: # %bb.4: # %entry ; MIPS64EL-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: daddiu $sp, $sp, 16 ; MIPS64EL-NEXT: jr $ra ; MIPS64EL-NEXT: nop ; ; MIPS64ELR6-LABEL: test_max_16: ; MIPS64ELR6: # %bb.0: # %entry ; MIPS64ELR6-NEXT: daddiu $sp, $sp, -16 ; MIPS64ELR6-NEXT: .cfi_def_cfa_offset 16 ; MIPS64ELR6-NEXT: move $1, $5 ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: daddiu $2, $zero, -4 ; MIPS64ELR6-NEXT: and $6, $4, $2 ; MIPS64ELR6-NEXT: andi $2, $4, 3 ; MIPS64ELR6-NEXT: sll $10, $2, 3 ; MIPS64ELR6-NEXT: ori $2, $zero, 65535 ; MIPS64ELR6-NEXT: sllv $8, $2, $10 ; MIPS64ELR6-NEXT: nor $9, $zero, $8 ; MIPS64ELR6-NEXT: sllv $7, $1, $10 ; MIPS64ELR6-NEXT: .LBB4_1: # %entry ; MIPS64ELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64ELR6-NEXT: ll $2, 0($6) ; MIPS64ELR6-NEXT: and $2, $2, $8 ; MIPS64ELR6-NEXT: and $7, $7, $8 ; MIPS64ELR6-NEXT: slt $5, $2, $7 ; MIPS64ELR6-NEXT: seleqz $3, $2, $5 ; MIPS64ELR6-NEXT: selnez $5, $7, $5 ; MIPS64ELR6-NEXT: or $3, $3, $5 ; MIPS64ELR6-NEXT: and $3, $3, $8 ; MIPS64ELR6-NEXT: and $4, $2, $9 ; MIPS64ELR6-NEXT: or $4, $4, $3 ; MIPS64ELR6-NEXT: sc $4, 0($6) ; MIPS64ELR6-NEXT: beqzc $4, .LBB4_1 ; MIPS64ELR6-NEXT: # %bb.2: # %entry ; MIPS64ELR6-NEXT: and $1, $2, $8 ; MIPS64ELR6-NEXT: srlv $1, $1, $10 ; MIPS64ELR6-NEXT: seh $1, $1 ; MIPS64ELR6-NEXT: # %bb.3: # %entry ; MIPS64ELR6-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64ELR6-NEXT: # %bb.4: # %entry ; MIPS64ELR6-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: daddiu $sp, $sp, 16 ; MIPS64ELR6-NEXT: jrc $ra entry: %0 = atomicrmw max i16* %ptr, i16 %val seq_cst ret i16 %0 } define i16 @test_min_16(i16* nocapture %ptr, i16 signext %val) { ; MIPS-LABEL: test_min_16: ; MIPS: # %bb.0: # %entry ; MIPS-NEXT: addiu $sp, $sp, -8 ; MIPS-NEXT: .cfi_def_cfa_offset 8 ; MIPS-NEXT: # kill: def $at killed $a1 ; MIPS-NEXT: sync ; MIPS-NEXT: addiu $1, $zero, -4 ; MIPS-NEXT: and $6, $4, $1 ; MIPS-NEXT: andi $1, $4, 3 ; MIPS-NEXT: xori $1, $1, 2 ; MIPS-NEXT: sll $10, $1, 3 ; MIPS-NEXT: ori $1, $zero, 65535 ; MIPS-NEXT: sllv $8, $1, $10 ; MIPS-NEXT: nor $9, $zero, $8 ; MIPS-NEXT: sllv $7, $5, $10 ; MIPS-NEXT: $BB5_1: # %entry ; MIPS-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS-NEXT: ll $2, 0($6) ; MIPS-NEXT: slt $5, $2, $7 ; MIPS-NEXT: move $3, $2 ; MIPS-NEXT: movz $3, $7, $5 ; MIPS-NEXT: and $3, $3, $8 ; MIPS-NEXT: and $4, $2, $9 ; MIPS-NEXT: or $4, $4, $3 ; MIPS-NEXT: sc $4, 0($6) ; MIPS-NEXT: beqz $4, $BB5_1 ; MIPS-NEXT: nop ; MIPS-NEXT: # %bb.2: # %entry ; MIPS-NEXT: and $1, $2, $8 ; MIPS-NEXT: srlv $1, $1, $10 ; MIPS-NEXT: seh $1, $1 ; MIPS-NEXT: # %bb.3: # %entry ; MIPS-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPS-NEXT: # %bb.4: # %entry ; MIPS-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPS-NEXT: sync ; MIPS-NEXT: addiu $sp, $sp, 8 ; MIPS-NEXT: jr $ra ; MIPS-NEXT: nop ; ; MIPSR6-LABEL: test_min_16: ; MIPSR6: # %bb.0: # %entry ; MIPSR6-NEXT: addiu $sp, $sp, -8 ; MIPSR6-NEXT: .cfi_def_cfa_offset 8 ; MIPSR6-NEXT: # kill: def $at killed $a1 ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: addiu $1, $zero, -4 ; MIPSR6-NEXT: and $6, $4, $1 ; MIPSR6-NEXT: andi $1, $4, 3 ; MIPSR6-NEXT: xori $1, $1, 2 ; MIPSR6-NEXT: sll $10, $1, 3 ; MIPSR6-NEXT: ori $1, $zero, 65535 ; MIPSR6-NEXT: sllv $8, $1, $10 ; MIPSR6-NEXT: nor $9, $zero, $8 ; MIPSR6-NEXT: sllv $7, $5, $10 ; MIPSR6-NEXT: $BB5_1: # %entry ; MIPSR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSR6-NEXT: ll $2, 0($6) ; MIPSR6-NEXT: slt $5, $2, $7 ; MIPSR6-NEXT: selnez $3, $2, $5 ; MIPSR6-NEXT: seleqz $5, $7, $5 ; MIPSR6-NEXT: or $3, $3, $5 ; MIPSR6-NEXT: and $3, $3, $8 ; MIPSR6-NEXT: and $4, $2, $9 ; MIPSR6-NEXT: or $4, $4, $3 ; MIPSR6-NEXT: sc $4, 0($6) ; MIPSR6-NEXT: beqzc $4, $BB5_1 ; MIPSR6-NEXT: # %bb.2: # %entry ; MIPSR6-NEXT: and $1, $2, $8 ; MIPSR6-NEXT: srlv $1, $1, $10 ; MIPSR6-NEXT: seh $1, $1 ; MIPSR6-NEXT: # %bb.3: # %entry ; MIPSR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSR6-NEXT: # %bb.4: # %entry ; MIPSR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: addiu $sp, $sp, 8 ; MIPSR6-NEXT: jrc $ra ; ; MM-LABEL: test_min_16: ; MM: # %bb.0: # %entry ; MM-NEXT: addiu $sp, $sp, -8 ; MM-NEXT: .cfi_def_cfa_offset 8 ; MM-NEXT: # kill: def $at killed $a1 ; MM-NEXT: sync ; MM-NEXT: addiu $1, $zero, -4 ; MM-NEXT: and $6, $4, $1 ; MM-NEXT: andi $1, $4, 3 ; MM-NEXT: xori $1, $1, 2 ; MM-NEXT: sll $10, $1, 3 ; MM-NEXT: ori $1, $zero, 65535 ; MM-NEXT: sllv $8, $1, $10 ; MM-NEXT: nor $9, $zero, $8 ; MM-NEXT: sllv $7, $5, $10 ; MM-NEXT: $BB5_1: # %entry ; MM-NEXT: # =>This Inner Loop Header: Depth=1 ; MM-NEXT: ll $2, 0($6) ; MM-NEXT: slt $5, $2, $7 ; MM-NEXT: or $3, $2, $zero ; MM-NEXT: movz $3, $7, $5 ; MM-NEXT: and $3, $3, $8 ; MM-NEXT: and $4, $2, $9 ; MM-NEXT: or $4, $4, $3 ; MM-NEXT: sc $4, 0($6) ; MM-NEXT: beqzc $4, $BB5_1 ; MM-NEXT: # %bb.2: # %entry ; MM-NEXT: and $1, $2, $8 ; MM-NEXT: srlv $1, $1, $10 ; MM-NEXT: seh $1, $1 ; MM-NEXT: # %bb.3: # %entry ; MM-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MM-NEXT: # %bb.4: # %entry ; MM-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MM-NEXT: sync ; MM-NEXT: addiusp 8 ; MM-NEXT: jrc $ra ; ; MMR6-LABEL: test_min_16: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: addiu $sp, $sp, -8 ; MMR6-NEXT: .cfi_def_cfa_offset 8 ; MMR6-NEXT: # kill: def $at killed $a1 ; MMR6-NEXT: sync ; MMR6-NEXT: addiu $1, $zero, -4 ; MMR6-NEXT: and $6, $4, $1 ; MMR6-NEXT: andi $1, $4, 3 ; MMR6-NEXT: xori $1, $1, 2 ; MMR6-NEXT: sll $10, $1, 3 ; MMR6-NEXT: ori $1, $zero, 65535 ; MMR6-NEXT: sllv $8, $1, $10 ; MMR6-NEXT: nor $9, $zero, $8 ; MMR6-NEXT: sllv $7, $5, $10 ; MMR6-NEXT: $BB5_1: # %entry ; MMR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMR6-NEXT: ll $2, 0($6) ; MMR6-NEXT: slt $5, $2, $7 ; MMR6-NEXT: selnez $3, $2, $5 ; MMR6-NEXT: seleqz $5, $7, $5 ; MMR6-NEXT: or $3, $3, $5 ; MMR6-NEXT: and $3, $3, $8 ; MMR6-NEXT: and $4, $2, $9 ; MMR6-NEXT: or $4, $4, $3 ; MMR6-NEXT: sc $4, 0($6) ; MMR6-NEXT: beqc $4, $zero, $BB5_1 ; MMR6-NEXT: # %bb.2: # %entry ; MMR6-NEXT: and $1, $2, $8 ; MMR6-NEXT: srlv $1, $1, $10 ; MMR6-NEXT: seh $1, $1 ; MMR6-NEXT: # %bb.3: # %entry ; MMR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMR6-NEXT: # %bb.4: # %entry ; MMR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMR6-NEXT: sync ; MMR6-NEXT: addiu $sp, $sp, 8 ; MMR6-NEXT: jrc $ra ; ; MIPSEL-LABEL: test_min_16: ; MIPSEL: # %bb.0: # %entry ; MIPSEL-NEXT: addiu $sp, $sp, -8 ; MIPSEL-NEXT: .cfi_def_cfa_offset 8 ; MIPSEL-NEXT: # kill: def $at killed $a1 ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: addiu $1, $zero, -4 ; MIPSEL-NEXT: and $6, $4, $1 ; MIPSEL-NEXT: andi $1, $4, 3 ; MIPSEL-NEXT: sll $10, $1, 3 ; MIPSEL-NEXT: ori $1, $zero, 65535 ; MIPSEL-NEXT: sllv $8, $1, $10 ; MIPSEL-NEXT: nor $9, $zero, $8 ; MIPSEL-NEXT: sllv $7, $5, $10 ; MIPSEL-NEXT: $BB5_1: # %entry ; MIPSEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSEL-NEXT: ll $2, 0($6) ; MIPSEL-NEXT: and $2, $2, $8 ; MIPSEL-NEXT: and $7, $7, $8 ; MIPSEL-NEXT: slt $5, $2, $7 ; MIPSEL-NEXT: move $3, $2 ; MIPSEL-NEXT: movz $3, $7, $5 ; MIPSEL-NEXT: and $3, $3, $8 ; MIPSEL-NEXT: and $4, $2, $9 ; MIPSEL-NEXT: or $4, $4, $3 ; MIPSEL-NEXT: sc $4, 0($6) ; MIPSEL-NEXT: beqz $4, $BB5_1 ; MIPSEL-NEXT: nop ; MIPSEL-NEXT: # %bb.2: # %entry ; MIPSEL-NEXT: and $1, $2, $8 ; MIPSEL-NEXT: srlv $1, $1, $10 ; MIPSEL-NEXT: seh $1, $1 ; MIPSEL-NEXT: # %bb.3: # %entry ; MIPSEL-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSEL-NEXT: # %bb.4: # %entry ; MIPSEL-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: addiu $sp, $sp, 8 ; MIPSEL-NEXT: jr $ra ; MIPSEL-NEXT: nop ; ; MIPSELR6-LABEL: test_min_16: ; MIPSELR6: # %bb.0: # %entry ; MIPSELR6-NEXT: addiu $sp, $sp, -8 ; MIPSELR6-NEXT: .cfi_def_cfa_offset 8 ; MIPSELR6-NEXT: # kill: def $at killed $a1 ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: addiu $1, $zero, -4 ; MIPSELR6-NEXT: and $6, $4, $1 ; MIPSELR6-NEXT: andi $1, $4, 3 ; MIPSELR6-NEXT: sll $10, $1, 3 ; MIPSELR6-NEXT: ori $1, $zero, 65535 ; MIPSELR6-NEXT: sllv $8, $1, $10 ; MIPSELR6-NEXT: nor $9, $zero, $8 ; MIPSELR6-NEXT: sllv $7, $5, $10 ; MIPSELR6-NEXT: $BB5_1: # %entry ; MIPSELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSELR6-NEXT: ll $2, 0($6) ; MIPSELR6-NEXT: and $2, $2, $8 ; MIPSELR6-NEXT: and $7, $7, $8 ; MIPSELR6-NEXT: slt $5, $2, $7 ; MIPSELR6-NEXT: selnez $3, $2, $5 ; MIPSELR6-NEXT: seleqz $5, $7, $5 ; MIPSELR6-NEXT: or $3, $3, $5 ; MIPSELR6-NEXT: and $3, $3, $8 ; MIPSELR6-NEXT: and $4, $2, $9 ; MIPSELR6-NEXT: or $4, $4, $3 ; MIPSELR6-NEXT: sc $4, 0($6) ; MIPSELR6-NEXT: beqzc $4, $BB5_1 ; MIPSELR6-NEXT: # %bb.2: # %entry ; MIPSELR6-NEXT: and $1, $2, $8 ; MIPSELR6-NEXT: srlv $1, $1, $10 ; MIPSELR6-NEXT: seh $1, $1 ; MIPSELR6-NEXT: # %bb.3: # %entry ; MIPSELR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSELR6-NEXT: # %bb.4: # %entry ; MIPSELR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: addiu $sp, $sp, 8 ; MIPSELR6-NEXT: jrc $ra ; ; MMEL-LABEL: test_min_16: ; MMEL: # %bb.0: # %entry ; MMEL-NEXT: addiu $sp, $sp, -8 ; MMEL-NEXT: .cfi_def_cfa_offset 8 ; MMEL-NEXT: # kill: def $at killed $a1 ; MMEL-NEXT: sync ; MMEL-NEXT: addiu $1, $zero, -4 ; MMEL-NEXT: and $6, $4, $1 ; MMEL-NEXT: andi $1, $4, 3 ; MMEL-NEXT: sll $10, $1, 3 ; MMEL-NEXT: ori $1, $zero, 65535 ; MMEL-NEXT: sllv $8, $1, $10 ; MMEL-NEXT: nor $9, $zero, $8 ; MMEL-NEXT: sllv $7, $5, $10 ; MMEL-NEXT: $BB5_1: # %entry ; MMEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MMEL-NEXT: ll $2, 0($6) ; MMEL-NEXT: and $2, $2, $8 ; MMEL-NEXT: and $7, $7, $8 ; MMEL-NEXT: slt $5, $2, $7 ; MMEL-NEXT: or $3, $2, $zero ; MMEL-NEXT: movz $3, $7, $5 ; MMEL-NEXT: and $3, $3, $8 ; MMEL-NEXT: and $4, $2, $9 ; MMEL-NEXT: or $4, $4, $3 ; MMEL-NEXT: sc $4, 0($6) ; MMEL-NEXT: beqzc $4, $BB5_1 ; MMEL-NEXT: # %bb.2: # %entry ; MMEL-NEXT: and $1, $2, $8 ; MMEL-NEXT: srlv $1, $1, $10 ; MMEL-NEXT: seh $1, $1 ; MMEL-NEXT: # %bb.3: # %entry ; MMEL-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMEL-NEXT: # %bb.4: # %entry ; MMEL-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMEL-NEXT: sync ; MMEL-NEXT: addiusp 8 ; MMEL-NEXT: jrc $ra ; ; MMELR6-LABEL: test_min_16: ; MMELR6: # %bb.0: # %entry ; MMELR6-NEXT: addiu $sp, $sp, -8 ; MMELR6-NEXT: .cfi_def_cfa_offset 8 ; MMELR6-NEXT: # kill: def $at killed $a1 ; MMELR6-NEXT: sync ; MMELR6-NEXT: addiu $1, $zero, -4 ; MMELR6-NEXT: and $6, $4, $1 ; MMELR6-NEXT: andi $1, $4, 3 ; MMELR6-NEXT: sll $10, $1, 3 ; MMELR6-NEXT: ori $1, $zero, 65535 ; MMELR6-NEXT: sllv $8, $1, $10 ; MMELR6-NEXT: nor $9, $zero, $8 ; MMELR6-NEXT: sllv $7, $5, $10 ; MMELR6-NEXT: $BB5_1: # %entry ; MMELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMELR6-NEXT: ll $2, 0($6) ; MMELR6-NEXT: and $2, $2, $8 ; MMELR6-NEXT: and $7, $7, $8 ; MMELR6-NEXT: slt $5, $2, $7 ; MMELR6-NEXT: selnez $3, $2, $5 ; MMELR6-NEXT: seleqz $5, $7, $5 ; MMELR6-NEXT: or $3, $3, $5 ; MMELR6-NEXT: and $3, $3, $8 ; MMELR6-NEXT: and $4, $2, $9 ; MMELR6-NEXT: or $4, $4, $3 ; MMELR6-NEXT: sc $4, 0($6) ; MMELR6-NEXT: beqc $4, $zero, $BB5_1 ; MMELR6-NEXT: # %bb.2: # %entry ; MMELR6-NEXT: and $1, $2, $8 ; MMELR6-NEXT: srlv $1, $1, $10 ; MMELR6-NEXT: seh $1, $1 ; MMELR6-NEXT: # %bb.3: # %entry ; MMELR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMELR6-NEXT: # %bb.4: # %entry ; MMELR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMELR6-NEXT: sync ; MMELR6-NEXT: addiu $sp, $sp, 8 ; MMELR6-NEXT: jrc $ra ; ; MIPS64-LABEL: test_min_16: ; MIPS64: # %bb.0: # %entry ; MIPS64-NEXT: daddiu $sp, $sp, -16 ; MIPS64-NEXT: .cfi_def_cfa_offset 16 ; MIPS64-NEXT: move $1, $5 ; MIPS64-NEXT: sync ; MIPS64-NEXT: daddiu $2, $zero, -4 ; MIPS64-NEXT: and $6, $4, $2 ; MIPS64-NEXT: andi $2, $4, 3 ; MIPS64-NEXT: xori $2, $2, 2 ; MIPS64-NEXT: sll $10, $2, 3 ; MIPS64-NEXT: ori $2, $zero, 65535 ; MIPS64-NEXT: sllv $8, $2, $10 ; MIPS64-NEXT: nor $9, $zero, $8 ; MIPS64-NEXT: sllv $7, $1, $10 ; MIPS64-NEXT: .LBB5_1: # %entry ; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64-NEXT: ll $2, 0($6) ; MIPS64-NEXT: slt $5, $2, $7 ; MIPS64-NEXT: move $3, $2 ; MIPS64-NEXT: movz $3, $7, $5 ; MIPS64-NEXT: and $3, $3, $8 ; MIPS64-NEXT: and $4, $2, $9 ; MIPS64-NEXT: or $4, $4, $3 ; MIPS64-NEXT: sc $4, 0($6) ; MIPS64-NEXT: beqz $4, .LBB5_1 ; MIPS64-NEXT: nop ; MIPS64-NEXT: # %bb.2: # %entry ; MIPS64-NEXT: and $1, $2, $8 ; MIPS64-NEXT: srlv $1, $1, $10 ; MIPS64-NEXT: seh $1, $1 ; MIPS64-NEXT: # %bb.3: # %entry ; MIPS64-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64-NEXT: # %bb.4: # %entry ; MIPS64-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64-NEXT: sync ; MIPS64-NEXT: daddiu $sp, $sp, 16 ; MIPS64-NEXT: jr $ra ; MIPS64-NEXT: nop ; ; MIPS64R6-LABEL: test_min_16: ; MIPS64R6: # %bb.0: # %entry ; MIPS64R6-NEXT: daddiu $sp, $sp, -16 ; MIPS64R6-NEXT: .cfi_def_cfa_offset 16 ; MIPS64R6-NEXT: move $1, $5 ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: daddiu $2, $zero, -4 ; MIPS64R6-NEXT: and $6, $4, $2 ; MIPS64R6-NEXT: andi $2, $4, 3 ; MIPS64R6-NEXT: xori $2, $2, 2 ; MIPS64R6-NEXT: sll $10, $2, 3 ; MIPS64R6-NEXT: ori $2, $zero, 65535 ; MIPS64R6-NEXT: sllv $8, $2, $10 ; MIPS64R6-NEXT: nor $9, $zero, $8 ; MIPS64R6-NEXT: sllv $7, $1, $10 ; MIPS64R6-NEXT: .LBB5_1: # %entry ; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64R6-NEXT: ll $2, 0($6) ; MIPS64R6-NEXT: slt $5, $2, $7 ; MIPS64R6-NEXT: selnez $3, $2, $5 ; MIPS64R6-NEXT: seleqz $5, $7, $5 ; MIPS64R6-NEXT: or $3, $3, $5 ; MIPS64R6-NEXT: and $3, $3, $8 ; MIPS64R6-NEXT: and $4, $2, $9 ; MIPS64R6-NEXT: or $4, $4, $3 ; MIPS64R6-NEXT: sc $4, 0($6) ; MIPS64R6-NEXT: beqzc $4, .LBB5_1 ; MIPS64R6-NEXT: # %bb.2: # %entry ; MIPS64R6-NEXT: and $1, $2, $8 ; MIPS64R6-NEXT: srlv $1, $1, $10 ; MIPS64R6-NEXT: seh $1, $1 ; MIPS64R6-NEXT: # %bb.3: # %entry ; MIPS64R6-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64R6-NEXT: # %bb.4: # %entry ; MIPS64R6-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: daddiu $sp, $sp, 16 ; MIPS64R6-NEXT: jrc $ra ; ; MIPS64EL-LABEL: test_min_16: ; MIPS64EL: # %bb.0: # %entry ; MIPS64EL-NEXT: daddiu $sp, $sp, -16 ; MIPS64EL-NEXT: .cfi_def_cfa_offset 16 ; MIPS64EL-NEXT: move $1, $5 ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: daddiu $2, $zero, -4 ; MIPS64EL-NEXT: and $6, $4, $2 ; MIPS64EL-NEXT: andi $2, $4, 3 ; MIPS64EL-NEXT: sll $10, $2, 3 ; MIPS64EL-NEXT: ori $2, $zero, 65535 ; MIPS64EL-NEXT: sllv $8, $2, $10 ; MIPS64EL-NEXT: nor $9, $zero, $8 ; MIPS64EL-NEXT: sllv $7, $1, $10 ; MIPS64EL-NEXT: .LBB5_1: # %entry ; MIPS64EL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64EL-NEXT: ll $2, 0($6) ; MIPS64EL-NEXT: and $2, $2, $8 ; MIPS64EL-NEXT: and $7, $7, $8 ; MIPS64EL-NEXT: slt $5, $2, $7 ; MIPS64EL-NEXT: move $3, $2 ; MIPS64EL-NEXT: movz $3, $7, $5 ; MIPS64EL-NEXT: and $3, $3, $8 ; MIPS64EL-NEXT: and $4, $2, $9 ; MIPS64EL-NEXT: or $4, $4, $3 ; MIPS64EL-NEXT: sc $4, 0($6) ; MIPS64EL-NEXT: beqz $4, .LBB5_1 ; MIPS64EL-NEXT: nop ; MIPS64EL-NEXT: # %bb.2: # %entry ; MIPS64EL-NEXT: and $1, $2, $8 ; MIPS64EL-NEXT: srlv $1, $1, $10 ; MIPS64EL-NEXT: seh $1, $1 ; MIPS64EL-NEXT: # %bb.3: # %entry ; MIPS64EL-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64EL-NEXT: # %bb.4: # %entry ; MIPS64EL-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: daddiu $sp, $sp, 16 ; MIPS64EL-NEXT: jr $ra ; MIPS64EL-NEXT: nop ; ; MIPS64ELR6-LABEL: test_min_16: ; MIPS64ELR6: # %bb.0: # %entry ; MIPS64ELR6-NEXT: daddiu $sp, $sp, -16 ; MIPS64ELR6-NEXT: .cfi_def_cfa_offset 16 ; MIPS64ELR6-NEXT: move $1, $5 ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: daddiu $2, $zero, -4 ; MIPS64ELR6-NEXT: and $6, $4, $2 ; MIPS64ELR6-NEXT: andi $2, $4, 3 ; MIPS64ELR6-NEXT: sll $10, $2, 3 ; MIPS64ELR6-NEXT: ori $2, $zero, 65535 ; MIPS64ELR6-NEXT: sllv $8, $2, $10 ; MIPS64ELR6-NEXT: nor $9, $zero, $8 ; MIPS64ELR6-NEXT: sllv $7, $1, $10 ; MIPS64ELR6-NEXT: .LBB5_1: # %entry ; MIPS64ELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64ELR6-NEXT: ll $2, 0($6) ; MIPS64ELR6-NEXT: and $2, $2, $8 ; MIPS64ELR6-NEXT: and $7, $7, $8 ; MIPS64ELR6-NEXT: slt $5, $2, $7 ; MIPS64ELR6-NEXT: selnez $3, $2, $5 ; MIPS64ELR6-NEXT: seleqz $5, $7, $5 ; MIPS64ELR6-NEXT: or $3, $3, $5 ; MIPS64ELR6-NEXT: and $3, $3, $8 ; MIPS64ELR6-NEXT: and $4, $2, $9 ; MIPS64ELR6-NEXT: or $4, $4, $3 ; MIPS64ELR6-NEXT: sc $4, 0($6) ; MIPS64ELR6-NEXT: beqzc $4, .LBB5_1 ; MIPS64ELR6-NEXT: # %bb.2: # %entry ; MIPS64ELR6-NEXT: and $1, $2, $8 ; MIPS64ELR6-NEXT: srlv $1, $1, $10 ; MIPS64ELR6-NEXT: seh $1, $1 ; MIPS64ELR6-NEXT: # %bb.3: # %entry ; MIPS64ELR6-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64ELR6-NEXT: # %bb.4: # %entry ; MIPS64ELR6-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: daddiu $sp, $sp, 16 ; MIPS64ELR6-NEXT: jrc $ra entry: %0 = atomicrmw min i16* %ptr, i16 %val seq_cst ret i16 %0 } define i16 @test_umax_16(i16* nocapture %ptr, i16 signext %val) { ; MIPS-LABEL: test_umax_16: ; MIPS: # %bb.0: # %entry ; MIPS-NEXT: addiu $sp, $sp, -8 ; MIPS-NEXT: .cfi_def_cfa_offset 8 ; MIPS-NEXT: # kill: def $at killed $a1 ; MIPS-NEXT: sync ; MIPS-NEXT: addiu $1, $zero, -4 ; MIPS-NEXT: and $6, $4, $1 ; MIPS-NEXT: andi $1, $4, 3 ; MIPS-NEXT: xori $1, $1, 2 ; MIPS-NEXT: sll $10, $1, 3 ; MIPS-NEXT: ori $1, $zero, 65535 ; MIPS-NEXT: sllv $8, $1, $10 ; MIPS-NEXT: nor $9, $zero, $8 ; MIPS-NEXT: sllv $7, $5, $10 ; MIPS-NEXT: $BB6_1: # %entry ; MIPS-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS-NEXT: ll $2, 0($6) ; MIPS-NEXT: sltu $5, $2, $7 ; MIPS-NEXT: move $3, $2 ; MIPS-NEXT: movn $3, $7, $5 ; MIPS-NEXT: and $3, $3, $8 ; MIPS-NEXT: and $4, $2, $9 ; MIPS-NEXT: or $4, $4, $3 ; MIPS-NEXT: sc $4, 0($6) ; MIPS-NEXT: beqz $4, $BB6_1 ; MIPS-NEXT: nop ; MIPS-NEXT: # %bb.2: # %entry ; MIPS-NEXT: and $1, $2, $8 ; MIPS-NEXT: srlv $1, $1, $10 ; MIPS-NEXT: seh $1, $1 ; MIPS-NEXT: # %bb.3: # %entry ; MIPS-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPS-NEXT: # %bb.4: # %entry ; MIPS-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPS-NEXT: sync ; MIPS-NEXT: addiu $sp, $sp, 8 ; MIPS-NEXT: jr $ra ; MIPS-NEXT: nop ; ; MIPSR6-LABEL: test_umax_16: ; MIPSR6: # %bb.0: # %entry ; MIPSR6-NEXT: addiu $sp, $sp, -8 ; MIPSR6-NEXT: .cfi_def_cfa_offset 8 ; MIPSR6-NEXT: # kill: def $at killed $a1 ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: addiu $1, $zero, -4 ; MIPSR6-NEXT: and $6, $4, $1 ; MIPSR6-NEXT: andi $1, $4, 3 ; MIPSR6-NEXT: xori $1, $1, 2 ; MIPSR6-NEXT: sll $10, $1, 3 ; MIPSR6-NEXT: ori $1, $zero, 65535 ; MIPSR6-NEXT: sllv $8, $1, $10 ; MIPSR6-NEXT: nor $9, $zero, $8 ; MIPSR6-NEXT: sllv $7, $5, $10 ; MIPSR6-NEXT: $BB6_1: # %entry ; MIPSR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSR6-NEXT: ll $2, 0($6) ; MIPSR6-NEXT: sltu $5, $2, $7 ; MIPSR6-NEXT: seleqz $3, $2, $5 ; MIPSR6-NEXT: selnez $5, $7, $5 ; MIPSR6-NEXT: or $3, $3, $5 ; MIPSR6-NEXT: and $3, $3, $8 ; MIPSR6-NEXT: and $4, $2, $9 ; MIPSR6-NEXT: or $4, $4, $3 ; MIPSR6-NEXT: sc $4, 0($6) ; MIPSR6-NEXT: beqzc $4, $BB6_1 ; MIPSR6-NEXT: # %bb.2: # %entry ; MIPSR6-NEXT: and $1, $2, $8 ; MIPSR6-NEXT: srlv $1, $1, $10 ; MIPSR6-NEXT: seh $1, $1 ; MIPSR6-NEXT: # %bb.3: # %entry ; MIPSR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSR6-NEXT: # %bb.4: # %entry ; MIPSR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: addiu $sp, $sp, 8 ; MIPSR6-NEXT: jrc $ra ; ; MM-LABEL: test_umax_16: ; MM: # %bb.0: # %entry ; MM-NEXT: addiu $sp, $sp, -8 ; MM-NEXT: .cfi_def_cfa_offset 8 ; MM-NEXT: # kill: def $at killed $a1 ; MM-NEXT: sync ; MM-NEXT: addiu $1, $zero, -4 ; MM-NEXT: and $6, $4, $1 ; MM-NEXT: andi $1, $4, 3 ; MM-NEXT: xori $1, $1, 2 ; MM-NEXT: sll $10, $1, 3 ; MM-NEXT: ori $1, $zero, 65535 ; MM-NEXT: sllv $8, $1, $10 ; MM-NEXT: nor $9, $zero, $8 ; MM-NEXT: sllv $7, $5, $10 ; MM-NEXT: $BB6_1: # %entry ; MM-NEXT: # =>This Inner Loop Header: Depth=1 ; MM-NEXT: ll $2, 0($6) ; MM-NEXT: sltu $5, $2, $7 ; MM-NEXT: or $3, $2, $zero ; MM-NEXT: movn $3, $7, $5 ; MM-NEXT: and $3, $3, $8 ; MM-NEXT: and $4, $2, $9 ; MM-NEXT: or $4, $4, $3 ; MM-NEXT: sc $4, 0($6) ; MM-NEXT: beqzc $4, $BB6_1 ; MM-NEXT: # %bb.2: # %entry ; MM-NEXT: and $1, $2, $8 ; MM-NEXT: srlv $1, $1, $10 ; MM-NEXT: seh $1, $1 ; MM-NEXT: # %bb.3: # %entry ; MM-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MM-NEXT: # %bb.4: # %entry ; MM-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MM-NEXT: sync ; MM-NEXT: addiusp 8 ; MM-NEXT: jrc $ra ; ; MMR6-LABEL: test_umax_16: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: addiu $sp, $sp, -8 ; MMR6-NEXT: .cfi_def_cfa_offset 8 ; MMR6-NEXT: # kill: def $at killed $a1 ; MMR6-NEXT: sync ; MMR6-NEXT: addiu $1, $zero, -4 ; MMR6-NEXT: and $6, $4, $1 ; MMR6-NEXT: andi $1, $4, 3 ; MMR6-NEXT: xori $1, $1, 2 ; MMR6-NEXT: sll $10, $1, 3 ; MMR6-NEXT: ori $1, $zero, 65535 ; MMR6-NEXT: sllv $8, $1, $10 ; MMR6-NEXT: nor $9, $zero, $8 ; MMR6-NEXT: sllv $7, $5, $10 ; MMR6-NEXT: $BB6_1: # %entry ; MMR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMR6-NEXT: ll $2, 0($6) ; MMR6-NEXT: sltu $5, $2, $7 ; MMR6-NEXT: seleqz $3, $2, $5 ; MMR6-NEXT: selnez $5, $7, $5 ; MMR6-NEXT: or $3, $3, $5 ; MMR6-NEXT: and $3, $3, $8 ; MMR6-NEXT: and $4, $2, $9 ; MMR6-NEXT: or $4, $4, $3 ; MMR6-NEXT: sc $4, 0($6) ; MMR6-NEXT: beqc $4, $zero, $BB6_1 ; MMR6-NEXT: # %bb.2: # %entry ; MMR6-NEXT: and $1, $2, $8 ; MMR6-NEXT: srlv $1, $1, $10 ; MMR6-NEXT: seh $1, $1 ; MMR6-NEXT: # %bb.3: # %entry ; MMR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMR6-NEXT: # %bb.4: # %entry ; MMR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMR6-NEXT: sync ; MMR6-NEXT: addiu $sp, $sp, 8 ; MMR6-NEXT: jrc $ra ; ; MIPSEL-LABEL: test_umax_16: ; MIPSEL: # %bb.0: # %entry ; MIPSEL-NEXT: addiu $sp, $sp, -8 ; MIPSEL-NEXT: .cfi_def_cfa_offset 8 ; MIPSEL-NEXT: # kill: def $at killed $a1 ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: addiu $1, $zero, -4 ; MIPSEL-NEXT: and $6, $4, $1 ; MIPSEL-NEXT: andi $1, $4, 3 ; MIPSEL-NEXT: sll $10, $1, 3 ; MIPSEL-NEXT: ori $1, $zero, 65535 ; MIPSEL-NEXT: sllv $8, $1, $10 ; MIPSEL-NEXT: nor $9, $zero, $8 ; MIPSEL-NEXT: sllv $7, $5, $10 ; MIPSEL-NEXT: $BB6_1: # %entry ; MIPSEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSEL-NEXT: ll $2, 0($6) ; MIPSEL-NEXT: and $2, $2, $8 ; MIPSEL-NEXT: and $7, $7, $8 ; MIPSEL-NEXT: sltu $5, $2, $7 ; MIPSEL-NEXT: move $3, $2 ; MIPSEL-NEXT: movn $3, $7, $5 ; MIPSEL-NEXT: and $3, $3, $8 ; MIPSEL-NEXT: and $4, $2, $9 ; MIPSEL-NEXT: or $4, $4, $3 ; MIPSEL-NEXT: sc $4, 0($6) ; MIPSEL-NEXT: beqz $4, $BB6_1 ; MIPSEL-NEXT: nop ; MIPSEL-NEXT: # %bb.2: # %entry ; MIPSEL-NEXT: and $1, $2, $8 ; MIPSEL-NEXT: srlv $1, $1, $10 ; MIPSEL-NEXT: seh $1, $1 ; MIPSEL-NEXT: # %bb.3: # %entry ; MIPSEL-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSEL-NEXT: # %bb.4: # %entry ; MIPSEL-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: addiu $sp, $sp, 8 ; MIPSEL-NEXT: jr $ra ; MIPSEL-NEXT: nop ; ; MIPSELR6-LABEL: test_umax_16: ; MIPSELR6: # %bb.0: # %entry ; MIPSELR6-NEXT: addiu $sp, $sp, -8 ; MIPSELR6-NEXT: .cfi_def_cfa_offset 8 ; MIPSELR6-NEXT: # kill: def $at killed $a1 ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: addiu $1, $zero, -4 ; MIPSELR6-NEXT: and $6, $4, $1 ; MIPSELR6-NEXT: andi $1, $4, 3 ; MIPSELR6-NEXT: sll $10, $1, 3 ; MIPSELR6-NEXT: ori $1, $zero, 65535 ; MIPSELR6-NEXT: sllv $8, $1, $10 ; MIPSELR6-NEXT: nor $9, $zero, $8 ; MIPSELR6-NEXT: sllv $7, $5, $10 ; MIPSELR6-NEXT: $BB6_1: # %entry ; MIPSELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSELR6-NEXT: ll $2, 0($6) ; MIPSELR6-NEXT: and $2, $2, $8 ; MIPSELR6-NEXT: and $7, $7, $8 ; MIPSELR6-NEXT: sltu $5, $2, $7 ; MIPSELR6-NEXT: seleqz $3, $2, $5 ; MIPSELR6-NEXT: selnez $5, $7, $5 ; MIPSELR6-NEXT: or $3, $3, $5 ; MIPSELR6-NEXT: and $3, $3, $8 ; MIPSELR6-NEXT: and $4, $2, $9 ; MIPSELR6-NEXT: or $4, $4, $3 ; MIPSELR6-NEXT: sc $4, 0($6) ; MIPSELR6-NEXT: beqzc $4, $BB6_1 ; MIPSELR6-NEXT: # %bb.2: # %entry ; MIPSELR6-NEXT: and $1, $2, $8 ; MIPSELR6-NEXT: srlv $1, $1, $10 ; MIPSELR6-NEXT: seh $1, $1 ; MIPSELR6-NEXT: # %bb.3: # %entry ; MIPSELR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSELR6-NEXT: # %bb.4: # %entry ; MIPSELR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: addiu $sp, $sp, 8 ; MIPSELR6-NEXT: jrc $ra ; ; MMEL-LABEL: test_umax_16: ; MMEL: # %bb.0: # %entry ; MMEL-NEXT: addiu $sp, $sp, -8 ; MMEL-NEXT: .cfi_def_cfa_offset 8 ; MMEL-NEXT: # kill: def $at killed $a1 ; MMEL-NEXT: sync ; MMEL-NEXT: addiu $1, $zero, -4 ; MMEL-NEXT: and $6, $4, $1 ; MMEL-NEXT: andi $1, $4, 3 ; MMEL-NEXT: sll $10, $1, 3 ; MMEL-NEXT: ori $1, $zero, 65535 ; MMEL-NEXT: sllv $8, $1, $10 ; MMEL-NEXT: nor $9, $zero, $8 ; MMEL-NEXT: sllv $7, $5, $10 ; MMEL-NEXT: $BB6_1: # %entry ; MMEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MMEL-NEXT: ll $2, 0($6) ; MMEL-NEXT: and $2, $2, $8 ; MMEL-NEXT: and $7, $7, $8 ; MMEL-NEXT: sltu $5, $2, $7 ; MMEL-NEXT: or $3, $2, $zero ; MMEL-NEXT: movn $3, $7, $5 ; MMEL-NEXT: and $3, $3, $8 ; MMEL-NEXT: and $4, $2, $9 ; MMEL-NEXT: or $4, $4, $3 ; MMEL-NEXT: sc $4, 0($6) ; MMEL-NEXT: beqzc $4, $BB6_1 ; MMEL-NEXT: # %bb.2: # %entry ; MMEL-NEXT: and $1, $2, $8 ; MMEL-NEXT: srlv $1, $1, $10 ; MMEL-NEXT: seh $1, $1 ; MMEL-NEXT: # %bb.3: # %entry ; MMEL-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMEL-NEXT: # %bb.4: # %entry ; MMEL-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMEL-NEXT: sync ; MMEL-NEXT: addiusp 8 ; MMEL-NEXT: jrc $ra ; ; MMELR6-LABEL: test_umax_16: ; MMELR6: # %bb.0: # %entry ; MMELR6-NEXT: addiu $sp, $sp, -8 ; MMELR6-NEXT: .cfi_def_cfa_offset 8 ; MMELR6-NEXT: # kill: def $at killed $a1 ; MMELR6-NEXT: sync ; MMELR6-NEXT: addiu $1, $zero, -4 ; MMELR6-NEXT: and $6, $4, $1 ; MMELR6-NEXT: andi $1, $4, 3 ; MMELR6-NEXT: sll $10, $1, 3 ; MMELR6-NEXT: ori $1, $zero, 65535 ; MMELR6-NEXT: sllv $8, $1, $10 ; MMELR6-NEXT: nor $9, $zero, $8 ; MMELR6-NEXT: sllv $7, $5, $10 ; MMELR6-NEXT: $BB6_1: # %entry ; MMELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMELR6-NEXT: ll $2, 0($6) ; MMELR6-NEXT: and $2, $2, $8 ; MMELR6-NEXT: and $7, $7, $8 ; MMELR6-NEXT: sltu $5, $2, $7 ; MMELR6-NEXT: seleqz $3, $2, $5 ; MMELR6-NEXT: selnez $5, $7, $5 ; MMELR6-NEXT: or $3, $3, $5 ; MMELR6-NEXT: and $3, $3, $8 ; MMELR6-NEXT: and $4, $2, $9 ; MMELR6-NEXT: or $4, $4, $3 ; MMELR6-NEXT: sc $4, 0($6) ; MMELR6-NEXT: beqc $4, $zero, $BB6_1 ; MMELR6-NEXT: # %bb.2: # %entry ; MMELR6-NEXT: and $1, $2, $8 ; MMELR6-NEXT: srlv $1, $1, $10 ; MMELR6-NEXT: seh $1, $1 ; MMELR6-NEXT: # %bb.3: # %entry ; MMELR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMELR6-NEXT: # %bb.4: # %entry ; MMELR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMELR6-NEXT: sync ; MMELR6-NEXT: addiu $sp, $sp, 8 ; MMELR6-NEXT: jrc $ra ; ; MIPS64-LABEL: test_umax_16: ; MIPS64: # %bb.0: # %entry ; MIPS64-NEXT: daddiu $sp, $sp, -16 ; MIPS64-NEXT: .cfi_def_cfa_offset 16 ; MIPS64-NEXT: move $1, $5 ; MIPS64-NEXT: sync ; MIPS64-NEXT: daddiu $2, $zero, -4 ; MIPS64-NEXT: and $6, $4, $2 ; MIPS64-NEXT: andi $2, $4, 3 ; MIPS64-NEXT: xori $2, $2, 2 ; MIPS64-NEXT: sll $10, $2, 3 ; MIPS64-NEXT: ori $2, $zero, 65535 ; MIPS64-NEXT: sllv $8, $2, $10 ; MIPS64-NEXT: nor $9, $zero, $8 ; MIPS64-NEXT: sllv $7, $1, $10 ; MIPS64-NEXT: .LBB6_1: # %entry ; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64-NEXT: ll $2, 0($6) ; MIPS64-NEXT: sltu $5, $2, $7 ; MIPS64-NEXT: move $3, $2 ; MIPS64-NEXT: movn $3, $7, $5 ; MIPS64-NEXT: and $3, $3, $8 ; MIPS64-NEXT: and $4, $2, $9 ; MIPS64-NEXT: or $4, $4, $3 ; MIPS64-NEXT: sc $4, 0($6) ; MIPS64-NEXT: beqz $4, .LBB6_1 ; MIPS64-NEXT: nop ; MIPS64-NEXT: # %bb.2: # %entry ; MIPS64-NEXT: and $1, $2, $8 ; MIPS64-NEXT: srlv $1, $1, $10 ; MIPS64-NEXT: seh $1, $1 ; MIPS64-NEXT: # %bb.3: # %entry ; MIPS64-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64-NEXT: # %bb.4: # %entry ; MIPS64-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64-NEXT: sync ; MIPS64-NEXT: daddiu $sp, $sp, 16 ; MIPS64-NEXT: jr $ra ; MIPS64-NEXT: nop ; ; MIPS64R6-LABEL: test_umax_16: ; MIPS64R6: # %bb.0: # %entry ; MIPS64R6-NEXT: daddiu $sp, $sp, -16 ; MIPS64R6-NEXT: .cfi_def_cfa_offset 16 ; MIPS64R6-NEXT: move $1, $5 ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: daddiu $2, $zero, -4 ; MIPS64R6-NEXT: and $6, $4, $2 ; MIPS64R6-NEXT: andi $2, $4, 3 ; MIPS64R6-NEXT: xori $2, $2, 2 ; MIPS64R6-NEXT: sll $10, $2, 3 ; MIPS64R6-NEXT: ori $2, $zero, 65535 ; MIPS64R6-NEXT: sllv $8, $2, $10 ; MIPS64R6-NEXT: nor $9, $zero, $8 ; MIPS64R6-NEXT: sllv $7, $1, $10 ; MIPS64R6-NEXT: .LBB6_1: # %entry ; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64R6-NEXT: ll $2, 0($6) ; MIPS64R6-NEXT: sltu $5, $2, $7 ; MIPS64R6-NEXT: seleqz $3, $2, $5 ; MIPS64R6-NEXT: selnez $5, $7, $5 ; MIPS64R6-NEXT: or $3, $3, $5 ; MIPS64R6-NEXT: and $3, $3, $8 ; MIPS64R6-NEXT: and $4, $2, $9 ; MIPS64R6-NEXT: or $4, $4, $3 ; MIPS64R6-NEXT: sc $4, 0($6) ; MIPS64R6-NEXT: beqzc $4, .LBB6_1 ; MIPS64R6-NEXT: # %bb.2: # %entry ; MIPS64R6-NEXT: and $1, $2, $8 ; MIPS64R6-NEXT: srlv $1, $1, $10 ; MIPS64R6-NEXT: seh $1, $1 ; MIPS64R6-NEXT: # %bb.3: # %entry ; MIPS64R6-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64R6-NEXT: # %bb.4: # %entry ; MIPS64R6-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: daddiu $sp, $sp, 16 ; MIPS64R6-NEXT: jrc $ra ; ; MIPS64EL-LABEL: test_umax_16: ; MIPS64EL: # %bb.0: # %entry ; MIPS64EL-NEXT: daddiu $sp, $sp, -16 ; MIPS64EL-NEXT: .cfi_def_cfa_offset 16 ; MIPS64EL-NEXT: move $1, $5 ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: daddiu $2, $zero, -4 ; MIPS64EL-NEXT: and $6, $4, $2 ; MIPS64EL-NEXT: andi $2, $4, 3 ; MIPS64EL-NEXT: sll $10, $2, 3 ; MIPS64EL-NEXT: ori $2, $zero, 65535 ; MIPS64EL-NEXT: sllv $8, $2, $10 ; MIPS64EL-NEXT: nor $9, $zero, $8 ; MIPS64EL-NEXT: sllv $7, $1, $10 ; MIPS64EL-NEXT: .LBB6_1: # %entry ; MIPS64EL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64EL-NEXT: ll $2, 0($6) ; MIPS64EL-NEXT: and $2, $2, $8 ; MIPS64EL-NEXT: and $7, $7, $8 ; MIPS64EL-NEXT: sltu $5, $2, $7 ; MIPS64EL-NEXT: move $3, $2 ; MIPS64EL-NEXT: movn $3, $7, $5 ; MIPS64EL-NEXT: and $3, $3, $8 ; MIPS64EL-NEXT: and $4, $2, $9 ; MIPS64EL-NEXT: or $4, $4, $3 ; MIPS64EL-NEXT: sc $4, 0($6) ; MIPS64EL-NEXT: beqz $4, .LBB6_1 ; MIPS64EL-NEXT: nop ; MIPS64EL-NEXT: # %bb.2: # %entry ; MIPS64EL-NEXT: and $1, $2, $8 ; MIPS64EL-NEXT: srlv $1, $1, $10 ; MIPS64EL-NEXT: seh $1, $1 ; MIPS64EL-NEXT: # %bb.3: # %entry ; MIPS64EL-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64EL-NEXT: # %bb.4: # %entry ; MIPS64EL-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: daddiu $sp, $sp, 16 ; MIPS64EL-NEXT: jr $ra ; MIPS64EL-NEXT: nop ; ; MIPS64ELR6-LABEL: test_umax_16: ; MIPS64ELR6: # %bb.0: # %entry ; MIPS64ELR6-NEXT: daddiu $sp, $sp, -16 ; MIPS64ELR6-NEXT: .cfi_def_cfa_offset 16 ; MIPS64ELR6-NEXT: move $1, $5 ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: daddiu $2, $zero, -4 ; MIPS64ELR6-NEXT: and $6, $4, $2 ; MIPS64ELR6-NEXT: andi $2, $4, 3 ; MIPS64ELR6-NEXT: sll $10, $2, 3 ; MIPS64ELR6-NEXT: ori $2, $zero, 65535 ; MIPS64ELR6-NEXT: sllv $8, $2, $10 ; MIPS64ELR6-NEXT: nor $9, $zero, $8 ; MIPS64ELR6-NEXT: sllv $7, $1, $10 ; MIPS64ELR6-NEXT: .LBB6_1: # %entry ; MIPS64ELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64ELR6-NEXT: ll $2, 0($6) ; MIPS64ELR6-NEXT: and $2, $2, $8 ; MIPS64ELR6-NEXT: and $7, $7, $8 ; MIPS64ELR6-NEXT: sltu $5, $2, $7 ; MIPS64ELR6-NEXT: seleqz $3, $2, $5 ; MIPS64ELR6-NEXT: selnez $5, $7, $5 ; MIPS64ELR6-NEXT: or $3, $3, $5 ; MIPS64ELR6-NEXT: and $3, $3, $8 ; MIPS64ELR6-NEXT: and $4, $2, $9 ; MIPS64ELR6-NEXT: or $4, $4, $3 ; MIPS64ELR6-NEXT: sc $4, 0($6) ; MIPS64ELR6-NEXT: beqzc $4, .LBB6_1 ; MIPS64ELR6-NEXT: # %bb.2: # %entry ; MIPS64ELR6-NEXT: and $1, $2, $8 ; MIPS64ELR6-NEXT: srlv $1, $1, $10 ; MIPS64ELR6-NEXT: seh $1, $1 ; MIPS64ELR6-NEXT: # %bb.3: # %entry ; MIPS64ELR6-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64ELR6-NEXT: # %bb.4: # %entry ; MIPS64ELR6-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: daddiu $sp, $sp, 16 ; MIPS64ELR6-NEXT: jrc $ra entry: %0 = atomicrmw umax i16* %ptr, i16 %val seq_cst ret i16 %0 } define i16 @test_umin_16(i16* nocapture %ptr, i16 signext %val) { ; MIPS-LABEL: test_umin_16: ; MIPS: # %bb.0: # %entry ; MIPS-NEXT: addiu $sp, $sp, -8 ; MIPS-NEXT: .cfi_def_cfa_offset 8 ; MIPS-NEXT: # kill: def $at killed $a1 ; MIPS-NEXT: sync ; MIPS-NEXT: addiu $1, $zero, -4 ; MIPS-NEXT: and $6, $4, $1 ; MIPS-NEXT: andi $1, $4, 3 ; MIPS-NEXT: xori $1, $1, 2 ; MIPS-NEXT: sll $10, $1, 3 ; MIPS-NEXT: ori $1, $zero, 65535 ; MIPS-NEXT: sllv $8, $1, $10 ; MIPS-NEXT: nor $9, $zero, $8 ; MIPS-NEXT: sllv $7, $5, $10 ; MIPS-NEXT: $BB7_1: # %entry ; MIPS-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS-NEXT: ll $2, 0($6) ; MIPS-NEXT: sltu $5, $2, $7 ; MIPS-NEXT: move $3, $2 ; MIPS-NEXT: movz $3, $7, $5 ; MIPS-NEXT: and $3, $3, $8 ; MIPS-NEXT: and $4, $2, $9 ; MIPS-NEXT: or $4, $4, $3 ; MIPS-NEXT: sc $4, 0($6) ; MIPS-NEXT: beqz $4, $BB7_1 ; MIPS-NEXT: nop ; MIPS-NEXT: # %bb.2: # %entry ; MIPS-NEXT: and $1, $2, $8 ; MIPS-NEXT: srlv $1, $1, $10 ; MIPS-NEXT: seh $1, $1 ; MIPS-NEXT: # %bb.3: # %entry ; MIPS-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPS-NEXT: # %bb.4: # %entry ; MIPS-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPS-NEXT: sync ; MIPS-NEXT: addiu $sp, $sp, 8 ; MIPS-NEXT: jr $ra ; MIPS-NEXT: nop ; ; MIPSR6-LABEL: test_umin_16: ; MIPSR6: # %bb.0: # %entry ; MIPSR6-NEXT: addiu $sp, $sp, -8 ; MIPSR6-NEXT: .cfi_def_cfa_offset 8 ; MIPSR6-NEXT: # kill: def $at killed $a1 ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: addiu $1, $zero, -4 ; MIPSR6-NEXT: and $6, $4, $1 ; MIPSR6-NEXT: andi $1, $4, 3 ; MIPSR6-NEXT: xori $1, $1, 2 ; MIPSR6-NEXT: sll $10, $1, 3 ; MIPSR6-NEXT: ori $1, $zero, 65535 ; MIPSR6-NEXT: sllv $8, $1, $10 ; MIPSR6-NEXT: nor $9, $zero, $8 ; MIPSR6-NEXT: sllv $7, $5, $10 ; MIPSR6-NEXT: $BB7_1: # %entry ; MIPSR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSR6-NEXT: ll $2, 0($6) ; MIPSR6-NEXT: sltu $5, $2, $7 ; MIPSR6-NEXT: selnez $3, $2, $5 ; MIPSR6-NEXT: seleqz $5, $7, $5 ; MIPSR6-NEXT: or $3, $3, $5 ; MIPSR6-NEXT: and $3, $3, $8 ; MIPSR6-NEXT: and $4, $2, $9 ; MIPSR6-NEXT: or $4, $4, $3 ; MIPSR6-NEXT: sc $4, 0($6) ; MIPSR6-NEXT: beqzc $4, $BB7_1 ; MIPSR6-NEXT: # %bb.2: # %entry ; MIPSR6-NEXT: and $1, $2, $8 ; MIPSR6-NEXT: srlv $1, $1, $10 ; MIPSR6-NEXT: seh $1, $1 ; MIPSR6-NEXT: # %bb.3: # %entry ; MIPSR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSR6-NEXT: # %bb.4: # %entry ; MIPSR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: addiu $sp, $sp, 8 ; MIPSR6-NEXT: jrc $ra ; ; MM-LABEL: test_umin_16: ; MM: # %bb.0: # %entry ; MM-NEXT: addiu $sp, $sp, -8 ; MM-NEXT: .cfi_def_cfa_offset 8 ; MM-NEXT: # kill: def $at killed $a1 ; MM-NEXT: sync ; MM-NEXT: addiu $1, $zero, -4 ; MM-NEXT: and $6, $4, $1 ; MM-NEXT: andi $1, $4, 3 ; MM-NEXT: xori $1, $1, 2 ; MM-NEXT: sll $10, $1, 3 ; MM-NEXT: ori $1, $zero, 65535 ; MM-NEXT: sllv $8, $1, $10 ; MM-NEXT: nor $9, $zero, $8 ; MM-NEXT: sllv $7, $5, $10 ; MM-NEXT: $BB7_1: # %entry ; MM-NEXT: # =>This Inner Loop Header: Depth=1 ; MM-NEXT: ll $2, 0($6) ; MM-NEXT: sltu $5, $2, $7 ; MM-NEXT: or $3, $2, $zero ; MM-NEXT: movz $3, $7, $5 ; MM-NEXT: and $3, $3, $8 ; MM-NEXT: and $4, $2, $9 ; MM-NEXT: or $4, $4, $3 ; MM-NEXT: sc $4, 0($6) ; MM-NEXT: beqzc $4, $BB7_1 ; MM-NEXT: # %bb.2: # %entry ; MM-NEXT: and $1, $2, $8 ; MM-NEXT: srlv $1, $1, $10 ; MM-NEXT: seh $1, $1 ; MM-NEXT: # %bb.3: # %entry ; MM-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MM-NEXT: # %bb.4: # %entry ; MM-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MM-NEXT: sync ; MM-NEXT: addiusp 8 ; MM-NEXT: jrc $ra ; ; MMR6-LABEL: test_umin_16: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: addiu $sp, $sp, -8 ; MMR6-NEXT: .cfi_def_cfa_offset 8 ; MMR6-NEXT: # kill: def $at killed $a1 ; MMR6-NEXT: sync ; MMR6-NEXT: addiu $1, $zero, -4 ; MMR6-NEXT: and $6, $4, $1 ; MMR6-NEXT: andi $1, $4, 3 ; MMR6-NEXT: xori $1, $1, 2 ; MMR6-NEXT: sll $10, $1, 3 ; MMR6-NEXT: ori $1, $zero, 65535 ; MMR6-NEXT: sllv $8, $1, $10 ; MMR6-NEXT: nor $9, $zero, $8 ; MMR6-NEXT: sllv $7, $5, $10 ; MMR6-NEXT: $BB7_1: # %entry ; MMR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMR6-NEXT: ll $2, 0($6) ; MMR6-NEXT: sltu $5, $2, $7 ; MMR6-NEXT: selnez $3, $2, $5 ; MMR6-NEXT: seleqz $5, $7, $5 ; MMR6-NEXT: or $3, $3, $5 ; MMR6-NEXT: and $3, $3, $8 ; MMR6-NEXT: and $4, $2, $9 ; MMR6-NEXT: or $4, $4, $3 ; MMR6-NEXT: sc $4, 0($6) ; MMR6-NEXT: beqc $4, $zero, $BB7_1 ; MMR6-NEXT: # %bb.2: # %entry ; MMR6-NEXT: and $1, $2, $8 ; MMR6-NEXT: srlv $1, $1, $10 ; MMR6-NEXT: seh $1, $1 ; MMR6-NEXT: # %bb.3: # %entry ; MMR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMR6-NEXT: # %bb.4: # %entry ; MMR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMR6-NEXT: sync ; MMR6-NEXT: addiu $sp, $sp, 8 ; MMR6-NEXT: jrc $ra ; ; MIPSEL-LABEL: test_umin_16: ; MIPSEL: # %bb.0: # %entry ; MIPSEL-NEXT: addiu $sp, $sp, -8 ; MIPSEL-NEXT: .cfi_def_cfa_offset 8 ; MIPSEL-NEXT: # kill: def $at killed $a1 ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: addiu $1, $zero, -4 ; MIPSEL-NEXT: and $6, $4, $1 ; MIPSEL-NEXT: andi $1, $4, 3 ; MIPSEL-NEXT: sll $10, $1, 3 ; MIPSEL-NEXT: ori $1, $zero, 65535 ; MIPSEL-NEXT: sllv $8, $1, $10 ; MIPSEL-NEXT: nor $9, $zero, $8 ; MIPSEL-NEXT: sllv $7, $5, $10 ; MIPSEL-NEXT: $BB7_1: # %entry ; MIPSEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSEL-NEXT: ll $2, 0($6) ; MIPSEL-NEXT: and $2, $2, $8 ; MIPSEL-NEXT: and $7, $7, $8 ; MIPSEL-NEXT: sltu $5, $2, $7 ; MIPSEL-NEXT: move $3, $2 ; MIPSEL-NEXT: movz $3, $7, $5 ; MIPSEL-NEXT: and $3, $3, $8 ; MIPSEL-NEXT: and $4, $2, $9 ; MIPSEL-NEXT: or $4, $4, $3 ; MIPSEL-NEXT: sc $4, 0($6) ; MIPSEL-NEXT: beqz $4, $BB7_1 ; MIPSEL-NEXT: nop ; MIPSEL-NEXT: # %bb.2: # %entry ; MIPSEL-NEXT: and $1, $2, $8 ; MIPSEL-NEXT: srlv $1, $1, $10 ; MIPSEL-NEXT: seh $1, $1 ; MIPSEL-NEXT: # %bb.3: # %entry ; MIPSEL-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSEL-NEXT: # %bb.4: # %entry ; MIPSEL-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: addiu $sp, $sp, 8 ; MIPSEL-NEXT: jr $ra ; MIPSEL-NEXT: nop ; ; MIPSELR6-LABEL: test_umin_16: ; MIPSELR6: # %bb.0: # %entry ; MIPSELR6-NEXT: addiu $sp, $sp, -8 ; MIPSELR6-NEXT: .cfi_def_cfa_offset 8 ; MIPSELR6-NEXT: # kill: def $at killed $a1 ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: addiu $1, $zero, -4 ; MIPSELR6-NEXT: and $6, $4, $1 ; MIPSELR6-NEXT: andi $1, $4, 3 ; MIPSELR6-NEXT: sll $10, $1, 3 ; MIPSELR6-NEXT: ori $1, $zero, 65535 ; MIPSELR6-NEXT: sllv $8, $1, $10 ; MIPSELR6-NEXT: nor $9, $zero, $8 ; MIPSELR6-NEXT: sllv $7, $5, $10 ; MIPSELR6-NEXT: $BB7_1: # %entry ; MIPSELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSELR6-NEXT: ll $2, 0($6) ; MIPSELR6-NEXT: and $2, $2, $8 ; MIPSELR6-NEXT: and $7, $7, $8 ; MIPSELR6-NEXT: sltu $5, $2, $7 ; MIPSELR6-NEXT: selnez $3, $2, $5 ; MIPSELR6-NEXT: seleqz $5, $7, $5 ; MIPSELR6-NEXT: or $3, $3, $5 ; MIPSELR6-NEXT: and $3, $3, $8 ; MIPSELR6-NEXT: and $4, $2, $9 ; MIPSELR6-NEXT: or $4, $4, $3 ; MIPSELR6-NEXT: sc $4, 0($6) ; MIPSELR6-NEXT: beqzc $4, $BB7_1 ; MIPSELR6-NEXT: # %bb.2: # %entry ; MIPSELR6-NEXT: and $1, $2, $8 ; MIPSELR6-NEXT: srlv $1, $1, $10 ; MIPSELR6-NEXT: seh $1, $1 ; MIPSELR6-NEXT: # %bb.3: # %entry ; MIPSELR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSELR6-NEXT: # %bb.4: # %entry ; MIPSELR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: addiu $sp, $sp, 8 ; MIPSELR6-NEXT: jrc $ra ; ; MMEL-LABEL: test_umin_16: ; MMEL: # %bb.0: # %entry ; MMEL-NEXT: addiu $sp, $sp, -8 ; MMEL-NEXT: .cfi_def_cfa_offset 8 ; MMEL-NEXT: # kill: def $at killed $a1 ; MMEL-NEXT: sync ; MMEL-NEXT: addiu $1, $zero, -4 ; MMEL-NEXT: and $6, $4, $1 ; MMEL-NEXT: andi $1, $4, 3 ; MMEL-NEXT: sll $10, $1, 3 ; MMEL-NEXT: ori $1, $zero, 65535 ; MMEL-NEXT: sllv $8, $1, $10 ; MMEL-NEXT: nor $9, $zero, $8 ; MMEL-NEXT: sllv $7, $5, $10 ; MMEL-NEXT: $BB7_1: # %entry ; MMEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MMEL-NEXT: ll $2, 0($6) ; MMEL-NEXT: and $2, $2, $8 ; MMEL-NEXT: and $7, $7, $8 ; MMEL-NEXT: sltu $5, $2, $7 ; MMEL-NEXT: or $3, $2, $zero ; MMEL-NEXT: movz $3, $7, $5 ; MMEL-NEXT: and $3, $3, $8 ; MMEL-NEXT: and $4, $2, $9 ; MMEL-NEXT: or $4, $4, $3 ; MMEL-NEXT: sc $4, 0($6) ; MMEL-NEXT: beqzc $4, $BB7_1 ; MMEL-NEXT: # %bb.2: # %entry ; MMEL-NEXT: and $1, $2, $8 ; MMEL-NEXT: srlv $1, $1, $10 ; MMEL-NEXT: seh $1, $1 ; MMEL-NEXT: # %bb.3: # %entry ; MMEL-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMEL-NEXT: # %bb.4: # %entry ; MMEL-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMEL-NEXT: sync ; MMEL-NEXT: addiusp 8 ; MMEL-NEXT: jrc $ra ; ; MMELR6-LABEL: test_umin_16: ; MMELR6: # %bb.0: # %entry ; MMELR6-NEXT: addiu $sp, $sp, -8 ; MMELR6-NEXT: .cfi_def_cfa_offset 8 ; MMELR6-NEXT: # kill: def $at killed $a1 ; MMELR6-NEXT: sync ; MMELR6-NEXT: addiu $1, $zero, -4 ; MMELR6-NEXT: and $6, $4, $1 ; MMELR6-NEXT: andi $1, $4, 3 ; MMELR6-NEXT: sll $10, $1, 3 ; MMELR6-NEXT: ori $1, $zero, 65535 ; MMELR6-NEXT: sllv $8, $1, $10 ; MMELR6-NEXT: nor $9, $zero, $8 ; MMELR6-NEXT: sllv $7, $5, $10 ; MMELR6-NEXT: $BB7_1: # %entry ; MMELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMELR6-NEXT: ll $2, 0($6) ; MMELR6-NEXT: and $2, $2, $8 ; MMELR6-NEXT: and $7, $7, $8 ; MMELR6-NEXT: sltu $5, $2, $7 ; MMELR6-NEXT: selnez $3, $2, $5 ; MMELR6-NEXT: seleqz $5, $7, $5 ; MMELR6-NEXT: or $3, $3, $5 ; MMELR6-NEXT: and $3, $3, $8 ; MMELR6-NEXT: and $4, $2, $9 ; MMELR6-NEXT: or $4, $4, $3 ; MMELR6-NEXT: sc $4, 0($6) ; MMELR6-NEXT: beqc $4, $zero, $BB7_1 ; MMELR6-NEXT: # %bb.2: # %entry ; MMELR6-NEXT: and $1, $2, $8 ; MMELR6-NEXT: srlv $1, $1, $10 ; MMELR6-NEXT: seh $1, $1 ; MMELR6-NEXT: # %bb.3: # %entry ; MMELR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMELR6-NEXT: # %bb.4: # %entry ; MMELR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMELR6-NEXT: sync ; MMELR6-NEXT: addiu $sp, $sp, 8 ; MMELR6-NEXT: jrc $ra ; ; MIPS64-LABEL: test_umin_16: ; MIPS64: # %bb.0: # %entry ; MIPS64-NEXT: daddiu $sp, $sp, -16 ; MIPS64-NEXT: .cfi_def_cfa_offset 16 ; MIPS64-NEXT: move $1, $5 ; MIPS64-NEXT: sync ; MIPS64-NEXT: daddiu $2, $zero, -4 ; MIPS64-NEXT: and $6, $4, $2 ; MIPS64-NEXT: andi $2, $4, 3 ; MIPS64-NEXT: xori $2, $2, 2 ; MIPS64-NEXT: sll $10, $2, 3 ; MIPS64-NEXT: ori $2, $zero, 65535 ; MIPS64-NEXT: sllv $8, $2, $10 ; MIPS64-NEXT: nor $9, $zero, $8 ; MIPS64-NEXT: sllv $7, $1, $10 ; MIPS64-NEXT: .LBB7_1: # %entry ; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64-NEXT: ll $2, 0($6) ; MIPS64-NEXT: sltu $5, $2, $7 ; MIPS64-NEXT: move $3, $2 ; MIPS64-NEXT: movz $3, $7, $5 ; MIPS64-NEXT: and $3, $3, $8 ; MIPS64-NEXT: and $4, $2, $9 ; MIPS64-NEXT: or $4, $4, $3 ; MIPS64-NEXT: sc $4, 0($6) ; MIPS64-NEXT: beqz $4, .LBB7_1 ; MIPS64-NEXT: nop ; MIPS64-NEXT: # %bb.2: # %entry ; MIPS64-NEXT: and $1, $2, $8 ; MIPS64-NEXT: srlv $1, $1, $10 ; MIPS64-NEXT: seh $1, $1 ; MIPS64-NEXT: # %bb.3: # %entry ; MIPS64-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64-NEXT: # %bb.4: # %entry ; MIPS64-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64-NEXT: sync ; MIPS64-NEXT: daddiu $sp, $sp, 16 ; MIPS64-NEXT: jr $ra ; MIPS64-NEXT: nop ; ; MIPS64R6-LABEL: test_umin_16: ; MIPS64R6: # %bb.0: # %entry ; MIPS64R6-NEXT: daddiu $sp, $sp, -16 ; MIPS64R6-NEXT: .cfi_def_cfa_offset 16 ; MIPS64R6-NEXT: move $1, $5 ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: daddiu $2, $zero, -4 ; MIPS64R6-NEXT: and $6, $4, $2 ; MIPS64R6-NEXT: andi $2, $4, 3 ; MIPS64R6-NEXT: xori $2, $2, 2 ; MIPS64R6-NEXT: sll $10, $2, 3 ; MIPS64R6-NEXT: ori $2, $zero, 65535 ; MIPS64R6-NEXT: sllv $8, $2, $10 ; MIPS64R6-NEXT: nor $9, $zero, $8 ; MIPS64R6-NEXT: sllv $7, $1, $10 ; MIPS64R6-NEXT: .LBB7_1: # %entry ; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64R6-NEXT: ll $2, 0($6) ; MIPS64R6-NEXT: sltu $5, $2, $7 ; MIPS64R6-NEXT: selnez $3, $2, $5 ; MIPS64R6-NEXT: seleqz $5, $7, $5 ; MIPS64R6-NEXT: or $3, $3, $5 ; MIPS64R6-NEXT: and $3, $3, $8 ; MIPS64R6-NEXT: and $4, $2, $9 ; MIPS64R6-NEXT: or $4, $4, $3 ; MIPS64R6-NEXT: sc $4, 0($6) ; MIPS64R6-NEXT: beqzc $4, .LBB7_1 ; MIPS64R6-NEXT: # %bb.2: # %entry ; MIPS64R6-NEXT: and $1, $2, $8 ; MIPS64R6-NEXT: srlv $1, $1, $10 ; MIPS64R6-NEXT: seh $1, $1 ; MIPS64R6-NEXT: # %bb.3: # %entry ; MIPS64R6-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64R6-NEXT: # %bb.4: # %entry ; MIPS64R6-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: daddiu $sp, $sp, 16 ; MIPS64R6-NEXT: jrc $ra ; ; MIPS64EL-LABEL: test_umin_16: ; MIPS64EL: # %bb.0: # %entry ; MIPS64EL-NEXT: daddiu $sp, $sp, -16 ; MIPS64EL-NEXT: .cfi_def_cfa_offset 16 ; MIPS64EL-NEXT: move $1, $5 ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: daddiu $2, $zero, -4 ; MIPS64EL-NEXT: and $6, $4, $2 ; MIPS64EL-NEXT: andi $2, $4, 3 ; MIPS64EL-NEXT: sll $10, $2, 3 ; MIPS64EL-NEXT: ori $2, $zero, 65535 ; MIPS64EL-NEXT: sllv $8, $2, $10 ; MIPS64EL-NEXT: nor $9, $zero, $8 ; MIPS64EL-NEXT: sllv $7, $1, $10 ; MIPS64EL-NEXT: .LBB7_1: # %entry ; MIPS64EL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64EL-NEXT: ll $2, 0($6) ; MIPS64EL-NEXT: and $2, $2, $8 ; MIPS64EL-NEXT: and $7, $7, $8 ; MIPS64EL-NEXT: sltu $5, $2, $7 ; MIPS64EL-NEXT: move $3, $2 ; MIPS64EL-NEXT: movz $3, $7, $5 ; MIPS64EL-NEXT: and $3, $3, $8 ; MIPS64EL-NEXT: and $4, $2, $9 ; MIPS64EL-NEXT: or $4, $4, $3 ; MIPS64EL-NEXT: sc $4, 0($6) ; MIPS64EL-NEXT: beqz $4, .LBB7_1 ; MIPS64EL-NEXT: nop ; MIPS64EL-NEXT: # %bb.2: # %entry ; MIPS64EL-NEXT: and $1, $2, $8 ; MIPS64EL-NEXT: srlv $1, $1, $10 ; MIPS64EL-NEXT: seh $1, $1 ; MIPS64EL-NEXT: # %bb.3: # %entry ; MIPS64EL-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64EL-NEXT: # %bb.4: # %entry ; MIPS64EL-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: daddiu $sp, $sp, 16 ; MIPS64EL-NEXT: jr $ra ; MIPS64EL-NEXT: nop ; ; MIPS64ELR6-LABEL: test_umin_16: ; MIPS64ELR6: # %bb.0: # %entry ; MIPS64ELR6-NEXT: daddiu $sp, $sp, -16 ; MIPS64ELR6-NEXT: .cfi_def_cfa_offset 16 ; MIPS64ELR6-NEXT: move $1, $5 ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: daddiu $2, $zero, -4 ; MIPS64ELR6-NEXT: and $6, $4, $2 ; MIPS64ELR6-NEXT: andi $2, $4, 3 ; MIPS64ELR6-NEXT: sll $10, $2, 3 ; MIPS64ELR6-NEXT: ori $2, $zero, 65535 ; MIPS64ELR6-NEXT: sllv $8, $2, $10 ; MIPS64ELR6-NEXT: nor $9, $zero, $8 ; MIPS64ELR6-NEXT: sllv $7, $1, $10 ; MIPS64ELR6-NEXT: .LBB7_1: # %entry ; MIPS64ELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64ELR6-NEXT: ll $2, 0($6) ; MIPS64ELR6-NEXT: and $2, $2, $8 ; MIPS64ELR6-NEXT: and $7, $7, $8 ; MIPS64ELR6-NEXT: sltu $5, $2, $7 ; MIPS64ELR6-NEXT: selnez $3, $2, $5 ; MIPS64ELR6-NEXT: seleqz $5, $7, $5 ; MIPS64ELR6-NEXT: or $3, $3, $5 ; MIPS64ELR6-NEXT: and $3, $3, $8 ; MIPS64ELR6-NEXT: and $4, $2, $9 ; MIPS64ELR6-NEXT: or $4, $4, $3 ; MIPS64ELR6-NEXT: sc $4, 0($6) ; MIPS64ELR6-NEXT: beqzc $4, .LBB7_1 ; MIPS64ELR6-NEXT: # %bb.2: # %entry ; MIPS64ELR6-NEXT: and $1, $2, $8 ; MIPS64ELR6-NEXT: srlv $1, $1, $10 ; MIPS64ELR6-NEXT: seh $1, $1 ; MIPS64ELR6-NEXT: # %bb.3: # %entry ; MIPS64ELR6-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64ELR6-NEXT: # %bb.4: # %entry ; MIPS64ELR6-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: daddiu $sp, $sp, 16 ; MIPS64ELR6-NEXT: jrc $ra entry: %0 = atomicrmw umin i16* %ptr, i16 %val seq_cst ret i16 %0 } define i8 @test_max_8(i8* nocapture %ptr, i8 signext %val) { ; MIPS-LABEL: test_max_8: ; MIPS: # %bb.0: # %entry ; MIPS-NEXT: addiu $sp, $sp, -8 ; MIPS-NEXT: .cfi_def_cfa_offset 8 ; MIPS-NEXT: # kill: def $at killed $a1 ; MIPS-NEXT: sync ; MIPS-NEXT: addiu $1, $zero, -4 ; MIPS-NEXT: and $6, $4, $1 ; MIPS-NEXT: andi $1, $4, 3 ; MIPS-NEXT: xori $1, $1, 3 ; MIPS-NEXT: sll $10, $1, 3 ; MIPS-NEXT: ori $1, $zero, 255 ; MIPS-NEXT: sllv $8, $1, $10 ; MIPS-NEXT: nor $9, $zero, $8 ; MIPS-NEXT: sllv $7, $5, $10 ; MIPS-NEXT: $BB8_1: # %entry ; MIPS-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS-NEXT: ll $2, 0($6) ; MIPS-NEXT: slt $5, $2, $7 ; MIPS-NEXT: move $3, $2 ; MIPS-NEXT: movn $3, $7, $5 ; MIPS-NEXT: and $3, $3, $8 ; MIPS-NEXT: and $4, $2, $9 ; MIPS-NEXT: or $4, $4, $3 ; MIPS-NEXT: sc $4, 0($6) ; MIPS-NEXT: beqz $4, $BB8_1 ; MIPS-NEXT: nop ; MIPS-NEXT: # %bb.2: # %entry ; MIPS-NEXT: and $1, $2, $8 ; MIPS-NEXT: srlv $1, $1, $10 ; MIPS-NEXT: seh $1, $1 ; MIPS-NEXT: # %bb.3: # %entry ; MIPS-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPS-NEXT: # %bb.4: # %entry ; MIPS-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPS-NEXT: sync ; MIPS-NEXT: addiu $sp, $sp, 8 ; MIPS-NEXT: jr $ra ; MIPS-NEXT: nop ; ; MIPSR6-LABEL: test_max_8: ; MIPSR6: # %bb.0: # %entry ; MIPSR6-NEXT: addiu $sp, $sp, -8 ; MIPSR6-NEXT: .cfi_def_cfa_offset 8 ; MIPSR6-NEXT: # kill: def $at killed $a1 ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: addiu $1, $zero, -4 ; MIPSR6-NEXT: and $6, $4, $1 ; MIPSR6-NEXT: andi $1, $4, 3 ; MIPSR6-NEXT: xori $1, $1, 3 ; MIPSR6-NEXT: sll $10, $1, 3 ; MIPSR6-NEXT: ori $1, $zero, 255 ; MIPSR6-NEXT: sllv $8, $1, $10 ; MIPSR6-NEXT: nor $9, $zero, $8 ; MIPSR6-NEXT: sllv $7, $5, $10 ; MIPSR6-NEXT: $BB8_1: # %entry ; MIPSR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSR6-NEXT: ll $2, 0($6) ; MIPSR6-NEXT: slt $5, $2, $7 ; MIPSR6-NEXT: seleqz $3, $2, $5 ; MIPSR6-NEXT: selnez $5, $7, $5 ; MIPSR6-NEXT: or $3, $3, $5 ; MIPSR6-NEXT: and $3, $3, $8 ; MIPSR6-NEXT: and $4, $2, $9 ; MIPSR6-NEXT: or $4, $4, $3 ; MIPSR6-NEXT: sc $4, 0($6) ; MIPSR6-NEXT: beqzc $4, $BB8_1 ; MIPSR6-NEXT: # %bb.2: # %entry ; MIPSR6-NEXT: and $1, $2, $8 ; MIPSR6-NEXT: srlv $1, $1, $10 ; MIPSR6-NEXT: seh $1, $1 ; MIPSR6-NEXT: # %bb.3: # %entry ; MIPSR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSR6-NEXT: # %bb.4: # %entry ; MIPSR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: addiu $sp, $sp, 8 ; MIPSR6-NEXT: jrc $ra ; ; MM-LABEL: test_max_8: ; MM: # %bb.0: # %entry ; MM-NEXT: addiu $sp, $sp, -8 ; MM-NEXT: .cfi_def_cfa_offset 8 ; MM-NEXT: # kill: def $at killed $a1 ; MM-NEXT: sync ; MM-NEXT: addiu $1, $zero, -4 ; MM-NEXT: and $6, $4, $1 ; MM-NEXT: andi $1, $4, 3 ; MM-NEXT: xori $1, $1, 3 ; MM-NEXT: sll $10, $1, 3 ; MM-NEXT: ori $1, $zero, 255 ; MM-NEXT: sllv $8, $1, $10 ; MM-NEXT: nor $9, $zero, $8 ; MM-NEXT: sllv $7, $5, $10 ; MM-NEXT: $BB8_1: # %entry ; MM-NEXT: # =>This Inner Loop Header: Depth=1 ; MM-NEXT: ll $2, 0($6) ; MM-NEXT: slt $5, $2, $7 ; MM-NEXT: or $3, $2, $zero ; MM-NEXT: movn $3, $7, $5 ; MM-NEXT: and $3, $3, $8 ; MM-NEXT: and $4, $2, $9 ; MM-NEXT: or $4, $4, $3 ; MM-NEXT: sc $4, 0($6) ; MM-NEXT: beqzc $4, $BB8_1 ; MM-NEXT: # %bb.2: # %entry ; MM-NEXT: and $1, $2, $8 ; MM-NEXT: srlv $1, $1, $10 ; MM-NEXT: seh $1, $1 ; MM-NEXT: # %bb.3: # %entry ; MM-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MM-NEXT: # %bb.4: # %entry ; MM-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MM-NEXT: sync ; MM-NEXT: addiusp 8 ; MM-NEXT: jrc $ra ; ; MMR6-LABEL: test_max_8: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: addiu $sp, $sp, -8 ; MMR6-NEXT: .cfi_def_cfa_offset 8 ; MMR6-NEXT: # kill: def $at killed $a1 ; MMR6-NEXT: sync ; MMR6-NEXT: addiu $1, $zero, -4 ; MMR6-NEXT: and $6, $4, $1 ; MMR6-NEXT: andi $1, $4, 3 ; MMR6-NEXT: xori $1, $1, 3 ; MMR6-NEXT: sll $10, $1, 3 ; MMR6-NEXT: ori $1, $zero, 255 ; MMR6-NEXT: sllv $8, $1, $10 ; MMR6-NEXT: nor $9, $zero, $8 ; MMR6-NEXT: sllv $7, $5, $10 ; MMR6-NEXT: $BB8_1: # %entry ; MMR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMR6-NEXT: ll $2, 0($6) ; MMR6-NEXT: slt $5, $2, $7 ; MMR6-NEXT: seleqz $3, $2, $5 ; MMR6-NEXT: selnez $5, $7, $5 ; MMR6-NEXT: or $3, $3, $5 ; MMR6-NEXT: and $3, $3, $8 ; MMR6-NEXT: and $4, $2, $9 ; MMR6-NEXT: or $4, $4, $3 ; MMR6-NEXT: sc $4, 0($6) ; MMR6-NEXT: beqc $4, $zero, $BB8_1 ; MMR6-NEXT: # %bb.2: # %entry ; MMR6-NEXT: and $1, $2, $8 ; MMR6-NEXT: srlv $1, $1, $10 ; MMR6-NEXT: seh $1, $1 ; MMR6-NEXT: # %bb.3: # %entry ; MMR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMR6-NEXT: # %bb.4: # %entry ; MMR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMR6-NEXT: sync ; MMR6-NEXT: addiu $sp, $sp, 8 ; MMR6-NEXT: jrc $ra ; ; MIPSEL-LABEL: test_max_8: ; MIPSEL: # %bb.0: # %entry ; MIPSEL-NEXT: addiu $sp, $sp, -8 ; MIPSEL-NEXT: .cfi_def_cfa_offset 8 ; MIPSEL-NEXT: # kill: def $at killed $a1 ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: addiu $1, $zero, -4 ; MIPSEL-NEXT: and $6, $4, $1 ; MIPSEL-NEXT: andi $1, $4, 3 ; MIPSEL-NEXT: sll $10, $1, 3 ; MIPSEL-NEXT: ori $1, $zero, 255 ; MIPSEL-NEXT: sllv $8, $1, $10 ; MIPSEL-NEXT: nor $9, $zero, $8 ; MIPSEL-NEXT: sllv $7, $5, $10 ; MIPSEL-NEXT: $BB8_1: # %entry ; MIPSEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSEL-NEXT: ll $2, 0($6) ; MIPSEL-NEXT: and $2, $2, $8 ; MIPSEL-NEXT: and $7, $7, $8 ; MIPSEL-NEXT: slt $5, $2, $7 ; MIPSEL-NEXT: move $3, $2 ; MIPSEL-NEXT: movn $3, $7, $5 ; MIPSEL-NEXT: and $3, $3, $8 ; MIPSEL-NEXT: and $4, $2, $9 ; MIPSEL-NEXT: or $4, $4, $3 ; MIPSEL-NEXT: sc $4, 0($6) ; MIPSEL-NEXT: beqz $4, $BB8_1 ; MIPSEL-NEXT: nop ; MIPSEL-NEXT: # %bb.2: # %entry ; MIPSEL-NEXT: and $1, $2, $8 ; MIPSEL-NEXT: srlv $1, $1, $10 ; MIPSEL-NEXT: seh $1, $1 ; MIPSEL-NEXT: # %bb.3: # %entry ; MIPSEL-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSEL-NEXT: # %bb.4: # %entry ; MIPSEL-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: addiu $sp, $sp, 8 ; MIPSEL-NEXT: jr $ra ; MIPSEL-NEXT: nop ; ; MIPSELR6-LABEL: test_max_8: ; MIPSELR6: # %bb.0: # %entry ; MIPSELR6-NEXT: addiu $sp, $sp, -8 ; MIPSELR6-NEXT: .cfi_def_cfa_offset 8 ; MIPSELR6-NEXT: # kill: def $at killed $a1 ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: addiu $1, $zero, -4 ; MIPSELR6-NEXT: and $6, $4, $1 ; MIPSELR6-NEXT: andi $1, $4, 3 ; MIPSELR6-NEXT: sll $10, $1, 3 ; MIPSELR6-NEXT: ori $1, $zero, 255 ; MIPSELR6-NEXT: sllv $8, $1, $10 ; MIPSELR6-NEXT: nor $9, $zero, $8 ; MIPSELR6-NEXT: sllv $7, $5, $10 ; MIPSELR6-NEXT: $BB8_1: # %entry ; MIPSELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSELR6-NEXT: ll $2, 0($6) ; MIPSELR6-NEXT: and $2, $2, $8 ; MIPSELR6-NEXT: and $7, $7, $8 ; MIPSELR6-NEXT: slt $5, $2, $7 ; MIPSELR6-NEXT: seleqz $3, $2, $5 ; MIPSELR6-NEXT: selnez $5, $7, $5 ; MIPSELR6-NEXT: or $3, $3, $5 ; MIPSELR6-NEXT: and $3, $3, $8 ; MIPSELR6-NEXT: and $4, $2, $9 ; MIPSELR6-NEXT: or $4, $4, $3 ; MIPSELR6-NEXT: sc $4, 0($6) ; MIPSELR6-NEXT: beqzc $4, $BB8_1 ; MIPSELR6-NEXT: # %bb.2: # %entry ; MIPSELR6-NEXT: and $1, $2, $8 ; MIPSELR6-NEXT: srlv $1, $1, $10 ; MIPSELR6-NEXT: seh $1, $1 ; MIPSELR6-NEXT: # %bb.3: # %entry ; MIPSELR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSELR6-NEXT: # %bb.4: # %entry ; MIPSELR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: addiu $sp, $sp, 8 ; MIPSELR6-NEXT: jrc $ra ; ; MMEL-LABEL: test_max_8: ; MMEL: # %bb.0: # %entry ; MMEL-NEXT: addiu $sp, $sp, -8 ; MMEL-NEXT: .cfi_def_cfa_offset 8 ; MMEL-NEXT: # kill: def $at killed $a1 ; MMEL-NEXT: sync ; MMEL-NEXT: addiu $1, $zero, -4 ; MMEL-NEXT: and $6, $4, $1 ; MMEL-NEXT: andi $1, $4, 3 ; MMEL-NEXT: sll $10, $1, 3 ; MMEL-NEXT: ori $1, $zero, 255 ; MMEL-NEXT: sllv $8, $1, $10 ; MMEL-NEXT: nor $9, $zero, $8 ; MMEL-NEXT: sllv $7, $5, $10 ; MMEL-NEXT: $BB8_1: # %entry ; MMEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MMEL-NEXT: ll $2, 0($6) ; MMEL-NEXT: and $2, $2, $8 ; MMEL-NEXT: and $7, $7, $8 ; MMEL-NEXT: slt $5, $2, $7 ; MMEL-NEXT: or $3, $2, $zero ; MMEL-NEXT: movn $3, $7, $5 ; MMEL-NEXT: and $3, $3, $8 ; MMEL-NEXT: and $4, $2, $9 ; MMEL-NEXT: or $4, $4, $3 ; MMEL-NEXT: sc $4, 0($6) ; MMEL-NEXT: beqzc $4, $BB8_1 ; MMEL-NEXT: # %bb.2: # %entry ; MMEL-NEXT: and $1, $2, $8 ; MMEL-NEXT: srlv $1, $1, $10 ; MMEL-NEXT: seh $1, $1 ; MMEL-NEXT: # %bb.3: # %entry ; MMEL-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMEL-NEXT: # %bb.4: # %entry ; MMEL-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMEL-NEXT: sync ; MMEL-NEXT: addiusp 8 ; MMEL-NEXT: jrc $ra ; ; MMELR6-LABEL: test_max_8: ; MMELR6: # %bb.0: # %entry ; MMELR6-NEXT: addiu $sp, $sp, -8 ; MMELR6-NEXT: .cfi_def_cfa_offset 8 ; MMELR6-NEXT: # kill: def $at killed $a1 ; MMELR6-NEXT: sync ; MMELR6-NEXT: addiu $1, $zero, -4 ; MMELR6-NEXT: and $6, $4, $1 ; MMELR6-NEXT: andi $1, $4, 3 ; MMELR6-NEXT: sll $10, $1, 3 ; MMELR6-NEXT: ori $1, $zero, 255 ; MMELR6-NEXT: sllv $8, $1, $10 ; MMELR6-NEXT: nor $9, $zero, $8 ; MMELR6-NEXT: sllv $7, $5, $10 ; MMELR6-NEXT: $BB8_1: # %entry ; MMELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMELR6-NEXT: ll $2, 0($6) ; MMELR6-NEXT: and $2, $2, $8 ; MMELR6-NEXT: and $7, $7, $8 ; MMELR6-NEXT: slt $5, $2, $7 ; MMELR6-NEXT: seleqz $3, $2, $5 ; MMELR6-NEXT: selnez $5, $7, $5 ; MMELR6-NEXT: or $3, $3, $5 ; MMELR6-NEXT: and $3, $3, $8 ; MMELR6-NEXT: and $4, $2, $9 ; MMELR6-NEXT: or $4, $4, $3 ; MMELR6-NEXT: sc $4, 0($6) ; MMELR6-NEXT: beqc $4, $zero, $BB8_1 ; MMELR6-NEXT: # %bb.2: # %entry ; MMELR6-NEXT: and $1, $2, $8 ; MMELR6-NEXT: srlv $1, $1, $10 ; MMELR6-NEXT: seh $1, $1 ; MMELR6-NEXT: # %bb.3: # %entry ; MMELR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMELR6-NEXT: # %bb.4: # %entry ; MMELR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMELR6-NEXT: sync ; MMELR6-NEXT: addiu $sp, $sp, 8 ; MMELR6-NEXT: jrc $ra ; ; MIPS64-LABEL: test_max_8: ; MIPS64: # %bb.0: # %entry ; MIPS64-NEXT: daddiu $sp, $sp, -16 ; MIPS64-NEXT: .cfi_def_cfa_offset 16 ; MIPS64-NEXT: move $1, $5 ; MIPS64-NEXT: sync ; MIPS64-NEXT: daddiu $2, $zero, -4 ; MIPS64-NEXT: and $6, $4, $2 ; MIPS64-NEXT: andi $2, $4, 3 ; MIPS64-NEXT: xori $2, $2, 3 ; MIPS64-NEXT: sll $10, $2, 3 ; MIPS64-NEXT: ori $2, $zero, 255 ; MIPS64-NEXT: sllv $8, $2, $10 ; MIPS64-NEXT: nor $9, $zero, $8 ; MIPS64-NEXT: sllv $7, $1, $10 ; MIPS64-NEXT: .LBB8_1: # %entry ; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64-NEXT: ll $2, 0($6) ; MIPS64-NEXT: slt $5, $2, $7 ; MIPS64-NEXT: move $3, $2 ; MIPS64-NEXT: movn $3, $7, $5 ; MIPS64-NEXT: and $3, $3, $8 ; MIPS64-NEXT: and $4, $2, $9 ; MIPS64-NEXT: or $4, $4, $3 ; MIPS64-NEXT: sc $4, 0($6) ; MIPS64-NEXT: beqz $4, .LBB8_1 ; MIPS64-NEXT: nop ; MIPS64-NEXT: # %bb.2: # %entry ; MIPS64-NEXT: and $1, $2, $8 ; MIPS64-NEXT: srlv $1, $1, $10 ; MIPS64-NEXT: seh $1, $1 ; MIPS64-NEXT: # %bb.3: # %entry ; MIPS64-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64-NEXT: # %bb.4: # %entry ; MIPS64-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64-NEXT: sync ; MIPS64-NEXT: daddiu $sp, $sp, 16 ; MIPS64-NEXT: jr $ra ; MIPS64-NEXT: nop ; ; MIPS64R6-LABEL: test_max_8: ; MIPS64R6: # %bb.0: # %entry ; MIPS64R6-NEXT: daddiu $sp, $sp, -16 ; MIPS64R6-NEXT: .cfi_def_cfa_offset 16 ; MIPS64R6-NEXT: move $1, $5 ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: daddiu $2, $zero, -4 ; MIPS64R6-NEXT: and $6, $4, $2 ; MIPS64R6-NEXT: andi $2, $4, 3 ; MIPS64R6-NEXT: xori $2, $2, 3 ; MIPS64R6-NEXT: sll $10, $2, 3 ; MIPS64R6-NEXT: ori $2, $zero, 255 ; MIPS64R6-NEXT: sllv $8, $2, $10 ; MIPS64R6-NEXT: nor $9, $zero, $8 ; MIPS64R6-NEXT: sllv $7, $1, $10 ; MIPS64R6-NEXT: .LBB8_1: # %entry ; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64R6-NEXT: ll $2, 0($6) ; MIPS64R6-NEXT: slt $5, $2, $7 ; MIPS64R6-NEXT: seleqz $3, $2, $5 ; MIPS64R6-NEXT: selnez $5, $7, $5 ; MIPS64R6-NEXT: or $3, $3, $5 ; MIPS64R6-NEXT: and $3, $3, $8 ; MIPS64R6-NEXT: and $4, $2, $9 ; MIPS64R6-NEXT: or $4, $4, $3 ; MIPS64R6-NEXT: sc $4, 0($6) ; MIPS64R6-NEXT: beqzc $4, .LBB8_1 ; MIPS64R6-NEXT: # %bb.2: # %entry ; MIPS64R6-NEXT: and $1, $2, $8 ; MIPS64R6-NEXT: srlv $1, $1, $10 ; MIPS64R6-NEXT: seh $1, $1 ; MIPS64R6-NEXT: # %bb.3: # %entry ; MIPS64R6-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64R6-NEXT: # %bb.4: # %entry ; MIPS64R6-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: daddiu $sp, $sp, 16 ; MIPS64R6-NEXT: jrc $ra ; ; MIPS64EL-LABEL: test_max_8: ; MIPS64EL: # %bb.0: # %entry ; MIPS64EL-NEXT: daddiu $sp, $sp, -16 ; MIPS64EL-NEXT: .cfi_def_cfa_offset 16 ; MIPS64EL-NEXT: move $1, $5 ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: daddiu $2, $zero, -4 ; MIPS64EL-NEXT: and $6, $4, $2 ; MIPS64EL-NEXT: andi $2, $4, 3 ; MIPS64EL-NEXT: sll $10, $2, 3 ; MIPS64EL-NEXT: ori $2, $zero, 255 ; MIPS64EL-NEXT: sllv $8, $2, $10 ; MIPS64EL-NEXT: nor $9, $zero, $8 ; MIPS64EL-NEXT: sllv $7, $1, $10 ; MIPS64EL-NEXT: .LBB8_1: # %entry ; MIPS64EL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64EL-NEXT: ll $2, 0($6) ; MIPS64EL-NEXT: and $2, $2, $8 ; MIPS64EL-NEXT: and $7, $7, $8 ; MIPS64EL-NEXT: slt $5, $2, $7 ; MIPS64EL-NEXT: move $3, $2 ; MIPS64EL-NEXT: movn $3, $7, $5 ; MIPS64EL-NEXT: and $3, $3, $8 ; MIPS64EL-NEXT: and $4, $2, $9 ; MIPS64EL-NEXT: or $4, $4, $3 ; MIPS64EL-NEXT: sc $4, 0($6) ; MIPS64EL-NEXT: beqz $4, .LBB8_1 ; MIPS64EL-NEXT: nop ; MIPS64EL-NEXT: # %bb.2: # %entry ; MIPS64EL-NEXT: and $1, $2, $8 ; MIPS64EL-NEXT: srlv $1, $1, $10 ; MIPS64EL-NEXT: seh $1, $1 ; MIPS64EL-NEXT: # %bb.3: # %entry ; MIPS64EL-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64EL-NEXT: # %bb.4: # %entry ; MIPS64EL-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: daddiu $sp, $sp, 16 ; MIPS64EL-NEXT: jr $ra ; MIPS64EL-NEXT: nop ; ; MIPS64ELR6-LABEL: test_max_8: ; MIPS64ELR6: # %bb.0: # %entry ; MIPS64ELR6-NEXT: daddiu $sp, $sp, -16 ; MIPS64ELR6-NEXT: .cfi_def_cfa_offset 16 ; MIPS64ELR6-NEXT: move $1, $5 ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: daddiu $2, $zero, -4 ; MIPS64ELR6-NEXT: and $6, $4, $2 ; MIPS64ELR6-NEXT: andi $2, $4, 3 ; MIPS64ELR6-NEXT: sll $10, $2, 3 ; MIPS64ELR6-NEXT: ori $2, $zero, 255 ; MIPS64ELR6-NEXT: sllv $8, $2, $10 ; MIPS64ELR6-NEXT: nor $9, $zero, $8 ; MIPS64ELR6-NEXT: sllv $7, $1, $10 ; MIPS64ELR6-NEXT: .LBB8_1: # %entry ; MIPS64ELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64ELR6-NEXT: ll $2, 0($6) ; MIPS64ELR6-NEXT: and $2, $2, $8 ; MIPS64ELR6-NEXT: and $7, $7, $8 ; MIPS64ELR6-NEXT: slt $5, $2, $7 ; MIPS64ELR6-NEXT: seleqz $3, $2, $5 ; MIPS64ELR6-NEXT: selnez $5, $7, $5 ; MIPS64ELR6-NEXT: or $3, $3, $5 ; MIPS64ELR6-NEXT: and $3, $3, $8 ; MIPS64ELR6-NEXT: and $4, $2, $9 ; MIPS64ELR6-NEXT: or $4, $4, $3 ; MIPS64ELR6-NEXT: sc $4, 0($6) ; MIPS64ELR6-NEXT: beqzc $4, .LBB8_1 ; MIPS64ELR6-NEXT: # %bb.2: # %entry ; MIPS64ELR6-NEXT: and $1, $2, $8 ; MIPS64ELR6-NEXT: srlv $1, $1, $10 ; MIPS64ELR6-NEXT: seh $1, $1 ; MIPS64ELR6-NEXT: # %bb.3: # %entry ; MIPS64ELR6-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64ELR6-NEXT: # %bb.4: # %entry ; MIPS64ELR6-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: daddiu $sp, $sp, 16 ; MIPS64ELR6-NEXT: jrc $ra entry: %0 = atomicrmw max i8* %ptr, i8 %val seq_cst ret i8 %0 } define i8 @test_min_8(i8* nocapture %ptr, i8 signext %val) { ; MIPS-LABEL: test_min_8: ; MIPS: # %bb.0: # %entry ; MIPS-NEXT: addiu $sp, $sp, -8 ; MIPS-NEXT: .cfi_def_cfa_offset 8 ; MIPS-NEXT: # kill: def $at killed $a1 ; MIPS-NEXT: sync ; MIPS-NEXT: addiu $1, $zero, -4 ; MIPS-NEXT: and $6, $4, $1 ; MIPS-NEXT: andi $1, $4, 3 ; MIPS-NEXT: xori $1, $1, 3 ; MIPS-NEXT: sll $10, $1, 3 ; MIPS-NEXT: ori $1, $zero, 255 ; MIPS-NEXT: sllv $8, $1, $10 ; MIPS-NEXT: nor $9, $zero, $8 ; MIPS-NEXT: sllv $7, $5, $10 ; MIPS-NEXT: $BB9_1: # %entry ; MIPS-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS-NEXT: ll $2, 0($6) ; MIPS-NEXT: slt $5, $2, $7 ; MIPS-NEXT: move $3, $2 ; MIPS-NEXT: movz $3, $7, $5 ; MIPS-NEXT: and $3, $3, $8 ; MIPS-NEXT: and $4, $2, $9 ; MIPS-NEXT: or $4, $4, $3 ; MIPS-NEXT: sc $4, 0($6) ; MIPS-NEXT: beqz $4, $BB9_1 ; MIPS-NEXT: nop ; MIPS-NEXT: # %bb.2: # %entry ; MIPS-NEXT: and $1, $2, $8 ; MIPS-NEXT: srlv $1, $1, $10 ; MIPS-NEXT: seh $1, $1 ; MIPS-NEXT: # %bb.3: # %entry ; MIPS-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPS-NEXT: # %bb.4: # %entry ; MIPS-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPS-NEXT: sync ; MIPS-NEXT: addiu $sp, $sp, 8 ; MIPS-NEXT: jr $ra ; MIPS-NEXT: nop ; ; MIPSR6-LABEL: test_min_8: ; MIPSR6: # %bb.0: # %entry ; MIPSR6-NEXT: addiu $sp, $sp, -8 ; MIPSR6-NEXT: .cfi_def_cfa_offset 8 ; MIPSR6-NEXT: # kill: def $at killed $a1 ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: addiu $1, $zero, -4 ; MIPSR6-NEXT: and $6, $4, $1 ; MIPSR6-NEXT: andi $1, $4, 3 ; MIPSR6-NEXT: xori $1, $1, 3 ; MIPSR6-NEXT: sll $10, $1, 3 ; MIPSR6-NEXT: ori $1, $zero, 255 ; MIPSR6-NEXT: sllv $8, $1, $10 ; MIPSR6-NEXT: nor $9, $zero, $8 ; MIPSR6-NEXT: sllv $7, $5, $10 ; MIPSR6-NEXT: $BB9_1: # %entry ; MIPSR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSR6-NEXT: ll $2, 0($6) ; MIPSR6-NEXT: slt $5, $2, $7 ; MIPSR6-NEXT: selnez $3, $2, $5 ; MIPSR6-NEXT: seleqz $5, $7, $5 ; MIPSR6-NEXT: or $3, $3, $5 ; MIPSR6-NEXT: and $3, $3, $8 ; MIPSR6-NEXT: and $4, $2, $9 ; MIPSR6-NEXT: or $4, $4, $3 ; MIPSR6-NEXT: sc $4, 0($6) ; MIPSR6-NEXT: beqzc $4, $BB9_1 ; MIPSR6-NEXT: # %bb.2: # %entry ; MIPSR6-NEXT: and $1, $2, $8 ; MIPSR6-NEXT: srlv $1, $1, $10 ; MIPSR6-NEXT: seh $1, $1 ; MIPSR6-NEXT: # %bb.3: # %entry ; MIPSR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSR6-NEXT: # %bb.4: # %entry ; MIPSR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: addiu $sp, $sp, 8 ; MIPSR6-NEXT: jrc $ra ; ; MM-LABEL: test_min_8: ; MM: # %bb.0: # %entry ; MM-NEXT: addiu $sp, $sp, -8 ; MM-NEXT: .cfi_def_cfa_offset 8 ; MM-NEXT: # kill: def $at killed $a1 ; MM-NEXT: sync ; MM-NEXT: addiu $1, $zero, -4 ; MM-NEXT: and $6, $4, $1 ; MM-NEXT: andi $1, $4, 3 ; MM-NEXT: xori $1, $1, 3 ; MM-NEXT: sll $10, $1, 3 ; MM-NEXT: ori $1, $zero, 255 ; MM-NEXT: sllv $8, $1, $10 ; MM-NEXT: nor $9, $zero, $8 ; MM-NEXT: sllv $7, $5, $10 ; MM-NEXT: $BB9_1: # %entry ; MM-NEXT: # =>This Inner Loop Header: Depth=1 ; MM-NEXT: ll $2, 0($6) ; MM-NEXT: slt $5, $2, $7 ; MM-NEXT: or $3, $2, $zero ; MM-NEXT: movz $3, $7, $5 ; MM-NEXT: and $3, $3, $8 ; MM-NEXT: and $4, $2, $9 ; MM-NEXT: or $4, $4, $3 ; MM-NEXT: sc $4, 0($6) ; MM-NEXT: beqzc $4, $BB9_1 ; MM-NEXT: # %bb.2: # %entry ; MM-NEXT: and $1, $2, $8 ; MM-NEXT: srlv $1, $1, $10 ; MM-NEXT: seh $1, $1 ; MM-NEXT: # %bb.3: # %entry ; MM-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MM-NEXT: # %bb.4: # %entry ; MM-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MM-NEXT: sync ; MM-NEXT: addiusp 8 ; MM-NEXT: jrc $ra ; ; MMR6-LABEL: test_min_8: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: addiu $sp, $sp, -8 ; MMR6-NEXT: .cfi_def_cfa_offset 8 ; MMR6-NEXT: # kill: def $at killed $a1 ; MMR6-NEXT: sync ; MMR6-NEXT: addiu $1, $zero, -4 ; MMR6-NEXT: and $6, $4, $1 ; MMR6-NEXT: andi $1, $4, 3 ; MMR6-NEXT: xori $1, $1, 3 ; MMR6-NEXT: sll $10, $1, 3 ; MMR6-NEXT: ori $1, $zero, 255 ; MMR6-NEXT: sllv $8, $1, $10 ; MMR6-NEXT: nor $9, $zero, $8 ; MMR6-NEXT: sllv $7, $5, $10 ; MMR6-NEXT: $BB9_1: # %entry ; MMR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMR6-NEXT: ll $2, 0($6) ; MMR6-NEXT: slt $5, $2, $7 ; MMR6-NEXT: selnez $3, $2, $5 ; MMR6-NEXT: seleqz $5, $7, $5 ; MMR6-NEXT: or $3, $3, $5 ; MMR6-NEXT: and $3, $3, $8 ; MMR6-NEXT: and $4, $2, $9 ; MMR6-NEXT: or $4, $4, $3 ; MMR6-NEXT: sc $4, 0($6) ; MMR6-NEXT: beqc $4, $zero, $BB9_1 ; MMR6-NEXT: # %bb.2: # %entry ; MMR6-NEXT: and $1, $2, $8 ; MMR6-NEXT: srlv $1, $1, $10 ; MMR6-NEXT: seh $1, $1 ; MMR6-NEXT: # %bb.3: # %entry ; MMR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMR6-NEXT: # %bb.4: # %entry ; MMR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMR6-NEXT: sync ; MMR6-NEXT: addiu $sp, $sp, 8 ; MMR6-NEXT: jrc $ra ; ; MIPSEL-LABEL: test_min_8: ; MIPSEL: # %bb.0: # %entry ; MIPSEL-NEXT: addiu $sp, $sp, -8 ; MIPSEL-NEXT: .cfi_def_cfa_offset 8 ; MIPSEL-NEXT: # kill: def $at killed $a1 ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: addiu $1, $zero, -4 ; MIPSEL-NEXT: and $6, $4, $1 ; MIPSEL-NEXT: andi $1, $4, 3 ; MIPSEL-NEXT: sll $10, $1, 3 ; MIPSEL-NEXT: ori $1, $zero, 255 ; MIPSEL-NEXT: sllv $8, $1, $10 ; MIPSEL-NEXT: nor $9, $zero, $8 ; MIPSEL-NEXT: sllv $7, $5, $10 ; MIPSEL-NEXT: $BB9_1: # %entry ; MIPSEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSEL-NEXT: ll $2, 0($6) ; MIPSEL-NEXT: and $2, $2, $8 ; MIPSEL-NEXT: and $7, $7, $8 ; MIPSEL-NEXT: slt $5, $2, $7 ; MIPSEL-NEXT: move $3, $2 ; MIPSEL-NEXT: movz $3, $7, $5 ; MIPSEL-NEXT: and $3, $3, $8 ; MIPSEL-NEXT: and $4, $2, $9 ; MIPSEL-NEXT: or $4, $4, $3 ; MIPSEL-NEXT: sc $4, 0($6) ; MIPSEL-NEXT: beqz $4, $BB9_1 ; MIPSEL-NEXT: nop ; MIPSEL-NEXT: # %bb.2: # %entry ; MIPSEL-NEXT: and $1, $2, $8 ; MIPSEL-NEXT: srlv $1, $1, $10 ; MIPSEL-NEXT: seh $1, $1 ; MIPSEL-NEXT: # %bb.3: # %entry ; MIPSEL-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSEL-NEXT: # %bb.4: # %entry ; MIPSEL-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: addiu $sp, $sp, 8 ; MIPSEL-NEXT: jr $ra ; MIPSEL-NEXT: nop ; ; MIPSELR6-LABEL: test_min_8: ; MIPSELR6: # %bb.0: # %entry ; MIPSELR6-NEXT: addiu $sp, $sp, -8 ; MIPSELR6-NEXT: .cfi_def_cfa_offset 8 ; MIPSELR6-NEXT: # kill: def $at killed $a1 ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: addiu $1, $zero, -4 ; MIPSELR6-NEXT: and $6, $4, $1 ; MIPSELR6-NEXT: andi $1, $4, 3 ; MIPSELR6-NEXT: sll $10, $1, 3 ; MIPSELR6-NEXT: ori $1, $zero, 255 ; MIPSELR6-NEXT: sllv $8, $1, $10 ; MIPSELR6-NEXT: nor $9, $zero, $8 ; MIPSELR6-NEXT: sllv $7, $5, $10 ; MIPSELR6-NEXT: $BB9_1: # %entry ; MIPSELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSELR6-NEXT: ll $2, 0($6) ; MIPSELR6-NEXT: and $2, $2, $8 ; MIPSELR6-NEXT: and $7, $7, $8 ; MIPSELR6-NEXT: slt $5, $2, $7 ; MIPSELR6-NEXT: selnez $3, $2, $5 ; MIPSELR6-NEXT: seleqz $5, $7, $5 ; MIPSELR6-NEXT: or $3, $3, $5 ; MIPSELR6-NEXT: and $3, $3, $8 ; MIPSELR6-NEXT: and $4, $2, $9 ; MIPSELR6-NEXT: or $4, $4, $3 ; MIPSELR6-NEXT: sc $4, 0($6) ; MIPSELR6-NEXT: beqzc $4, $BB9_1 ; MIPSELR6-NEXT: # %bb.2: # %entry ; MIPSELR6-NEXT: and $1, $2, $8 ; MIPSELR6-NEXT: srlv $1, $1, $10 ; MIPSELR6-NEXT: seh $1, $1 ; MIPSELR6-NEXT: # %bb.3: # %entry ; MIPSELR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSELR6-NEXT: # %bb.4: # %entry ; MIPSELR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: addiu $sp, $sp, 8 ; MIPSELR6-NEXT: jrc $ra ; ; MMEL-LABEL: test_min_8: ; MMEL: # %bb.0: # %entry ; MMEL-NEXT: addiu $sp, $sp, -8 ; MMEL-NEXT: .cfi_def_cfa_offset 8 ; MMEL-NEXT: # kill: def $at killed $a1 ; MMEL-NEXT: sync ; MMEL-NEXT: addiu $1, $zero, -4 ; MMEL-NEXT: and $6, $4, $1 ; MMEL-NEXT: andi $1, $4, 3 ; MMEL-NEXT: sll $10, $1, 3 ; MMEL-NEXT: ori $1, $zero, 255 ; MMEL-NEXT: sllv $8, $1, $10 ; MMEL-NEXT: nor $9, $zero, $8 ; MMEL-NEXT: sllv $7, $5, $10 ; MMEL-NEXT: $BB9_1: # %entry ; MMEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MMEL-NEXT: ll $2, 0($6) ; MMEL-NEXT: and $2, $2, $8 ; MMEL-NEXT: and $7, $7, $8 ; MMEL-NEXT: slt $5, $2, $7 ; MMEL-NEXT: or $3, $2, $zero ; MMEL-NEXT: movz $3, $7, $5 ; MMEL-NEXT: and $3, $3, $8 ; MMEL-NEXT: and $4, $2, $9 ; MMEL-NEXT: or $4, $4, $3 ; MMEL-NEXT: sc $4, 0($6) ; MMEL-NEXT: beqzc $4, $BB9_1 ; MMEL-NEXT: # %bb.2: # %entry ; MMEL-NEXT: and $1, $2, $8 ; MMEL-NEXT: srlv $1, $1, $10 ; MMEL-NEXT: seh $1, $1 ; MMEL-NEXT: # %bb.3: # %entry ; MMEL-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMEL-NEXT: # %bb.4: # %entry ; MMEL-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMEL-NEXT: sync ; MMEL-NEXT: addiusp 8 ; MMEL-NEXT: jrc $ra ; ; MMELR6-LABEL: test_min_8: ; MMELR6: # %bb.0: # %entry ; MMELR6-NEXT: addiu $sp, $sp, -8 ; MMELR6-NEXT: .cfi_def_cfa_offset 8 ; MMELR6-NEXT: # kill: def $at killed $a1 ; MMELR6-NEXT: sync ; MMELR6-NEXT: addiu $1, $zero, -4 ; MMELR6-NEXT: and $6, $4, $1 ; MMELR6-NEXT: andi $1, $4, 3 ; MMELR6-NEXT: sll $10, $1, 3 ; MMELR6-NEXT: ori $1, $zero, 255 ; MMELR6-NEXT: sllv $8, $1, $10 ; MMELR6-NEXT: nor $9, $zero, $8 ; MMELR6-NEXT: sllv $7, $5, $10 ; MMELR6-NEXT: $BB9_1: # %entry ; MMELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMELR6-NEXT: ll $2, 0($6) ; MMELR6-NEXT: and $2, $2, $8 ; MMELR6-NEXT: and $7, $7, $8 ; MMELR6-NEXT: slt $5, $2, $7 ; MMELR6-NEXT: selnez $3, $2, $5 ; MMELR6-NEXT: seleqz $5, $7, $5 ; MMELR6-NEXT: or $3, $3, $5 ; MMELR6-NEXT: and $3, $3, $8 ; MMELR6-NEXT: and $4, $2, $9 ; MMELR6-NEXT: or $4, $4, $3 ; MMELR6-NEXT: sc $4, 0($6) ; MMELR6-NEXT: beqc $4, $zero, $BB9_1 ; MMELR6-NEXT: # %bb.2: # %entry ; MMELR6-NEXT: and $1, $2, $8 ; MMELR6-NEXT: srlv $1, $1, $10 ; MMELR6-NEXT: seh $1, $1 ; MMELR6-NEXT: # %bb.3: # %entry ; MMELR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMELR6-NEXT: # %bb.4: # %entry ; MMELR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMELR6-NEXT: sync ; MMELR6-NEXT: addiu $sp, $sp, 8 ; MMELR6-NEXT: jrc $ra ; ; MIPS64-LABEL: test_min_8: ; MIPS64: # %bb.0: # %entry ; MIPS64-NEXT: daddiu $sp, $sp, -16 ; MIPS64-NEXT: .cfi_def_cfa_offset 16 ; MIPS64-NEXT: move $1, $5 ; MIPS64-NEXT: sync ; MIPS64-NEXT: daddiu $2, $zero, -4 ; MIPS64-NEXT: and $6, $4, $2 ; MIPS64-NEXT: andi $2, $4, 3 ; MIPS64-NEXT: xori $2, $2, 3 ; MIPS64-NEXT: sll $10, $2, 3 ; MIPS64-NEXT: ori $2, $zero, 255 ; MIPS64-NEXT: sllv $8, $2, $10 ; MIPS64-NEXT: nor $9, $zero, $8 ; MIPS64-NEXT: sllv $7, $1, $10 ; MIPS64-NEXT: .LBB9_1: # %entry ; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64-NEXT: ll $2, 0($6) ; MIPS64-NEXT: slt $5, $2, $7 ; MIPS64-NEXT: move $3, $2 ; MIPS64-NEXT: movz $3, $7, $5 ; MIPS64-NEXT: and $3, $3, $8 ; MIPS64-NEXT: and $4, $2, $9 ; MIPS64-NEXT: or $4, $4, $3 ; MIPS64-NEXT: sc $4, 0($6) ; MIPS64-NEXT: beqz $4, .LBB9_1 ; MIPS64-NEXT: nop ; MIPS64-NEXT: # %bb.2: # %entry ; MIPS64-NEXT: and $1, $2, $8 ; MIPS64-NEXT: srlv $1, $1, $10 ; MIPS64-NEXT: seh $1, $1 ; MIPS64-NEXT: # %bb.3: # %entry ; MIPS64-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64-NEXT: # %bb.4: # %entry ; MIPS64-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64-NEXT: sync ; MIPS64-NEXT: daddiu $sp, $sp, 16 ; MIPS64-NEXT: jr $ra ; MIPS64-NEXT: nop ; ; MIPS64R6-LABEL: test_min_8: ; MIPS64R6: # %bb.0: # %entry ; MIPS64R6-NEXT: daddiu $sp, $sp, -16 ; MIPS64R6-NEXT: .cfi_def_cfa_offset 16 ; MIPS64R6-NEXT: move $1, $5 ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: daddiu $2, $zero, -4 ; MIPS64R6-NEXT: and $6, $4, $2 ; MIPS64R6-NEXT: andi $2, $4, 3 ; MIPS64R6-NEXT: xori $2, $2, 3 ; MIPS64R6-NEXT: sll $10, $2, 3 ; MIPS64R6-NEXT: ori $2, $zero, 255 ; MIPS64R6-NEXT: sllv $8, $2, $10 ; MIPS64R6-NEXT: nor $9, $zero, $8 ; MIPS64R6-NEXT: sllv $7, $1, $10 ; MIPS64R6-NEXT: .LBB9_1: # %entry ; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64R6-NEXT: ll $2, 0($6) ; MIPS64R6-NEXT: slt $5, $2, $7 ; MIPS64R6-NEXT: selnez $3, $2, $5 ; MIPS64R6-NEXT: seleqz $5, $7, $5 ; MIPS64R6-NEXT: or $3, $3, $5 ; MIPS64R6-NEXT: and $3, $3, $8 ; MIPS64R6-NEXT: and $4, $2, $9 ; MIPS64R6-NEXT: or $4, $4, $3 ; MIPS64R6-NEXT: sc $4, 0($6) ; MIPS64R6-NEXT: beqzc $4, .LBB9_1 ; MIPS64R6-NEXT: # %bb.2: # %entry ; MIPS64R6-NEXT: and $1, $2, $8 ; MIPS64R6-NEXT: srlv $1, $1, $10 ; MIPS64R6-NEXT: seh $1, $1 ; MIPS64R6-NEXT: # %bb.3: # %entry ; MIPS64R6-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64R6-NEXT: # %bb.4: # %entry ; MIPS64R6-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: daddiu $sp, $sp, 16 ; MIPS64R6-NEXT: jrc $ra ; ; MIPS64EL-LABEL: test_min_8: ; MIPS64EL: # %bb.0: # %entry ; MIPS64EL-NEXT: daddiu $sp, $sp, -16 ; MIPS64EL-NEXT: .cfi_def_cfa_offset 16 ; MIPS64EL-NEXT: move $1, $5 ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: daddiu $2, $zero, -4 ; MIPS64EL-NEXT: and $6, $4, $2 ; MIPS64EL-NEXT: andi $2, $4, 3 ; MIPS64EL-NEXT: sll $10, $2, 3 ; MIPS64EL-NEXT: ori $2, $zero, 255 ; MIPS64EL-NEXT: sllv $8, $2, $10 ; MIPS64EL-NEXT: nor $9, $zero, $8 ; MIPS64EL-NEXT: sllv $7, $1, $10 ; MIPS64EL-NEXT: .LBB9_1: # %entry ; MIPS64EL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64EL-NEXT: ll $2, 0($6) ; MIPS64EL-NEXT: and $2, $2, $8 ; MIPS64EL-NEXT: and $7, $7, $8 ; MIPS64EL-NEXT: slt $5, $2, $7 ; MIPS64EL-NEXT: move $3, $2 ; MIPS64EL-NEXT: movz $3, $7, $5 ; MIPS64EL-NEXT: and $3, $3, $8 ; MIPS64EL-NEXT: and $4, $2, $9 ; MIPS64EL-NEXT: or $4, $4, $3 ; MIPS64EL-NEXT: sc $4, 0($6) ; MIPS64EL-NEXT: beqz $4, .LBB9_1 ; MIPS64EL-NEXT: nop ; MIPS64EL-NEXT: # %bb.2: # %entry ; MIPS64EL-NEXT: and $1, $2, $8 ; MIPS64EL-NEXT: srlv $1, $1, $10 ; MIPS64EL-NEXT: seh $1, $1 ; MIPS64EL-NEXT: # %bb.3: # %entry ; MIPS64EL-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64EL-NEXT: # %bb.4: # %entry ; MIPS64EL-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: daddiu $sp, $sp, 16 ; MIPS64EL-NEXT: jr $ra ; MIPS64EL-NEXT: nop ; ; MIPS64ELR6-LABEL: test_min_8: ; MIPS64ELR6: # %bb.0: # %entry ; MIPS64ELR6-NEXT: daddiu $sp, $sp, -16 ; MIPS64ELR6-NEXT: .cfi_def_cfa_offset 16 ; MIPS64ELR6-NEXT: move $1, $5 ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: daddiu $2, $zero, -4 ; MIPS64ELR6-NEXT: and $6, $4, $2 ; MIPS64ELR6-NEXT: andi $2, $4, 3 ; MIPS64ELR6-NEXT: sll $10, $2, 3 ; MIPS64ELR6-NEXT: ori $2, $zero, 255 ; MIPS64ELR6-NEXT: sllv $8, $2, $10 ; MIPS64ELR6-NEXT: nor $9, $zero, $8 ; MIPS64ELR6-NEXT: sllv $7, $1, $10 ; MIPS64ELR6-NEXT: .LBB9_1: # %entry ; MIPS64ELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64ELR6-NEXT: ll $2, 0($6) ; MIPS64ELR6-NEXT: and $2, $2, $8 ; MIPS64ELR6-NEXT: and $7, $7, $8 ; MIPS64ELR6-NEXT: slt $5, $2, $7 ; MIPS64ELR6-NEXT: selnez $3, $2, $5 ; MIPS64ELR6-NEXT: seleqz $5, $7, $5 ; MIPS64ELR6-NEXT: or $3, $3, $5 ; MIPS64ELR6-NEXT: and $3, $3, $8 ; MIPS64ELR6-NEXT: and $4, $2, $9 ; MIPS64ELR6-NEXT: or $4, $4, $3 ; MIPS64ELR6-NEXT: sc $4, 0($6) ; MIPS64ELR6-NEXT: beqzc $4, .LBB9_1 ; MIPS64ELR6-NEXT: # %bb.2: # %entry ; MIPS64ELR6-NEXT: and $1, $2, $8 ; MIPS64ELR6-NEXT: srlv $1, $1, $10 ; MIPS64ELR6-NEXT: seh $1, $1 ; MIPS64ELR6-NEXT: # %bb.3: # %entry ; MIPS64ELR6-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64ELR6-NEXT: # %bb.4: # %entry ; MIPS64ELR6-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: daddiu $sp, $sp, 16 ; MIPS64ELR6-NEXT: jrc $ra entry: %0 = atomicrmw min i8* %ptr, i8 %val seq_cst ret i8 %0 } define i8 @test_umax_8(i8* nocapture %ptr, i8 signext %val) { ; MIPS-LABEL: test_umax_8: ; MIPS: # %bb.0: # %entry ; MIPS-NEXT: addiu $sp, $sp, -8 ; MIPS-NEXT: .cfi_def_cfa_offset 8 ; MIPS-NEXT: # kill: def $at killed $a1 ; MIPS-NEXT: sync ; MIPS-NEXT: addiu $1, $zero, -4 ; MIPS-NEXT: and $6, $4, $1 ; MIPS-NEXT: andi $1, $4, 3 ; MIPS-NEXT: xori $1, $1, 3 ; MIPS-NEXT: sll $10, $1, 3 ; MIPS-NEXT: ori $1, $zero, 255 ; MIPS-NEXT: sllv $8, $1, $10 ; MIPS-NEXT: nor $9, $zero, $8 ; MIPS-NEXT: sllv $7, $5, $10 ; MIPS-NEXT: $BB10_1: # %entry ; MIPS-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS-NEXT: ll $2, 0($6) ; MIPS-NEXT: sltu $5, $2, $7 ; MIPS-NEXT: move $3, $2 ; MIPS-NEXT: movn $3, $7, $5 ; MIPS-NEXT: and $3, $3, $8 ; MIPS-NEXT: and $4, $2, $9 ; MIPS-NEXT: or $4, $4, $3 ; MIPS-NEXT: sc $4, 0($6) ; MIPS-NEXT: beqz $4, $BB10_1 ; MIPS-NEXT: nop ; MIPS-NEXT: # %bb.2: # %entry ; MIPS-NEXT: and $1, $2, $8 ; MIPS-NEXT: srlv $1, $1, $10 ; MIPS-NEXT: seh $1, $1 ; MIPS-NEXT: # %bb.3: # %entry ; MIPS-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPS-NEXT: # %bb.4: # %entry ; MIPS-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPS-NEXT: sync ; MIPS-NEXT: addiu $sp, $sp, 8 ; MIPS-NEXT: jr $ra ; MIPS-NEXT: nop ; ; MIPSR6-LABEL: test_umax_8: ; MIPSR6: # %bb.0: # %entry ; MIPSR6-NEXT: addiu $sp, $sp, -8 ; MIPSR6-NEXT: .cfi_def_cfa_offset 8 ; MIPSR6-NEXT: # kill: def $at killed $a1 ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: addiu $1, $zero, -4 ; MIPSR6-NEXT: and $6, $4, $1 ; MIPSR6-NEXT: andi $1, $4, 3 ; MIPSR6-NEXT: xori $1, $1, 3 ; MIPSR6-NEXT: sll $10, $1, 3 ; MIPSR6-NEXT: ori $1, $zero, 255 ; MIPSR6-NEXT: sllv $8, $1, $10 ; MIPSR6-NEXT: nor $9, $zero, $8 ; MIPSR6-NEXT: sllv $7, $5, $10 ; MIPSR6-NEXT: $BB10_1: # %entry ; MIPSR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSR6-NEXT: ll $2, 0($6) ; MIPSR6-NEXT: sltu $5, $2, $7 ; MIPSR6-NEXT: seleqz $3, $2, $5 ; MIPSR6-NEXT: selnez $5, $7, $5 ; MIPSR6-NEXT: or $3, $3, $5 ; MIPSR6-NEXT: and $3, $3, $8 ; MIPSR6-NEXT: and $4, $2, $9 ; MIPSR6-NEXT: or $4, $4, $3 ; MIPSR6-NEXT: sc $4, 0($6) ; MIPSR6-NEXT: beqzc $4, $BB10_1 ; MIPSR6-NEXT: # %bb.2: # %entry ; MIPSR6-NEXT: and $1, $2, $8 ; MIPSR6-NEXT: srlv $1, $1, $10 ; MIPSR6-NEXT: seh $1, $1 ; MIPSR6-NEXT: # %bb.3: # %entry ; MIPSR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSR6-NEXT: # %bb.4: # %entry ; MIPSR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: addiu $sp, $sp, 8 ; MIPSR6-NEXT: jrc $ra ; ; MM-LABEL: test_umax_8: ; MM: # %bb.0: # %entry ; MM-NEXT: addiu $sp, $sp, -8 ; MM-NEXT: .cfi_def_cfa_offset 8 ; MM-NEXT: # kill: def $at killed $a1 ; MM-NEXT: sync ; MM-NEXT: addiu $1, $zero, -4 ; MM-NEXT: and $6, $4, $1 ; MM-NEXT: andi $1, $4, 3 ; MM-NEXT: xori $1, $1, 3 ; MM-NEXT: sll $10, $1, 3 ; MM-NEXT: ori $1, $zero, 255 ; MM-NEXT: sllv $8, $1, $10 ; MM-NEXT: nor $9, $zero, $8 ; MM-NEXT: sllv $7, $5, $10 ; MM-NEXT: $BB10_1: # %entry ; MM-NEXT: # =>This Inner Loop Header: Depth=1 ; MM-NEXT: ll $2, 0($6) ; MM-NEXT: sltu $5, $2, $7 ; MM-NEXT: or $3, $2, $zero ; MM-NEXT: movn $3, $7, $5 ; MM-NEXT: and $3, $3, $8 ; MM-NEXT: and $4, $2, $9 ; MM-NEXT: or $4, $4, $3 ; MM-NEXT: sc $4, 0($6) ; MM-NEXT: beqzc $4, $BB10_1 ; MM-NEXT: # %bb.2: # %entry ; MM-NEXT: and $1, $2, $8 ; MM-NEXT: srlv $1, $1, $10 ; MM-NEXT: seh $1, $1 ; MM-NEXT: # %bb.3: # %entry ; MM-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MM-NEXT: # %bb.4: # %entry ; MM-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MM-NEXT: sync ; MM-NEXT: addiusp 8 ; MM-NEXT: jrc $ra ; ; MMR6-LABEL: test_umax_8: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: addiu $sp, $sp, -8 ; MMR6-NEXT: .cfi_def_cfa_offset 8 ; MMR6-NEXT: # kill: def $at killed $a1 ; MMR6-NEXT: sync ; MMR6-NEXT: addiu $1, $zero, -4 ; MMR6-NEXT: and $6, $4, $1 ; MMR6-NEXT: andi $1, $4, 3 ; MMR6-NEXT: xori $1, $1, 3 ; MMR6-NEXT: sll $10, $1, 3 ; MMR6-NEXT: ori $1, $zero, 255 ; MMR6-NEXT: sllv $8, $1, $10 ; MMR6-NEXT: nor $9, $zero, $8 ; MMR6-NEXT: sllv $7, $5, $10 ; MMR6-NEXT: $BB10_1: # %entry ; MMR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMR6-NEXT: ll $2, 0($6) ; MMR6-NEXT: sltu $5, $2, $7 ; MMR6-NEXT: seleqz $3, $2, $5 ; MMR6-NEXT: selnez $5, $7, $5 ; MMR6-NEXT: or $3, $3, $5 ; MMR6-NEXT: and $3, $3, $8 ; MMR6-NEXT: and $4, $2, $9 ; MMR6-NEXT: or $4, $4, $3 ; MMR6-NEXT: sc $4, 0($6) ; MMR6-NEXT: beqc $4, $zero, $BB10_1 ; MMR6-NEXT: # %bb.2: # %entry ; MMR6-NEXT: and $1, $2, $8 ; MMR6-NEXT: srlv $1, $1, $10 ; MMR6-NEXT: seh $1, $1 ; MMR6-NEXT: # %bb.3: # %entry ; MMR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMR6-NEXT: # %bb.4: # %entry ; MMR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMR6-NEXT: sync ; MMR6-NEXT: addiu $sp, $sp, 8 ; MMR6-NEXT: jrc $ra ; ; MIPSEL-LABEL: test_umax_8: ; MIPSEL: # %bb.0: # %entry ; MIPSEL-NEXT: addiu $sp, $sp, -8 ; MIPSEL-NEXT: .cfi_def_cfa_offset 8 ; MIPSEL-NEXT: # kill: def $at killed $a1 ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: addiu $1, $zero, -4 ; MIPSEL-NEXT: and $6, $4, $1 ; MIPSEL-NEXT: andi $1, $4, 3 ; MIPSEL-NEXT: sll $10, $1, 3 ; MIPSEL-NEXT: ori $1, $zero, 255 ; MIPSEL-NEXT: sllv $8, $1, $10 ; MIPSEL-NEXT: nor $9, $zero, $8 ; MIPSEL-NEXT: sllv $7, $5, $10 ; MIPSEL-NEXT: $BB10_1: # %entry ; MIPSEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSEL-NEXT: ll $2, 0($6) ; MIPSEL-NEXT: and $2, $2, $8 ; MIPSEL-NEXT: and $7, $7, $8 ; MIPSEL-NEXT: sltu $5, $2, $7 ; MIPSEL-NEXT: move $3, $2 ; MIPSEL-NEXT: movn $3, $7, $5 ; MIPSEL-NEXT: and $3, $3, $8 ; MIPSEL-NEXT: and $4, $2, $9 ; MIPSEL-NEXT: or $4, $4, $3 ; MIPSEL-NEXT: sc $4, 0($6) ; MIPSEL-NEXT: beqz $4, $BB10_1 ; MIPSEL-NEXT: nop ; MIPSEL-NEXT: # %bb.2: # %entry ; MIPSEL-NEXT: and $1, $2, $8 ; MIPSEL-NEXT: srlv $1, $1, $10 ; MIPSEL-NEXT: seh $1, $1 ; MIPSEL-NEXT: # %bb.3: # %entry ; MIPSEL-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSEL-NEXT: # %bb.4: # %entry ; MIPSEL-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: addiu $sp, $sp, 8 ; MIPSEL-NEXT: jr $ra ; MIPSEL-NEXT: nop ; ; MIPSELR6-LABEL: test_umax_8: ; MIPSELR6: # %bb.0: # %entry ; MIPSELR6-NEXT: addiu $sp, $sp, -8 ; MIPSELR6-NEXT: .cfi_def_cfa_offset 8 ; MIPSELR6-NEXT: # kill: def $at killed $a1 ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: addiu $1, $zero, -4 ; MIPSELR6-NEXT: and $6, $4, $1 ; MIPSELR6-NEXT: andi $1, $4, 3 ; MIPSELR6-NEXT: sll $10, $1, 3 ; MIPSELR6-NEXT: ori $1, $zero, 255 ; MIPSELR6-NEXT: sllv $8, $1, $10 ; MIPSELR6-NEXT: nor $9, $zero, $8 ; MIPSELR6-NEXT: sllv $7, $5, $10 ; MIPSELR6-NEXT: $BB10_1: # %entry ; MIPSELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSELR6-NEXT: ll $2, 0($6) ; MIPSELR6-NEXT: and $2, $2, $8 ; MIPSELR6-NEXT: and $7, $7, $8 ; MIPSELR6-NEXT: sltu $5, $2, $7 ; MIPSELR6-NEXT: seleqz $3, $2, $5 ; MIPSELR6-NEXT: selnez $5, $7, $5 ; MIPSELR6-NEXT: or $3, $3, $5 ; MIPSELR6-NEXT: and $3, $3, $8 ; MIPSELR6-NEXT: and $4, $2, $9 ; MIPSELR6-NEXT: or $4, $4, $3 ; MIPSELR6-NEXT: sc $4, 0($6) ; MIPSELR6-NEXT: beqzc $4, $BB10_1 ; MIPSELR6-NEXT: # %bb.2: # %entry ; MIPSELR6-NEXT: and $1, $2, $8 ; MIPSELR6-NEXT: srlv $1, $1, $10 ; MIPSELR6-NEXT: seh $1, $1 ; MIPSELR6-NEXT: # %bb.3: # %entry ; MIPSELR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSELR6-NEXT: # %bb.4: # %entry ; MIPSELR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: addiu $sp, $sp, 8 ; MIPSELR6-NEXT: jrc $ra ; ; MMEL-LABEL: test_umax_8: ; MMEL: # %bb.0: # %entry ; MMEL-NEXT: addiu $sp, $sp, -8 ; MMEL-NEXT: .cfi_def_cfa_offset 8 ; MMEL-NEXT: # kill: def $at killed $a1 ; MMEL-NEXT: sync ; MMEL-NEXT: addiu $1, $zero, -4 ; MMEL-NEXT: and $6, $4, $1 ; MMEL-NEXT: andi $1, $4, 3 ; MMEL-NEXT: sll $10, $1, 3 ; MMEL-NEXT: ori $1, $zero, 255 ; MMEL-NEXT: sllv $8, $1, $10 ; MMEL-NEXT: nor $9, $zero, $8 ; MMEL-NEXT: sllv $7, $5, $10 ; MMEL-NEXT: $BB10_1: # %entry ; MMEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MMEL-NEXT: ll $2, 0($6) ; MMEL-NEXT: and $2, $2, $8 ; MMEL-NEXT: and $7, $7, $8 ; MMEL-NEXT: sltu $5, $2, $7 ; MMEL-NEXT: or $3, $2, $zero ; MMEL-NEXT: movn $3, $7, $5 ; MMEL-NEXT: and $3, $3, $8 ; MMEL-NEXT: and $4, $2, $9 ; MMEL-NEXT: or $4, $4, $3 ; MMEL-NEXT: sc $4, 0($6) ; MMEL-NEXT: beqzc $4, $BB10_1 ; MMEL-NEXT: # %bb.2: # %entry ; MMEL-NEXT: and $1, $2, $8 ; MMEL-NEXT: srlv $1, $1, $10 ; MMEL-NEXT: seh $1, $1 ; MMEL-NEXT: # %bb.3: # %entry ; MMEL-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMEL-NEXT: # %bb.4: # %entry ; MMEL-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMEL-NEXT: sync ; MMEL-NEXT: addiusp 8 ; MMEL-NEXT: jrc $ra ; ; MMELR6-LABEL: test_umax_8: ; MMELR6: # %bb.0: # %entry ; MMELR6-NEXT: addiu $sp, $sp, -8 ; MMELR6-NEXT: .cfi_def_cfa_offset 8 ; MMELR6-NEXT: # kill: def $at killed $a1 ; MMELR6-NEXT: sync ; MMELR6-NEXT: addiu $1, $zero, -4 ; MMELR6-NEXT: and $6, $4, $1 ; MMELR6-NEXT: andi $1, $4, 3 ; MMELR6-NEXT: sll $10, $1, 3 ; MMELR6-NEXT: ori $1, $zero, 255 ; MMELR6-NEXT: sllv $8, $1, $10 ; MMELR6-NEXT: nor $9, $zero, $8 ; MMELR6-NEXT: sllv $7, $5, $10 ; MMELR6-NEXT: $BB10_1: # %entry ; MMELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMELR6-NEXT: ll $2, 0($6) ; MMELR6-NEXT: and $2, $2, $8 ; MMELR6-NEXT: and $7, $7, $8 ; MMELR6-NEXT: sltu $5, $2, $7 ; MMELR6-NEXT: seleqz $3, $2, $5 ; MMELR6-NEXT: selnez $5, $7, $5 ; MMELR6-NEXT: or $3, $3, $5 ; MMELR6-NEXT: and $3, $3, $8 ; MMELR6-NEXT: and $4, $2, $9 ; MMELR6-NEXT: or $4, $4, $3 ; MMELR6-NEXT: sc $4, 0($6) ; MMELR6-NEXT: beqc $4, $zero, $BB10_1 ; MMELR6-NEXT: # %bb.2: # %entry ; MMELR6-NEXT: and $1, $2, $8 ; MMELR6-NEXT: srlv $1, $1, $10 ; MMELR6-NEXT: seh $1, $1 ; MMELR6-NEXT: # %bb.3: # %entry ; MMELR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMELR6-NEXT: # %bb.4: # %entry ; MMELR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMELR6-NEXT: sync ; MMELR6-NEXT: addiu $sp, $sp, 8 ; MMELR6-NEXT: jrc $ra ; ; MIPS64-LABEL: test_umax_8: ; MIPS64: # %bb.0: # %entry ; MIPS64-NEXT: daddiu $sp, $sp, -16 ; MIPS64-NEXT: .cfi_def_cfa_offset 16 ; MIPS64-NEXT: move $1, $5 ; MIPS64-NEXT: sync ; MIPS64-NEXT: daddiu $2, $zero, -4 ; MIPS64-NEXT: and $6, $4, $2 ; MIPS64-NEXT: andi $2, $4, 3 ; MIPS64-NEXT: xori $2, $2, 3 ; MIPS64-NEXT: sll $10, $2, 3 ; MIPS64-NEXT: ori $2, $zero, 255 ; MIPS64-NEXT: sllv $8, $2, $10 ; MIPS64-NEXT: nor $9, $zero, $8 ; MIPS64-NEXT: sllv $7, $1, $10 ; MIPS64-NEXT: .LBB10_1: # %entry ; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64-NEXT: ll $2, 0($6) ; MIPS64-NEXT: sltu $5, $2, $7 ; MIPS64-NEXT: move $3, $2 ; MIPS64-NEXT: movn $3, $7, $5 ; MIPS64-NEXT: and $3, $3, $8 ; MIPS64-NEXT: and $4, $2, $9 ; MIPS64-NEXT: or $4, $4, $3 ; MIPS64-NEXT: sc $4, 0($6) ; MIPS64-NEXT: beqz $4, .LBB10_1 ; MIPS64-NEXT: nop ; MIPS64-NEXT: # %bb.2: # %entry ; MIPS64-NEXT: and $1, $2, $8 ; MIPS64-NEXT: srlv $1, $1, $10 ; MIPS64-NEXT: seh $1, $1 ; MIPS64-NEXT: # %bb.3: # %entry ; MIPS64-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64-NEXT: # %bb.4: # %entry ; MIPS64-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64-NEXT: sync ; MIPS64-NEXT: daddiu $sp, $sp, 16 ; MIPS64-NEXT: jr $ra ; MIPS64-NEXT: nop ; ; MIPS64R6-LABEL: test_umax_8: ; MIPS64R6: # %bb.0: # %entry ; MIPS64R6-NEXT: daddiu $sp, $sp, -16 ; MIPS64R6-NEXT: .cfi_def_cfa_offset 16 ; MIPS64R6-NEXT: move $1, $5 ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: daddiu $2, $zero, -4 ; MIPS64R6-NEXT: and $6, $4, $2 ; MIPS64R6-NEXT: andi $2, $4, 3 ; MIPS64R6-NEXT: xori $2, $2, 3 ; MIPS64R6-NEXT: sll $10, $2, 3 ; MIPS64R6-NEXT: ori $2, $zero, 255 ; MIPS64R6-NEXT: sllv $8, $2, $10 ; MIPS64R6-NEXT: nor $9, $zero, $8 ; MIPS64R6-NEXT: sllv $7, $1, $10 ; MIPS64R6-NEXT: .LBB10_1: # %entry ; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64R6-NEXT: ll $2, 0($6) ; MIPS64R6-NEXT: sltu $5, $2, $7 ; MIPS64R6-NEXT: seleqz $3, $2, $5 ; MIPS64R6-NEXT: selnez $5, $7, $5 ; MIPS64R6-NEXT: or $3, $3, $5 ; MIPS64R6-NEXT: and $3, $3, $8 ; MIPS64R6-NEXT: and $4, $2, $9 ; MIPS64R6-NEXT: or $4, $4, $3 ; MIPS64R6-NEXT: sc $4, 0($6) ; MIPS64R6-NEXT: beqzc $4, .LBB10_1 ; MIPS64R6-NEXT: # %bb.2: # %entry ; MIPS64R6-NEXT: and $1, $2, $8 ; MIPS64R6-NEXT: srlv $1, $1, $10 ; MIPS64R6-NEXT: seh $1, $1 ; MIPS64R6-NEXT: # %bb.3: # %entry ; MIPS64R6-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64R6-NEXT: # %bb.4: # %entry ; MIPS64R6-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: daddiu $sp, $sp, 16 ; MIPS64R6-NEXT: jrc $ra ; ; MIPS64EL-LABEL: test_umax_8: ; MIPS64EL: # %bb.0: # %entry ; MIPS64EL-NEXT: daddiu $sp, $sp, -16 ; MIPS64EL-NEXT: .cfi_def_cfa_offset 16 ; MIPS64EL-NEXT: move $1, $5 ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: daddiu $2, $zero, -4 ; MIPS64EL-NEXT: and $6, $4, $2 ; MIPS64EL-NEXT: andi $2, $4, 3 ; MIPS64EL-NEXT: sll $10, $2, 3 ; MIPS64EL-NEXT: ori $2, $zero, 255 ; MIPS64EL-NEXT: sllv $8, $2, $10 ; MIPS64EL-NEXT: nor $9, $zero, $8 ; MIPS64EL-NEXT: sllv $7, $1, $10 ; MIPS64EL-NEXT: .LBB10_1: # %entry ; MIPS64EL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64EL-NEXT: ll $2, 0($6) ; MIPS64EL-NEXT: and $2, $2, $8 ; MIPS64EL-NEXT: and $7, $7, $8 ; MIPS64EL-NEXT: sltu $5, $2, $7 ; MIPS64EL-NEXT: move $3, $2 ; MIPS64EL-NEXT: movn $3, $7, $5 ; MIPS64EL-NEXT: and $3, $3, $8 ; MIPS64EL-NEXT: and $4, $2, $9 ; MIPS64EL-NEXT: or $4, $4, $3 ; MIPS64EL-NEXT: sc $4, 0($6) ; MIPS64EL-NEXT: beqz $4, .LBB10_1 ; MIPS64EL-NEXT: nop ; MIPS64EL-NEXT: # %bb.2: # %entry ; MIPS64EL-NEXT: and $1, $2, $8 ; MIPS64EL-NEXT: srlv $1, $1, $10 ; MIPS64EL-NEXT: seh $1, $1 ; MIPS64EL-NEXT: # %bb.3: # %entry ; MIPS64EL-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64EL-NEXT: # %bb.4: # %entry ; MIPS64EL-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: daddiu $sp, $sp, 16 ; MIPS64EL-NEXT: jr $ra ; MIPS64EL-NEXT: nop ; ; MIPS64ELR6-LABEL: test_umax_8: ; MIPS64ELR6: # %bb.0: # %entry ; MIPS64ELR6-NEXT: daddiu $sp, $sp, -16 ; MIPS64ELR6-NEXT: .cfi_def_cfa_offset 16 ; MIPS64ELR6-NEXT: move $1, $5 ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: daddiu $2, $zero, -4 ; MIPS64ELR6-NEXT: and $6, $4, $2 ; MIPS64ELR6-NEXT: andi $2, $4, 3 ; MIPS64ELR6-NEXT: sll $10, $2, 3 ; MIPS64ELR6-NEXT: ori $2, $zero, 255 ; MIPS64ELR6-NEXT: sllv $8, $2, $10 ; MIPS64ELR6-NEXT: nor $9, $zero, $8 ; MIPS64ELR6-NEXT: sllv $7, $1, $10 ; MIPS64ELR6-NEXT: .LBB10_1: # %entry ; MIPS64ELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64ELR6-NEXT: ll $2, 0($6) ; MIPS64ELR6-NEXT: and $2, $2, $8 ; MIPS64ELR6-NEXT: and $7, $7, $8 ; MIPS64ELR6-NEXT: sltu $5, $2, $7 ; MIPS64ELR6-NEXT: seleqz $3, $2, $5 ; MIPS64ELR6-NEXT: selnez $5, $7, $5 ; MIPS64ELR6-NEXT: or $3, $3, $5 ; MIPS64ELR6-NEXT: and $3, $3, $8 ; MIPS64ELR6-NEXT: and $4, $2, $9 ; MIPS64ELR6-NEXT: or $4, $4, $3 ; MIPS64ELR6-NEXT: sc $4, 0($6) ; MIPS64ELR6-NEXT: beqzc $4, .LBB10_1 ; MIPS64ELR6-NEXT: # %bb.2: # %entry ; MIPS64ELR6-NEXT: and $1, $2, $8 ; MIPS64ELR6-NEXT: srlv $1, $1, $10 ; MIPS64ELR6-NEXT: seh $1, $1 ; MIPS64ELR6-NEXT: # %bb.3: # %entry ; MIPS64ELR6-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64ELR6-NEXT: # %bb.4: # %entry ; MIPS64ELR6-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: daddiu $sp, $sp, 16 ; MIPS64ELR6-NEXT: jrc $ra entry: %0 = atomicrmw umax i8* %ptr, i8 %val seq_cst ret i8 %0 } define i8 @test_umin_8(i8* nocapture %ptr, i8 signext %val) { ; MIPS-LABEL: test_umin_8: ; MIPS: # %bb.0: # %entry ; MIPS-NEXT: addiu $sp, $sp, -8 ; MIPS-NEXT: .cfi_def_cfa_offset 8 ; MIPS-NEXT: # kill: def $at killed $a1 ; MIPS-NEXT: sync ; MIPS-NEXT: addiu $1, $zero, -4 ; MIPS-NEXT: and $6, $4, $1 ; MIPS-NEXT: andi $1, $4, 3 ; MIPS-NEXT: xori $1, $1, 3 ; MIPS-NEXT: sll $10, $1, 3 ; MIPS-NEXT: ori $1, $zero, 255 ; MIPS-NEXT: sllv $8, $1, $10 ; MIPS-NEXT: nor $9, $zero, $8 ; MIPS-NEXT: sllv $7, $5, $10 ; MIPS-NEXT: $BB11_1: # %entry ; MIPS-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS-NEXT: ll $2, 0($6) ; MIPS-NEXT: sltu $5, $2, $7 ; MIPS-NEXT: move $3, $2 ; MIPS-NEXT: movz $3, $7, $5 ; MIPS-NEXT: and $3, $3, $8 ; MIPS-NEXT: and $4, $2, $9 ; MIPS-NEXT: or $4, $4, $3 ; MIPS-NEXT: sc $4, 0($6) ; MIPS-NEXT: beqz $4, $BB11_1 ; MIPS-NEXT: nop ; MIPS-NEXT: # %bb.2: # %entry ; MIPS-NEXT: and $1, $2, $8 ; MIPS-NEXT: srlv $1, $1, $10 ; MIPS-NEXT: seh $1, $1 ; MIPS-NEXT: # %bb.3: # %entry ; MIPS-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPS-NEXT: # %bb.4: # %entry ; MIPS-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPS-NEXT: sync ; MIPS-NEXT: addiu $sp, $sp, 8 ; MIPS-NEXT: jr $ra ; MIPS-NEXT: nop ; ; MIPSR6-LABEL: test_umin_8: ; MIPSR6: # %bb.0: # %entry ; MIPSR6-NEXT: addiu $sp, $sp, -8 ; MIPSR6-NEXT: .cfi_def_cfa_offset 8 ; MIPSR6-NEXT: # kill: def $at killed $a1 ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: addiu $1, $zero, -4 ; MIPSR6-NEXT: and $6, $4, $1 ; MIPSR6-NEXT: andi $1, $4, 3 ; MIPSR6-NEXT: xori $1, $1, 3 ; MIPSR6-NEXT: sll $10, $1, 3 ; MIPSR6-NEXT: ori $1, $zero, 255 ; MIPSR6-NEXT: sllv $8, $1, $10 ; MIPSR6-NEXT: nor $9, $zero, $8 ; MIPSR6-NEXT: sllv $7, $5, $10 ; MIPSR6-NEXT: $BB11_1: # %entry ; MIPSR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSR6-NEXT: ll $2, 0($6) ; MIPSR6-NEXT: sltu $5, $2, $7 ; MIPSR6-NEXT: selnez $3, $2, $5 ; MIPSR6-NEXT: seleqz $5, $7, $5 ; MIPSR6-NEXT: or $3, $3, $5 ; MIPSR6-NEXT: and $3, $3, $8 ; MIPSR6-NEXT: and $4, $2, $9 ; MIPSR6-NEXT: or $4, $4, $3 ; MIPSR6-NEXT: sc $4, 0($6) ; MIPSR6-NEXT: beqzc $4, $BB11_1 ; MIPSR6-NEXT: # %bb.2: # %entry ; MIPSR6-NEXT: and $1, $2, $8 ; MIPSR6-NEXT: srlv $1, $1, $10 ; MIPSR6-NEXT: seh $1, $1 ; MIPSR6-NEXT: # %bb.3: # %entry ; MIPSR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSR6-NEXT: # %bb.4: # %entry ; MIPSR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSR6-NEXT: sync ; MIPSR6-NEXT: addiu $sp, $sp, 8 ; MIPSR6-NEXT: jrc $ra ; ; MM-LABEL: test_umin_8: ; MM: # %bb.0: # %entry ; MM-NEXT: addiu $sp, $sp, -8 ; MM-NEXT: .cfi_def_cfa_offset 8 ; MM-NEXT: # kill: def $at killed $a1 ; MM-NEXT: sync ; MM-NEXT: addiu $1, $zero, -4 ; MM-NEXT: and $6, $4, $1 ; MM-NEXT: andi $1, $4, 3 ; MM-NEXT: xori $1, $1, 3 ; MM-NEXT: sll $10, $1, 3 ; MM-NEXT: ori $1, $zero, 255 ; MM-NEXT: sllv $8, $1, $10 ; MM-NEXT: nor $9, $zero, $8 ; MM-NEXT: sllv $7, $5, $10 ; MM-NEXT: $BB11_1: # %entry ; MM-NEXT: # =>This Inner Loop Header: Depth=1 ; MM-NEXT: ll $2, 0($6) ; MM-NEXT: sltu $5, $2, $7 ; MM-NEXT: or $3, $2, $zero ; MM-NEXT: movz $3, $7, $5 ; MM-NEXT: and $3, $3, $8 ; MM-NEXT: and $4, $2, $9 ; MM-NEXT: or $4, $4, $3 ; MM-NEXT: sc $4, 0($6) ; MM-NEXT: beqzc $4, $BB11_1 ; MM-NEXT: # %bb.2: # %entry ; MM-NEXT: and $1, $2, $8 ; MM-NEXT: srlv $1, $1, $10 ; MM-NEXT: seh $1, $1 ; MM-NEXT: # %bb.3: # %entry ; MM-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MM-NEXT: # %bb.4: # %entry ; MM-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MM-NEXT: sync ; MM-NEXT: addiusp 8 ; MM-NEXT: jrc $ra ; ; MMR6-LABEL: test_umin_8: ; MMR6: # %bb.0: # %entry ; MMR6-NEXT: addiu $sp, $sp, -8 ; MMR6-NEXT: .cfi_def_cfa_offset 8 ; MMR6-NEXT: # kill: def $at killed $a1 ; MMR6-NEXT: sync ; MMR6-NEXT: addiu $1, $zero, -4 ; MMR6-NEXT: and $6, $4, $1 ; MMR6-NEXT: andi $1, $4, 3 ; MMR6-NEXT: xori $1, $1, 3 ; MMR6-NEXT: sll $10, $1, 3 ; MMR6-NEXT: ori $1, $zero, 255 ; MMR6-NEXT: sllv $8, $1, $10 ; MMR6-NEXT: nor $9, $zero, $8 ; MMR6-NEXT: sllv $7, $5, $10 ; MMR6-NEXT: $BB11_1: # %entry ; MMR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMR6-NEXT: ll $2, 0($6) ; MMR6-NEXT: sltu $5, $2, $7 ; MMR6-NEXT: selnez $3, $2, $5 ; MMR6-NEXT: seleqz $5, $7, $5 ; MMR6-NEXT: or $3, $3, $5 ; MMR6-NEXT: and $3, $3, $8 ; MMR6-NEXT: and $4, $2, $9 ; MMR6-NEXT: or $4, $4, $3 ; MMR6-NEXT: sc $4, 0($6) ; MMR6-NEXT: beqc $4, $zero, $BB11_1 ; MMR6-NEXT: # %bb.2: # %entry ; MMR6-NEXT: and $1, $2, $8 ; MMR6-NEXT: srlv $1, $1, $10 ; MMR6-NEXT: seh $1, $1 ; MMR6-NEXT: # %bb.3: # %entry ; MMR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMR6-NEXT: # %bb.4: # %entry ; MMR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMR6-NEXT: sync ; MMR6-NEXT: addiu $sp, $sp, 8 ; MMR6-NEXT: jrc $ra ; ; MIPSEL-LABEL: test_umin_8: ; MIPSEL: # %bb.0: # %entry ; MIPSEL-NEXT: addiu $sp, $sp, -8 ; MIPSEL-NEXT: .cfi_def_cfa_offset 8 ; MIPSEL-NEXT: # kill: def $at killed $a1 ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: addiu $1, $zero, -4 ; MIPSEL-NEXT: and $6, $4, $1 ; MIPSEL-NEXT: andi $1, $4, 3 ; MIPSEL-NEXT: sll $10, $1, 3 ; MIPSEL-NEXT: ori $1, $zero, 255 ; MIPSEL-NEXT: sllv $8, $1, $10 ; MIPSEL-NEXT: nor $9, $zero, $8 ; MIPSEL-NEXT: sllv $7, $5, $10 ; MIPSEL-NEXT: $BB11_1: # %entry ; MIPSEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSEL-NEXT: ll $2, 0($6) ; MIPSEL-NEXT: and $2, $2, $8 ; MIPSEL-NEXT: and $7, $7, $8 ; MIPSEL-NEXT: sltu $5, $2, $7 ; MIPSEL-NEXT: move $3, $2 ; MIPSEL-NEXT: movz $3, $7, $5 ; MIPSEL-NEXT: and $3, $3, $8 ; MIPSEL-NEXT: and $4, $2, $9 ; MIPSEL-NEXT: or $4, $4, $3 ; MIPSEL-NEXT: sc $4, 0($6) ; MIPSEL-NEXT: beqz $4, $BB11_1 ; MIPSEL-NEXT: nop ; MIPSEL-NEXT: # %bb.2: # %entry ; MIPSEL-NEXT: and $1, $2, $8 ; MIPSEL-NEXT: srlv $1, $1, $10 ; MIPSEL-NEXT: seh $1, $1 ; MIPSEL-NEXT: # %bb.3: # %entry ; MIPSEL-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSEL-NEXT: # %bb.4: # %entry ; MIPSEL-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSEL-NEXT: sync ; MIPSEL-NEXT: addiu $sp, $sp, 8 ; MIPSEL-NEXT: jr $ra ; MIPSEL-NEXT: nop ; ; MIPSELR6-LABEL: test_umin_8: ; MIPSELR6: # %bb.0: # %entry ; MIPSELR6-NEXT: addiu $sp, $sp, -8 ; MIPSELR6-NEXT: .cfi_def_cfa_offset 8 ; MIPSELR6-NEXT: # kill: def $at killed $a1 ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: addiu $1, $zero, -4 ; MIPSELR6-NEXT: and $6, $4, $1 ; MIPSELR6-NEXT: andi $1, $4, 3 ; MIPSELR6-NEXT: sll $10, $1, 3 ; MIPSELR6-NEXT: ori $1, $zero, 255 ; MIPSELR6-NEXT: sllv $8, $1, $10 ; MIPSELR6-NEXT: nor $9, $zero, $8 ; MIPSELR6-NEXT: sllv $7, $5, $10 ; MIPSELR6-NEXT: $BB11_1: # %entry ; MIPSELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPSELR6-NEXT: ll $2, 0($6) ; MIPSELR6-NEXT: and $2, $2, $8 ; MIPSELR6-NEXT: and $7, $7, $8 ; MIPSELR6-NEXT: sltu $5, $2, $7 ; MIPSELR6-NEXT: selnez $3, $2, $5 ; MIPSELR6-NEXT: seleqz $5, $7, $5 ; MIPSELR6-NEXT: or $3, $3, $5 ; MIPSELR6-NEXT: and $3, $3, $8 ; MIPSELR6-NEXT: and $4, $2, $9 ; MIPSELR6-NEXT: or $4, $4, $3 ; MIPSELR6-NEXT: sc $4, 0($6) ; MIPSELR6-NEXT: beqzc $4, $BB11_1 ; MIPSELR6-NEXT: # %bb.2: # %entry ; MIPSELR6-NEXT: and $1, $2, $8 ; MIPSELR6-NEXT: srlv $1, $1, $10 ; MIPSELR6-NEXT: seh $1, $1 ; MIPSELR6-NEXT: # %bb.3: # %entry ; MIPSELR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MIPSELR6-NEXT: # %bb.4: # %entry ; MIPSELR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MIPSELR6-NEXT: sync ; MIPSELR6-NEXT: addiu $sp, $sp, 8 ; MIPSELR6-NEXT: jrc $ra ; ; MMEL-LABEL: test_umin_8: ; MMEL: # %bb.0: # %entry ; MMEL-NEXT: addiu $sp, $sp, -8 ; MMEL-NEXT: .cfi_def_cfa_offset 8 ; MMEL-NEXT: # kill: def $at killed $a1 ; MMEL-NEXT: sync ; MMEL-NEXT: addiu $1, $zero, -4 ; MMEL-NEXT: and $6, $4, $1 ; MMEL-NEXT: andi $1, $4, 3 ; MMEL-NEXT: sll $10, $1, 3 ; MMEL-NEXT: ori $1, $zero, 255 ; MMEL-NEXT: sllv $8, $1, $10 ; MMEL-NEXT: nor $9, $zero, $8 ; MMEL-NEXT: sllv $7, $5, $10 ; MMEL-NEXT: $BB11_1: # %entry ; MMEL-NEXT: # =>This Inner Loop Header: Depth=1 ; MMEL-NEXT: ll $2, 0($6) ; MMEL-NEXT: and $2, $2, $8 ; MMEL-NEXT: and $7, $7, $8 ; MMEL-NEXT: sltu $5, $2, $7 ; MMEL-NEXT: or $3, $2, $zero ; MMEL-NEXT: movz $3, $7, $5 ; MMEL-NEXT: and $3, $3, $8 ; MMEL-NEXT: and $4, $2, $9 ; MMEL-NEXT: or $4, $4, $3 ; MMEL-NEXT: sc $4, 0($6) ; MMEL-NEXT: beqzc $4, $BB11_1 ; MMEL-NEXT: # %bb.2: # %entry ; MMEL-NEXT: and $1, $2, $8 ; MMEL-NEXT: srlv $1, $1, $10 ; MMEL-NEXT: seh $1, $1 ; MMEL-NEXT: # %bb.3: # %entry ; MMEL-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMEL-NEXT: # %bb.4: # %entry ; MMEL-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMEL-NEXT: sync ; MMEL-NEXT: addiusp 8 ; MMEL-NEXT: jrc $ra ; ; MMELR6-LABEL: test_umin_8: ; MMELR6: # %bb.0: # %entry ; MMELR6-NEXT: addiu $sp, $sp, -8 ; MMELR6-NEXT: .cfi_def_cfa_offset 8 ; MMELR6-NEXT: # kill: def $at killed $a1 ; MMELR6-NEXT: sync ; MMELR6-NEXT: addiu $1, $zero, -4 ; MMELR6-NEXT: and $6, $4, $1 ; MMELR6-NEXT: andi $1, $4, 3 ; MMELR6-NEXT: sll $10, $1, 3 ; MMELR6-NEXT: ori $1, $zero, 255 ; MMELR6-NEXT: sllv $8, $1, $10 ; MMELR6-NEXT: nor $9, $zero, $8 ; MMELR6-NEXT: sllv $7, $5, $10 ; MMELR6-NEXT: $BB11_1: # %entry ; MMELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MMELR6-NEXT: ll $2, 0($6) ; MMELR6-NEXT: and $2, $2, $8 ; MMELR6-NEXT: and $7, $7, $8 ; MMELR6-NEXT: sltu $5, $2, $7 ; MMELR6-NEXT: selnez $3, $2, $5 ; MMELR6-NEXT: seleqz $5, $7, $5 ; MMELR6-NEXT: or $3, $3, $5 ; MMELR6-NEXT: and $3, $3, $8 ; MMELR6-NEXT: and $4, $2, $9 ; MMELR6-NEXT: or $4, $4, $3 ; MMELR6-NEXT: sc $4, 0($6) ; MMELR6-NEXT: beqc $4, $zero, $BB11_1 ; MMELR6-NEXT: # %bb.2: # %entry ; MMELR6-NEXT: and $1, $2, $8 ; MMELR6-NEXT: srlv $1, $1, $10 ; MMELR6-NEXT: seh $1, $1 ; MMELR6-NEXT: # %bb.3: # %entry ; MMELR6-NEXT: sw $1, 4($sp) # 4-byte Folded Spill ; MMELR6-NEXT: # %bb.4: # %entry ; MMELR6-NEXT: lw $2, 4($sp) # 4-byte Folded Reload ; MMELR6-NEXT: sync ; MMELR6-NEXT: addiu $sp, $sp, 8 ; MMELR6-NEXT: jrc $ra ; ; MIPS64-LABEL: test_umin_8: ; MIPS64: # %bb.0: # %entry ; MIPS64-NEXT: daddiu $sp, $sp, -16 ; MIPS64-NEXT: .cfi_def_cfa_offset 16 ; MIPS64-NEXT: move $1, $5 ; MIPS64-NEXT: sync ; MIPS64-NEXT: daddiu $2, $zero, -4 ; MIPS64-NEXT: and $6, $4, $2 ; MIPS64-NEXT: andi $2, $4, 3 ; MIPS64-NEXT: xori $2, $2, 3 ; MIPS64-NEXT: sll $10, $2, 3 ; MIPS64-NEXT: ori $2, $zero, 255 ; MIPS64-NEXT: sllv $8, $2, $10 ; MIPS64-NEXT: nor $9, $zero, $8 ; MIPS64-NEXT: sllv $7, $1, $10 ; MIPS64-NEXT: .LBB11_1: # %entry ; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64-NEXT: ll $2, 0($6) ; MIPS64-NEXT: sltu $5, $2, $7 ; MIPS64-NEXT: move $3, $2 ; MIPS64-NEXT: movz $3, $7, $5 ; MIPS64-NEXT: and $3, $3, $8 ; MIPS64-NEXT: and $4, $2, $9 ; MIPS64-NEXT: or $4, $4, $3 ; MIPS64-NEXT: sc $4, 0($6) ; MIPS64-NEXT: beqz $4, .LBB11_1 ; MIPS64-NEXT: nop ; MIPS64-NEXT: # %bb.2: # %entry ; MIPS64-NEXT: and $1, $2, $8 ; MIPS64-NEXT: srlv $1, $1, $10 ; MIPS64-NEXT: seh $1, $1 ; MIPS64-NEXT: # %bb.3: # %entry ; MIPS64-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64-NEXT: # %bb.4: # %entry ; MIPS64-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64-NEXT: sync ; MIPS64-NEXT: daddiu $sp, $sp, 16 ; MIPS64-NEXT: jr $ra ; MIPS64-NEXT: nop ; ; MIPS64R6-LABEL: test_umin_8: ; MIPS64R6: # %bb.0: # %entry ; MIPS64R6-NEXT: daddiu $sp, $sp, -16 ; MIPS64R6-NEXT: .cfi_def_cfa_offset 16 ; MIPS64R6-NEXT: move $1, $5 ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: daddiu $2, $zero, -4 ; MIPS64R6-NEXT: and $6, $4, $2 ; MIPS64R6-NEXT: andi $2, $4, 3 ; MIPS64R6-NEXT: xori $2, $2, 3 ; MIPS64R6-NEXT: sll $10, $2, 3 ; MIPS64R6-NEXT: ori $2, $zero, 255 ; MIPS64R6-NEXT: sllv $8, $2, $10 ; MIPS64R6-NEXT: nor $9, $zero, $8 ; MIPS64R6-NEXT: sllv $7, $1, $10 ; MIPS64R6-NEXT: .LBB11_1: # %entry ; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64R6-NEXT: ll $2, 0($6) ; MIPS64R6-NEXT: sltu $5, $2, $7 ; MIPS64R6-NEXT: selnez $3, $2, $5 ; MIPS64R6-NEXT: seleqz $5, $7, $5 ; MIPS64R6-NEXT: or $3, $3, $5 ; MIPS64R6-NEXT: and $3, $3, $8 ; MIPS64R6-NEXT: and $4, $2, $9 ; MIPS64R6-NEXT: or $4, $4, $3 ; MIPS64R6-NEXT: sc $4, 0($6) ; MIPS64R6-NEXT: beqzc $4, .LBB11_1 ; MIPS64R6-NEXT: # %bb.2: # %entry ; MIPS64R6-NEXT: and $1, $2, $8 ; MIPS64R6-NEXT: srlv $1, $1, $10 ; MIPS64R6-NEXT: seh $1, $1 ; MIPS64R6-NEXT: # %bb.3: # %entry ; MIPS64R6-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64R6-NEXT: # %bb.4: # %entry ; MIPS64R6-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64R6-NEXT: sync ; MIPS64R6-NEXT: daddiu $sp, $sp, 16 ; MIPS64R6-NEXT: jrc $ra ; ; MIPS64EL-LABEL: test_umin_8: ; MIPS64EL: # %bb.0: # %entry ; MIPS64EL-NEXT: daddiu $sp, $sp, -16 ; MIPS64EL-NEXT: .cfi_def_cfa_offset 16 ; MIPS64EL-NEXT: move $1, $5 ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: daddiu $2, $zero, -4 ; MIPS64EL-NEXT: and $6, $4, $2 ; MIPS64EL-NEXT: andi $2, $4, 3 ; MIPS64EL-NEXT: sll $10, $2, 3 ; MIPS64EL-NEXT: ori $2, $zero, 255 ; MIPS64EL-NEXT: sllv $8, $2, $10 ; MIPS64EL-NEXT: nor $9, $zero, $8 ; MIPS64EL-NEXT: sllv $7, $1, $10 ; MIPS64EL-NEXT: .LBB11_1: # %entry ; MIPS64EL-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64EL-NEXT: ll $2, 0($6) ; MIPS64EL-NEXT: and $2, $2, $8 ; MIPS64EL-NEXT: and $7, $7, $8 ; MIPS64EL-NEXT: sltu $5, $2, $7 ; MIPS64EL-NEXT: move $3, $2 ; MIPS64EL-NEXT: movz $3, $7, $5 ; MIPS64EL-NEXT: and $3, $3, $8 ; MIPS64EL-NEXT: and $4, $2, $9 ; MIPS64EL-NEXT: or $4, $4, $3 ; MIPS64EL-NEXT: sc $4, 0($6) ; MIPS64EL-NEXT: beqz $4, .LBB11_1 ; MIPS64EL-NEXT: nop ; MIPS64EL-NEXT: # %bb.2: # %entry ; MIPS64EL-NEXT: and $1, $2, $8 ; MIPS64EL-NEXT: srlv $1, $1, $10 ; MIPS64EL-NEXT: seh $1, $1 ; MIPS64EL-NEXT: # %bb.3: # %entry ; MIPS64EL-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64EL-NEXT: # %bb.4: # %entry ; MIPS64EL-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64EL-NEXT: sync ; MIPS64EL-NEXT: daddiu $sp, $sp, 16 ; MIPS64EL-NEXT: jr $ra ; MIPS64EL-NEXT: nop ; ; MIPS64ELR6-LABEL: test_umin_8: ; MIPS64ELR6: # %bb.0: # %entry ; MIPS64ELR6-NEXT: daddiu $sp, $sp, -16 ; MIPS64ELR6-NEXT: .cfi_def_cfa_offset 16 ; MIPS64ELR6-NEXT: move $1, $5 ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: daddiu $2, $zero, -4 ; MIPS64ELR6-NEXT: and $6, $4, $2 ; MIPS64ELR6-NEXT: andi $2, $4, 3 ; MIPS64ELR6-NEXT: sll $10, $2, 3 ; MIPS64ELR6-NEXT: ori $2, $zero, 255 ; MIPS64ELR6-NEXT: sllv $8, $2, $10 ; MIPS64ELR6-NEXT: nor $9, $zero, $8 ; MIPS64ELR6-NEXT: sllv $7, $1, $10 ; MIPS64ELR6-NEXT: .LBB11_1: # %entry ; MIPS64ELR6-NEXT: # =>This Inner Loop Header: Depth=1 ; MIPS64ELR6-NEXT: ll $2, 0($6) ; MIPS64ELR6-NEXT: and $2, $2, $8 ; MIPS64ELR6-NEXT: and $7, $7, $8 ; MIPS64ELR6-NEXT: sltu $5, $2, $7 ; MIPS64ELR6-NEXT: selnez $3, $2, $5 ; MIPS64ELR6-NEXT: seleqz $5, $7, $5 ; MIPS64ELR6-NEXT: or $3, $3, $5 ; MIPS64ELR6-NEXT: and $3, $3, $8 ; MIPS64ELR6-NEXT: and $4, $2, $9 ; MIPS64ELR6-NEXT: or $4, $4, $3 ; MIPS64ELR6-NEXT: sc $4, 0($6) ; MIPS64ELR6-NEXT: beqzc $4, .LBB11_1 ; MIPS64ELR6-NEXT: # %bb.2: # %entry ; MIPS64ELR6-NEXT: and $1, $2, $8 ; MIPS64ELR6-NEXT: srlv $1, $1, $10 ; MIPS64ELR6-NEXT: seh $1, $1 ; MIPS64ELR6-NEXT: # %bb.3: # %entry ; MIPS64ELR6-NEXT: sw $1, 12($sp) # 4-byte Folded Spill ; MIPS64ELR6-NEXT: # %bb.4: # %entry ; MIPS64ELR6-NEXT: lw $2, 12($sp) # 4-byte Folded Reload ; MIPS64ELR6-NEXT: sync ; MIPS64ELR6-NEXT: daddiu $sp, $sp, 16 ; MIPS64ELR6-NEXT: jrc $ra entry: %0 = atomicrmw umin i8* %ptr, i8 %val seq_cst ret i8 %0 }