From eefe2e80adeca381edce970be83bdea7cca8fd81 Mon Sep 17 00:00:00 2001 From: ringabout <43030857+ringabout@users.noreply.github.com> Date: Fri, 28 Feb 2025 20:59:26 +0800 Subject: [PATCH] clean up extraneous move `sink` copy --- compiler/ccgexprs.nim | 10 ++-------- compiler/cgen.nim | 1 - 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index fdd8553a3e..07d2ca453f 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -357,7 +357,7 @@ proc genAssignment(p: BProc, dest, src: TLoc, flags: TAssignmentFlags) = of tyString: if optSeqDestructors in p.config.globalOptions: genGenericAsgn(p, dest, src, flags) - elif ({needToCopy, needToCopySinkParam} * flags == {} and src.storage != OnStatic) or canMove(p, src.lode, dest): + elif (needToCopy notin flags and src.storage != OnStatic) or canMove(p, src.lode, dest): genRefAssign(p, dest, src) else: if (dest.storage == OnStack and p.config.selectedGC != gcGo) or not usesWriteBarrier(p.config): @@ -2757,13 +2757,7 @@ proc genMove(p: BProc; n: PNode; d: var TLoc) = let val = if p.module.compileToCpp: rdLoc(a) else: byRefLoc(p, a) p.s(cpsStmts).addCallStmt(rdLoc(b), val) else: - if n[1].kind == nkSym and isSinkParam(n[1].sym): - var tmp = getTemp(p, n[1].typ.skipTypes({tySink})) - genAssignment(p, tmp, a, {needToCopySinkParam}) - genAssignment(p, d, tmp, {}) - resetLoc(p, tmp) - else: - genAssignment(p, d, a, {}) + genAssignment(p, d, a, {}) resetLoc(p, a) proc genDestroy(p: BProc; n: PNode) = diff --git a/compiler/cgen.nim b/compiler/cgen.nim index 7b71239e96..6f16c4f17d 100644 --- a/compiler/cgen.nim +++ b/compiler/cgen.nim @@ -430,7 +430,6 @@ proc rdCharLoc(a: TLoc): Rope = type TAssignmentFlag = enum needToCopy - needToCopySinkParam needTempForOpenArray needAssignCall TAssignmentFlags = set[TAssignmentFlag]