diff options
author | Hal Finkel <hfinkel@anl.gov> | 2014-03-06 01:28:23 +0000 |
---|---|---|
committer | Hal Finkel <hfinkel@anl.gov> | 2014-03-06 01:28:23 +0000 |
commit | 6daf2aa1404d69e77d7ace64a709033abc9d3405 (patch) | |
tree | 9c857f32a7c50bcc889cf437f3d47e811d2dd754 /llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp | |
parent | 9a6f50f61c6eb95e0b1cc3d7749b19ff1db37e4e (diff) | |
download | bcm5719-llvm-6daf2aa1404d69e77d7ace64a709033abc9d3405.tar.gz bcm5719-llvm-6daf2aa1404d69e77d7ace64a709033abc9d3405.zip |
The PPC global base register cannot be r0
The global base register cannot be r0 because it might end up as the first
argument to addi or addis. Fixes PR18316.
I don't have a small stable test case.
llvm-svn: 203054
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp')
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp index 44821d31b51..65ea49a8e2b 100644 --- a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp +++ b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp @@ -272,11 +272,11 @@ SDNode *PPCDAGToDAGISel::getGlobalBaseReg() { DebugLoc dl; if (PPCLowering.getPointerTy() == MVT::i32) { - GlobalBaseReg = RegInfo->createVirtualRegister(&PPC::GPRCRegClass); + GlobalBaseReg = RegInfo->createVirtualRegister(&PPC::GPRC_NOR0RegClass); BuildMI(FirstMBB, MBBI, dl, TII.get(PPC::MovePCtoLR)); BuildMI(FirstMBB, MBBI, dl, TII.get(PPC::MFLR), GlobalBaseReg); } else { - GlobalBaseReg = RegInfo->createVirtualRegister(&PPC::G8RCRegClass); + GlobalBaseReg = RegInfo->createVirtualRegister(&PPC::G8RC_NOX0RegClass); BuildMI(FirstMBB, MBBI, dl, TII.get(PPC::MovePCtoLR8)); BuildMI(FirstMBB, MBBI, dl, TII.get(PPC::MFLR8), GlobalBaseReg); } |