1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; Test that basic 64-bit integer comparison operations assemble as expected. 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-m:e-p:32:32-i64:64-a:0:32-n32-S64" 6*9880d681SAndroid Build Coastguard Workertarget triple = "lanai" 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: eq_i64: 9*9880d681SAndroid Build Coastguard Worker; CHECK: xor 10*9880d681SAndroid Build Coastguard Worker; CHECK: xor 11*9880d681SAndroid Build Coastguard Worker; CHECK: or.f 12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: seq 13*9880d681SAndroid Build Coastguard Workerdefine i32 @eq_i64(i64 inreg %x, i64 inreg %y) { 14*9880d681SAndroid Build Coastguard Worker %a = icmp eq i64 %x, %y 15*9880d681SAndroid Build Coastguard Worker %b = zext i1 %a to i32 16*9880d681SAndroid Build Coastguard Worker ret i32 %b 17*9880d681SAndroid Build Coastguard Worker} 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ne_i64: 20*9880d681SAndroid Build Coastguard Worker; CHECK: xor 21*9880d681SAndroid Build Coastguard Worker; CHECK: xor 22*9880d681SAndroid Build Coastguard Worker; CHECK: or.f 23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sne 24*9880d681SAndroid Build Coastguard Workerdefine i32 @ne_i64(i64 inreg %x, i64 inreg %y) { 25*9880d681SAndroid Build Coastguard Worker %a = icmp ne i64 %x, %y 26*9880d681SAndroid Build Coastguard Worker %b = zext i1 %a to i32 27*9880d681SAndroid Build Coastguard Worker ret i32 %b 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: slt_i64: 31*9880d681SAndroid Build Coastguard Worker; CHECK: sub.f %r7, %r19, %r3 32*9880d681SAndroid Build Coastguard Worker; CHECK: subb.f %r6, %r18, %r3 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: slt 34*9880d681SAndroid Build Coastguard Workerdefine i32 @slt_i64(i64 inreg %x, i64 inreg %y) { 35*9880d681SAndroid Build Coastguard Worker %a = icmp slt i64 %x, %y 36*9880d681SAndroid Build Coastguard Worker %b = zext i1 %a to i32 37*9880d681SAndroid Build Coastguard Worker ret i32 %b 38*9880d681SAndroid Build Coastguard Worker} 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sle_i64: 41*9880d681SAndroid Build Coastguard Worker; CHECK: sub.f %r19, %r7, %r3 42*9880d681SAndroid Build Coastguard Worker; CHECK: subb.f %r18, %r6, %r3 43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sge %rv 44*9880d681SAndroid Build Coastguard Workerdefine i32 @sle_i64(i64 inreg %x, i64 inreg %y) { 45*9880d681SAndroid Build Coastguard Worker %a = icmp sle i64 %x, %y 46*9880d681SAndroid Build Coastguard Worker %b = zext i1 %a to i32 47*9880d681SAndroid Build Coastguard Worker ret i32 %b 48*9880d681SAndroid Build Coastguard Worker} 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ult_i64: 51*9880d681SAndroid Build Coastguard Worker; CHECK: sub.f %r7, %r19, %r3 52*9880d681SAndroid Build Coastguard Worker; CHECK: subb.f %r6, %r18, %r3 53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sult %rv 54*9880d681SAndroid Build Coastguard Workerdefine i32 @ult_i64(i64 inreg %x, i64 inreg %y) { 55*9880d681SAndroid Build Coastguard Worker %a = icmp ult i64 %x, %y 56*9880d681SAndroid Build Coastguard Worker %b = zext i1 %a to i32 57*9880d681SAndroid Build Coastguard Worker ret i32 %b 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ule_i64: 61*9880d681SAndroid Build Coastguard Worker; CHECK: sub.f %r19, %r7, %r3 62*9880d681SAndroid Build Coastguard Worker; CHECK: subb.f %r18, %r6, %r3 63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: suge %rv 64*9880d681SAndroid Build Coastguard Workerdefine i32 @ule_i64(i64 inreg %x, i64 inreg %y) { 65*9880d681SAndroid Build Coastguard Worker %a = icmp ule i64 %x, %y 66*9880d681SAndroid Build Coastguard Worker %b = zext i1 %a to i32 67*9880d681SAndroid Build Coastguard Worker ret i32 %b 68*9880d681SAndroid Build Coastguard Worker} 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sgt_i64: 71*9880d681SAndroid Build Coastguard Worker; CHECK: sub.f %r19, %r7, %r3 72*9880d681SAndroid Build Coastguard Worker; CHECK: subb.f %r18, %r6, %r3 73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: slt %rv 74*9880d681SAndroid Build Coastguard Workerdefine i32 @sgt_i64(i64 inreg %x, i64 inreg %y) { 75*9880d681SAndroid Build Coastguard Worker %a = icmp sgt i64 %x, %y 76*9880d681SAndroid Build Coastguard Worker %b = zext i1 %a to i32 77*9880d681SAndroid Build Coastguard Worker ret i32 %b 78*9880d681SAndroid Build Coastguard Worker} 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sge_i64: 81*9880d681SAndroid Build Coastguard Worker; CHECK: sub.f %r7, %r19, %r3 82*9880d681SAndroid Build Coastguard Worker; CHECK: subb.f %r6, %r18, %r3 83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sge %rv 84*9880d681SAndroid Build Coastguard Workerdefine i32 @sge_i64(i64 inreg %x, i64 inreg %y) { 85*9880d681SAndroid Build Coastguard Worker %a = icmp sge i64 %x, %y 86*9880d681SAndroid Build Coastguard Worker %b = zext i1 %a to i32 87*9880d681SAndroid Build Coastguard Worker ret i32 %b 88*9880d681SAndroid Build Coastguard Worker} 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ugt_i64: 91*9880d681SAndroid Build Coastguard Worker; CHECK: sub.f %r19, %r7, %r3 92*9880d681SAndroid Build Coastguard Worker; CHECK: subb.f %r18, %r6, %r3 93*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sult %rv 94*9880d681SAndroid Build Coastguard Workerdefine i32 @ugt_i64(i64 inreg %x, i64 inreg %y) { 95*9880d681SAndroid Build Coastguard Worker %a = icmp ugt i64 %x, %y 96*9880d681SAndroid Build Coastguard Worker %b = zext i1 %a to i32 97*9880d681SAndroid Build Coastguard Worker ret i32 %b 98*9880d681SAndroid Build Coastguard Worker} 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: uge_i64: 101*9880d681SAndroid Build Coastguard Worker; CHECK: sub.f %r7, %r19, %r3 102*9880d681SAndroid Build Coastguard Worker; CHECK: subb.f %r6, %r18, %r3 103*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: suge %rv 104*9880d681SAndroid Build Coastguard Workerdefine i32 @uge_i64(i64 inreg %x, i64 inreg %y) { 105*9880d681SAndroid Build Coastguard Worker %a = icmp uge i64 %x, %y 106*9880d681SAndroid Build Coastguard Worker %b = zext i1 %a to i32 107*9880d681SAndroid Build Coastguard Worker ret i32 %b 108*9880d681SAndroid Build Coastguard Worker} 109