81 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O3 < %s -relocation-model=pic -mtriple=sparc -mcpu=v9 | FileCheck --check-prefix=SPARC %s3; RUN: llc -O3 < %s -relocation-model=pic -mtriple=sparcv9 | FileCheck --check-prefix=SPARC64 %s4; RUN: llc -O3 < %s -relocation-model=pic -mtriple=sparc -mcpu=v9 -mattr=+no-predictor | FileCheck --check-prefix=SPARC-NO-PREDICTOR %s5; RUN: llc -O3 < %s -relocation-model=pic -mtriple=sparcv9 -mattr=+no-predictor | FileCheck --check-prefix=SPARC64-NO-PREDICTOR %s6 7;; Normally, highly predictable selects should be turned into branches.8;; On the other hand, early Niagara processors should prefer conditional moves9;; over branches even when it's predictable.10 11define i32 @cdiv(i32 %cond, i32 %num) #0 {12; SPARC-LABEL: cdiv:13; SPARC: ! %bb.0: ! %entry14; SPARC-NEXT: cmp %o0, 015; SPARC-NEXT: be %icc, .LBB0_216; SPARC-NEXT: mov %o1, %o017; SPARC-NEXT: ! %bb.1: ! %select.end18; SPARC-NEXT: retl19; SPARC-NEXT: nop20; SPARC-NEXT: .LBB0_2: ! %select.true.sink21; SPARC-NEXT: sethi 1398101, %o122; SPARC-NEXT: or %o1, 342, %o123; SPARC-NEXT: smul %o0, %o1, %o024; SPARC-NEXT: rd %y, %o025; SPARC-NEXT: srl %o0, 31, %o126; SPARC-NEXT: retl27; SPARC-NEXT: add %o0, %o1, %o028;29; SPARC64-LABEL: cdiv:30; SPARC64: ! %bb.0: ! %entry31; SPARC64-NEXT: cmp %o0, 032; SPARC64-NEXT: be %icc, .LBB0_233; SPARC64-NEXT: mov %o1, %o034; SPARC64-NEXT: ! %bb.1: ! %select.end35; SPARC64-NEXT: retl36; SPARC64-NEXT: nop37; SPARC64-NEXT: .LBB0_2: ! %select.true.sink38; SPARC64-NEXT: sra %o0, 0, %o039; SPARC64-NEXT: sethi 1398101, %o140; SPARC64-NEXT: or %o1, 342, %o141; SPARC64-NEXT: mulx %o0, %o1, %o042; SPARC64-NEXT: srlx %o0, 63, %o143; SPARC64-NEXT: srlx %o0, 32, %o044; SPARC64-NEXT: retl45; SPARC64-NEXT: add %o0, %o1, %o046;47; SPARC-NO-PREDICTOR-LABEL: cdiv:48; SPARC-NO-PREDICTOR: ! %bb.0: ! %entry49; SPARC-NO-PREDICTOR-NEXT: sethi 1398101, %o250; SPARC-NO-PREDICTOR-NEXT: or %o2, 342, %o251; SPARC-NO-PREDICTOR-NEXT: smul %o1, %o2, %o252; SPARC-NO-PREDICTOR-NEXT: rd %y, %o253; SPARC-NO-PREDICTOR-NEXT: srl %o2, 31, %o354; SPARC-NO-PREDICTOR-NEXT: add %o2, %o3, %o255; SPARC-NO-PREDICTOR-NEXT: cmp %o0, 056; SPARC-NO-PREDICTOR-NEXT: move %icc, %o2, %o157; SPARC-NO-PREDICTOR-NEXT: retl58; SPARC-NO-PREDICTOR-NEXT: mov %o1, %o059;60; SPARC64-NO-PREDICTOR-LABEL: cdiv:61; SPARC64-NO-PREDICTOR: ! %bb.0: ! %entry62; SPARC64-NO-PREDICTOR-NEXT: sra %o1, 0, %o263; SPARC64-NO-PREDICTOR-NEXT: sethi 1398101, %o364; SPARC64-NO-PREDICTOR-NEXT: or %o3, 342, %o365; SPARC64-NO-PREDICTOR-NEXT: mulx %o2, %o3, %o266; SPARC64-NO-PREDICTOR-NEXT: srlx %o2, 63, %o367; SPARC64-NO-PREDICTOR-NEXT: srlx %o2, 32, %o268; SPARC64-NO-PREDICTOR-NEXT: add %o2, %o3, %o269; SPARC64-NO-PREDICTOR-NEXT: cmp %o0, 070; SPARC64-NO-PREDICTOR-NEXT: move %icc, %o2, %o171; SPARC64-NO-PREDICTOR-NEXT: retl72; SPARC64-NO-PREDICTOR-NEXT: mov %o1, %o073entry:74 %div = sdiv i32 %num, 375 %cmp = icmp eq i32 %cond, 076 %ret = select i1 %cmp, i32 %div, i32 %num77 ret i32 %ret78}79 80attributes #0 = { nounwind }81