1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -asm-verbose=false | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; Test that basic 32-bit integer 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; Function Attrs: nounwind readnone 9*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.ctpop.i32(i32) #1 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone 12*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.ctlz.i32(i32, i1) #1 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone 15*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.cttz.i32(i32, i1) #1 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: add32: 18*9880d681SAndroid Build Coastguard Worker; CHECK: add %r{{[0-9]+}}, %r{{[0-9]+}}, %rv 19*9880d681SAndroid Build Coastguard Workerdefine i32 @add32(i32 %x, i32 %y) { 20*9880d681SAndroid Build Coastguard Worker %a = add i32 %x, %y 21*9880d681SAndroid Build Coastguard Worker ret i32 %a 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sub32: 25*9880d681SAndroid Build Coastguard Worker; CHECK: sub %r{{[0-9]+}}, %r{{[0-9]+}}, %rv 26*9880d681SAndroid Build Coastguard Workerdefine i32 @sub32(i32 %x, i32 %y) { 27*9880d681SAndroid Build Coastguard Worker %a = sub i32 %x, %y 28*9880d681SAndroid Build Coastguard Worker ret i32 %a 29*9880d681SAndroid Build Coastguard Worker} 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mul32: 32*9880d681SAndroid Build Coastguard Worker; CHECK: bt __mulsi3 33*9880d681SAndroid Build Coastguard Workerdefine i32 @mul32(i32 %x, i32 %y) { 34*9880d681SAndroid Build Coastguard Worker %a = mul i32 %x, %y 35*9880d681SAndroid Build Coastguard Worker ret i32 %a 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sdiv32: 39*9880d681SAndroid Build Coastguard Worker; CHECK: bt __divsi3 40*9880d681SAndroid Build Coastguard Workerdefine i32 @sdiv32(i32 %x, i32 %y) { 41*9880d681SAndroid Build Coastguard Worker %a = sdiv i32 %x, %y 42*9880d681SAndroid Build Coastguard Worker ret i32 %a 43*9880d681SAndroid Build Coastguard Worker} 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: udiv32: 46*9880d681SAndroid Build Coastguard Worker; CHECK: bt __udivsi3 47*9880d681SAndroid Build Coastguard Workerdefine i32 @udiv32(i32 %x, i32 %y) { 48*9880d681SAndroid Build Coastguard Worker %a = udiv i32 %x, %y 49*9880d681SAndroid Build Coastguard Worker ret i32 %a 50*9880d681SAndroid Build Coastguard Worker} 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: srem32: 53*9880d681SAndroid Build Coastguard Worker; CHECK: bt __modsi3 54*9880d681SAndroid Build Coastguard Workerdefine i32 @srem32(i32 %x, i32 %y) { 55*9880d681SAndroid Build Coastguard Worker %a = srem i32 %x, %y 56*9880d681SAndroid Build Coastguard Worker ret i32 %a 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: urem32: 60*9880d681SAndroid Build Coastguard Worker; CHECK: bt __umodsi3 61*9880d681SAndroid Build Coastguard Workerdefine i32 @urem32(i32 %x, i32 %y) { 62*9880d681SAndroid Build Coastguard Worker %a = urem i32 %x, %y 63*9880d681SAndroid Build Coastguard Worker ret i32 %a 64*9880d681SAndroid Build Coastguard Worker} 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and32: 67*9880d681SAndroid Build Coastguard Worker; CHECK: and %r{{[0-9]+}}, %r{{[0-9]+}}, %rv 68*9880d681SAndroid Build Coastguard Workerdefine i32 @and32(i32 %x, i32 %y) { 69*9880d681SAndroid Build Coastguard Worker %a = and i32 %x, %y 70*9880d681SAndroid Build Coastguard Worker ret i32 %a 71*9880d681SAndroid Build Coastguard Worker} 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or32: 74*9880d681SAndroid Build Coastguard Worker; CHECK: or %r{{[0-9]+}}, %r{{[0-9]+}}, %rv 75*9880d681SAndroid Build Coastguard Workerdefine i32 @or32(i32 %x, i32 %y) { 76*9880d681SAndroid Build Coastguard Worker %a = or i32 %x, %y 77*9880d681SAndroid Build Coastguard Worker ret i32 %a 78*9880d681SAndroid Build Coastguard Worker} 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor32: 81*9880d681SAndroid Build Coastguard Worker; CHECK: xor %r{{[0-9]+}}, %r{{[0-9]+}}, %rv 82*9880d681SAndroid Build Coastguard Workerdefine i32 @xor32(i32 %x, i32 %y) { 83*9880d681SAndroid Build Coastguard Worker %a = xor i32 %x, %y 84*9880d681SAndroid Build Coastguard Worker ret i32 %a 85*9880d681SAndroid Build Coastguard Worker} 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl32: 88*9880d681SAndroid Build Coastguard Worker; CHECK: sh %r{{[0-9]+}}, %r{{[0-9]+}}, %rv 89*9880d681SAndroid Build Coastguard Workerdefine i32 @shl32(i32 %x, i32 %y) { 90*9880d681SAndroid Build Coastguard Worker %a = shl i32 %x, %y 91*9880d681SAndroid Build Coastguard Worker ret i32 %a 92*9880d681SAndroid Build Coastguard Worker} 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shr32: 95*9880d681SAndroid Build Coastguard Worker; CHECK: sub %r0, %r{{[0-9]+}}, %r{{[0-9]+}} 96*9880d681SAndroid Build Coastguard Worker; CHECK: sh %r{{[0-9]+}}, %r{{[0-9]+}}, %rv 97*9880d681SAndroid Build Coastguard Workerdefine i32 @shr32(i32 %x, i32 %y) { 98*9880d681SAndroid Build Coastguard Worker %a = lshr i32 %x, %y 99*9880d681SAndroid Build Coastguard Worker ret i32 %a 100*9880d681SAndroid Build Coastguard Worker} 101*9880d681SAndroid Build Coastguard Worker 102*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sar32 103*9880d681SAndroid Build Coastguard Worker; CHECK: sub %r0, %r{{[0-9]+}}, %r{{[0-9]+}} 104*9880d681SAndroid Build Coastguard Worker; CHECK: sha %r{{[0-9]+}}, %r{{[0-9]+}}, %rv 105*9880d681SAndroid Build Coastguard Workerdefine i32 @sar32(i32 %x, i32 %y) { 106*9880d681SAndroid Build Coastguard Worker %a = ashr i32 %x, %y 107*9880d681SAndroid Build Coastguard Worker ret i32 %a 108*9880d681SAndroid Build Coastguard Worker} 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: clz32: 111*9880d681SAndroid Build Coastguard Worker; CHECK: leadz %r{{[0-9]+}}, %rv 112*9880d681SAndroid Build Coastguard Workerdefine i32 @clz32(i32 %x) { 113*9880d681SAndroid Build Coastguard Worker %a = call i32 @llvm.ctlz.i32(i32 %x, i1 false) 114*9880d681SAndroid Build Coastguard Worker ret i32 %a 115*9880d681SAndroid Build Coastguard Worker} 116*9880d681SAndroid Build Coastguard Worker 117*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: clz32_zero_undef: 118*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: sub.f 119*9880d681SAndroid Build Coastguard Worker; CHECK: leadz %r{{[0-9]+}}, %rv 120*9880d681SAndroid Build Coastguard Workerdefine i32 @clz32_zero_undef(i32 %x) { 121*9880d681SAndroid Build Coastguard Worker %a = call i32 @llvm.ctlz.i32(i32 %x, i1 true) 122*9880d681SAndroid Build Coastguard Worker ret i32 %a 123*9880d681SAndroid Build Coastguard Worker} 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ctz32: 126*9880d681SAndroid Build Coastguard Worker; CHECK: trailz %r{{[0-9]+}}, %rv 127*9880d681SAndroid Build Coastguard Workerdefine i32 @ctz32(i32 %x) { 128*9880d681SAndroid Build Coastguard Worker %a = call i32 @llvm.cttz.i32(i32 %x, i1 false) 129*9880d681SAndroid Build Coastguard Worker ret i32 %a 130*9880d681SAndroid Build Coastguard Worker} 131*9880d681SAndroid Build Coastguard Worker 132*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ctz32_zero_undef: 133*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: sub.f 134*9880d681SAndroid Build Coastguard Worker; CHECK: trailz %r{{[0-9]+}}, %rv 135*9880d681SAndroid Build Coastguard Workerdefine i32 @ctz32_zero_undef(i32 %x) { 136*9880d681SAndroid Build Coastguard Worker %a = call i32 @llvm.cttz.i32(i32 %x, i1 true) 137*9880d681SAndroid Build Coastguard Worker ret i32 %a 138*9880d681SAndroid Build Coastguard Worker} 139*9880d681SAndroid Build Coastguard Worker 140*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: popcnt32: 141*9880d681SAndroid Build Coastguard Worker; CHECK: popc %r{{[0-9]+}}, %rv 142*9880d681SAndroid Build Coastguard Workerdefine i32 @popcnt32(i32 %x) { 143*9880d681SAndroid Build Coastguard Worker %a = call i32 @llvm.ctpop.i32(i32 %x) 144*9880d681SAndroid Build Coastguard Worker ret i32 %a 145*9880d681SAndroid Build Coastguard Worker} 146