mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	Summary: This patch re-uses the implementation of 'llvm-mc -show-inst' and makes it available to llc as 'llc -asm-show-inst'. This is necessary to test parts of MIPS32r6/MIPS64r6 without resorting to 'llc -filetype=obj' tests. For example, on MIPS32r2 and earlier we use the 'jr $rs' instruction for indirect branches and returns. On MIPS32r6, we no longer have 'jr $rs' and use 'jalr $zero, $rs' instead. The catch is that, on MIPS32r6, 'jr $rs' is an alias for 'jalr $zero, $rs' and is the preferred way of writing this instruction. As a result, all MIPS ISA's emit 'jr $rs' in their assembly output and the assembler encodes this to different opcodes according to the ISA. Using this option, we can check that the MCInst really is a JR or a JALR by matching the emitted comment. This removes the need for a 'llc -filetype=obj' test. Reviewers: rafael, dsanders Reviewed By: dsanders Subscribers: zoran.jovanovic, llvm-commits Differential Revision: http://reviews.llvm.org/D4267 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212603 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			54 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===-- MCTargetOptionsCommandFlags.h --------------------------*- C++ -*-===//
 | |
| //
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file is distributed under the University of Illinois Open Source
 | |
| // License. See LICENSE.TXT for details.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| //
 | |
| // This file contains machine code-specific flags that are shared between
 | |
| // different command line tools.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #ifndef LLVM_MC_MCTARGETOPTIONSCOMMANDFLAGS_H
 | |
| #define LLVM_MC_MCTARGETOPTIONSCOMMANDFLAGS_H
 | |
| 
 | |
| #include "llvm/Support/CommandLine.h"
 | |
| #include "llvm/MC/MCTargetOptions.h"
 | |
| using namespace llvm;
 | |
| 
 | |
| cl::opt<MCTargetOptions::AsmInstrumentation> AsmInstrumentation(
 | |
|     "asm-instrumentation", cl::desc("Instrumentation of inline assembly and "
 | |
|                                     "assembly source files"),
 | |
|     cl::init(MCTargetOptions::AsmInstrumentationNone),
 | |
|     cl::values(clEnumValN(MCTargetOptions::AsmInstrumentationNone, "none",
 | |
|                           "no instrumentation at all"),
 | |
|                clEnumValN(MCTargetOptions::AsmInstrumentationAddress, "address",
 | |
|                           "instrument instructions with memory arguments"),
 | |
|                clEnumValEnd));
 | |
| 
 | |
| cl::opt<bool> RelaxAll("mc-relax-all",
 | |
|                        cl::desc("When used with filetype=obj, "
 | |
|                                 "relax all fixups in the emitted object file"));
 | |
| 
 | |
| cl::opt<int> DwarfVersion("dwarf-version", cl::desc("Dwarf version"),
 | |
|                           cl::init(0));
 | |
| 
 | |
| cl::opt<bool> ShowMCInst("asm-show-inst",
 | |
|                          cl::desc("Emit internal instruction representation to "
 | |
|                                   "assembly file"));
 | |
| 
 | |
| static inline MCTargetOptions InitMCTargetOptionsFromFlags() {
 | |
|   MCTargetOptions Options;
 | |
|   Options.SanitizeAddress =
 | |
|       (AsmInstrumentation == MCTargetOptions::AsmInstrumentationAddress);
 | |
|   Options.MCRelaxAll = RelaxAll;
 | |
|   Options.DwarfVersion = DwarfVersion;
 | |
|   Options.ShowMCInst = ShowMCInst;
 | |
|   return Options;
 | |
| }
 | |
| 
 | |
| #endif
 |