1; RUN: llc < %s -march=nvptx -mcpu=sm_35 | FileCheck %s 2 3; 64-bit divides and rems should be split into a fast and slow path where 4; the fast path uses a 32-bit operation. 5 6define void @sdiv64(i64 %a, i64 %b, i64* %retptr) { 7; CHECK-LABEL: sdiv64( 8; CHECK: div.s64 9; CHECK: div.u32 10; CHECK: ret 11 %d = sdiv i64 %a, %b 12 store i64 %d, i64* %retptr 13 ret void 14} 15 16define void @udiv64(i64 %a, i64 %b, i64* %retptr) { 17; CHECK-LABEL: udiv64( 18; CHECK: div.u64 19; CHECK: div.u32 20; CHECK: ret 21 %d = udiv i64 %a, %b 22 store i64 %d, i64* %retptr 23 ret void 24} 25 26define void @srem64(i64 %a, i64 %b, i64* %retptr) { 27; CHECK-LABEL: srem64( 28; CHECK: rem.s64 29; CHECK: rem.u32 30; CHECK: ret 31 %d = srem i64 %a, %b 32 store i64 %d, i64* %retptr 33 ret void 34} 35 36define void @urem64(i64 %a, i64 %b, i64* %retptr) { 37; CHECK-LABEL: urem64( 38; CHECK: rem.u64 39; CHECK: rem.u32 40; CHECK: ret 41 %d = urem i64 %a, %b 42 store i64 %d, i64* %retptr 43 ret void 44} 45 46define void @sdiv32(i32 %a, i32 %b, i32* %retptr) { 47; CHECK-LABEL: sdiv32( 48; CHECK: div.s32 49; CHECK-NOT: div. 50 %d = sdiv i32 %a, %b 51 store i32 %d, i32* %retptr 52 ret void 53} 54 55define void @udiv32(i32 %a, i32 %b, i32* %retptr) { 56; CHECK-LABEL: udiv32( 57; CHECK: div.u32 58; CHECK-NOT: div. 59 %d = udiv i32 %a, %b 60 store i32 %d, i32* %retptr 61 ret void 62} 63 64define void @srem32(i32 %a, i32 %b, i32* %retptr) { 65; CHECK-LABEL: srem32( 66; CHECK: rem.s32 67; CHECK-NOT: rem. 68 %d = srem i32 %a, %b 69 store i32 %d, i32* %retptr 70 ret void 71} 72 73define void @urem32(i32 %a, i32 %b, i32* %retptr) { 74; CHECK-LABEL: urem32( 75; CHECK: rem.u32 76; CHECK-NOT: rem. 77 %d = urem i32 %a, %b 78 store i32 %d, i32* %retptr 79 ret void 80} 81