From: Chris Lattner Date: Tue, 22 Feb 2005 07:23:39 +0000 (+0000) Subject: Fix a bug in the 'store fpimm, ptr' -> 'store intimm, ptr' handling code. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=84734ce8ef1a21eb347d4deca0bf32d59001f751;p=oota-llvm.git Fix a bug in the 'store fpimm, ptr' -> 'store intimm, ptr' handling code. Changing 'op' here caused us to not enter the store into a map, causing reemission of the code!! In practice, a simple loop like this: no_exit: ; preds = %no_exit, %entry %indvar = phi uint [ %indvar.next, %no_exit ], [ 0, %entry ] ; [#uses=3] %tmp.4 = getelementptr "complex long double"* %P, uint %indvar, uint 0 ; [#uses=1] store double 0.000000e+00, double* %tmp.4 %indvar.next = add uint %indvar, 1 ; [#uses=2] %exitcond = seteq uint %indvar.next, %N ; [#uses=1] br bool %exitcond, label %return, label %no_exit was being code gen'd to: .LBBtest_1: # no_exit movl %edx, %esi shll $4, %esi movl $0, 4(%eax,%esi) movl $0, (%eax,%esi) incl %edx movl $0, (%eax,%esi) movl $0, 4(%eax,%esi) cmpl %ecx, %edx jne .LBBtest_1 # no_exit Note that we are doing 4 32-bit stores instead of 2. Now we generate: .LBBtest_1: # no_exit movl %edx, %esi incl %esi shll $4, %edx movl $0, (%eax,%edx) movl $0, 4(%eax,%edx) cmpl %ecx, %esi movl %esi, %edx jne .LBBtest_1 # no_exit This is much happier, though it would be even better if the increment of ESI was scheduled after the compare :-/ git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20265 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index 1e976e3f680..37b6ab5e51e 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -515,8 +515,7 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) { Result = DAG.getNode(ISD::STORE, MVT::Other, Tmp1, DAG.getConstant(V.I, MVT::i64), Tmp2); } - Op = Result; - Node = Op.Val; + Node = Result.Val; } switch (getTypeAction(Node->getOperand(1).getValueType())) {