Index: src/IceTargetLoweringX8632.cpp |
diff --git a/src/IceTargetLoweringX8632.cpp b/src/IceTargetLoweringX8632.cpp |
index d1fdfc2f97868dcd9f11a6a5b76ca0396912d65c..0beb311e56e0ef690701a6fbb1125dbd14ccd3d0 100644 |
--- a/src/IceTargetLoweringX8632.cpp |
+++ b/src/IceTargetLoweringX8632.cpp |
@@ -1900,9 +1900,12 @@ void TargetX8632::lowerCall(const InstCall *Instr) { |
} else if (Dest->getType() == IceType_f32 || Dest->getType() == IceType_f64) { |
// Special treatment for an FP function which returns its result in |
// st(0). |
- _fstp(Dest); |
// If Dest ends up being a physical xmm register, the fstp emit code |
// will route st(0) through a temporary stack slot. |
+ _fstp(Dest); |
+ // Create a fake use of Dest in case it actually isn't used, |
+ // because st(0) still needs to be popped. |
+ Context.insert(InstFakeUse::create(Func, Dest)); |
} |
} |