[PowerPC][AIX]Add lowering of MCSymbol MachineOperand.
authorSean Fertile <sfertile@ca.ibm.com>
Fri, 26 Jul 2019 17:25:27 +0000 (17:25 +0000)
committerSean Fertile <sfertile@ca.ibm.com>
Fri, 26 Jul 2019 17:25:27 +0000 (17:25 +0000)
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

llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
llvm/test/CodeGen/PowerPC/test_call_aix.ll

index ba2c78c..a3bf69a 100644 (file)
@@ -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.");
 }
 
index 027e6bd..32b9818 100644 (file)
@@ -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;
   }
index 6f98843..81133a5 100644 (file)
@@ -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
 }