Fix a bug in simplifyDecRefStack
My bad. If you're going to gen something with no dest in simplifier, you need to nop out the old one. This was leading to over-decrefs in some cases.
Esse commit está contido em:
@@ -1688,6 +1688,7 @@ SSATmp* Simplifier::simplifyDecRefStack(IRInstruction* inst) {
|
||||
auto const info = getStackValue(inst->getSrc(0),
|
||||
inst->getExtra<StackOffset>()->offset);
|
||||
if (info.value && !info.spansCall) {
|
||||
inst->convertToNop();
|
||||
return gen(DecRef, info.knownType, info.value);
|
||||
}
|
||||
if (!info.knownType.equals(Type::None)) {
|
||||
|
||||
@@ -915,6 +915,9 @@ void CSEHash::filter(Block* block, IdomVector& idoms) {
|
||||
* fall-through edge to the next block.
|
||||
*/
|
||||
void TraceBuilder::reoptimize() {
|
||||
FTRACE(5, "ReOptimize:vvvvvvvvvvvvvvvvvvvv\n");
|
||||
SCOPE_EXIT { FTRACE(5, "ReOptimize:^^^^^^^^^^^^^^^^^^^^\n"); };
|
||||
|
||||
m_enableCse = RuntimeOption::EvalHHIRCse;
|
||||
m_enableSimplification = RuntimeOption::EvalHHIRSimplification;
|
||||
if (!m_enableCse && !m_enableSimplification) return;
|
||||
@@ -924,25 +927,31 @@ void TraceBuilder::reoptimize() {
|
||||
// t2135219 should address that
|
||||
return;
|
||||
}
|
||||
|
||||
BlockList sortedBlocks = sortCfg(m_trace.get(), m_irFactory);
|
||||
IdomVector idoms = findDominators(sortedBlocks);
|
||||
clearTrackedState();
|
||||
|
||||
auto blocks = std::move(m_trace->getBlocks());
|
||||
assert(m_trace->getBlocks().empty());
|
||||
while (!blocks.empty()) {
|
||||
Block* block = blocks.front();
|
||||
blocks.pop_front();
|
||||
assert(block->getTrace() == m_trace.get());
|
||||
FTRACE(5, "Block: {}\n", block->postId());
|
||||
|
||||
m_trace->push_back(block);
|
||||
if (m_snapshots[block]) {
|
||||
useState(block);
|
||||
m_cseHash.filter(block, idoms);
|
||||
}
|
||||
|
||||
auto instructions = std::move(block->getInstrs());
|
||||
assert(block->empty());
|
||||
while (!instructions.empty()) {
|
||||
auto *inst = &instructions.front();
|
||||
instructions.pop_front();
|
||||
|
||||
SSATmp* tmp = optimizeWork(inst); // Can generate new instrs!
|
||||
if (!tmp) {
|
||||
// Could not optimize; keep the old instruction
|
||||
|
||||
Link simbólico
+1
@@ -0,0 +1 @@
|
||||
inlining.opts
|
||||
Link simbólico
+1
@@ -0,0 +1 @@
|
||||
inlining.opts
|
||||
Link simbólico
+1
@@ -0,0 +1 @@
|
||||
inlining.opts
|
||||
Link simbólico
+1
@@ -0,0 +1 @@
|
||||
inlining.opts
|
||||
Link simbólico
+1
@@ -0,0 +1 @@
|
||||
inlining.opts
|
||||
Link simbólico
+1
@@ -0,0 +1 @@
|
||||
inlining.opts
|
||||
Link simbólico
+1
@@ -0,0 +1 @@
|
||||
inlining.opts
|
||||
@@ -1 +1 @@
|
||||
../hiphop.opts
|
||||
inlining.opts
|
||||
Link simbólico
+1
@@ -0,0 +1 @@
|
||||
inlining.opts
|
||||
Link simbólico
+1
@@ -0,0 +1 @@
|
||||
inlining.opts
|
||||
Link simbólico
+1
@@ -0,0 +1 @@
|
||||
inlining.opts
|
||||
Link simbólico
+1
@@ -0,0 +1 @@
|
||||
inlining.opts
|
||||
@@ -1 +1 @@
|
||||
../hiphop.opts
|
||||
inlining.opts
|
||||
@@ -0,0 +1 @@
|
||||
-vEval.JitEnableRenameFunction=0 -vEval.EnableHipHopSyntax=1
|
||||
Link simbólico
+1
@@ -0,0 +1 @@
|
||||
inlining.opts
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
class Obj {
|
||||
public function __construct() {
|
||||
$this->uniqueVar = "a string";
|
||||
}
|
||||
private $uniqueVar;
|
||||
}
|
||||
|
||||
function test() {
|
||||
new Obj();
|
||||
echo "done\n";
|
||||
}
|
||||
|
||||
test();
|
||||
@@ -0,0 +1 @@
|
||||
done
|
||||
Link simbólico
+1
@@ -0,0 +1 @@
|
||||
inlining.opts
|
||||
Link simbólico
+1
@@ -0,0 +1 @@
|
||||
inlining.opts
|
||||
@@ -1 +1 @@
|
||||
../hiphop.opts
|
||||
inlining.opts
|
||||
Link simbólico
+1
@@ -0,0 +1 @@
|
||||
inlining.opts
|
||||
Link simbólico
+1
@@ -0,0 +1 @@
|
||||
inlining.opts
|
||||
Referência em uma Nova Issue
Bloquear um usuário