llvm/test/LLC/2003-05-27-phifcmpd.ll
Vikram S. Adve bd6161d401 Three kinds of boolean values handled incorrectly:
-- setCC of FP type used by a Phi: have to save in reg.
-- setNE of FP type used by a branch: cannot use result directly in branch!
-- setCC used outside the same basic block: have to save in reg. for now


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6382 91177308-0d34-0410-b5e6-96231b3b80d8
2003-05-28 13:54:41 +00:00

72 lines
2.0 KiB
LLVM

;; Date: May 28, 2003.
;; From: test/Programs/MultiSource/McCat-05-eks/QRfact.c
;; Function: Matrix QRiterate(Matrix A, Matrix U)
;;
;; Error: llc produces an invalid register <NULL VALUE> for the
;; phi argument %tmp.213 produced by fcmpd:
;;
;; LLC Output:
;;
;; !****** Outputing Function: QRiterate_1 ******
;;
;; .section ".text"
;; .align 4
;; .global QRiterate_1
;; .type QRiterate_1, 2
;; QRiterate_1:
;; .L_QRiterate_1_LL_0:
;; save %o6, -192, %o6
;; brgz %i0, .L_QRiterate_1_LL_1
;; add %g0, %g0, %o0
;; ba .L_QRiterate_1_LL_2
;; nop
;;
;; .L_QRiterate_1_LL_1:
;; sethi %lm(LLVMGlobal__2), %o1
;; sethi %hh(LLVMGlobal__2), %o0
;; or %o0, %hm(LLVMGlobal__2), %o0
;; sllx %o0, 32, %o0
;; or %o1, %o0, %o1
;; or %o1, %lo(LLVMGlobal__2), %o1
;; ldd [%o1+0], %f32
;; fcmpd %fcc0, %f2, %f32
;; ba .L_QRiterate_1_LL_2
;; add <NULL VALUE>, %g0, %o0
;;
;; .L_QRiterate_1_LL_2:
;; brnz %o0, .L_QRiterate_1_LL_1
;; nop
;; ba .L_QRiterate_1_LL_3
;; nop
;;
;; .L_QRiterate_1_LL_3:
;; jmpl %i7+8, %g0
;; restore %g0, 0, %g0
;;
;; .EndOf_QRiterate_1:
;; .size QRiterate_1, .EndOf_QRiterate_1-QRiterate_1
;;
target endian = big
target pointersize = 64
implementation ; Functions:
internal void %QRiterate(int %p.1, double %tmp.212) {
entry: ; No predecessors!
%tmp.184 = setgt int %p.1, 0 ; <bool> [#uses=1]
br bool %tmp.184, label %shortcirc_next.1, label %shortcirc_done.1
shortcirc_next.1: ; preds = %entry
%tmp.213 = setne double %tmp.212, 0.000000e+00
br label %shortcirc_done.1
shortcirc_done.1: ; preds = %entry, %shortcirc_next.1
%val.1 = phi bool [ false, %entry ], [ %tmp.213, %shortcirc_next.1 ]
br bool %val.1, label %shortcirc_next.1, label %exit.1
exit.1:
ret void
}