mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-09 05:57:23 +00:00
[AArch64] Teach AsmPrinter about GlobalAddress operands.
Fixes PR22761, rdar://20024866. Differential Revision: http://reviews.llvm.org/D8042 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231400 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
03001d828e
commit
77f46f4f9f
@ -36,6 +36,7 @@
|
||||
#include "llvm/MC/MCInstBuilder.h"
|
||||
#include "llvm/MC/MCLinkerOptimizationHint.h"
|
||||
#include "llvm/MC/MCStreamer.h"
|
||||
#include "llvm/MC/MCSymbol.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/TargetRegistry.h"
|
||||
using namespace llvm;
|
||||
@ -221,6 +222,17 @@ void AArch64AsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNum,
|
||||
O << '#' << Imm;
|
||||
break;
|
||||
}
|
||||
case MachineOperand::MO_GlobalAddress: {
|
||||
const GlobalValue *GV = MO.getGlobal();
|
||||
MCSymbol *Sym = getSymbol(GV);
|
||||
|
||||
// FIXME: Can we get anything other than a plain symbol here?
|
||||
assert(!MO.getTargetFlags() && "Unknown operand target flag!");
|
||||
|
||||
O << *Sym;
|
||||
printOffset(MO.getOffset(), O);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
20
test/CodeGen/AArch64/inline-asm-globaladdress.ll
Normal file
20
test/CodeGen/AArch64/inline-asm-globaladdress.ll
Normal file
@ -0,0 +1,20 @@
|
||||
; RUN: llc < %s -mtriple aarch64-gnu-linux | FileCheck %s
|
||||
; RUN: llc < %s -mtriple arm64-apple-darwin | FileCheck %s
|
||||
|
||||
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
|
||||
|
||||
; CHECK-LABEL: test_inlineasm_globaladdress:
|
||||
; CHECK: b {{_?}}test_symbol
|
||||
define void @test_inlineasm_globaladdress() {
|
||||
call void asm sideeffect "b $0", "i"(void ()* @test_symbol)
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK-LABEL: test_inlineasm_globaladdress_offset:
|
||||
; CHECK: b {{_?}}test_symbol+4
|
||||
define void @test_inlineasm_globaladdress_offset() {
|
||||
call void asm sideeffect "b $0", "i"(void ()* bitcast (i8* getelementptr (i8* bitcast (void ()* @test_symbol to i8*), i64 4) to void ()*))
|
||||
ret void
|
||||
}
|
||||
|
||||
declare void @test_symbol()
|
Loading…
x
Reference in New Issue
Block a user