mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	The patch is generated using this command: tools/clang/tools/extra/clang-tidy/tool/run-clang-tidy.py -fix \ -checks=-*,llvm-namespace-comment -header-filter='llvm/.*|clang/.*' \ llvm/lib/ Thanks to Eugene Kosov for the original patch! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@240137 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			56 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===-- StatepointDefaultGC.cpp - The default statepoint GC strategy ------===//
 | |
| //
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file is distributed under the University of Illinois Open Source
 | |
| // License. See LICENSE.TXT for details.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| //
 | |
| // This file contains a GCStrategy which serves as an example for the usage
 | |
| // of a statepoint based lowering strategy.  This GCStrategy is intended to
 | |
| // suitable as a default implementation usable with any collector which can
 | |
| // consume the standard stackmap format generated by statepoints, uses the
 | |
| // default addrespace to distinguish between gc managed and non-gc managed
 | |
| // pointers, and has reasonable relocation semantics.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #include "llvm/CodeGen/GCStrategy.h"
 | |
| #include "llvm/IR/DerivedTypes.h"
 | |
| #include "llvm/IR/Value.h"
 | |
| 
 | |
| using namespace llvm;
 | |
| 
 | |
| namespace {
 | |
| class StatepointGC : public GCStrategy {
 | |
| public:
 | |
|   StatepointGC() {
 | |
|     UseStatepoints = true;
 | |
|     // These options are all gc.root specific, we specify them so that the
 | |
|     // gc.root lowering code doesn't run.
 | |
|     InitRoots = false;
 | |
|     NeededSafePoints = 0;
 | |
|     UsesMetadata = false;
 | |
|     CustomRoots = false;
 | |
|   }
 | |
|   Optional<bool> isGCManagedPointer(const Value *V) const override {
 | |
|     // Method is only valid on pointer typed values.
 | |
|     PointerType *PT = cast<PointerType>(V->getType());
 | |
|     // For the sake of this example GC, we arbitrarily pick addrspace(1) as our
 | |
|     // GC managed heap.  We know that a pointer into this heap needs to be
 | |
|     // updated and that no other pointer does.  Note that addrspace(1) is used
 | |
|     // only as an example, it has no special meaning, and is not reserved for
 | |
|     // GC usage.
 | |
|     return (1 == PT->getAddressSpace());
 | |
|   }
 | |
| };
 | |
| } // namespace
 | |
| 
 | |
| static GCRegistry::Add<StatepointGC> X("statepoint-example",
 | |
|                                        "an example strategy for statepoint");
 | |
| 
 | |
| namespace llvm {
 | |
| void linkStatepointExampleGC() {}
 | |
| }
 |