diff options
| author | Tanya Lattner <tonic@nondot.org> | 2004-11-23 04:22:29 +0000 |
|---|---|---|
| committer | Tanya Lattner <tonic@nondot.org> | 2004-11-23 04:22:29 +0000 |
| commit | c3a739429142fc2e16f54f3aa89b3b8fdacbd00c (patch) | |
| tree | e7d342742397d9e930e913f9dfc730298e73923f | |
| parent | 69e4cc55ef552988935e2643d71d0c5443a748ac (diff) | |
| download | bcm5719-llvm-c3a739429142fc2e16f54f3aa89b3b8fdacbd00c.tar.gz bcm5719-llvm-c3a739429142fc2e16f54f3aa89b3b8fdacbd00c.zip | |
Changed the CreateCodeToLoadConst function to preserve SSA form. This basically means adding extra tmp instructions for intermediate values.
llvm-svn: 18137
| -rw-r--r-- | llvm/lib/Target/SparcV9/SparcV9BurgISel.cpp | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/llvm/lib/Target/SparcV9/SparcV9BurgISel.cpp b/llvm/lib/Target/SparcV9/SparcV9BurgISel.cpp index 55e5f0ee24d..2cf6a64d643 100644 --- a/llvm/lib/Target/SparcV9/SparcV9BurgISel.cpp +++ b/llvm/lib/Target/SparcV9/SparcV9BurgISel.cpp @@ -1111,22 +1111,39 @@ void CreateCodeToLoadConst(const TargetMachine& target, Function* F, MI->getOperand(0).markHi64(); mvec.push_back(MI); + //Create another tmp register for the SETX sequence to preserve SSA + TmpInstruction* tmpReg2 = + new TmpInstruction(mcfi, PointerType::get(val->getType())); + MI = BuildMI(V9::ORi, 3).addReg(tmpReg).addConstantPoolIndex(CPI) - .addRegDef(tmpReg); + .addRegDef(tmpReg2); MI->getOperand(1).markLo64(); mvec.push_back(MI); - mvec.push_back(BuildMI(V9::SLLXi6, 3).addReg(tmpReg).addZImm(32) - .addRegDef(tmpReg)); + //Create another tmp register for the SETX sequence to preserve SSA + TmpInstruction* tmpReg3 = + new TmpInstruction(mcfi, PointerType::get(val->getType())); + + mvec.push_back(BuildMI(V9::SLLXi6, 3).addReg(tmpReg2).addZImm(32) + .addRegDef(tmpReg3)); MI = BuildMI(V9::SETHI, 2).addConstantPoolIndex(CPI).addRegDef(addrReg); MI->getOperand(0).markHi32(); mvec.push_back(MI); - MI = BuildMI(V9::ORr, 3).addReg(addrReg).addReg(tmpReg).addRegDef(addrReg); + // Create another TmpInstruction for the address register + TmpInstruction* addrReg2 = + new TmpInstruction(mcfi, PointerType::get(val->getType())); + + + MI = BuildMI(V9::ORr, 3).addReg(addrReg).addReg(tmpReg3).addRegDef(addrReg2); mvec.push_back(MI); - MI = BuildMI(V9::ORi, 3).addReg(addrReg).addConstantPoolIndex(CPI) - .addRegDef(addrReg); + // Create another TmpInstruction for the address register + TmpInstruction* addrReg3 = + new TmpInstruction(mcfi, PointerType::get(val->getType())); + + MI = BuildMI(V9::ORi, 3).addReg(addrReg2).addConstantPoolIndex(CPI) + .addRegDef(addrReg3); MI->getOperand(1).markLo32(); mvec.push_back(MI); @@ -1134,7 +1151,7 @@ void CreateCodeToLoadConst(const TargetMachine& target, Function* F, unsigned Opcode = ChooseLoadInstruction(val->getType()); Opcode = convertOpcodeFromRegToImm(Opcode); mvec.push_back(BuildMI(Opcode, 3) - .addReg(addrReg).addSImm((int64_t)0).addRegDef(dest)); + .addReg(addrReg3).addSImm((int64_t)0).addRegDef(dest)); } } |

