diff options
author | Sean Fertile <sfertile@ca.ibm.com> | 2019-07-26 17:25:27 +0000 |
---|---|---|
committer | Sean Fertile <sfertile@ca.ibm.com> | 2019-07-26 17:25:27 +0000 |
commit | 9df6177d380ecd0e9d78361a938664dc3a0ee387 (patch) | |
tree | eaa8f72dd02b30c81d5de2cd69be266f8400ea55 | |
parent | be4a78af465aca8030d044e56990fc0498e2d6c2 (diff) | |
download | bcm5719-llvm-9df6177d380ecd0e9d78361a938664dc3a0ee387.tar.gz bcm5719-llvm-9df6177d380ecd0e9d78361a938664dc3a0ee387.zip |
[PowerPC][AIX]Add lowering of MCSymbol MachineOperand.
Adds machine operand lowering for MCSymbolSDNodes to the PowerPC
backend. This is needed to produce call instructions in assembly for AIX
because the callee operand is a MCSymbolSDNode. The test is XFAIL'ed for
asserts due to a (valid) assertion in PEI that the AIX ABI isn't supported yet.
Differential Revision: https://reviews.llvm.org/D63738
llvm-svn: 367133
-rw-r--r-- | llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp | 3 | ||||
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCMCInstLower.cpp | 3 | ||||
-rw-r--r-- | llvm/test/CodeGen/PowerPC/test_call_aix.ll | 13 |
3 files changed, 19 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp index ba2c78c3b93..a3bf69ae4ef 100644 --- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -1843,6 +1843,9 @@ MCSection *TargetLoweringObjectFileXCOFF::SelectSectionForGlobal( Kind, /* BeginSymbolName */ nullptr); } + if (Kind.isText()) + return TextSection; + report_fatal_error("XCOFF other section types not yet implemented."); } diff --git a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp index 027e6bd1ba0..32b9818e70b 100644 --- a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp +++ b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp @@ -193,6 +193,9 @@ bool llvm::LowerPPCMachineOperandToMCOperand(const MachineOperand &MO, OutMO = GetSymbolRef(MO, AP.GetBlockAddressSymbol(MO.getBlockAddress()), AP, isDarwin); return true; + case MachineOperand::MO_MCSymbol: + OutMO = GetSymbolRef(MO, MO.getMCSymbol(), AP, isDarwin); + return true; case MachineOperand::MO_RegisterMask: return false; } diff --git a/llvm/test/CodeGen/PowerPC/test_call_aix.ll b/llvm/test/CodeGen/PowerPC/test_call_aix.ll index 6f98843e92b..81133a5b529 100644 --- a/llvm/test/CodeGen/PowerPC/test_call_aix.ll +++ b/llvm/test/CodeGen/PowerPC/test_call_aix.ll @@ -1,9 +1,14 @@ +; XFAIL: asserts + ; RUN: llc -mtriple powerpc-ibm-aix-xcoff -stop-after=machine-cp < %s | \ ; RUN: FileCheck --check-prefix=32BIT %s ; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -stop-after=machine-cp < %s | \ ; RUN: FileCheck --check-prefix=64BIT %s +; RUN: llc -mtriple powerpc-ibm-aix-xcoff < %s | FileCheck %s +; RUN: llc -mtriple powerpc64-ibm-aix-xcoff < %s | FileCheck %s + declare void @foo(...) define void @test_call() { @@ -16,6 +21,10 @@ entry: ; 64BIT: BL8_NOP <mcsymbol .foo>, csr_aix64, implicit-def dead $lr8, implicit $rm, implicit $x2, implicit-def $r1 ; 64BIT: ADJCALLSTACKUP 112, 0, implicit-def dead $r1, implicit $r1 +; CHECK-LABEL: test_call +; CHECK: bl .foo +; CHECK-NEXT: nop + call void bitcast (void (...)* @foo to void ()*)() ret void } @@ -35,6 +44,10 @@ entry: ; 64BIT: BL8 <mcsymbol .foo_local>, csr_aix64, implicit-def dead $lr8, implicit $rm, implicit $x2, implicit-def $r1 ; 64BIT: ADJCALLSTACKUP 112, 0, implicit-def dead $r1, implicit $r1 +; CHECK-LABEL: test_local_call +; CHECK: bl .foo_local +; CHECK-NOT: nop + call void @foo_local() ret void } |