C Writer was dumping core on this test case.
[oota-llvm.git] / test / LLC / 2003-05-27-usefsubasbool.ll
1 ;; Date: May 27, 2003.
2 ;; From: test/Programs/MultiSource/McCat-05-eks/QRfact.c
3 ;; Function: Matrix QRiterate(Matrix A, Matrix U)
4 ;; 
5 ;; Error: llc produces an invalid register <NULL VALUE> for the
6 ;;        a boolean value computed using setne with a double.
7 ;;
8 ;; Cause: In SparcInstrSelection.cpp, for SetCC, when a result of setne
9 ;;        is used for a branch, it can generate a "branch-on-integer-register"
10 ;;        for integer registers.  In that case, it never saves the value of
11 ;;        the boolean result.  It was attempting to do the same thing for an
12 ;;        FP compare!
13 ;; 
14 ;; LLC Output:
15 ;; !****** Outputing Function: QRiterate_1 ******
16 ;; 
17 ;;         .section ".text"
18 ;;         .align  4
19 ;;         .global QRiterate_1
20 ;;         .type   QRiterate_1, 2
21 ;; QRiterate_1:
22 ;; .L_QRiterate_1_LL_0:
23 ;;         save    %o6, -192, %o6
24 ;;         sethi   %hh(LLVMGlobal__2), %o1
25 ;;         sethi   %lm(LLVMGlobal__2), %o0
26 ;;         or      %o1, %hm(LLVMGlobal__2), %o1
27 ;;         sllx    %o1, 32, %o1
28 ;;         or      %o0, %o1, %o0
29 ;;         or      %o0, %lo(LLVMGlobal__2), %o0
30 ;;         ldd     [%o0+0], %f32
31 ;;         ba      .L_QRiterate_1_LL_1
32 ;;         fcmpd   %fcc0, %f0, %f32
33 ;; 
34 ;; .L_QRiterate_1_LL_1:
35 ;;         brnz    <NULL VALUE>, .L_QRiterate_1_LL_1
36 ;;         nop     
37 ;;         ba      .L_QRiterate_1_LL_2
38 ;;         nop     
39 ;; 
40 ;; .L_QRiterate_1_LL_2:
41 ;;         jmpl    %i7+8, %g0
42 ;;         restore %g0, 0, %g0
43 ;; 
44 ;; .EndOf_QRiterate_1:
45 ;;         .size QRiterate_1, .EndOf_QRiterate_1-QRiterate_1
46 ;;  
47
48 target endian = big
49 target pointersize = 64
50
51 implementation   ; Functions:
52
53 internal void %QRiterate(double %tmp.212) { 
54 entry:          ; No predecessors!
55         br label %shortcirc_next.1
56
57 shortcirc_next.1:               ; preds = %entry
58         %tmp.213 = setne double %tmp.212, 0.000000e+00
59         br bool %tmp.213, label %shortcirc_next.1, label %exit.1
60
61 exit.1:
62         ret void
63 }