diff --git a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp --- a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp +++ b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp @@ -193,6 +193,9 @@ 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 --- a/llvm/test/CodeGen/PowerPC/test_call_aix.ll +++ b/llvm/test/CodeGen/PowerPC/test_call_aix.ll @@ -4,6 +4,15 @@ ; 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 | \ +; RUN: FileCheck --check-prefix=32BITASM %s + +; RUN: not llc -mtriple powerpc64-ibm-aix-xcoff < %s 2>&1 | \ +; RUN: FileCheck --check-prefix=64BITASM %s + + +; 64BITASM: LLVM ERROR: 64-bit XCOFF object files are not supported yet. + declare void @foo(...) define void @test_call() { @@ -16,6 +25,10 @@ ; 64BIT: BL8_NOP , csr_aix64, implicit-def dead $lr8, implicit $rm, implicit $x2, implicit-def $r1 ; 64BIT: ADJCALLSTACKUP 112, 0, implicit-def dead $r1, implicit $r1 +; 32BITASM-LABEL: test_call +; 32BITASM: bl .foo +; 32BITASM-NEXT: nop + call void bitcast (void (...)* @foo to void ()*)() ret void } @@ -35,6 +48,10 @@ ; 64BIT: BL8 , csr_aix64, implicit-def dead $lr8, implicit $rm, implicit $x2, implicit-def $r1 ; 64BIT: ADJCALLSTACKUP 112, 0, implicit-def dead $r1, implicit $r1 +; 32BITASM-LABEL: test_local_call +; 32BITASM: bl .foo_local +; 32BITASM-NOT: nop + call void @foo_local() ret void }