mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	No functional change intended. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203106 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			63 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===-- SystemZConstantPoolValue.cpp - SystemZ constant-pool value --------===//
 | |
| //
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file is distributed under the University of Illinois Open Source
 | |
| // License. See LICENSE.TXT for details.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #include "SystemZConstantPoolValue.h"
 | |
| #include "llvm/ADT/FoldingSet.h"
 | |
| #include "llvm/IR/DerivedTypes.h"
 | |
| #include "llvm/IR/GlobalValue.h"
 | |
| #include "llvm/Support/raw_ostream.h"
 | |
| 
 | |
| using namespace llvm;
 | |
| 
 | |
| SystemZConstantPoolValue::
 | |
| SystemZConstantPoolValue(const GlobalValue *gv,
 | |
|                          SystemZCP::SystemZCPModifier modifier)
 | |
|   : MachineConstantPoolValue(gv->getType()), GV(gv), Modifier(modifier) {}
 | |
| 
 | |
| SystemZConstantPoolValue *
 | |
| SystemZConstantPoolValue::Create(const GlobalValue *GV,
 | |
|                                  SystemZCP::SystemZCPModifier Modifier) {
 | |
|   return new SystemZConstantPoolValue(GV, Modifier);
 | |
| }
 | |
| 
 | |
| unsigned SystemZConstantPoolValue::getRelocationInfo() const {
 | |
|   switch (Modifier) {
 | |
|   case SystemZCP::NTPOFF:
 | |
|     // May require a relocation, but the relocations are always resolved
 | |
|     // by the static linker.
 | |
|     return 1;
 | |
|   }
 | |
|   llvm_unreachable("Unknown modifier");
 | |
| }
 | |
| 
 | |
| int SystemZConstantPoolValue::
 | |
| getExistingMachineCPValue(MachineConstantPool *CP, unsigned Alignment) {
 | |
|   unsigned AlignMask = Alignment - 1;
 | |
|   const std::vector<MachineConstantPoolEntry> &Constants = CP->getConstants();
 | |
|   for (unsigned I = 0, E = Constants.size(); I != E; ++I) {
 | |
|     if (Constants[I].isMachineConstantPoolEntry() &&
 | |
|         (Constants[I].getAlignment() & AlignMask) == 0) {
 | |
|       auto *ZCPV =
 | |
|         static_cast<SystemZConstantPoolValue *>(Constants[I].Val.MachineCPVal);
 | |
|       if (ZCPV->GV == GV && ZCPV->Modifier == Modifier)
 | |
|         return I;
 | |
|     }
 | |
|   }
 | |
|   return -1;
 | |
| }
 | |
| 
 | |
| void SystemZConstantPoolValue::addSelectionDAGCSEId(FoldingSetNodeID &ID) {
 | |
|   ID.AddPointer(GV);
 | |
|   ID.AddInteger(Modifier);
 | |
| }
 | |
| 
 | |
| void SystemZConstantPoolValue::print(raw_ostream &O) const {
 | |
|   O << GV << "@" << int(Modifier);
 | |
| }
 |