From: Chris Lattner Date: Mon, 10 Jan 2005 00:07:15 +0000 (+0000) Subject: Constant fold shifts, turning this loop: X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=8136d1f8cb8c6d89460ab9750b6d91a157659831;p=oota-llvm.git Constant fold shifts, turning this loop: .LBB_Z5test0PdS__3: # no_exit.1 fldl data(,%eax,8) fldl 24(%esp) faddp %st(1) fstl 24(%esp) incl %eax movl $16000, %ecx sarl $3, %ecx cmpl %eax, %ecx fstpl 16(%esp) #FP_REG_KILL jg .LBB_Z5test0PdS__3 # no_exit.1 into: .LBB_Z5test0PdS__3: # no_exit.1 fldl data(,%eax,8) fldl 24(%esp) faddp %st(1) fstl 24(%esp) incl %eax cmpl $2000, %eax fstpl 16(%esp) #FP_REG_KILL jl .LBB_Z5test0PdS__3 # no_exit.1 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19427 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index f3c18d37d3d..224b969694d 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -535,6 +535,9 @@ SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT, case ISD::AND : return getConstant(C1 & C2, VT); case ISD::OR : return getConstant(C1 | C2, VT); case ISD::XOR : return getConstant(C1 ^ C2, VT); + case ISD::SHL : return getConstant(C1 << (int)C2, VT); + case ISD::SRL : return getConstant(C1 >> (unsigned)C2, VT); + case ISD::SRA : return getConstant(N1C->getSignExtended() >>(int)C2, VT); default: break; }