Index: src/IceTargetLoweringMIPS32.cpp |
diff --git a/src/IceTargetLoweringMIPS32.cpp b/src/IceTargetLoweringMIPS32.cpp |
index dc6c71b3f5d2bb8bab5430efc6fbb39db61d4cab..6d6c6b9316f43f8e48f4e759d7493ea7a7eea595 100644 |
--- a/src/IceTargetLoweringMIPS32.cpp |
+++ b/src/IceTargetLoweringMIPS32.cpp |
@@ -2468,7 +2468,7 @@ void TargetMIPS32::lowerFcmp(const InstFcmp *Instr) { |
auto *Zero = getZero(); |
InstFcmp::FCond Cond = Instr->getCondition(); |
- auto *DestR = legalizeToReg(Dest); |
+ auto *DestR = makeReg(Dest->getType()); |
auto *Src0R = legalizeToReg(Src0); |
auto *Src1R = legalizeToReg(Src1); |
const Type Src0Ty = Src0->getType(); |
@@ -2493,6 +2493,7 @@ void TargetMIPS32::lowerFcmp(const InstFcmp *Instr) { |
} else { |
_c_eq_d(Src0R, Src1R); |
} |
+ _addiu(DestR, Zero, 1); |
_movf(DestR, Zero, FCC0); |
_mov(Dest, DestR); |
break; |
@@ -2503,6 +2504,7 @@ void TargetMIPS32::lowerFcmp(const InstFcmp *Instr) { |
} else { |
_c_ule_d(Src0R, Src1R); |
} |
+ _addiu(DestR, Zero, 1); |
_movt(DestR, Zero, FCC0); |
_mov(Dest, DestR); |
break; |
@@ -2513,6 +2515,7 @@ void TargetMIPS32::lowerFcmp(const InstFcmp *Instr) { |
} else { |
_c_ult_d(Src0R, Src1R); |
} |
+ _addiu(DestR, Zero, 1); |
_movt(DestR, Zero, FCC0); |
_mov(Dest, DestR); |
break; |
@@ -2523,6 +2526,7 @@ void TargetMIPS32::lowerFcmp(const InstFcmp *Instr) { |
} else { |
_c_olt_d(Src0R, Src1R); |
} |
+ _addiu(DestR, Zero, 1); |
_movf(DestR, Zero, FCC0); |
_mov(Dest, DestR); |
break; |
@@ -2533,6 +2537,7 @@ void TargetMIPS32::lowerFcmp(const InstFcmp *Instr) { |
} else { |
_c_ole_d(Src0R, Src1R); |
} |
+ _addiu(DestR, Zero, 1); |
_movf(DestR, Zero, FCC0); |
_mov(Dest, DestR); |
break; |
@@ -2543,6 +2548,7 @@ void TargetMIPS32::lowerFcmp(const InstFcmp *Instr) { |
} else { |
_c_ueq_d(Src0R, Src1R); |
} |
+ _addiu(DestR, Zero, 1); |
_movt(DestR, Zero, FCC0); |
_mov(Dest, DestR); |
break; |
@@ -2553,6 +2559,7 @@ void TargetMIPS32::lowerFcmp(const InstFcmp *Instr) { |
} else { |
_c_un_d(Src0R, Src1R); |
} |
+ _addiu(DestR, Zero, 1); |
_movt(DestR, Zero, FCC0); |
_mov(Dest, DestR); |
break; |
@@ -2563,6 +2570,7 @@ void TargetMIPS32::lowerFcmp(const InstFcmp *Instr) { |
} else { |
_c_ueq_d(Src0R, Src1R); |
} |
+ _addiu(DestR, Zero, 1); |
_movf(DestR, Zero, FCC0); |
_mov(Dest, DestR); |
break; |
@@ -2573,6 +2581,7 @@ void TargetMIPS32::lowerFcmp(const InstFcmp *Instr) { |
} else { |
_c_ole_d(Src0R, Src1R); |
} |
+ _addiu(DestR, Zero, 1); |
_movt(DestR, Zero, FCC0); |
_mov(Dest, DestR); |
break; |
@@ -2583,6 +2592,7 @@ void TargetMIPS32::lowerFcmp(const InstFcmp *Instr) { |
} else { |
_c_olt_d(Src0R, Src1R); |
} |
+ _addiu(DestR, Zero, 1); |
_movt(DestR, Zero, FCC0); |
_mov(Dest, DestR); |
break; |
@@ -2593,6 +2603,7 @@ void TargetMIPS32::lowerFcmp(const InstFcmp *Instr) { |
} else { |
_c_ult_d(Src0R, Src1R); |
} |
+ _addiu(DestR, Zero, 1); |
_movf(DestR, Zero, FCC0); |
_mov(Dest, DestR); |
break; |
@@ -2603,6 +2614,7 @@ void TargetMIPS32::lowerFcmp(const InstFcmp *Instr) { |
} else { |
_c_ule_d(Src0R, Src1R); |
} |
+ _addiu(DestR, Zero, 1); |
_movf(DestR, Zero, FCC0); |
_mov(Dest, DestR); |
break; |
@@ -2613,6 +2625,7 @@ void TargetMIPS32::lowerFcmp(const InstFcmp *Instr) { |
} else { |
_c_eq_d(Src0R, Src1R); |
} |
+ _addiu(DestR, Zero, 1); |
_movt(DestR, Zero, FCC0); |
_mov(Dest, DestR); |
break; |
@@ -2623,6 +2636,7 @@ void TargetMIPS32::lowerFcmp(const InstFcmp *Instr) { |
} else { |
_c_un_d(Src0R, Src1R); |
} |
+ _addiu(DestR, Zero, 1); |
_movf(DestR, Zero, FCC0); |
_mov(Dest, DestR); |
break; |