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 5define i32 @test_addx(i64 %a, i64 %b, i64 %c) nounwind readnone noinline { 6entry: 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 21define i32 @test_select_int_icc(i32 %a, i32 %b, i32 %c) nounwind readnone noinline { 22entry: 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 36define float @test_select_fp_icc(i32 %a, float %f1, float %f2) nounwind readnone noinline { 37entry: 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 50define double @test_select_dfp_icc(i32 %a, double %f1, double %f2) nounwind readnone noinline { 51entry: 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 64define i32 @test_select_int_fcc(float %f, i32 %a, i32 %b) nounwind readnone noinline { 65entry: 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 79define float @test_select_fp_fcc(float %f, float %f1, float %f2) nounwind readnone noinline { 80entry: 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 93define double @test_select_dfp_fcc(double %f, double %f1, double %f2) nounwind readnone noinline { 94entry: 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