41 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===- SDNodeProperties.cpp -----------------------------------------------===//
 | |
| //
 | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 | |
| // See https://llvm.org/LICENSE.txt for license information.
 | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #include "SDNodeProperties.h"
 | |
| #include "llvm/ADT/StringSwitch.h"
 | |
| #include "llvm/TableGen/Error.h"
 | |
| #include "llvm/TableGen/Record.h"
 | |
| 
 | |
| using namespace llvm;
 | |
| 
 | |
| unsigned llvm::parseSDPatternOperatorProperties(Record *R) {
 | |
|   unsigned Properties = 0;
 | |
|   for (Record *Property : R->getValueAsListOfDefs("Properties")) {
 | |
|     auto Offset = StringSwitch<unsigned>(Property->getName())
 | |
|                       .Case("SDNPCommutative", SDNPCommutative)
 | |
|                       .Case("SDNPAssociative", SDNPAssociative)
 | |
|                       .Case("SDNPHasChain", SDNPHasChain)
 | |
|                       .Case("SDNPOutGlue", SDNPOutGlue)
 | |
|                       .Case("SDNPInGlue", SDNPInGlue)
 | |
|                       .Case("SDNPOptInGlue", SDNPOptInGlue)
 | |
|                       .Case("SDNPMayStore", SDNPMayStore)
 | |
|                       .Case("SDNPMayLoad", SDNPMayLoad)
 | |
|                       .Case("SDNPSideEffect", SDNPSideEffect)
 | |
|                       .Case("SDNPMemOperand", SDNPMemOperand)
 | |
|                       .Case("SDNPVariadic", SDNPVariadic)
 | |
|                       .Default(-1u);
 | |
|     if (Offset != -1u)
 | |
|       Properties |= 1 << Offset;
 | |
|     else
 | |
|       PrintFatalError(R->getLoc(), "Unknown SD Node property '" +
 | |
|                                        Property->getName() + "' on node '" +
 | |
|                                        R->getName() + "'!");
 | |
|   }
 | |
|   return Properties;
 | |
| }
 |