1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mipsel -mcpu=mips32r6 -disable-mips-delay-filler < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips -mcpu=mips32r6 -disable-mips-delay-filler < %s \ 3*9880d681SAndroid Build Coastguard Worker; RUN: -filetype=obj -o - | llvm-objdump -d - | FileCheck %s -check-prefix=ENCODING 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; bnezc and beqzc have restriction that $rt != 0 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdefine i32 @f() { 8*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f 9*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: bnezc $0 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 1, 1 12*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker if.then: 15*9880d681SAndroid Build Coastguard Worker ret i32 1 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker if.end: 18*9880d681SAndroid Build Coastguard Worker ret i32 0 19*9880d681SAndroid Build Coastguard Worker} 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerdefine i32 @f1() { 22*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1 23*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: beqzc $0 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 0, 0 26*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker if.then: 29*9880d681SAndroid Build Coastguard Worker ret i32 1 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker if.end: 32*9880d681SAndroid Build Coastguard Worker ret i32 0 33*9880d681SAndroid Build Coastguard Worker} 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Worker; We silently fixup cases where the register allocator or user has given us 36*9880d681SAndroid Build Coastguard Worker; an instruction with incorrect operands that is trivially acceptable. 37*9880d681SAndroid Build Coastguard Worker; beqc and bnec have the restriction that $rs < $rt. 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Workerdefine i32 @f2(i32 %a, i32 %b) { 40*9880d681SAndroid Build Coastguard Worker; ENCODING-LABEL: f2 41*9880d681SAndroid Build Coastguard Worker; ENCODING-NOT: beqc $5, $4 42*9880d681SAndroid Build Coastguard Worker; ENCODING-NOT: bnec $5, $4 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %b, %a 45*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Worker if.then: 48*9880d681SAndroid Build Coastguard Worker ret i32 1 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker if.end: 51*9880d681SAndroid Build Coastguard Worker ret i32 0 52*9880d681SAndroid Build Coastguard Worker} 53*9880d681SAndroid Build Coastguard Worker 54