brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.2 KiB · 40e90d6 Raw
244 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=sparc-unknown-linux-gnu | FileCheck %s --check-prefixes=SPARC3; RUN: llc < %s -mtriple=sparc64-unknown-linux-gnu | FileCheck %s --check-prefixes=SPARC644; RUN: llc < %s -mtriple=sparc64-unknown-linux-gnu -mattr=vis3 | FileCheck %s --check-prefixes=SPARC64-VIS35 6define { i128, i8 } @muloti_test(i128 %l, i128 %r) nounwind {7; SPARC-LABEL: muloti_test:8; SPARC:       ! %bb.0: ! %start9; SPARC-NEXT:    save %sp, -96, %sp10; SPARC-NEXT:    mov %i3, %g211; SPARC-NEXT:    mov %i2, %g412; SPARC-NEXT:    umul %i2, %i5, %i213; SPARC-NEXT:    rd %y, %l714; SPARC-NEXT:    ld [%fp+92], %l415; SPARC-NEXT:    umul %i4, %i3, %i316; SPARC-NEXT:    rd %y, %o117; SPARC-NEXT:    ld [%fp+96], %g318; SPARC-NEXT:    umul %i5, %g2, %l319; SPARC-NEXT:    rd %y, %o020; SPARC-NEXT:    umul %l4, %i1, %l221; SPARC-NEXT:    rd %y, %l122; SPARC-NEXT:    add %i3, %i2, %i223; SPARC-NEXT:    umul %i0, %g3, %i324; SPARC-NEXT:    rd %y, %l625; SPARC-NEXT:    add %o0, %i2, %o226; SPARC-NEXT:    umul %i1, %g3, %i227; SPARC-NEXT:    rd %y, %l028; SPARC-NEXT:    add %i3, %l2, %i329; SPARC-NEXT:    add %l0, %i3, %l230; SPARC-NEXT:    addcc %i2, %l3, %l331; SPARC-NEXT:    umul %g2, %g3, %i332; SPARC-NEXT:    rd %y, %i233; SPARC-NEXT:    addxcc %l2, %o2, %o434; SPARC-NEXT:    umul %g4, %g3, %g335; SPARC-NEXT:    rd %y, %l536; SPARC-NEXT:    addcc %g3, %i2, %i237; SPARC-NEXT:    addxcc %l5, 0, %g338; SPARC-NEXT:    umul %g2, %l4, %g239; SPARC-NEXT:    rd %y, %l540; SPARC-NEXT:    addcc %g2, %i2, %i241; SPARC-NEXT:    addxcc %l5, 0, %g242; SPARC-NEXT:    addcc %g3, %g2, %g243; SPARC-NEXT:    addxcc %g0, 0, %g344; SPARC-NEXT:    umul %g4, %l4, %l545; SPARC-NEXT:    rd %y, %o346; SPARC-NEXT:    addcc %l5, %g2, %l547; SPARC-NEXT:    addxcc %o3, %g3, %o348; SPARC-NEXT:    addcc %l5, %l3, %g249; SPARC-NEXT:    addxcc %o3, %o4, %g350; SPARC-NEXT:    mov 1, %l351; SPARC-NEXT:    cmp %g3, %o352; SPARC-NEXT:    bcs .LBB0_253; SPARC-NEXT:    mov %l3, %o454; SPARC-NEXT:  ! %bb.1: ! %start55; SPARC-NEXT:    mov %g0, %o456; SPARC-NEXT:  .LBB0_2: ! %start57; SPARC-NEXT:    cmp %g2, %l558; SPARC-NEXT:    bcs .LBB0_459; SPARC-NEXT:    mov %l3, %l560; SPARC-NEXT:  ! %bb.3: ! %start61; SPARC-NEXT:    mov %g0, %l562; SPARC-NEXT:  .LBB0_4: ! %start63; SPARC-NEXT:    cmp %g3, %o364; SPARC-NEXT:    be .LBB0_665; SPARC-NEXT:    nop66; SPARC-NEXT:  ! %bb.5: ! %start67; SPARC-NEXT:    mov %o4, %l568; SPARC-NEXT:  .LBB0_6: ! %start69; SPARC-NEXT:    cmp %g4, 070; SPARC-NEXT:    bne .LBB0_871; SPARC-NEXT:    mov %l3, %o372; SPARC-NEXT:  ! %bb.7: ! %start73; SPARC-NEXT:    mov %g0, %o374; SPARC-NEXT:  .LBB0_8: ! %start75; SPARC-NEXT:    cmp %i4, 076; SPARC-NEXT:    bne .LBB0_1077; SPARC-NEXT:    mov %l3, %o478; SPARC-NEXT:  ! %bb.9: ! %start79; SPARC-NEXT:    mov %g0, %o480; SPARC-NEXT:  .LBB0_10: ! %start81; SPARC-NEXT:    cmp %o1, 082; SPARC-NEXT:    bne .LBB0_1283; SPARC-NEXT:    mov %l3, %o184; SPARC-NEXT:  ! %bb.11: ! %start85; SPARC-NEXT:    mov %g0, %o186; SPARC-NEXT:  .LBB0_12: ! %start87; SPARC-NEXT:    cmp %l7, 088; SPARC-NEXT:    bne .LBB0_1489; SPARC-NEXT:    mov %l3, %l790; SPARC-NEXT:  ! %bb.13: ! %start91; SPARC-NEXT:    mov %g0, %l792; SPARC-NEXT:  .LBB0_14: ! %start93; SPARC-NEXT:    cmp %o2, %o094; SPARC-NEXT:    bcs .LBB0_1695; SPARC-NEXT:    mov %l3, %g496; SPARC-NEXT:  ! %bb.15: ! %start97; SPARC-NEXT:    mov %g0, %g498; SPARC-NEXT:  .LBB0_16: ! %start99; SPARC-NEXT:    cmp %l4, 0100; SPARC-NEXT:    bne .LBB0_18101; SPARC-NEXT:    mov %l3, %l4102; SPARC-NEXT:  ! %bb.17: ! %start103; SPARC-NEXT:    mov %g0, %l4104; SPARC-NEXT:  .LBB0_18: ! %start105; SPARC-NEXT:    cmp %i0, 0106; SPARC-NEXT:    bne .LBB0_20107; SPARC-NEXT:    mov %l3, %o0108; SPARC-NEXT:  ! %bb.19: ! %start109; SPARC-NEXT:    mov %g0, %o0110; SPARC-NEXT:  .LBB0_20: ! %start111; SPARC-NEXT:    cmp %l6, 0112; SPARC-NEXT:    bne .LBB0_22113; SPARC-NEXT:    mov %l3, %l6114; SPARC-NEXT:  ! %bb.21: ! %start115; SPARC-NEXT:    mov %g0, %l6116; SPARC-NEXT:  .LBB0_22: ! %start117; SPARC-NEXT:    and %o4, %o3, %o2118; SPARC-NEXT:    cmp %l1, 0119; SPARC-NEXT:    and %o0, %l4, %o0120; SPARC-NEXT:    bne .LBB0_24121; SPARC-NEXT:    mov %l3, %l1122; SPARC-NEXT:  ! %bb.23: ! %start123; SPARC-NEXT:    mov %g0, %l1124; SPARC-NEXT:  .LBB0_24: ! %start125; SPARC-NEXT:    or %o2, %o1, %l4126; SPARC-NEXT:    cmp %l2, %l0127; SPARC-NEXT:    or %o0, %l6, %l6128; SPARC-NEXT:    bcs .LBB0_26129; SPARC-NEXT:    mov %l3, %l0130; SPARC-NEXT:  ! %bb.25: ! %start131; SPARC-NEXT:    mov %g0, %l0132; SPARC-NEXT:  .LBB0_26: ! %start133; SPARC-NEXT:    or %l4, %l7, %l2134; SPARC-NEXT:    orcc %i5, %i4, %g0135; SPARC-NEXT:    or %l6, %l1, %l1136; SPARC-NEXT:    bne .LBB0_28137; SPARC-NEXT:    mov %l3, %i4138; SPARC-NEXT:  ! %bb.27: ! %start139; SPARC-NEXT:    mov %g0, %i4140; SPARC-NEXT:  .LBB0_28: ! %start141; SPARC-NEXT:    or %l2, %g4, %i5142; SPARC-NEXT:    orcc %i1, %i0, %g0143; SPARC-NEXT:    bne .LBB0_30144; SPARC-NEXT:    or %l1, %l0, %i0145; SPARC-NEXT:  ! %bb.29: ! %start146; SPARC-NEXT:    mov %g0, %l3147; SPARC-NEXT:  .LBB0_30: ! %start148; SPARC-NEXT:    and %l3, %i4, %i1149; SPARC-NEXT:    or %i1, %i0, %i0150; SPARC-NEXT:    or %i0, %i5, %i0151; SPARC-NEXT:    or %i0, %l5, %i0152; SPARC-NEXT:    and %i0, 1, %i4153; SPARC-NEXT:    mov %g3, %i0154; SPARC-NEXT:    ret155; SPARC-NEXT:    restore %g0, %g2, %o1156;157; SPARC64-LABEL: muloti_test:158; SPARC64:         .register %g2, #scratch159; SPARC64-NEXT:    .register %g3, #scratch160; SPARC64-NEXT:  ! %bb.0: ! %start161; SPARC64-NEXT:    save %sp, -176, %sp162; SPARC64-NEXT:    mov %i0, %l1163; SPARC64-NEXT:    mov %g0, %o0164; SPARC64-NEXT:    mov %i2, %o1165; SPARC64-NEXT:    mov %g0, %o2166; SPARC64-NEXT:    call __multi3167; SPARC64-NEXT:    mov %i1, %o3168; SPARC64-NEXT:    mov %o0, %i4169; SPARC64-NEXT:    mov %o1, %i5170; SPARC64-NEXT:    mov %g0, %o0171; SPARC64-NEXT:    mov %i0, %o1172; SPARC64-NEXT:    mov %g0, %o2173; SPARC64-NEXT:    call __multi3174; SPARC64-NEXT:    mov %i3, %o3175; SPARC64-NEXT:    mov %o0, %l0176; SPARC64-NEXT:    add %o1, %i5, %i0177; SPARC64-NEXT:    mov %g0, %o0178; SPARC64-NEXT:    mov %i1, %o1179; SPARC64-NEXT:    mov %g0, %o2180; SPARC64-NEXT:    call __multi3181; SPARC64-NEXT:    mov %i3, %o3182; SPARC64-NEXT:    mov %g0, %i1183; SPARC64-NEXT:    mov %g0, %i3184; SPARC64-NEXT:    mov %g0, %i5185; SPARC64-NEXT:    mov %g0, %g2186; SPARC64-NEXT:    mov %g0, %g3187; SPARC64-NEXT:    add %o0, %i0, %i0188; SPARC64-NEXT:    cmp %i0, %o0189; SPARC64-NEXT:    movrnz %l0, 1, %i3190; SPARC64-NEXT:    movrnz %i2, 1, %i5191; SPARC64-NEXT:    movrnz %l1, 1, %g2192; SPARC64-NEXT:    movcs %xcc, 1, %i1193; SPARC64-NEXT:    and %g2, %i5, %i2194; SPARC64-NEXT:    or %i2, %i3, %i2195; SPARC64-NEXT:    movrnz %i4, 1, %g3196; SPARC64-NEXT:    or %i2, %g3, %i2197; SPARC64-NEXT:    or %i2, %i1, %i1198; SPARC64-NEXT:    srl %i1, 0, %i2199; SPARC64-NEXT:    ret200; SPARC64-NEXT:    restore %g0, %o1, %o1201;202; SPARC64-VIS3-LABEL: muloti_test:203; SPARC64-VIS3:         .register %g2, #scratch204; SPARC64-VIS3-NEXT:    .register %g3, #scratch205; SPARC64-VIS3-NEXT:  ! %bb.0: ! %start206; SPARC64-VIS3-NEXT:    save %sp, -128, %sp207; SPARC64-VIS3-NEXT:    mov %g0, %i5208; SPARC64-VIS3-NEXT:    mov %g0, %g2209; SPARC64-VIS3-NEXT:    mov %g0, %g3210; SPARC64-VIS3-NEXT:    mov %g0, %g4211; SPARC64-VIS3-NEXT:    mov %g0, %g5212; SPARC64-VIS3-NEXT:    mulx %i2, %i1, %i4213; SPARC64-VIS3-NEXT:    mulx %i0, %i3, %l0214; SPARC64-VIS3-NEXT:    add %l0, %i4, %i4215; SPARC64-VIS3-NEXT:    umulxhi %i1, %i3, %l0216; SPARC64-VIS3-NEXT:    add %l0, %i4, %i4217; SPARC64-VIS3-NEXT:    cmp %i4, %l0218; SPARC64-VIS3-NEXT:    movrnz %i2, 1, %g2219; SPARC64-VIS3-NEXT:    movrnz %i0, 1, %g3220; SPARC64-VIS3-NEXT:    and %g3, %g2, %g2221; SPARC64-VIS3-NEXT:    umulxhi %i0, %i3, %i0222; SPARC64-VIS3-NEXT:    movrnz %i0, 1, %g4223; SPARC64-VIS3-NEXT:    movcs %xcc, 1, %i5224; SPARC64-VIS3-NEXT:    or %g2, %g4, %i0225; SPARC64-VIS3-NEXT:    umulxhi %i2, %i1, %i2226; SPARC64-VIS3-NEXT:    movrnz %i2, 1, %g5227; SPARC64-VIS3-NEXT:    or %i0, %g5, %i0228; SPARC64-VIS3-NEXT:    or %i0, %i5, %i0229; SPARC64-VIS3-NEXT:    mulx %i1, %i3, %i1230; SPARC64-VIS3-NEXT:    srl %i0, 0, %i2231; SPARC64-VIS3-NEXT:    ret232; SPARC64-VIS3-NEXT:    restore %g0, %i4, %o0233start:234  %0 = tail call { i128, i1 } @llvm.umul.with.overflow.i128(i128 %l, i128 %r)235  %1 = extractvalue { i128, i1 } %0, 0236  %2 = extractvalue { i128, i1 } %0, 1237  %3 = zext i1 %2 to i8238  %4 = insertvalue { i128, i8 } undef, i128 %1, 0239  %5 = insertvalue { i128, i8 } %4, i8 %3, 1240  ret { i128, i8 } %5241}242 243declare { i128, i1 } @llvm.umul.with.overflow.i128(i128, i128)244