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