mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	It includes a pass that rewrites all indirect calls to jumptable functions to pass through these tables. This also adds backend support for generating the jump-instruction tables on ARM and X86. Note that since the jumptable attribute creates a second function pointer for a function, any function marked with jumptable must also be marked with unnamed_addr. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@210280 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			41 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===-- JumpInstrTableInfo.cpp: Info for Jump-Instruction Tables ----------===//
 | |
| //
 | |
| // This file is distributed under the University of Illinois Open Source
 | |
| // License. See LICENSE.TXT for details.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| ///
 | |
| /// \file
 | |
| /// \brief Information about jump-instruction tables that have been created by
 | |
| /// JumpInstrTables pass.
 | |
| ///
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #define DEBUG_TYPE "jiti"
 | |
| 
 | |
| #include "llvm/Analysis/JumpInstrTableInfo.h"
 | |
| #include "llvm/Analysis/Passes.h"
 | |
| #include "llvm/IR/Function.h"
 | |
| #include "llvm/IR/Type.h"
 | |
| 
 | |
| using namespace llvm;
 | |
| 
 | |
| INITIALIZE_PASS(JumpInstrTableInfo, "jump-instr-table-info",
 | |
|                 "Jump-Instruction Table Info", true, true)
 | |
| char JumpInstrTableInfo::ID = 0;
 | |
| 
 | |
| ImmutablePass *llvm::createJumpInstrTableInfoPass() {
 | |
|   return new JumpInstrTableInfo();
 | |
| }
 | |
| 
 | |
| JumpInstrTableInfo::JumpInstrTableInfo() : ImmutablePass(ID), Tables() {
 | |
|   initializeJumpInstrTableInfoPass(*PassRegistry::getPassRegistry());
 | |
| }
 | |
| 
 | |
| JumpInstrTableInfo::~JumpInstrTableInfo() {}
 | |
| 
 | |
| void JumpInstrTableInfo::insertEntry(FunctionType *TableFunTy, Function *Target,
 | |
|                                      Function *Jump) {
 | |
|   Tables[TableFunTy].push_back(JumpPair(Target, Jump));
 | |
| }
 |