Index: src/IceTargetLoweringARM32.h |
diff --git a/src/IceTargetLoweringARM32.h b/src/IceTargetLoweringARM32.h |
index 91db6bcf0c53c86761b2dd1aa5ed4fd25b890a74..def4ee1682fbb77fc870f037404883bbee1f0ec5 100644 |
--- a/src/IceTargetLoweringARM32.h |
+++ b/src/IceTargetLoweringARM32.h |
@@ -280,13 +280,27 @@ protected: |
// an assert around just in case there is some untested code path where Dest |
// is nullptr. |
assert(Dest != nullptr); |
- Context.insert(InstARM32Mov::create(Func, Dest, Src0, Pred)); |
+ auto *Instr = InstARM32Mov::create(Func, Dest, Src0, Pred); |
+ |
+ Context.insert(Instr); |
+ if (Instr->isMultiDest()) { |
+ // If Instr is multi-dest, then Dest must be a Variable64On32. We add a |
+ // fake-def for Instr.DestHi here. |
+ assert(llvm::isa<Variable64On32>(Dest)); |
+ Context.insert(InstFakeDef::create(Func, Instr->getDestHi())); |
+ } |
} |
void _mov_redefined(Variable *Dest, Operand *Src0, |
CondARM32::Cond Pred = CondARM32::AL) { |
- Inst *NewInst = InstARM32Mov::create(Func, Dest, Src0, Pred); |
- NewInst->setDestRedefined(); |
- Context.insert(NewInst); |
+ auto *Instr = InstARM32Mov::create(Func, Dest, Src0, Pred); |
+ Instr->setDestRedefined(); |
+ Context.insert(Instr); |
+ if (Instr->isMultiDest()) { |
+ // If Instr is multi-dest, then Dest must be a Variable64On32. We add a |
+ // fake-def for Instr.DestHi here. |
+ assert(llvm::isa<Variable64On32>(Dest)); |
+ Context.insert(InstFakeDef::create(Func, Instr->getDestHi())); |
+ } |
} |
/// The Operand can only be a 16-bit immediate or a ConstantRelocatable (with |
/// an upper16 relocation). |