Index: src/IceInstX8632.cpp |
diff --git a/src/IceInstX8632.cpp b/src/IceInstX8632.cpp |
index 15e024915f5a405f9bd90c39aa8a7a8f681763f7..2fbb370c1a550c04900a2122dc856340282839e2 100644 |
--- a/src/IceInstX8632.cpp |
+++ b/src/IceInstX8632.cpp |
@@ -318,7 +318,15 @@ InstX8632Fstp::InstX8632Fstp(Cfg *Func, Variable *Dest) |
: InstX8632(Func, InstX8632::Fstp, 0, Dest) {} |
InstX8632Pop::InstX8632Pop(Cfg *Func, Variable *Dest) |
- : InstX8632(Func, InstX8632::Pop, 0, Dest) {} |
+ : InstX8632(Func, InstX8632::Pop, 0, Dest) { |
+ // A pop instruction affects the stack pointer and so it should not |
+ // be allowed to be automatically dead-code eliminated. (The |
+ // corresponding push instruction doesn't need this treatment |
+ // because it has no dest variable and therefore won't be dead-code |
+ // eliminated.) This is needed for late-stage liveness analysis |
+ // (e.g. asm-verbose mode). |
+ HasSideEffects = true; |
+} |
InstX8632Push::InstX8632Push(Cfg *Func, Variable *Source) |
: InstX8632(Func, InstX8632::Push, 1, nullptr) { |