Home | History | Annotate | Download | only in SPARC
      1 ; RUN: llc -march=sparc <%s | FileCheck %s -check-prefix=V8
      2 ; RUN: llc -march=sparc -mattr=v9 <%s | FileCheck %s -check-prefix=V9
      3 
      4 
      5 define i32 @test_addx(i64 %a, i64 %b, i64 %c) nounwind readnone noinline {
      6 entry:
      7 ; V8: addcc
      8 ; V8-NOT: subcc
      9 ; V8: addx
     10 ; V9: addcc
     11 ; V9-NOT: subcc
     12 ; V9: addx
     13 ; V9: mov{{e|ne}} %icc
     14   %0 = add i64 %a, %b
     15   %1 = icmp ugt i64 %0, %c
     16   %2 = zext i1 %1 to i32
     17   ret i32 %2
     18 }
     19 
     20 
     21 define i32 @test_select_int_icc(i32 %a, i32 %b, i32 %c) nounwind readnone noinline {
     22 entry:
     23 ; V8: test_select_int_icc
     24 ; V8: subcc
     25 ; V8: {{be|bne}}
     26 ; V9: test_select_int_icc
     27 ; V9: subcc
     28 ; V9-NOT: {{be|bne}}
     29 ; V9: mov{{e|ne}} %icc
     30   %0 = icmp eq i32 %a, 0
     31   %1 = select i1 %0, i32 %b, i32 %c
     32   ret i32 %1
     33 }
     34 
     35 
     36 define float @test_select_fp_icc(i32 %a, float %f1, float %f2) nounwind readnone noinline {
     37 entry:
     38 ; V8: test_select_fp_icc
     39 ; V8: subcc
     40 ; V8: {{be|bne}}
     41 ; V9: test_select_fp_icc
     42 ; V9: subcc
     43 ; V9-NOT: {{be|bne}}
     44 ; V9: fmovs{{e|ne}} %icc
     45   %0 = icmp eq i32 %a, 0
     46   %1 = select i1 %0, float %f1, float %f2
     47   ret float %1
     48 }
     49 
     50 define double @test_select_dfp_icc(i32 %a, double %f1, double %f2) nounwind readnone noinline {
     51 entry:
     52 ; V8: test_select_dfp_icc
     53 ; V8: subcc
     54 ; V8: {{be|bne}}
     55 ; V9: test_select_dfp_icc
     56 ; V9: subcc
     57 ; V9=NOT: {{be|bne}}
     58 ; V9: fmovd{{e|ne}} %icc
     59   %0 = icmp eq i32 %a, 0
     60   %1 = select i1 %0, double %f1, double %f2
     61   ret double %1
     62 }
     63 
     64 define i32 @test_select_int_fcc(float %f, i32 %a, i32 %b) nounwind readnone noinline {
     65 entry:
     66 ;V8: test_select_int_fcc
     67 ;V8: fcmps
     68 ;V8: {{fbe|fbne}}
     69 ;V9: test_select_int_fcc
     70 ;V9: fcmps
     71 ;V9-NOT: {{fbe|fbne}}
     72 ;V9: mov{{e|ne}} %fcc0
     73   %0 = fcmp une float %f, 0.000000e+00
     74   %a.b = select i1 %0, i32 %a, i32 %b
     75   ret i32 %a.b
     76 }
     77 
     78 
     79 define float @test_select_fp_fcc(float %f, float %f1, float %f2) nounwind readnone noinline {
     80 entry:
     81 ;V8: test_select_fp_fcc
     82 ;V8: fcmps
     83 ;V8: {{fbe|fbne}}
     84 ;V9: test_select_fp_fcc
     85 ;V9: fcmps
     86 ;V9-NOT: {{fbe|fbne}}
     87 ;V9: fmovs{{e|ne}} %fcc0
     88   %0 = fcmp une float %f, 0.000000e+00
     89   %1 = select i1 %0, float %f1, float %f2
     90   ret float %1
     91 }
     92 
     93 define double @test_select_dfp_fcc(double %f, double %f1, double %f2) nounwind readnone noinline {
     94 entry:
     95 ;V8: test_select_dfp_fcc
     96 ;V8: fcmpd
     97 ;V8: {{fbne|fbe}}
     98 ;V9: test_select_dfp_fcc
     99 ;V9: fcmpd
    100 ;V9-NOT: {{fbne|fbe}}
    101 ;V9: fmovd{{e|ne}} %fcc0
    102   %0 = fcmp une double %f, 0.000000e+00
    103   %1 = select i1 %0, double %f1, double %f2
    104   ret double %1
    105 }
    106