forked from OSchip/llvm-project
				
			Don't call SDNode::isPredecessorOf when it isn't necessary. If the load's
chains have no users, they can't be predecessors of the condition. llvm-svn: 85394
This commit is contained in:
		
							parent
							
								
									57780dfdfc
								
							
						
					
					
						commit
						14ca753e28
					
				| 
						 | 
					@ -5737,8 +5737,10 @@ bool DAGCombiner::SimplifySelectOps(SDNode *TheSelect, SDValue LHS,
 | 
				
			||||||
        if (TheSelect->getOpcode() == ISD::SELECT) {
 | 
					        if (TheSelect->getOpcode() == ISD::SELECT) {
 | 
				
			||||||
          // Check that the condition doesn't reach either load.  If so, folding
 | 
					          // Check that the condition doesn't reach either load.  If so, folding
 | 
				
			||||||
          // this will induce a cycle into the DAG.
 | 
					          // this will induce a cycle into the DAG.
 | 
				
			||||||
          if (!LLD->isPredecessorOf(TheSelect->getOperand(0).getNode()) &&
 | 
					          if ((!LLD->hasAnyUseOfValue(1) ||
 | 
				
			||||||
              !RLD->isPredecessorOf(TheSelect->getOperand(0).getNode())) {
 | 
					               !LLD->isPredecessorOf(TheSelect->getOperand(0).getNode())) &&
 | 
				
			||||||
 | 
					              (!RLD->hasAnyUseOfValue(1) ||
 | 
				
			||||||
 | 
					               !RLD->isPredecessorOf(TheSelect->getOperand(0).getNode()))) {
 | 
				
			||||||
            Addr = DAG.getNode(ISD::SELECT, TheSelect->getDebugLoc(),
 | 
					            Addr = DAG.getNode(ISD::SELECT, TheSelect->getDebugLoc(),
 | 
				
			||||||
                               LLD->getBasePtr().getValueType(),
 | 
					                               LLD->getBasePtr().getValueType(),
 | 
				
			||||||
                               TheSelect->getOperand(0), LLD->getBasePtr(),
 | 
					                               TheSelect->getOperand(0), LLD->getBasePtr(),
 | 
				
			||||||
| 
						 | 
					@ -5747,10 +5749,12 @@ bool DAGCombiner::SimplifySelectOps(SDNode *TheSelect, SDValue LHS,
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
          // Check that the condition doesn't reach either load.  If so, folding
 | 
					          // Check that the condition doesn't reach either load.  If so, folding
 | 
				
			||||||
          // this will induce a cycle into the DAG.
 | 
					          // this will induce a cycle into the DAG.
 | 
				
			||||||
          if (!LLD->isPredecessorOf(TheSelect->getOperand(0).getNode()) &&
 | 
					          if ((!LLD->hasAnyUseOfValue(1) ||
 | 
				
			||||||
              !RLD->isPredecessorOf(TheSelect->getOperand(0).getNode()) &&
 | 
					               (!LLD->isPredecessorOf(TheSelect->getOperand(0).getNode()) &&
 | 
				
			||||||
              !LLD->isPredecessorOf(TheSelect->getOperand(1).getNode()) &&
 | 
					                !LLD->isPredecessorOf(TheSelect->getOperand(1).getNode()))) &&
 | 
				
			||||||
              !RLD->isPredecessorOf(TheSelect->getOperand(1).getNode())) {
 | 
					              (!RLD->hasAnyUseOfValue(1) ||
 | 
				
			||||||
 | 
					               (!RLD->isPredecessorOf(TheSelect->getOperand(0).getNode()) &&
 | 
				
			||||||
 | 
					                !RLD->isPredecessorOf(TheSelect->getOperand(1).getNode())))) {
 | 
				
			||||||
            Addr = DAG.getNode(ISD::SELECT_CC, TheSelect->getDebugLoc(),
 | 
					            Addr = DAG.getNode(ISD::SELECT_CC, TheSelect->getDebugLoc(),
 | 
				
			||||||
                               LLD->getBasePtr().getValueType(),
 | 
					                               LLD->getBasePtr().getValueType(),
 | 
				
			||||||
                               TheSelect->getOperand(0),
 | 
					                               TheSelect->getOperand(0),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue