diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index bd3ad3f812d..8f90521074c 100644 --- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -2110,9 +2110,7 @@ SDOperand DAGCombiner::visitZERO_EXTEND(SDNode *N) { // fold (zext (truncate (load x))) -> (zext (smaller load x)) // fold (zext (truncate (srl (load x), c))) -> (zext (small load (x+c/n))) - // FIXME: Temporarily disable this for big endian machines until llvm-gcc - // build issue has been resolved. - if (TLI.isLittleEndian() && N0.getOpcode() == ISD::TRUNCATE) { + if (N0.getOpcode() == ISD::TRUNCATE) { SDOperand NarrowLoad = ReduceLoadWidth(N0.Val); if (NarrowLoad.Val) { if (NarrowLoad.Val != N0.Val) diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 296cf5ea449..e45b6fd3426 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -285,78 +285,76 @@ static void AddNodeIDNode(FoldingSetNodeID &ID, SDNode *N) { AddNodeIDOperands(ID, N->op_begin(), N->getNumOperands()); // Handle SDNode leafs with special info. - if (N->getNumOperands() == 0) { - switch (N->getOpcode()) { - default: break; // Normal nodes don't need extra info. - case ISD::TargetConstant: - case ISD::Constant: - ID.AddInteger(cast(N)->getValue()); - break; - case ISD::TargetConstantFP: - case ISD::ConstantFP: - ID.AddDouble(cast(N)->getValue()); - break; - case ISD::TargetGlobalAddress: - case ISD::GlobalAddress: { - GlobalAddressSDNode *GA = cast(N); - ID.AddPointer(GA->getGlobal()); - ID.AddInteger(GA->getOffset()); - break; - } - case ISD::BasicBlock: - ID.AddPointer(cast(N)->getBasicBlock()); - break; - case ISD::Register: - ID.AddInteger(cast(N)->getReg()); - break; - case ISD::SRCVALUE: { - SrcValueSDNode *SV = cast(N); - ID.AddPointer(SV->getValue()); - ID.AddInteger(SV->getOffset()); - break; - } - case ISD::FrameIndex: - case ISD::TargetFrameIndex: - ID.AddInteger(cast(N)->getIndex()); - break; - case ISD::JumpTable: - case ISD::TargetJumpTable: - ID.AddInteger(cast(N)->getIndex()); - break; - case ISD::ConstantPool: - case ISD::TargetConstantPool: { - ConstantPoolSDNode *CP = cast(N); - ID.AddInteger(CP->getAlignment()); - ID.AddInteger(CP->getOffset()); - if (CP->isMachineConstantPoolEntry()) - CP->getMachineCPVal()->AddSelectionDAGCSEId(ID); - else - ID.AddPointer(CP->getConstVal()); - break; - } - case ISD::LOAD: { - LoadSDNode *LD = cast(N); - ID.AddInteger(LD->getAddressingMode()); - ID.AddInteger(LD->getExtensionType()); - ID.AddInteger(LD->getLoadedVT()); - ID.AddPointer(LD->getSrcValue()); - ID.AddInteger(LD->getSrcValueOffset()); - ID.AddInteger(LD->getAlignment()); - ID.AddInteger(LD->isVolatile()); - break; - } - case ISD::STORE: { - StoreSDNode *ST = cast(N); - ID.AddInteger(ST->getAddressingMode()); - ID.AddInteger(ST->isTruncatingStore()); - ID.AddInteger(ST->getStoredVT()); - ID.AddPointer(ST->getSrcValue()); - ID.AddInteger(ST->getSrcValueOffset()); - ID.AddInteger(ST->getAlignment()); - ID.AddInteger(ST->isVolatile()); - break; - } - } + switch (N->getOpcode()) { + default: break; // Normal nodes don't need extra info. + case ISD::TargetConstant: + case ISD::Constant: + ID.AddInteger(cast(N)->getValue()); + break; + case ISD::TargetConstantFP: + case ISD::ConstantFP: + ID.AddDouble(cast(N)->getValue()); + break; + case ISD::TargetGlobalAddress: + case ISD::GlobalAddress: { + GlobalAddressSDNode *GA = cast(N); + ID.AddPointer(GA->getGlobal()); + ID.AddInteger(GA->getOffset()); + break; + } + case ISD::BasicBlock: + ID.AddPointer(cast(N)->getBasicBlock()); + break; + case ISD::Register: + ID.AddInteger(cast(N)->getReg()); + break; + case ISD::SRCVALUE: { + SrcValueSDNode *SV = cast(N); + ID.AddPointer(SV->getValue()); + ID.AddInteger(SV->getOffset()); + break; + } + case ISD::FrameIndex: + case ISD::TargetFrameIndex: + ID.AddInteger(cast(N)->getIndex()); + break; + case ISD::JumpTable: + case ISD::TargetJumpTable: + ID.AddInteger(cast(N)->getIndex()); + break; + case ISD::ConstantPool: + case ISD::TargetConstantPool: { + ConstantPoolSDNode *CP = cast(N); + ID.AddInteger(CP->getAlignment()); + ID.AddInteger(CP->getOffset()); + if (CP->isMachineConstantPoolEntry()) + CP->getMachineCPVal()->AddSelectionDAGCSEId(ID); + else + ID.AddPointer(CP->getConstVal()); + break; + } + case ISD::LOAD: { + LoadSDNode *LD = cast(N); + ID.AddInteger(LD->getAddressingMode()); + ID.AddInteger(LD->getExtensionType()); + ID.AddInteger(LD->getLoadedVT()); + ID.AddPointer(LD->getSrcValue()); + ID.AddInteger(LD->getSrcValueOffset()); + ID.AddInteger(LD->getAlignment()); + ID.AddInteger(LD->isVolatile()); + break; + } + case ISD::STORE: { + StoreSDNode *ST = cast(N); + ID.AddInteger(ST->getAddressingMode()); + ID.AddInteger(ST->isTruncatingStore()); + ID.AddInteger(ST->getStoredVT()); + ID.AddPointer(ST->getSrcValue()); + ID.AddInteger(ST->getSrcValueOffset()); + ID.AddInteger(ST->getAlignment()); + ID.AddInteger(ST->isVolatile()); + break; + } } }