113 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; Test 128-bit division and remainder in vector registers on z13 using libcalls3;4; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s5 6; Divide signed.7define i128 @f1(i128 %a, i128 %b) {8; CHECK-LABEL: f1:9; CHECK: # %bb.0:10; CHECK-NEXT: stmg %r13, %r15, 104(%r15)11; CHECK-NEXT: .cfi_offset %r13, -5612; CHECK-NEXT: .cfi_offset %r14, -4813; CHECK-NEXT: .cfi_offset %r15, -4014; CHECK-NEXT: aghi %r15, -20815; CHECK-NEXT: .cfi_def_cfa_offset 36816; CHECK-NEXT: vl %v0, 0(%r3), 317; CHECK-NEXT: vl %v1, 0(%r4), 318; CHECK-NEXT: lgr %r13, %r219; CHECK-NEXT: la %r2, 192(%r15)20; CHECK-NEXT: la %r3, 176(%r15)21; CHECK-NEXT: la %r4, 160(%r15)22; CHECK-NEXT: vst %v1, 160(%r15), 323; CHECK-NEXT: vst %v0, 176(%r15), 324; CHECK-NEXT: brasl %r14, __divti3@PLT25; CHECK-NEXT: vl %v0, 192(%r15), 326; CHECK-NEXT: vst %v0, 0(%r13), 327; CHECK-NEXT: lmg %r13, %r15, 312(%r15)28; CHECK-NEXT: br %r1429 %res = sdiv i128 %a, %b30 ret i128 %res31}32 33; Divide unsigned.34define i128 @f2(i128 %a, i128 %b) {35; CHECK-LABEL: f2:36; CHECK: # %bb.0:37; CHECK-NEXT: stmg %r13, %r15, 104(%r15)38; CHECK-NEXT: .cfi_offset %r13, -5639; CHECK-NEXT: .cfi_offset %r14, -4840; CHECK-NEXT: .cfi_offset %r15, -4041; CHECK-NEXT: aghi %r15, -20842; CHECK-NEXT: .cfi_def_cfa_offset 36843; CHECK-NEXT: vl %v0, 0(%r3), 344; CHECK-NEXT: vl %v1, 0(%r4), 345; CHECK-NEXT: lgr %r13, %r246; CHECK-NEXT: la %r2, 192(%r15)47; CHECK-NEXT: la %r3, 176(%r15)48; CHECK-NEXT: la %r4, 160(%r15)49; CHECK-NEXT: vst %v1, 160(%r15), 350; CHECK-NEXT: vst %v0, 176(%r15), 351; CHECK-NEXT: brasl %r14, __udivti3@PLT52; CHECK-NEXT: vl %v0, 192(%r15), 353; CHECK-NEXT: vst %v0, 0(%r13), 354; CHECK-NEXT: lmg %r13, %r15, 312(%r15)55; CHECK-NEXT: br %r1456 %res = udiv i128 %a, %b57 ret i128 %res58}59 60; Remainder signed.61define i128 @f3(i128 %a, i128 %b) {62; CHECK-LABEL: f3:63; CHECK: # %bb.0:64; CHECK-NEXT: stmg %r13, %r15, 104(%r15)65; CHECK-NEXT: .cfi_offset %r13, -5666; CHECK-NEXT: .cfi_offset %r14, -4867; CHECK-NEXT: .cfi_offset %r15, -4068; CHECK-NEXT: aghi %r15, -20869; CHECK-NEXT: .cfi_def_cfa_offset 36870; CHECK-NEXT: vl %v0, 0(%r3), 371; CHECK-NEXT: vl %v1, 0(%r4), 372; CHECK-NEXT: lgr %r13, %r273; CHECK-NEXT: la %r2, 192(%r15)74; CHECK-NEXT: la %r3, 176(%r15)75; CHECK-NEXT: la %r4, 160(%r15)76; CHECK-NEXT: vst %v1, 160(%r15), 377; CHECK-NEXT: vst %v0, 176(%r15), 378; CHECK-NEXT: brasl %r14, __modti3@PLT79; CHECK-NEXT: vl %v0, 192(%r15), 380; CHECK-NEXT: vst %v0, 0(%r13), 381; CHECK-NEXT: lmg %r13, %r15, 312(%r15)82; CHECK-NEXT: br %r1483 %res = srem i128 %a, %b84 ret i128 %res85}86 87; Remainder unsigned.88define i128 @f4(i128 %a, i128 %b) {89; CHECK-LABEL: f4:90; CHECK: # %bb.0:91; CHECK-NEXT: stmg %r13, %r15, 104(%r15)92; CHECK-NEXT: .cfi_offset %r13, -5693; CHECK-NEXT: .cfi_offset %r14, -4894; CHECK-NEXT: .cfi_offset %r15, -4095; CHECK-NEXT: aghi %r15, -20896; CHECK-NEXT: .cfi_def_cfa_offset 36897; CHECK-NEXT: vl %v0, 0(%r3), 398; CHECK-NEXT: vl %v1, 0(%r4), 399; CHECK-NEXT: lgr %r13, %r2100; CHECK-NEXT: la %r2, 192(%r15)101; CHECK-NEXT: la %r3, 176(%r15)102; CHECK-NEXT: la %r4, 160(%r15)103; CHECK-NEXT: vst %v1, 160(%r15), 3104; CHECK-NEXT: vst %v0, 176(%r15), 3105; CHECK-NEXT: brasl %r14, __umodti3@PLT106; CHECK-NEXT: vl %v0, 192(%r15), 3107; CHECK-NEXT: vst %v0, 0(%r13), 3108; CHECK-NEXT: lmg %r13, %r15, 312(%r15)109; CHECK-NEXT: br %r14110 %res = urem i128 %a, %b111 ret i128 %res112}113