Skip to content

Commit 3f4ddd4

Browse files
committed
CSE mark_dependence instructions
This enables things like redundant load elimination and should fix the regression after changing ManagedBuffer(Pointer) to use unsafeAddressWithOwner. rdar://27138023
1 parent cac8053 commit 3f4ddd4

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

lib/SIL/SILInstruction.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -619,6 +619,10 @@ namespace {
619619
return true;
620620
}
621621

622+
bool visitMarkDependenceInst(const MarkDependenceInst *RHS) {
623+
return true;
624+
}
625+
622626
private:
623627
const SILInstruction *LHS;
624628
};

lib/SILOptimizer/Transforms/CSE.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,12 @@ class HashVisitor : public SILInstructionVisitor<HashVisitor, llvm::hash_code> {
362362
Operands.begin(),
363363
Operands.end()));
364364
}
365+
hash_code visitMarkDependenceInst(MarkDependenceInst *X) {
366+
OperandValueArrayRef Operands(X->getAllOperands());
367+
return llvm::hash_combine(
368+
X->getKind(), X->getType(),
369+
llvm::hash_combine_range(Operands.begin(), Operands.end()));
370+
}
365371
};
366372
} // end anonymous namespace
367373

@@ -680,6 +686,7 @@ bool CSE::canHandle(SILInstruction *Inst) {
680686
case ValueKind::BridgeObjectToWordInst:
681687
case ValueKind::ThinFunctionToPointerInst:
682688
case ValueKind::PointerToThinFunctionInst:
689+
case ValueKind::MarkDependenceInst:
683690
return true;
684691
default:
685692
return false;

test/SILOptimizer/cse.sil

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1306,3 +1306,16 @@ bb2: // Preds: bb0 bb1
13061306
return %19 : $() // id: %20
13071307
}
13081308

1309+
// CHECK-LABEL: sil @cse_mark_dependence
1310+
// CHECK: mark_dependence
1311+
// CHECK-NOT: mark_dependence
1312+
// CHECK: return
1313+
sil @cse_mark_dependence : $@convention(thin) (@inout Builtin.Int64, @guaranteed Builtin.NativeObject) -> (Builtin.Int64, Builtin.Int64) {
1314+
bb0(%0 : $*Builtin.Int64, %1 : $Builtin.NativeObject):
1315+
%2 = mark_dependence %0 : $*Builtin.Int64 on %1 : $Builtin.NativeObject
1316+
%3 = mark_dependence %0 : $*Builtin.Int64 on %1 : $Builtin.NativeObject
1317+
%4 = load %2 : $*Builtin.Int64
1318+
%5 = load %3 : $*Builtin.Int64
1319+
%6 = tuple(%4 : $Builtin.Int64, %5 : $Builtin.Int64)
1320+
return %6 : $(Builtin.Int64, Builtin.Int64)
1321+
}

0 commit comments

Comments
 (0)