From: Chris Lattner Date: Mon, 27 Nov 2006 04:40:53 +0000 (+0000) Subject: For better or worse, load from i1 is assumed to be zero extended. Do not X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=bc4cf8d5b137d43a1d6fde8238184e47efe162be;p=oota-llvm.git For better or worse, load from i1 is assumed to be zero extended. Do not form a load from i1 from larger loads that may not be zext'd. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31933 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 44990690b5d..99de15c9363 100644 --- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -2192,7 +2192,12 @@ SDOperand DAGCombiner::visitTRUNCATE(SDNode *N) { return N0.getOperand(0); } // fold (truncate (load x)) -> (smaller load x) - if (ISD::isNON_EXTLoad(N0.Val) && N0.hasOneUse()) { + if (ISD::isNON_EXTLoad(N0.Val) && N0.hasOneUse() && + // Do not allow folding to i1 here. i1 is implicitly stored in memory in + // zero extended form: by shrinking the load, we lose track of the fact + // that it is already zero extended. + // FIXME: This should be reevaluated. + VT != MVT::i1) { assert(MVT::getSizeInBits(N0.getValueType()) > MVT::getSizeInBits(VT) && "Cannot truncate to larger type!"); LoadSDNode *LN0 = cast(N0);