82 lines · plain
1; RUN: llc < %s -mtriple=nvptx64 -mcpu=sm_35 | FileCheck %s2; RUN: %if ptxas %{ llc < %s -mtriple=nvptx64 -mcpu=sm_35 | %ptxas-verify %}3 4; 64-bit divides and rems should be split into a fast and slow path where5; the fast path uses a 32-bit operation.6 7define void @sdiv64(i64 %a, i64 %b, ptr %retptr) {8; CHECK-LABEL: sdiv64(9; CHECK: div.s6410; CHECK: div.u3211; CHECK: ret12 %d = sdiv i64 %a, %b13 store i64 %d, ptr %retptr14 ret void15}16 17define void @udiv64(i64 %a, i64 %b, ptr %retptr) {18; CHECK-LABEL: udiv64(19; CHECK: div.u6420; CHECK: div.u3221; CHECK: ret22 %d = udiv i64 %a, %b23 store i64 %d, ptr %retptr24 ret void25}26 27define void @srem64(i64 %a, i64 %b, ptr %retptr) {28; CHECK-LABEL: srem64(29; CHECK: rem.s6430; CHECK: rem.u3231; CHECK: ret32 %d = srem i64 %a, %b33 store i64 %d, ptr %retptr34 ret void35}36 37define void @urem64(i64 %a, i64 %b, ptr %retptr) {38; CHECK-LABEL: urem64(39; CHECK: rem.u6440; CHECK: rem.u3241; CHECK: ret42 %d = urem i64 %a, %b43 store i64 %d, ptr %retptr44 ret void45}46 47define void @sdiv32(i32 %a, i32 %b, ptr %retptr) {48; CHECK-LABEL: sdiv32(49; CHECK: div.s3250; CHECK-NOT: div.51 %d = sdiv i32 %a, %b52 store i32 %d, ptr %retptr53 ret void54}55 56define void @udiv32(i32 %a, i32 %b, ptr %retptr) {57; CHECK-LABEL: udiv32(58; CHECK: div.u3259; CHECK-NOT: div.60 %d = udiv i32 %a, %b61 store i32 %d, ptr %retptr62 ret void63}64 65define void @srem32(i32 %a, i32 %b, ptr %retptr) {66; CHECK-LABEL: srem32(67; CHECK: rem.s3268; CHECK-NOT: rem.69 %d = srem i32 %a, %b70 store i32 %d, ptr %retptr71 ret void72}73 74define void @urem32(i32 %a, i32 %b, ptr %retptr) {75; CHECK-LABEL: urem32(76; CHECK: rem.u3277; CHECK-NOT: rem.78 %d = urem i32 %a, %b79 store i32 %d, ptr %retptr80 ret void81}82