|  | // RUN: llvm-tblgen -gen-asm-writer -I %p/../../include %s | FileCheck %s | 
|  |  | 
|  | include "llvm/Target/Target.td" | 
|  |  | 
|  | def ArchInstrInfo : InstrInfo { } | 
|  |  | 
|  | def Arch : Target { | 
|  | let InstructionSet = ArchInstrInfo; | 
|  | } | 
|  |  | 
|  | def R0 : Register<"r0">; | 
|  | def Reg : RegisterClass<"Reg", [i32], 0, (add R0)>; | 
|  |  | 
|  | def IntOperand: Operand<i32>; | 
|  |  | 
|  | def PCRelOperand : Operand<i32> { | 
|  | let OperandType = "OPERAND_PCREL"; | 
|  | } | 
|  |  | 
|  | def foo : Instruction { | 
|  | let OutOperandList = (outs); | 
|  | let InOperandList = (ins Reg:$reg, IntOperand:$imm); | 
|  | let AsmString = "foo $reg, $imm"; | 
|  | } | 
|  |  | 
|  | def bar : Instruction { | 
|  | let OutOperandList = (outs); | 
|  | let InOperandList = (ins Reg:$reg, PCRelOperand:$imm); | 
|  | let AsmString = "bar $reg, $imm"; | 
|  | } | 
|  |  | 
|  | // CHECK:      ArchInstPrinter::printInstruction( | 
|  | // CHECK:      // bar, foo | 
|  | // CHECK-NEXT: printOperand(MI, 0, O); | 
|  | // CHECK:      // foo | 
|  | // CHECK-NEXT: printOperand(MI, 1, O); | 
|  | // CHECK:      // bar | 
|  | // CHECK-NEXT: printOperand(MI, Address, 1, O); |